diff --git a/lib/flow_control/uplink_downlink_splitter_impl.cc b/lib/flow_control/uplink_downlink_splitter_impl.cc
new file mode 100644
index 0000000..b98102c
--- /dev/null
+++ b/lib/flow_control/uplink_downlink_splitter_impl.cc
@@ -0,0 +1,75 @@
+/* -*- c++ -*- */
+/* @file
+ * @author 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 "uplink_downlink_splitter_impl.h"
+#include <grgsm/gsmtap.h>
+#define BURST_SIZE 148
+namespace gr {
+  namespace grgsm {
+
+    uplink_downlink_splitter::sptr
+    uplink_downlink_splitter::make()
+    {
+      return gnuradio::get_initial_sptr
+        (new uplink_downlink_splitter_impl());
+    }
+
+    /*
+     * The private constructor
+     */
+    uplink_downlink_splitter_impl::uplink_downlink_splitter_impl()
+      : gr::block("uplink_downlink_splitter",
+              gr::io_signature::make(0,0,0),
+              gr::io_signature::make(0,0,0))
+    {
+        message_port_register_in(pmt::mp("in"));
+        message_port_register_out(pmt::mp("uplink"));
+        message_port_register_out(pmt::mp("downlink"));
+        set_msg_handler(pmt::mp("in"), boost::bind(&uplink_downlink_splitter_impl::process_msg, this, _1));
+    }
+
+    void uplink_downlink_splitter_impl::process_msg(pmt::pmt_t msg)
+    {
+        gsmtap_hdr * header = (gsmtap_hdr *)(pmt::blob_data(pmt::cdr(msg)));
+        bool uplink_burst = (be16toh(header->arfcn) & 0x4000) ? true : false;
+        if(uplink_burst)
+        {
+            message_port_pub(pmt::mp("uplink"), msg);
+        } else {
+            message_port_pub(pmt::mp("downlink"), msg);
+        }
+    }
+
+    /*
+     * Our virtual destructor.
+     */
+    uplink_downlink_splitter_impl::~uplink_downlink_splitter_impl()
+    {
+    }
+  } /* namespace grgsm */
+} /* namespace gr */
+
diff --git a/lib/flow_control/uplink_downlink_splitter_impl.h b/lib/flow_control/uplink_downlink_splitter_impl.h
new file mode 100644
index 0000000..bc4368a
--- /dev/null
+++ b/lib/flow_control/uplink_downlink_splitter_impl.h
@@ -0,0 +1,43 @@
+/* -*- c++ -*- */
+/* @file
+ * @author 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_GRGSM_UPLINK_DOWNLINK_SPLITTER_IMPL_H
+#define INCLUDED_GRGSM_UPLINK_DOWNLINK_SPLITTER_IMPL_H
+
+#include <grgsm/flow_control/uplink_downlink_splitter.h>
+
+namespace gr {
+  namespace grgsm {
+
+    class uplink_downlink_splitter_impl : public uplink_downlink_splitter
+    {
+     public:
+      uplink_downlink_splitter_impl();
+      ~uplink_downlink_splitter_impl();
+
+      void process_msg(pmt::pmt_t msg);
+    };
+  } // namespace grgsm
+} // namespace gr
+
+#endif /* INCLUDED_GRGSM_UPLINK_DOWNLINK_SPLITTER_IMPL_H */
+
