diff --git a/lib/misc_utils/burst_file_sink_impl.cc b/lib/misc_utils/burst_file_sink_impl.cc
new file mode 100644
index 0000000..25a262e
--- /dev/null
+++ b/lib/misc_utils/burst_file_sink_impl.cc
@@ -0,0 +1,73 @@
+/* -*- c++ -*- */
+/* @file
+ * @author Roman Khassraf <rkhassraf@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 "burst_file_sink_impl.h"
+#include "stdio.h"
+
+namespace gr {
+  namespace gsm {
+
+    burst_file_sink::sptr
+    burst_file_sink::make(const std::string &filename)
+    {
+      return gnuradio::get_initial_sptr
+        (new burst_file_sink_impl(filename));
+    }
+
+    /*
+     * The private constructor
+     */
+    burst_file_sink_impl::burst_file_sink_impl(const std::string &filename)
+      : gr::block("burst_file_sink",
+              gr::io_signature::make(0, 0, 0),
+              gr::io_signature::make(0, 0, 0)),
+              d_output_file(filename.c_str(), std::ofstream::binary)
+    {
+        message_port_register_in(pmt::mp("in"));
+        set_msg_handler(pmt::mp("in"), boost::bind(&burst_file_sink_impl::process_burst, this, _1));
+    }
+
+    /*
+     * Our virtual destructor.
+     */
+    burst_file_sink_impl::~burst_file_sink_impl()
+    {
+        if (d_output_file.is_open())
+        {
+            d_output_file.close();
+        }
+    }
+
+    void burst_file_sink_impl::process_burst(pmt::pmt_t msg)
+    {
+        std::string s = pmt::serialize_str(msg);
+        const char *serialized = s.data();
+        d_output_file.write(serialized, s.length());
+    }
+  } /* namespace gsm */
+} /* namespace gr */
+
