diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index d4f04d8..e941ddd 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -40,6 +40,7 @@
     misc_utils/controlled_const_source_f_impl.cc
     misc_utils/message_printer_impl.cc
     decryption/decryption_impl.cc
+    tmsi_dumper_impl.cc
 )
 
 add_library(gnuradio-gsm SHARED ${gsm_sources})
diff --git a/lib/tmsi_dumper_impl.cc b/lib/tmsi_dumper_impl.cc
new file mode 100644
index 0000000..7ac5388
--- /dev/null
+++ b/lib/tmsi_dumper_impl.cc
@@ -0,0 +1,82 @@
+/* -*- 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.
+ * 
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gnuradio/io_signature.h>
+#include "tmsi_dumper_impl.h"
+
+namespace gr {
+  namespace gsm {
+
+    tmsi_dumper::sptr
+    tmsi_dumper::make()
+    {
+      return gnuradio::get_initial_sptr
+        (new tmsi_dumper_impl());
+    }
+
+    /*
+     * The private constructor
+     */
+    tmsi_dumper_impl::tmsi_dumper_impl()
+      : gr::block("tmsi_dumper",
+              gr::io_signature::make(<+MIN_IN+>, <+MAX_IN+>, sizeof(<+ITYPE+>)),
+              gr::io_signature::make(<+MIN_OUT+>, <+MAX_OUT+>, sizeof(<+OTYPE+>)))
+    {}
+
+    /*
+     * Our virtual destructor.
+     */
+    tmsi_dumper_impl::~tmsi_dumper_impl()
+    {
+    }
+
+    void
+    tmsi_dumper_impl::forecast (int noutput_items, gr_vector_int &ninput_items_required)
+    {
+        /* <+forecast+> e.g. ninput_items_required[0] = noutput_items */
+    }
+
+    int
+    tmsi_dumper_impl::general_work (int noutput_items,
+                       gr_vector_int &ninput_items,
+                       gr_vector_const_void_star &input_items,
+                       gr_vector_void_star &output_items)
+    {
+        const <+ITYPE*> *in = (const <+ITYPE*> *) input_items[0];
+        <+OTYPE*> *out = (<+OTYPE*> *) output_items[0];
+
+        // Do <+signal processing+>
+        // Tell runtime system how many input items we consumed on
+        // each input stream.
+        consume_each (noutput_items);
+
+        // Tell runtime system how many output items we produced.
+        return noutput_items;
+    }
+
+  } /* namespace gsm */
+} /* namespace gr */
+
diff --git a/lib/tmsi_dumper_impl.h b/lib/tmsi_dumper_impl.h
new file mode 100644
index 0000000..854c40e
--- /dev/null
+++ b/lib/tmsi_dumper_impl.h
@@ -0,0 +1,53 @@
+/* -*- 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_GSM_TMSI_DUMPER_IMPL_H
+#define INCLUDED_GSM_TMSI_DUMPER_IMPL_H
+
+#include <gsm/tmsi_dumper.h>
+
+namespace gr {
+  namespace gsm {
+
+    class tmsi_dumper_impl : public tmsi_dumper
+    {
+     private:
+      // Nothing to declare in this block.
+
+     public:
+      tmsi_dumper_impl();
+      ~tmsi_dumper_impl();
+
+      // Where all the action really happens
+      void forecast (int noutput_items, gr_vector_int &ninput_items_required);
+
+      int general_work(int noutput_items,
+		       gr_vector_int &ninput_items,
+		       gr_vector_const_void_star &input_items,
+		       gr_vector_void_star &output_items);
+    };
+
+  } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_TMSI_DUMPER_IMPL_H */
+
