diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 1f3570e..61f0858 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -52,6 +52,7 @@
     misc_utils/tmsi_dumper_impl.cc
     misc_utils/burst_sink_impl.cc
     misc_utils/burst_source_impl.cc
+    misc_utils/burst_sink_qa_impl.cc
     misc_utils/burst_source_qa_impl.cc
     decryption/decryption_impl.cc )
 
diff --git a/lib/misc_utils/burst_sink_qa_impl.cc b/lib/misc_utils/burst_sink_qa_impl.cc
new file mode 100644
index 0000000..aa9df9d
--- /dev/null
+++ b/lib/misc_utils/burst_sink_qa_impl.cc
@@ -0,0 +1,110 @@
+/* -*- 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_sink_qa_impl.h"
+#include <stdio.h>
+#include <sstream>
+#include <grgsm/gsmtap.h>
+
+namespace gr {
+  namespace gsm {
+
+    burst_sink_qa::sptr
+    burst_sink_qa::make()
+    {
+      return gnuradio::get_initial_sptr
+        (new burst_sink_qa_impl());
+    }
+
+    /*
+     * The private constructor
+     */
+    burst_sink_qa_impl::burst_sink_qa_impl()
+      : gr::block("burst_sink_qa",
+              gr::io_signature::make(0, 0, 0),
+              gr::io_signature::make(0, 0, 0))
+    {
+        message_port_register_in(pmt::mp("in"));
+        set_msg_handler(pmt::mp("in"), boost::bind(&burst_sink_qa_impl::process_burst, this, _1));
+    }
+
+    /*
+     * Our virtual destructor.
+     */
+    burst_sink_qa_impl::~burst_sink_qa_impl()
+    {
+//         for (int i=0; i<d_burst_data.size(); i++)
+//         {
+//             std::cout << d_framenumbers[i] << " " << d_timeslots[i] << " " << d_burst_data[i] << std::endl;
+//         }
+    }
+
+    void burst_sink_qa_impl::process_burst(pmt::pmt_t msg)
+    {
+        pmt::pmt_t header_plus_burst = pmt::cdr(msg);
+
+        gsmtap_hdr * header = (gsmtap_hdr *)pmt::blob_data(header_plus_burst);
+        int8_t * burst = (int8_t *)(pmt::blob_data(header_plus_burst))+sizeof(gsmtap_hdr);
+        size_t burst_len=pmt::blob_length(header_plus_burst)-sizeof(gsmtap_hdr);
+        uint32_t frame_nr = be32toh(header->frame_number);
+
+        std::stringstream burst_str;
+        for(int i=0; i<burst_len; i++)
+        {
+            if (static_cast<int>(burst[i]) == 0)
+            {
+                burst_str << "0";
+            }
+            else
+            {
+                burst_str << "1";
+            }
+        }
+
+        d_framenumbers.push_back(frame_nr);
+        d_timeslots.push_back(header->timeslot);
+        d_burst_data.push_back(burst_str.str());
+    }
+
+    std::vector<int> burst_sink_qa_impl::get_framenumbers()
+    {
+        return d_framenumbers;
+    }
+
+    std::vector<int> burst_sink_qa_impl::get_timeslots()
+    {
+        return d_timeslots;
+    }
+
+    std::vector<std::string> burst_sink_qa_impl::get_burst_data()
+    {
+        return d_burst_data;
+    }
+
+  } /* namespace gsm */
+} /* namespace gr */
+
diff --git a/lib/misc_utils/burst_sink_qa_impl.h b/lib/misc_utils/burst_sink_qa_impl.h
new file mode 100644
index 0000000..412a0a1
--- /dev/null
+++ b/lib/misc_utils/burst_sink_qa_impl.h
@@ -0,0 +1,51 @@
+/* -*- 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.
+ *
+ */
+
+#ifndef INCLUDED_GSM_BURST_SINK_QA_IMPL_H
+#define INCLUDED_GSM_BURST_SINK_QA_IMPL_H
+
+#include <grgsm/misc_utils/burst_sink_qa.h>
+#include <fstream>
+
+namespace gr {
+  namespace gsm {
+
+    class burst_sink_qa_impl : public burst_sink_qa
+    {
+     private:
+      std::vector<int> d_framenumbers;
+      std::vector<int> d_timeslots;
+      std::vector<std::string> d_burst_data;
+     public:
+      burst_sink_qa_impl();
+      ~burst_sink_qa_impl();
+      void process_burst(pmt::pmt_t msg);
+      virtual std::vector<int> get_framenumbers();
+      virtual std::vector<int> get_timeslots();
+      virtual std::vector<std::string> get_burst_data();
+    };
+
+  } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_BURST_SINK_QA_IMPL_H */
+
