diff --git a/lib/misc_utils/fn_time.cc b/lib/misc_utils/fn_time.cc
index 25c8e65..2773f33 100644
--- a/lib/misc_utils/fn_time.cc
+++ b/lib/misc_utils/fn_time.cc
@@ -22,35 +22,38 @@
  */
 
 #include <grgsm/misc_utils/fn_time.h>
+#include <grgsm/misc_utils/time_spec.h>
 #include <math.h>
 
-#define GSM_HYPER_FRAME 26 * 51 * 2048
-#define GSM_SYM_RATE 13.0e6 / 48.0
+#define GSM_HYPER_FRAME (26 * 51 * 2048)
+#define GSM_SYM_RATE (13.0e6 / 48.0)
 
-#define GSM_TS_PERIOD 156.25 / GSM_SYM_RATE
-#define GSM_FN_PERIOD 8 * GSM_TS_PERIOD
+#define GSM_TS_PERIOD (156.25 / GSM_SYM_RATE)
+#define GSM_FN_PERIOD (8 * GSM_TS_PERIOD)
 
 namespace gr {
   namespace gsm {
-  	/**
-  	 * Computes difference between two frame numbers modulo
-  	 * GSM_HYPER_FRAME / 2. The result is correct if difference
-  	 * between the frame numbers is not bigger than GSM_HYPER_FRAME / 2.
-  	 * @param  fn1 first frame number
-  	 * @param  fn2 second frame number
-  	 * @return     computed difference
-  	 */
-    static uint32_t fnmod_delta(uint32_t fn1, uint32_t fn2)
+    /**
+     * Computes difference between two frame numbers modulo
+     * GSM_HYPER_FRAME / 2. The result is correct if difference
+     * between the frame numbers is not bigger than GSM_HYPER_FRAME / 2.
+     * @param  fn1 first frame number
+     * @param  fn2 second frame number
+     * @return     computed difference
+     */
+    static int fnmod_delta(uint32_t fn1, uint32_t fn2)
     {
-      uint32_t delta, h2;
+      int delta, h2;
 
       delta = (fn1 % GSM_HYPER_FRAME) - (fn2 % GSM_HYPER_FRAME);
+
       h2 = GSM_HYPER_FRAME / 2;
 
-      if (delta >= h2)
-      	delta -= GSM_HYPER_FRAME;
-      else
-      	delta += GSM_HYPER_FRAME;
+      if (delta >= h2) {
+        delta -= GSM_HYPER_FRAME;
+      } else if(delta < -h2) {
+        delta += GSM_HYPER_FRAME;
+      }
 
       return delta;
     }
@@ -59,7 +62,6 @@
       time_spec_t time_diff_hint)
     {
       int frames_diff, fn_delta;
-
       frames_diff = int(round(time_diff_hint.get_real_secs() / GSM_FN_PERIOD));
       fn_delta = fnmod_delta(fn, fn_ref + frames_diff) + frames_diff;
 
@@ -77,27 +79,16 @@
      *                   frame numbers
      * @return           difference between fn_ref and fn
      */
-    time_spec_t fn_time_delta2(uint32_t fn_ref, time_spec_t time_ref, uint32_t fn_x, 
-      time_spec_t time_hint, uint32_t ts_num, uint32_t ts_ref)
+    time_format fn_time_delta_cpp(uint32_t fn_ref, time_format time_ref, uint32_t fn_x, 
+      time_format time_hint, uint32_t ts_num, uint32_t ts_ref)
     {
-			time_spec_t time_diff_hint = time_hint - time_ref;
-      uint32_t fn_delta = fn_time_diff_delta(fn_x,fn_ref, time_diff_hint);
-      time_spec_t time_x_precise = fn_delta * GSM_FN_PERIOD
-        + time_ref + (ts_num - ts_ref) * GSM_TS_PERIOD;
-      
-      return time_x_precise;
+      time_spec_t time_diff_hint = time_spec_t(time_hint.first, time_hint.second) - time_spec_t(time_ref.first, time_ref.second);
+      int fn_delta = fn_time_diff_delta(fn_x, fn_ref, time_diff_hint);
+      time_spec_t time_x_precise = fn_delta * GSM_FN_PERIOD + time_spec_t(time_ref.first, time_ref.second) + (static_cast<int>(ts_num) - static_cast<int>(ts_ref)) * GSM_TS_PERIOD;
+
+      return time_format(time_x_precise.get_full_secs(), time_x_precise.get_frac_secs());
     }
-/*
-    def fn_time_delta(fn_ref, time_ref, fn_x, time_hint=None, ts_num=0, ts_ref=0):
-      if time_hint is None:
-          time_hint = time_ref
-          
-      time_diff_hint = time_hint-time_ref
-      fn_delta = fn_time_diff_delta(fn_x,fn_ref, time_diff_hint)
-      time_x_precise = fn_delta*__frame_period+time_ref+(ts_num-ts_ref)*__ts_period
-      
-      return fn_delta, time_x_precise
-*/
+
   } /* namespace gsm */
 } /* namespace gr */
 
