diff --git a/grc/gsm_block_tree.xml b/grc/gsm_block_tree.xml
index 94d1d82..e75197c 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_source_qa</block>
       <block>gsm_extract_system_info</block>
       <block>gsm_extract_immediate_assignment</block>
       <block>gsm_controlled_rotator_cc</block>
diff --git a/grc/misc_utils/CMakeLists.txt b/grc/misc_utils/CMakeLists.txt
index d545692..89c4650 100644
--- a/grc/misc_utils/CMakeLists.txt
+++ b/grc/misc_utils/CMakeLists.txt
@@ -24,8 +24,9 @@
     gsm_controlled_const_source_f.xml
     gsm_message_printer.xml
     gsm_bursts_printer.xml
-    gsm_clock_offset_corrector.xml 
-    gsm_tmsi_dumper.xml 
+    gsm_clock_offset_corrector.xml
+    gsm_tmsi_dumper.xml
     gsm_burst_sink.xml
-    gsm_burst_source.xml DESTINATION share/gnuradio/grc/blocks
+    gsm_burst_source.xml
+    gsm_burst_source_qa.xml DESTINATION share/gnuradio/grc/blocks
 )
diff --git a/grc/misc_utils/gsm_burst_source_qa.xml b/grc/misc_utils/gsm_burst_source_qa.xml
new file mode 100644
index 0000000..bb04cca
--- /dev/null
+++ b/grc/misc_utils/gsm_burst_source_qa.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<block>
+  <name>QA Burst source</name>
+  <key>gsm_burst_source_qa</key>
+  <import>import grgsm</import>
+  <make>grgsm.burst_source_qa($framenumbers, $timeslots, $bursts)</make>
+
+  <param>
+    <name>Frame numbers</name>
+    <key>framenumbers</key>
+    <value>[]</value>
+    <type>int_vector</type>
+    <hide>part</hide>
+  </param>
+
+  <param>
+    <name>Timeslots</name>
+    <key>timeslots</key>
+    <value>[]</value>
+    <type>int_vector</type>
+    <hide>part</hide>
+  </param>
+
+  <param>
+    <name>Bursts</name>
+    <key>bursts</key>
+    <value>[[],]</value>
+    <type>raw</type>
+  </param>
+
+  <source>
+    <name>out</name>
+    <type>message</type>
+  </source>
+</block>
diff --git a/include/grgsm/misc_utils/CMakeLists.txt b/include/grgsm/misc_utils/CMakeLists.txt
index 3d63d46..adedf1d 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_source_qa.h
     extract_system_info.h
     extract_immediate_assignment.h
     controlled_rotator_cc.h
diff --git a/include/grgsm/misc_utils/burst_source_qa.h b/include/grgsm/misc_utils/burst_source_qa.h
new file mode 100644
index 0000000..c3c5713
--- /dev/null
+++ b/include/grgsm/misc_utils/burst_source_qa.h
@@ -0,0 +1,64 @@
+/* -*- 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_SOURCE_QA_H
+#define INCLUDED_GSM_BURST_SOURCE_QA_H
+
+#include <grgsm/api.h>
+#include <gnuradio/block.h>
+
+namespace gr {
+  namespace gsm {
+
+    /*!
+     * \brief <+description of block+>
+     * \ingroup gsm
+     *
+     */
+    class GSM_API burst_source_qa : virtual public gr::block
+    {
+     public:
+      typedef boost::shared_ptr<burst_source_qa> sptr;
+
+      /*!
+       * \brief Return a shared_ptr to a new instance of grgsm::burst_source_qa.
+       *
+       * To avoid accidental use of raw pointers, grgsm::burst_source_qa's
+       * constructor is in a private implementation
+       * class. grgsm::burst_source_qa::make is the public interface for
+       * creating new instances.
+       */
+      static sptr make(const std::vector<int> &framenumbers,
+        const std::vector<int> &timeslots,
+        const std::vector<std::string> &burst_data);
+
+      virtual void set_framenumbers(const std::vector<int> &framenumbers) = 0;
+      virtual void set_timeslots(const std::vector<int> &timeslots) = 0;
+      virtual void set_burst_data(const std::vector<std::string> &burst_data) = 0;
+    };
+
+  } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_BURST_SOURCE_QA_H */
+
+
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index d906396..1f3570e 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_source_qa_impl.cc
     decryption/decryption_impl.cc )
 
 add_library(gnuradio-grgsm SHARED ${grgsm_sources})
diff --git a/lib/misc_utils/burst_source_qa_impl.cc b/lib/misc_utils/burst_source_qa_impl.cc
new file mode 100644
index 0000000..e7438f7
--- /dev/null
+++ b/lib/misc_utils/burst_source_qa_impl.cc
@@ -0,0 +1,161 @@
+/* -*- 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_source_qa_impl.h"
+#include "stdio.h"
+#include <grgsm/gsmtap.h>
+#include <grgsm/endian.h>
+
+#define PMT_SIZE 174
+
+namespace gr {
+  namespace gsm {
+
+    burst_source_qa::sptr
+    burst_source_qa::make(const std::vector<int> &framenumbers,
+            const std::vector<int> &timeslots,
+            const std::vector<std::string> &burst_data)
+    {
+      return gnuradio::get_initial_sptr
+        (new burst_source_qa_impl(framenumbers, timeslots, burst_data));
+    }
+
+    /*
+     * The private constructor
+     */
+    burst_source_qa_impl::burst_source_qa_impl(const std::vector<int> &framenumbers,
+            const std::vector<int> &timeslots,
+            const std::vector<std::string> &burst_data)
+      : gr::block("burst_source_qa",
+              gr::io_signature::make(0, 0, 0),
+              gr::io_signature::make(0, 0, 0)),
+              d_finished(false)
+    {
+        message_port_register_out(pmt::mp("out"));
+        set_framenumbers(framenumbers);
+        set_timeslots(timeslots);
+        set_burst_data(burst_data);
+    }
+
+    /*
+     * Our virtual destructor.
+     */
+    burst_source_qa_impl::~burst_source_qa_impl()
+    {
+        if (d_finished == false){
+            d_finished = true;
+        }
+    }
+
+    void burst_source_qa_impl::set_framenumbers(const std::vector<int> &framenumbers)
+    {
+        d_framenumbers = framenumbers;
+    }
+
+    void  burst_source_qa_impl::set_timeslots(const std::vector<int> &timeslots)
+    {
+        d_timeslots = timeslots;
+    }
+
+    void burst_source_qa_impl::set_burst_data(const std::vector<std::string> &burst_data)
+    {
+        d_burst_data = burst_data;
+    }
+
+    bool burst_source_qa_impl::start()
+    {
+        d_finished = false;
+        d_thread = boost::shared_ptr<gr::thread::thread>
+            (new gr::thread::thread(boost::bind(&burst_source_qa_impl::run, this)));
+        return block::start();
+    }
+
+    bool burst_source_qa_impl::stop()
+    {
+        d_finished = true;
+        d_thread->interrupt();
+        d_thread->join();
+        return block::stop();
+    }
+
+    bool burst_source_qa_impl::finished()
+    {
+        return d_finished;
+    }
+
+    void burst_source_qa_impl::run()
+    {
+        char *unserialized = (char*)malloc(sizeof(char) * PMT_SIZE);
+
+        for (int i=0; i<d_burst_data.size(); i++)
+        {
+            if (d_burst_data[i].length() == BURST_SIZE &&
+                d_timeslots[i] >= 0 && d_timeslots[i] <= 7 &&
+                d_framenumbers[i] >= 0 && d_framenumbers[i] <= (26 * 51 * 2048 - 1))
+            {
+                boost::scoped_ptr<gsmtap_hdr> tap_header(new gsmtap_hdr());
+
+                tap_header->version = GSMTAP_VERSION;
+                tap_header->hdr_len = sizeof(gsmtap_hdr)/4;
+                tap_header->type = GSMTAP_TYPE_UM_BURST;
+                tap_header->timeslot = d_timeslots[i];
+                tap_header->frame_number = htobe32(d_framenumbers[i]);
+                tap_header->sub_type = GSMTAP_BURST_NORMAL;
+                tap_header->arfcn = 0;
+                tap_header->signal_dbm = 0;
+                tap_header->snr_db = 0;
+
+                uint8_t burst[BURST_SIZE];
+
+                for (int j=0; j<BURST_SIZE; j++)
+                {
+                    if (d_burst_data[i][j] == '0')
+                    {
+                        burst[j] = 0;
+                    }
+                    else
+                    {
+                        burst[j] = 1;
+                    }
+                }
+
+                int8_t header_plus_burst[sizeof(gsmtap_hdr) + BURST_SIZE];
+                memcpy(header_plus_burst, tap_header.get(), sizeof(gsmtap_hdr));
+                memcpy(header_plus_burst + sizeof(gsmtap_hdr), burst, BURST_SIZE);
+
+                pmt::pmt_t blob_header_plus_burst = pmt::make_blob(header_plus_burst, sizeof(gsmtap_hdr) + BURST_SIZE);
+                pmt::pmt_t msg = pmt::cons(pmt::PMT_NIL, blob_header_plus_burst);
+
+                message_port_pub(pmt::mp("out"), msg);
+            }
+        }
+        post(pmt::mp("system"), pmt::cons(pmt::mp("done"), pmt::from_long(1)));
+    }
+  } /* namespace gsm */
+} /* namespace gr */
+
+
diff --git a/lib/misc_utils/burst_source_qa_impl.h b/lib/misc_utils/burst_source_qa_impl.h
new file mode 100644
index 0000000..cb62571
--- /dev/null
+++ b/lib/misc_utils/burst_source_qa_impl.h
@@ -0,0 +1,61 @@
+/* -*- 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_SOURCE_QA_IMPL_H
+#define INCLUDED_GSM_BURST_SOURCE_QA_IMPL_H
+
+#define BURST_SIZE  148
+
+#include <grgsm/misc_utils/burst_source_qa.h>
+#include <fstream>
+
+
+namespace gr {
+  namespace gsm {
+
+    class burst_source_qa_impl : public burst_source_qa
+    {
+     private:
+        boost::shared_ptr<gr::thread::thread> d_thread;
+        std::vector<int> d_framenumbers;
+        std::vector<int> d_timeslots;
+        std::vector<std::string> d_burst_data;
+        bool d_finished;
+        void run();
+     public:
+        burst_source_qa_impl(const std::vector<int> &framenumbers,
+            const std::vector<int> &timeslots,
+            const std::vector<std::string> &burst_data);
+        ~burst_source_qa_impl();
+        virtual void set_framenumbers(const std::vector<int> &framenumbers);
+        virtual void set_timeslots(const std::vector<int> &timeslots);
+        virtual void set_burst_data(const std::vector<std::string> &burst_data);
+        bool start();
+        bool stop();
+        bool finished();
+    };
+  } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_BURST_SOURCE_QA_IMPL_H */
+
+
diff --git a/swig/grgsm_swig.i b/swig/grgsm_swig.i
index 79831f8..07f6418 100644
--- a/swig/grgsm_swig.i
+++ b/swig/grgsm_swig.i
@@ -25,6 +25,7 @@
 #include "grgsm/misc_utils/tmsi_dumper.h"
 #include "grgsm/misc_utils/burst_sink.h"
 #include "grgsm/misc_utils/burst_source.h"
+#include "grgsm/misc_utils/burst_source_qa.h"
 %}
 
 
@@ -54,6 +55,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_source_qa.h"
+GR_SWIG_BLOCK_MAGIC2(gsm, burst_source_qa);
 %include "grgsm/misc_utils/extract_system_info.h"
 GR_SWIG_BLOCK_MAGIC2(gsm, extract_system_info);
 %include "grgsm/misc_utils/extract_immediate_assignment.h"
