diff --git a/grc/gsm_block_tree.xml b/grc/gsm_block_tree.xml
index e75197c..2503710 100644
--- a/grc/gsm_block_tree.xml
+++ b/grc/gsm_block_tree.xml
@@ -42,6 +42,7 @@
       <block>gsm_bursts_printer</block>
       <block>gsm_burst_sink</block>
       <block>gsm_burst_source</block>
+      <block>gsm_burst_sink_qa</block>
       <block>gsm_burst_source_qa</block>
       <block>gsm_extract_system_info</block>
       <block>gsm_extract_immediate_assignment</block>
diff --git a/grc/misc_utils/CMakeLists.txt b/grc/misc_utils/CMakeLists.txt
index 89c4650..5a3f874 100644
--- a/grc/misc_utils/CMakeLists.txt
+++ b/grc/misc_utils/CMakeLists.txt
@@ -28,5 +28,6 @@
     gsm_tmsi_dumper.xml
     gsm_burst_sink.xml
     gsm_burst_source.xml
-    gsm_burst_source_qa.xml DESTINATION share/gnuradio/grc/blocks
+    gsm_burst_source_qa.xml
+    gsm_burst_sink_qa.xml DESTINATION share/gnuradio/grc/blocks
 )
diff --git a/grc/misc_utils/gsm_burst_sink_qa.xml b/grc/misc_utils/gsm_burst_sink_qa.xml
new file mode 100644
index 0000000..c028da3
--- /dev/null
+++ b/grc/misc_utils/gsm_burst_sink_qa.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<block>
+  <name>QA Burst sink</name>
+  <key>gsm_burst_sink_qa</key>
+  <import>import grgsm</import>
+  <make>grgsm.burst_sink_qa()</make>
+
+  <sink>
+    <name>in</name>
+    <type>message</type>
+  </sink>
+</block>
diff --git a/include/grgsm/misc_utils/CMakeLists.txt b/include/grgsm/misc_utils/CMakeLists.txt
index adedf1d..8b74fc7 100644
--- a/include/grgsm/misc_utils/CMakeLists.txt
+++ b/include/grgsm/misc_utils/CMakeLists.txt
@@ -24,6 +24,7 @@
     bursts_printer.h
     burst_sink.h
     burst_source.h
+    burst_sink_qa.h
     burst_source_qa.h
     extract_system_info.h
     extract_immediate_assignment.h
diff --git a/include/grgsm/misc_utils/burst_sink_qa.h b/include/grgsm/misc_utils/burst_sink_qa.h
new file mode 100644
index 0000000..3b5cac2
--- /dev/null
+++ b/include/grgsm/misc_utils/burst_sink_qa.h
@@ -0,0 +1,60 @@
+/* -*- 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_H
+#define INCLUDED_GSM_BURST_SINK_QA_H
+
+#include <grgsm/api.h>
+#include <gnuradio/block.h>
+
+namespace gr {
+  namespace gsm {
+
+    /*!
+     * \brief <+description of block+>
+     * \ingroup gsm
+     *
+     */
+    class GSM_API burst_sink_qa : virtual public gr::block
+    {
+     public:
+      typedef boost::shared_ptr<burst_sink_qa> sptr;
+
+      /*!
+       * \brief Return a shared_ptr to a new instance of grgsm::burst_sink_qa.
+       *
+       * To avoid accidental use of raw pointers, grgsm::burst_sink_qa's
+       * constructor is in a private implementation
+       * class. grgsm::burst_sink_qa::make is the public interface for
+       * creating new instances.
+       */
+      static sptr make();
+
+      virtual std::vector<int> get_framenumbers() = 0;
+      virtual std::vector<int> get_timeslots() = 0;
+      virtual std::vector<std::string> get_burst_data() = 0;
+    };
+  } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_BURST_SINK_QA_H */
+
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 */
+
diff --git a/swig/grgsm_swig.i b/swig/grgsm_swig.i
index 07f6418..5dc1bcd 100644
--- a/swig/grgsm_swig.i
+++ b/swig/grgsm_swig.i
@@ -24,6 +24,7 @@
 #include "grgsm/misc_utils/message_printer.h"
 #include "grgsm/misc_utils/tmsi_dumper.h"
 #include "grgsm/misc_utils/burst_sink.h"
+#include "grgsm/misc_utils/burst_sink_qa.h"
 #include "grgsm/misc_utils/burst_source.h"
 #include "grgsm/misc_utils/burst_source_qa.h"
 %}
@@ -55,6 +56,8 @@
 GR_SWIG_BLOCK_MAGIC2(gsm, burst_sink);
 %include "grgsm/misc_utils/burst_source.h"
 GR_SWIG_BLOCK_MAGIC2(gsm, burst_source);
+%include "grgsm/misc_utils/burst_sink_qa.h"
+GR_SWIG_BLOCK_MAGIC2(gsm, burst_sink_qa);
 %include "grgsm/misc_utils/burst_source_qa.h"
 GR_SWIG_BLOCK_MAGIC2(gsm, burst_source_qa);
 %include "grgsm/misc_utils/extract_system_info.h"
