diff --git a/lib/misc_utils/CMakeLists.txt b/lib/misc_utils/CMakeLists.txt
index 63effe5..a2dc6d8 100644
--- a/lib/misc_utils/CMakeLists.txt
+++ b/lib/misc_utils/CMakeLists.txt
@@ -35,6 +35,7 @@
     tmsi_dumper_impl.cc
     time_spec.cc
     fn_time.cc
+    freq_hopping_utils.cc
     udp_socket.cc
     burst_to_fn_time_impl.cc
 )
diff --git a/lib/misc_utils/freq_hopping_utils.cc b/lib/misc_utils/freq_hopping_utils.cc
new file mode 100644
index 0000000..15a5acb
--- /dev/null
+++ b/lib/misc_utils/freq_hopping_utils.cc
@@ -0,0 +1,69 @@
+/* -*- c++ -*- */
+/* @file
+ * @author Piotr Krysik <ptrkrysik@gmail.com>
+ * @section LICENSE
+ * 
+ * Gr-gsm is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * Gr-gsm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with gr-gsm; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ * 
+ */
+
+//#include "grgsm/misc_utils/freq_hopping_utils.h"
+#include <cmath>
+
+namespace gr {
+  namespace gsm {
+    unsigned char RNTABLE[114] = {
+        48, 98, 63, 1, 36, 95, 78, 102, 94, 73, \
+        0, 64, 25, 81, 76, 59, 124, 23, 104, 100, \
+        101, 47, 118, 85, 18, 56, 96, 86, 54, 2, \
+        80, 34, 127, 13, 6, 89, 57, 103, 12, 74, \
+        55, 111, 75, 38, 109, 71, 112, 29, 11, 88, \
+        87, 19, 3, 68, 110, 26, 33, 31, 8, 45, \
+        82, 58, 40, 107, 32, 5, 106, 92, 62, 67, \
+        77, 108, 122, 37, 60, 66, 121, 42, 51, 126, \
+        117, 114, 4, 90, 43, 52, 53, 113, 120, 72, \
+        16, 49, 7, 79, 119, 61, 22, 84, 9, 97, \
+        91, 15, 21, 24, 46, 39, 93, 105, 65, 70, \
+        125, 99, 17, 123 \
+    };
+    
+    int calculate_ma_sfh(int maio, int hsn, int n, int fn)
+    {
+      int mai = 0;
+      int s = 0;
+      int nbin = floor(log2(n) + 1);
+      int t1 = fn / 1326;
+      int t2 = fn % 26;
+      int t3 = fn % 51;
+
+      if (hsn == 0){      
+          mai = (fn + maio) % n;
+      } else {
+          int t1r = t1 % 64;
+          int m = t2 + RNTABLE[(hsn ^ t1r) + t3];
+          int mprim = m % (1 << nbin);
+          int tprim = t3 % (1 << nbin);
+
+          if (mprim < n){
+              s = mprim;
+          } else {
+              s = (mprim + tprim) % n;
+          }
+          mai = (s + maio) % n;
+      }
+    }
+  } // namespace gsm
+} // namespace gr
diff --git a/lib/misc_utils/freq_hopping_utils.h b/lib/misc_utils/freq_hopping_utils.h
new file mode 100644
index 0000000..df4cba2
--- /dev/null
+++ b/lib/misc_utils/freq_hopping_utils.h
@@ -0,0 +1,36 @@
+/* -*- c++ -*- */
+/* @file
+ * @author Piotr Krysik <ptrkrysik@gmail.com>
+ * @section LICENSE
+ * 
+ * Gr-gsm is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ * 
+ * Gr-gsm is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with gr-gsm; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ * 
+ */
+
+#ifndef INCLUDED_FREQ_HOPPING_UTILS_H
+#define INCLUDED_FREQ_HOPPING_UTILS_H
+
+namespace gr {
+  namespace gsm {
+    /*
+     * Slow Frequency Hopping (SFH) MAI calculation based
+     * on airprobe-hopping by Bogdan Diaconescu.
+     */
+    int calculate_ma_sfh(int maio, int hsn, int n, int fn);
+  } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_FREQ_HOPPING_UTILS_H */
diff --git a/lib/receiver/cx_channel_hopper_impl.cc b/lib/receiver/cx_channel_hopper_impl.cc
index e5be27a..a45737c 100644
--- a/lib/receiver/cx_channel_hopper_impl.cc
+++ b/lib/receiver/cx_channel_hopper_impl.cc
@@ -29,6 +29,7 @@
 #include <grgsm/endian.h>
 #include <boost/algorithm/clamp.hpp>
 #include "cx_channel_hopper_impl.h"
+#include "../misc_utils/freq_hopping_utils.h"
 
 namespace gr {
   namespace gsm {
@@ -83,57 +84,6 @@
     }
 
     /**
-     * Random number table used for calculating the
-     * hopping sequence. Defined in GSM 05.02.
-     */
-    unsigned char RNTABLE[114] = {
-        48, 98, 63, 1, 36, 95, 78, 102, 94, 73, \
-        0, 64, 25, 81, 76, 59, 124, 23, 104, 100, \
-        101, 47, 118, 85, 18, 56, 96, 86, 54, 2, \
-        80, 34, 127, 13, 6, 89, 57, 103, 12, 74, \
-        55, 111, 75, 38, 109, 71, 112, 29, 11, 88, \
-        87, 19, 3, 68, 110, 26, 33, 31, 8, 45, \
-        82, 58, 40, 107, 32, 5, 106, 92, 62, 67, \
-        77, 108, 122, 37, 60, 66, 121, 42, 51, 126, \
-        117, 114, 4, 90, 43, 52, 53, 113, 120, 72, \
-        16, 49, 7, 79, 119, 61, 22, 84, 9, 97, \
-        91, 15, 21, 24, 46, 39, 93, 105, 65, 70, \
-        125, 99, 17, 123 \
-    };
-
-    /*
-     * Slow Frequency Hopping (SFH) MAI calculation based
-     * on airprobe-hopping by Bogdan Diaconescu.
-     */
-    int cx_channel_hopper_impl::calculate_ma_sfh(int maio, int hsn, int n, int fn)
-    {
-        int mai = 0;
-        int s = 0;
-        int nbin = floor(log2(n) + 1);
-        int t1 = fn / 1326;
-        int t2 = fn % 26;
-        int t3 = fn % 51;
-
-        if (hsn == 0)
-            mai = (fn + maio) % n;
-        else {
-            int t1r = t1 % 64;
-            int m = t2 + RNTABLE[(hsn ^ t1r) + t3];
-            int mprim = m % (1 << nbin);
-            int tprim = t3 % (1 << nbin);
-
-            if (mprim < n)
-                s = mprim;
-            else
-                s = (mprim + tprim) % n;
-
-            mai = (s + maio) % n;
-        }
-
-        return (mai);
-    }
-
-    /**
      * Given MA, MAIO, HSN, and FN, decide which frames
      * to forward to the demapper.
      */
@@ -147,10 +97,10 @@
                                                                 //in order to leave only ARFCN number
 
         int mai = calculate_ma_sfh(d_maio, d_hsn, d_narfcn, frame_nr);
-
+/*
         if(d_ma[mai] == (int)frame_ca) {
             message_port_pub(pmt::mp("bursts"), msg);
-        }
+        }*/
     }
 
   } /* namespace gsm */
diff --git a/lib/receiver/cx_channel_hopper_impl.h b/lib/receiver/cx_channel_hopper_impl.h
index 7ac9bf4..83c4fa2 100644
--- a/lib/receiver/cx_channel_hopper_impl.h
+++ b/lib/receiver/cx_channel_hopper_impl.h
@@ -28,7 +28,6 @@
 
 namespace gr {
   namespace gsm {
-
     class cx_channel_hopper_impl : public cx_channel_hopper
     {
      private:
@@ -37,7 +36,6 @@
       int d_hsn; // Hopping Sequence Number
       int d_narfcn; // Length of d_ma
 
-      int calculate_ma_sfh(int maio, int hsn, int n, int fn);
       void assemble_bursts(pmt::pmt_t msg);
 
      public:
