diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
index 4a61f0b..83948b7 100644
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@ -47,6 +47,7 @@
     decoding/GSM503Tables.cpp
     decoding/ViterbiR204.cpp
     flow_control/burst_timeslot_splitter_impl.cc
+    flow_control/burst_fnr_filter_impl.cc
     misc_utils/controlled_rotator_cc_impl.cc
     misc_utils/controlled_const_source_f_impl.cc
     misc_utils/message_printer_impl.cc
diff --git a/lib/flow_control/burst_fnr_filter_impl.cc b/lib/flow_control/burst_fnr_filter_impl.cc
new file mode 100644
index 0000000..1aa6f5b
--- /dev/null
+++ b/lib/flow_control/burst_fnr_filter_impl.cc
@@ -0,0 +1,79 @@
+/* -*- 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_fnr_filter_impl.h"
+#include <stdio.h>
+#include <grgsm/endian.h>
+#include <grgsm/gsmtap.h>
+
+
+namespace gr {
+  namespace gsm {
+
+    burst_fnr_filter::sptr
+    burst_fnr_filter::make(filter_mode mode, unsigned int fnr)
+    {
+      return gnuradio::get_initial_sptr
+        (new burst_fnr_filter_impl(mode, fnr));
+    }
+
+    /*
+     * The private constructor
+     */
+    burst_fnr_filter_impl::burst_fnr_filter_impl(filter_mode mode, unsigned int fnr)
+      : gr::block("burst_fnr_filter",
+              gr::io_signature::make(0, 0, 0),
+              gr::io_signature::make(0, 0, 0)),
+      d_mode(mode),
+      d_framenr(fnr)
+    {
+        message_port_register_in(pmt::mp("in"));       
+        message_port_register_out(pmt::mp("out"));
+
+        set_msg_handler(pmt::mp("in"), boost::bind(&burst_fnr_filter_impl::process_burst, this, _1));
+    }
+
+    /*
+     * Our virtual destructor.
+     */
+    burst_fnr_filter_impl::~burst_fnr_filter_impl() {}
+
+    void burst_fnr_filter_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);
+        
+        unsigned int frame_nr = be32toh(header->frame_number);
+        
+        if ((d_mode == FILTER_LESS_OR_EQUAL && frame_nr <= d_framenr)
+            || d_mode == FILTER_GREATER_OR_EQUAL && frame_nr >= d_framenr)
+        {
+            message_port_pub(pmt::mp("out"), msg);
+        }
+    }
+  } /* namespace gsm */
+} /* namespace gr */
diff --git a/lib/flow_control/burst_fnr_filter_impl.h b/lib/flow_control/burst_fnr_filter_impl.h
new file mode 100644
index 0000000..5d9850d
--- /dev/null
+++ b/lib/flow_control/burst_fnr_filter_impl.h
@@ -0,0 +1,46 @@
+/* -*- 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_FNR_FILTER_IMPL_H
+#define INCLUDED_GSM_BURST_FNR_FILTER_IMPL_H
+
+#include <grgsm/flow_control/burst_fnr_filter.h>
+
+namespace gr {
+  namespace gsm {
+
+    class burst_fnr_filter_impl : public burst_fnr_filter
+    {
+     private:
+      unsigned int d_framenr;
+      filter_mode d_mode;
+     public:
+      burst_fnr_filter_impl(filter_mode mode, unsigned int fnr);
+      ~burst_fnr_filter_impl();
+      void process_burst(pmt::pmt_t msg);
+    };
+
+  } // namespace gsm
+} // namespace gr
+
+#endif /* INCLUDED_GSM_BURST_FNR_FILTER_IMPL_H */
+
