diff --git a/lib/misc_utils/CMakeLists.txt b/lib/misc_utils/CMakeLists.txt
index 1c51fb6..720eee3 100644
--- a/lib/misc_utils/CMakeLists.txt
+++ b/lib/misc_utils/CMakeLists.txt
@@ -25,6 +25,7 @@
     controlled_fractional_resampler_cc_impl.cc
     controlled_rotator_cc_impl.cc
     extract_cmc_impl.cc
+    extract_assignment_cmd_impl.cc
     extract_immediate_assignment_impl.cc
     extract_system_info_impl.cc
     message_file_sink_impl.cc
diff --git a/lib/misc_utils/extract_assignment_cmd_impl.cc b/lib/misc_utils/extract_assignment_cmd_impl.cc
new file mode 100644
index 0000000..e4aa319
--- /dev/null
+++ b/lib/misc_utils/extract_assignment_cmd_impl.cc
@@ -0,0 +1,83 @@
+/* -*- c++ -*- */
+/*
+ * @file
+ * @author (C) 2018 by 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gnuradio/io_signature.h>
+#include <grgsm/gsmtap.h>
+//#include <unistd.h>
+#include <grgsm/endian.h>
+
+#include "extract_assignment_cmd_impl.h"
+
+namespace gr {
+  namespace gsm {
+    void extract_assignment_cmd_impl::process_messages(pmt::pmt_t msg)
+    {
+        pmt::pmt_t message_plus_header_blob = pmt::cdr(msg);
+        uint8_t * message_plus_header = (uint8_t *)pmt::blob_data(message_plus_header_blob);
+        gsmtap_hdr * header = (gsmtap_hdr *)message_plus_header;
+        uint8_t * msg_elements = (uint8_t *)(message_plus_header+sizeof(gsmtap_hdr));
+
+        if((msg_elements[3] & 0xFF) == 0x06 && msg_elements[4] == 0x2e)
+        {
+            int frame_nr = be32toh(header->frame_number);
+            d_assignment_commands.push_back(frame_nr);
+        }
+    }
+    
+
+    
+    std::vector<int> extract_assignment_cmd_impl::get_assignment_commands()
+    {
+        return d_assignment_commands;
+    }
+    
+    extract_assignment_cmd::sptr
+    extract_assignment_cmd::make()
+    {
+      return gnuradio::get_initial_sptr
+        (new extract_assignment_cmd_impl());
+    }
+
+    /*
+     * The private constructor
+     */
+    extract_assignment_cmd_impl::extract_assignment_cmd_impl()
+      : gr::block("extract_assignment_cmd",
+              gr::io_signature::make(0, 0, 0),
+              gr::io_signature::make(0, 0, 0))
+    {
+        message_port_register_in(pmt::mp("msgs"));
+        set_msg_handler(pmt::mp("msgs"), boost::bind(&extract_assignment_cmd_impl::process_messages, this, _1));
+    }
+    
+    /*
+     * Our virtual destructor.
+     */
+    extract_assignment_cmd_impl::~extract_assignment_cmd_impl()
+    {
+    }
+  } /* namespace gsm */
+} /* namespace gr */
diff --git a/lib/misc_utils/extract_assignment_cmd_impl.h b/lib/misc_utils/extract_assignment_cmd_impl.h
new file mode 100644
index 0000000..8f24b00
--- /dev/null
+++ b/lib/misc_utils/extract_assignment_cmd_impl.h
@@ -0,0 +1,43 @@
+/* -*- c++ -*- */
+/*
+ * @file
+ * @author (C) 2018 by 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_GSM_EXTRACT_ASSIGNMENT_CMD_IMPL_H
+#define INCLUDED_GSM_EXTRACT_ASSIGNMENT_CMD_IMPL_H
+
+#include <grgsm/misc_utils/extract_assignment_cmd.h>
+#include <vector>
+
+namespace gr {
+  namespace gsm {          
+    class extract_assignment_cmd_impl : public extract_assignment_cmd
+    {
+     private:
+      void process_messages(pmt::pmt_t msg);
+      std::vector<int> d_assignment_commands;
+     public:
+      virtual std::vector<int> get_assignment_commands();
+      extract_assignment_cmd_impl();
+      ~extract_assignment_cmd_impl();
+    };
+  } // namespace gsm
+} // namespace gr
+#endif /* INCLUDED_GSM_EXTRACT_ASSIGNMENT_CMD_IMPL_H */
diff --git a/lib/misc_utils/extract_cmc_impl.cc b/lib/misc_utils/extract_cmc_impl.cc
index c28e49f..04b0afc 100644
--- a/lib/misc_utils/extract_cmc_impl.cc
+++ b/lib/misc_utils/extract_cmc_impl.cc
@@ -50,11 +50,6 @@
             d_framenumbers.push_back(frame_nr);
             d_a5_versions.push_back(a5_version);
         }
-        if((msg_elements[3] & 0xFF) == 0x06 && msg_elements[4] == 0x2e)
-        {
-            int frame_nr = be32toh(header->frame_number);
-            d_assignment_commands.push_back(frame_nr);
-        }
     }
     
     std::vector<int> extract_cmc_impl::get_framenumbers()
@@ -72,11 +67,6 @@
         return d_start_ciphering;
     }
     
-    std::vector<int> extract_cmc_impl::get_assignment_commands()
-    {
-        return d_assignment_commands;
-    }
-    
     extract_cmc::sptr
     extract_cmc::make()
     {
diff --git a/lib/misc_utils/extract_cmc_impl.h b/lib/misc_utils/extract_cmc_impl.h
index 1dd02cb..b62cadc 100644
--- a/lib/misc_utils/extract_cmc_impl.h
+++ b/lib/misc_utils/extract_cmc_impl.h
@@ -35,12 +35,10 @@
       std::vector<int> d_framenumbers;
       std::vector<int> d_a5_versions;
       std::vector<int> d_start_ciphering;
-      std::vector<int> d_assignment_commands;
      public:
       virtual std::vector<int> get_framenumbers();
       virtual std::vector<int> get_a5_versions();
       virtual std::vector<int> get_start_ciphering();
-      virtual std::vector<int> get_assignment_commands();
       extract_cmc_impl();
       ~extract_cmc_impl();
     };
