diff --git a/lib/receiver/clock_offset_control_impl.cc b/lib/receiver/clock_offset_control_impl.cc
index b3a7934..7fef8fa 100644
--- a/lib/receiver/clock_offset_control_impl.cc
+++ b/lib/receiver/clock_offset_control_impl.cc
@@ -26,6 +26,7 @@
 #endif
 
 #include <sch.h>
+#include <gsm_constants.h>
 #include "clock_offset_control_impl.h"
 
 namespace gr
@@ -33,17 +34,17 @@
 namespace gsm
 {
 clock_offset_control::sptr
-clock_offset_control::make(float fc, float samp_rate)
+clock_offset_control::make(float fc, float samp_rate, unsigned int osr)
 {
     return gnuradio::get_initial_sptr
-           (new clock_offset_control_impl(fc, samp_rate));
+           (new clock_offset_control_impl(fc, samp_rate, osr));
 }
 
 
 /*
  * The private constructor
  */
-clock_offset_control_impl::clock_offset_control_impl(float fc, float samp_rate)
+clock_offset_control_impl::clock_offset_control_impl(float fc, float samp_rate, unsigned int osr)
     : gr::block("clock_offset_control",
                 gr::io_signature::make(0, 0, 0),
                 gr::io_signature::make(0, 0, 0))
@@ -55,6 +56,7 @@
     
     set_fc(fc);
     set_samp_rate(samp_rate);
+    set_osr(osr);
     d_alfa = 0.3;
     d_ppm_estimate = -1e6;
     d_last_ppm_estimate = -1e6;    
@@ -73,6 +75,11 @@
 {
 }
 
+void clock_offset_control_impl::set_osr(unsigned int osr)
+{
+    d_osr = osr;
+}
+
 void clock_offset_control_impl::set_fc(float fc)
 {
     d_fc = fc;
@@ -114,7 +121,7 @@
 
                 if(state == "fcch_search")
                 {
-                    send_ctrl_messages(ppm);
+                    send_ctrl_messages(freq_offset);
                     d_last_fcch_time = d_current_time;
                 } 
                 else 
@@ -138,7 +145,7 @@
                         {
 //                            pmt::pmt_t msg_ppm = pmt::from_double(ppm);
 //                            message_port_pub(pmt::intern("ppm"), msg_ppm);
-                            send_ctrl_messages(ppm);
+                            send_ctrl_messages(freq_offset);
                             d_last_ppm_estimate = d_ppm_estimate;
                         }
                     }
@@ -160,17 +167,15 @@
     }
 }
 
-void clock_offset_control_impl::send_ctrl_messages(float ppm)
+void clock_offset_control_impl::send_ctrl_messages(float freq_offset)
 {
-//    pmt::pmt_t msg_ppm = pmt::from_double(ppm);
-//    message_port_pub(pmt::intern("ctrl"), msg_ppm);
-//    d_last_fcch_time = d_current_time;
+    double samp_rate_ratio = d_samp_rate / (d_osr * GSM_SYMBOL_RATE);
 
-    pmt::pmt_t msg_set_phase_inc = pmt::cons(pmt::intern("set_phase_inc"), pmt::from_double(2*M_PI*d_fc/d_samp_rate*ppm/1.0e6));
-    message_port_pub(pmt::intern("ctrl"), msg_set_phase_inc);
-
-    pmt::pmt_t msg_set_resamp_ratio = pmt::cons(pmt::intern("set_resamp_ratio"), pmt::from_double(1+ppm/1.0e6));
-    message_port_pub(pmt::intern("ctrl"), msg_set_resamp_ratio);
+    pmt::pmt_t messages = pmt::make_dict();
+    messages = dict_add(messages, pmt::string_to_symbol("set_phase_inc"), pmt::from_double(-2*M_PI*freq_offset/(d_osr * GSM_SYMBOL_RATE)));
+    messages = dict_add(messages, pmt::string_to_symbol("set_resamp_ratio"), pmt::from_double((1-(freq_offset/d_fc))*samp_rate_ratio));
+    messages = dict_add(messages, pmt::string_to_symbol("setting_freq_offset"), pmt::from_double(-freq_offset));
+    message_port_pub(pmt::intern("ctrl"), messages);
 }
 
 void clock_offset_control_impl::timed_reset()
