diff --git a/lib/flow_control/CMakeLists.txt b/lib/flow_control/CMakeLists.txt
index 30a5f50..b8f63f7 100644
--- a/lib/flow_control/CMakeLists.txt
+++ b/lib/flow_control/CMakeLists.txt
@@ -23,6 +23,7 @@
     burst_sdcch_subslot_splitter_impl.cc
     burst_timeslot_filter_impl.cc
     burst_timeslot_splitter_impl.cc
+    burst_type_filter_impl.cc
     dummy_burst_filter_impl.cc
     uplink_downlink_splitter_impl.cc
 )
diff --git a/lib/flow_control/burst_type_filter_impl.cc b/lib/flow_control/burst_type_filter_impl.cc
new file mode 100644
index 0000000..542a004
--- /dev/null
+++ b/lib/flow_control/burst_type_filter_impl.cc
@@ -0,0 +1,104 @@
+/* -*- c++ -*- */
+/* @file
+ * @author (C) 2017 by 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 "burst_type_filter_impl.h"
+#include <stdio.h>
+#include <grgsm/endian.h>
+#include <grgsm/gsmtap.h>
+
+
+namespace gr {
+  namespace gsm {
+      
+    burst_type_filter::sptr
+    burst_type_filter::make(const std::vector<uint8_t> & selected_burst_types)
+    {
+      return gnuradio::get_initial_sptr
+        (new burst_type_filter_impl(selected_burst_types));
+    }
+
+    /*
+     * The private constructor
+     */
+    burst_type_filter_impl::burst_type_filter_impl(const std::vector<uint8_t> & selected_burst_types)
+      : gr::block("burst_type_filter",
+              gr::io_signature::make(0, 0, 0),
+              gr::io_signature::make(0, 0, 0)),
+        d_filter_policy(FILTER_POLICY_DEFAULT)
+    {
+        set_selected_burst_types(selected_burst_types);
+    
+        message_port_register_in(pmt::mp("in"));
+        message_port_register_out(pmt::mp("out"));
+        
+        set_msg_handler(pmt::mp("in"), boost::bind(&burst_type_filter_impl::process_burst, this, _1));
+    }
+
+    /*
+     * Our virtual destructor.
+     */
+    burst_type_filter_impl::~burst_type_filter_impl() {}
+
+    void burst_type_filter_impl::process_burst(pmt::pmt_t msg)
+    {
+        if (d_filter_policy == FILTER_POLICY_DROP_ALL)
+          return;
+
+        if (d_filter_policy == FILTER_POLICY_PASS_ALL) {
+          message_port_pub(pmt::mp("out"), msg);
+          return;
+        }
+
+        gsmtap_hdr * header = (gsmtap_hdr *)pmt::blob_data(pmt::cdr(msg));
+//        std::cout << "header->type: " << (int)(header->sub_type) << std::endl; 
+        if (std::find(d_selected_burst_types.begin(), d_selected_burst_types.end(), header->sub_type) != d_selected_burst_types.end()) //check if burst type is listed in burst types to pass
+        {
+            message_port_pub(pmt::mp("out"), msg);
+        }
+    }
+    
+    /* Filtering policy */
+    filter_policy
+    burst_type_filter_impl::get_policy(void)
+    {
+      return d_filter_policy;
+    }
+
+    filter_policy
+    burst_type_filter_impl::set_policy(filter_policy policy)
+    {
+      d_filter_policy = policy;
+      return d_filter_policy;
+    }
+    
+    void
+    burst_type_filter_impl::set_selected_burst_types(const std::vector<uint8_t> & selected_burst_types)
+    {
+      d_selected_burst_types.assign(selected_burst_types.begin(), selected_burst_types.end());
+    }
+  } /* namespace gsm */
+} /* namespace gr */
diff --git a/lib/flow_control/burst_type_filter_impl.h b/lib/flow_control/burst_type_filter_impl.h
new file mode 100644
index 0000000..5c6ad14
--- /dev/null
+++ b/lib/flow_control/burst_type_filter_impl.h
@@ -0,0 +1,55 @@
+/* -*- c++ -*- */
+/* @file
+ * @author (C) 2017 by 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_BURST_TYPE_FILTER_IMPL_H
+#define INCLUDED_GSM_BURST_TYPE_FILTER_IMPL_H
+
+#define BURST_TYPE_LEN 148
+
+#include <grgsm/flow_control/burst_type_filter.h>
+
+namespace gr {
+  namespace gsm {
+
+    class burst_type_filter_impl : public burst_type_filter
+    {
+     private:
+      filter_policy d_filter_policy;
+      std::vector<uint8_t> d_selected_burst_types;
+     public:
+      burst_type_filter_impl(const std::vector<uint8_t> & selected_burst_types);
+      ~burst_type_filter_impl();
+      void process_burst(pmt::pmt_t msg);
+
+      /* External API */
+      /* Filtering policy */
+      filter_policy get_policy(void);
+      filter_policy set_policy(filter_policy policy);
+      
+      void set_selected_burst_types(const std::vector<uint8_t> & selected_burst_types);
+    };
+
+  } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_BURST_TYPE_FILTER_IMPL_H */
+
