diff --git a/lib/receiver/receiver_impl.cc b/lib/receiver/receiver_impl.cc
index f1382ed..a6f1a16 100644
--- a/lib/receiver/receiver_impl.cc
+++ b/lib/receiver/receiver_impl.cc
@@ -53,22 +53,21 @@
 typedef boost::circular_buffer<float> circular_buffer_float;
 
 receiver::sptr
-receiver::make(feval_dd * tuner, int osr, int arfcn)
+receiver::make(int osr, int arfcn)
 {
     return gnuradio::get_initial_sptr
-           (new receiver_impl(tuner, osr, arfcn));
+           (new receiver_impl(osr, arfcn));
 }
 
 /*
  * The private constructor
  */
-receiver_impl::receiver_impl(feval_dd * tuner, int osr, int arfcn)
+receiver_impl::receiver_impl(int osr, int arfcn)
     : gr::sync_block("receiver",
                 gr::io_signature::make(1, 1, sizeof(gr_complex)),
                 gr::io_signature::make(0, 0, 0)),
     d_OSR(osr),
     d_chan_imp_length(CHAN_IMP_RESP_LENGTH),
-    d_tuner(tuner),
     d_counter(0),
     d_fcch_start_pos(0),
     d_freq_offset_setting(0),
@@ -477,11 +476,6 @@
     return freq_offset;
 }
 
-void receiver_impl::set_frequency(double freq_offset)
-{
-    d_tuner->calleval(freq_offset);
-}
-
 inline float receiver_impl::compute_phase_diff(gr_complex val1, gr_complex val2)
 {
     gr_complex conjprod = val1 * conj(val2);
diff --git a/lib/receiver/receiver_impl.h b/lib/receiver/receiver_impl.h
index de0042d..6657e3d 100644
--- a/lib/receiver/receiver_impl.h
+++ b/lib/receiver/receiver_impl.h
@@ -45,8 +45,6 @@
         gr_complex d_sch_training_seq[N_SYNC_BITS]; ///<encoded training sequence of a SCH burst
         gr_complex d_norm_training_seq[TRAIN_SEQ_NUM][N_TRAIN_BITS]; ///<encoded training sequences of a normal bursts and dummy bursts
 
-        feval_dd *d_tuner; ///<callback to a python object which is used for frequency tunning
-
         /** Counts samples consumed by the receiver
          *
          * It is used in beetween find_fcch_burst and reach_sch_burst calls.
@@ -104,12 +102,6 @@
          */
         double compute_freq_offset(const gr_complex * input, unsigned first_sample, unsigned last_sample);
 
-        /** Calls d_tuner's method to set frequency offset from Python level
-         *
-         * @param freq_offset absolute frequency offset of the received signal
-         */
-        void set_frequency(double freq_offset);
-
         /** Computes angle between two complex numbers
          *
          * @param val1 first complex number
@@ -202,7 +194,7 @@
 
         
      public:
-       receiver_impl(feval_dd * tuner, int osr, int arfcn);
+       receiver_impl(int osr, int arfcn);
       ~receiver_impl();
       
       int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items);
diff --git a/python/receiver_hier.py b/python/receiver_hier.py
index fe9c636..366292a 100644
--- a/python/receiver_hier.py
+++ b/python/receiver_hier.py
@@ -6,15 +6,6 @@
 from gnuradio import gr, gru, blocks
 from gnuradio import filter
 
-
-class tuner(gr.feval_dd):
-    def __init__(self, top_block):
-        gr.feval_dd.__init__(self)
-        self.top_block = top_block
-    def eval(self, freq_offet):
-        self.top_block.set_center_frequency(freq_offet)
-        return freq_offet
-
 class receiver_hier(gr.hier_block2):
     def __init__(self, input_rate, osr=4, arfcn=0):
         gr.hier_block2.__init__(self, 
@@ -32,8 +23,6 @@
         self.arfcn = arfcn
         self.sps = input_rate / gsm_symb_rate / osr
 
-        #create callbacks
-        self.tuner_callback = tuner(self)
         #create accompaning blocks
         self.filtr = self._set_filter()
         self.interpolator = self._set_interpolator()
@@ -57,7 +46,7 @@
         return interpolator
     
     def _set_receiver(self):
-        receiver = gsm.receiver(self.tuner_callback, self.osr, self.arfcn)
+        receiver = gsm.receiver(self.osr, self.arfcn)
         return receiver
 
     def set_center_frequency(self, center_freq):
