Going back to previous coding style - without returns
diff --git a/lib/transmitter/txtime_setter_impl.cc b/lib/transmitter/txtime_setter_impl.cc
index f6141f0..33bc994 100644
--- a/lib/transmitter/txtime_setter_impl.cc
+++ b/lib/transmitter/txtime_setter_impl.cc
@@ -30,6 +30,9 @@
 
 #include "txtime_setter_impl.h"
 
+#define UNKNOWN_FN 0xffffffff
+#define MAX_EARLY_TIME_DIFF 10.0
+
 namespace gr {
   namespace gsm {
 
@@ -114,52 +117,53 @@
 
     void txtime_setter_impl::process_txtime_of_burst(pmt::pmt_t msg_in)
     {
-      // Nothing to do...
-      if (d_fn_ref == 0xffffffff)
-        return;
+      if (d_fn_ref != UNKNOWN_FN)
+      {
+        pmt::pmt_t blob = pmt::cdr(msg_in);
 
-      pmt::pmt_t blob = pmt::cdr(msg_in);
+        // Extract GSMTAP header from message
+        gsmtap_hdr *header = (gsmtap_hdr *) pmt::blob_data(blob);
+        uint32_t frame_nr = be32toh(header->frame_number);
+        uint32_t ts_num = header->timeslot;
 
-      // Extract GSMTAP header from message
-      gsmtap_hdr *header = (gsmtap_hdr *) pmt::blob_data(blob);
-      uint32_t frame_nr = be32toh(header->frame_number);
-      uint32_t ts_num = header->timeslot;
+        time_format txtime = fn_time_delta_cpp(d_fn_ref, d_time_ref,
+          frame_nr, d_time_hint, ts_num, d_ts_ref);
 
-      time_format txtime = fn_time_delta_cpp(d_fn_ref, d_time_ref,
-        frame_nr, d_time_hint, ts_num, d_ts_ref);
+        time_spec_t txtime_spec = time_spec_t(txtime.first, txtime.second);
+        txtime_spec -= d_delay_correction;
+        txtime_spec -= d_timing_advance;
 
-      time_spec_t txtime_spec = time_spec_t(txtime.first, txtime.second);
-      txtime_spec -= d_delay_correction;
-      txtime_spec -= d_timing_advance;
+        time_spec_t current_time_estimate = time_spec_t(d_time_hint.first, d_time_hint.second);
 
-      // FIXME: better name?
-      time_spec_t foo = time_spec_t(d_time_hint.first, d_time_hint.second);
+        if (txtime_spec <= current_time_estimate) { // Drop too late bursts
+          std::cout << "lB" << std::flush;
+        } else if (txtime_spec > current_time_estimate + MAX_EARLY_TIME_DIFF) { // Drop too early bursts
+          std::cout << "eB" << std::flush;      //TODO: too early condition might happen when changing BTSes.
+                                                //Wrong fn_time is applied to new or old bursts in such situation.
+                                                //This solution is not perfect as MS might be blocked upto 
+                                                //MAX_EARLY_TIME_DIFF seconds.
+                                                //Better solution would be to indentify fn_time and burst coming
+                                                //from given BTS (i.e. based on ARFCN) and dropping bursts for which
+                                                //the bts_id doesn't match with bts_id of fn_time.
+        } else { //process bursts that are in the right time-frame
+          pmt::pmt_t tags_dict = pmt::dict_add(
+            pmt::make_dict(),
+            pmt::intern("tx_time"),
+            pmt::make_tuple(
+              pmt::from_uint64(txtime_spec.get_full_secs()),
+              pmt::from_double(txtime_spec.get_frac_secs()))
+          );
 
-      // Drop too late / early bursts
-      if (txtime_spec <= foo) {
-        std::cout << "lB" << std::flush;
-        return;
-      } else if (txtime_spec > foo + 10.0) {
-        std::cout << "eB" << std::flush;
-        return;
+          tags_dict = pmt::dict_add(tags_dict,
+            pmt::intern("fn"), pmt::from_uint64(frame_nr));
+          tags_dict = pmt::dict_add(tags_dict,
+            pmt::intern("ts"), pmt::from_uint64(ts_num));
+
+          // Send a message to the output
+          pmt::pmt_t msg_out = pmt::cons(tags_dict, pmt::cdr(msg_in));
+          message_port_pub(pmt::mp("bursts_out"), msg_out);
+        }
       }
-
-      pmt::pmt_t tags_dict = pmt::dict_add(
-        pmt::make_dict(),
-        pmt::intern("tx_time"),
-        pmt::make_tuple(
-          pmt::from_uint64(txtime_spec.get_full_secs()),
-          pmt::from_double(txtime_spec.get_frac_secs()))
-      );
-
-      tags_dict = pmt::dict_add(tags_dict,
-        pmt::intern("fn"), pmt::from_uint64(frame_nr));
-      tags_dict = pmt::dict_add(tags_dict,
-        pmt::intern("ts"), pmt::from_uint64(ts_num));
-
-      // Send a message to the output
-      pmt::pmt_t msg_out = pmt::cons(tags_dict, pmt::cdr(msg_in));
-      message_port_pub(pmt::mp("bursts_out"), msg_out);
     }
 
     void txtime_setter_impl::set_fn_time_reference(