diff --git a/include/grgsm/misc_utils/trx_burst_if.h b/include/grgsm/misc_utils/trx_burst_if.h
index 18ceef1..0e7a35a 100644
--- a/include/grgsm/misc_utils/trx_burst_if.h
+++ b/include/grgsm/misc_utils/trx_burst_if.h
@@ -50,10 +50,6 @@
       static sptr make(
         const std::string &remote_addr,
         const std::string &base_port);
-
-      /* Expose internal timeslot filter API */
-      virtual void ts_filter_set_tn(int tn) = 0;
-      virtual int ts_filter_get_tn(void) = 0;
     };
 
   } // namespace gsm
diff --git a/lib/misc_utils/trx_burst_if_impl.cc b/lib/misc_utils/trx_burst_if_impl.cc
index 6d63edf..8f458b0 100644
--- a/lib/misc_utils/trx_burst_if_impl.cc
+++ b/lib/misc_utils/trx_burst_if_impl.cc
@@ -85,9 +85,6 @@
         // Bind DATA interface handler
         d_data_sock->udp_rx_handler = boost::bind(
           &trx_burst_if_impl::handle_ul_burst, this, _1, _2);
-
-        // Init timeslot filter
-        d_ts_filter_tn = -1;
     }
 
     /*
@@ -100,21 +97,6 @@
     }
 
     /*
-     * Timeslot filter API (getter and setter)
-     */
-    void
-    trx_burst_if_impl::ts_filter_set_tn(int tn)
-    {
-      d_ts_filter_tn = (tn >= 0 && tn <= 7) ? tn : -1;
-    }
-
-    int
-    trx_burst_if_impl::ts_filter_get_tn(void)
-    {
-      return d_ts_filter_tn;
-    }
-
-    /*
      * Check if burst is a RACH burst
      */
     bool trx_burst_if_impl::detect_rach(uint8_t *burst)
@@ -190,10 +172,6 @@
       // Compose a new UDP payload with burst
       burst_pack(msg, buf);
 
-      // Timeslot filter
-      if (d_ts_filter_tn != -1 && buf[0] != d_ts_filter_tn)
-        return;
-
       // Send a burst
       d_data_sock->udp_send(buf, 158);
     }
diff --git a/lib/misc_utils/trx_burst_if_impl.h b/lib/misc_utils/trx_burst_if_impl.h
index fd5a42d..35f939c 100644
--- a/lib/misc_utils/trx_burst_if_impl.h
+++ b/lib/misc_utils/trx_burst_if_impl.h
@@ -35,7 +35,6 @@
     {
      private:
       udp_socket *d_data_sock;
-      int d_ts_filter_tn;
 
       bool detect_rach(uint8_t *burst);
       void burst_pack(pmt::pmt_t msg, uint8_t *buf);
@@ -44,10 +43,6 @@
       trx_burst_if_impl(const std::string &remote_addr, int base_port);
       ~trx_burst_if_impl();
 
-      /* Timeslot filter API */
-      void ts_filter_set_tn(int tn);
-      int ts_filter_get_tn(void);
-
       void handle_dl_burst(pmt::pmt_t msg);
       void handle_ul_burst(uint8_t *payload, size_t len);
     };
diff --git a/python/trx/ctrl_if_bb.py b/python/trx/ctrl_if_bb.py
index b08f62c..77e02d0 100644
--- a/python/trx/ctrl_if_bb.py
+++ b/python/trx/ctrl_if_bb.py
@@ -22,6 +22,7 @@
 # with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
+import grgsm
 from ctrl_if import ctrl_if
 
 class ctrl_if_bb(ctrl_if):
@@ -107,14 +108,18 @@
 				return -1
 
 			# Ignore timeslot type for now
-			# Value 0 means 'drop all'
-			config = -1 if int(request[2]) == 0 else tn
-
+			config = int(request[2])
 			print("[i] Configure timeslot filter to: %s"
-				% ("drop all" if config == -1 else "TS %d" % tn))
+				% ("drop all" if config == 0 else "TS %d" % tn))
 
-			# HACK: configure built-in timeslot filter
-			self.tb.gsm_trx_if.ts_filter_set_tn(config)
+			if config == 0:
+				# Value 0 means 'drop all'
+				self.tb.gsm_ts_filter.set_policy(
+					grgsm.FILTER_POLICY_DROP_ALL)
+			else:
+				self.tb.gsm_ts_filter.set_policy(
+					grgsm.FILTER_POLICY_DEFAULT)
+				self.tb.gsm_ts_filter.set_tn(tn)
 
 			return 0
 
diff --git a/python/trx/radio_if.py b/python/trx/radio_if.py
index 661025a..5791f42 100644
--- a/python/trx/radio_if.py
+++ b/python/trx/radio_if.py
@@ -98,6 +98,9 @@
 		self.gsm_clck_ctrl = grgsm.clock_offset_control(
 			shift_fc, self.samp_rate, osr = 4)
 
+		self.gsm_ts_filter = grgsm.burst_timeslot_filter(0)
+		self.gsm_ts_filter.set_policy(grgsm.FILTER_POLICY_DROP_ALL)
+
 		self.gsm_trx_burst_if = grgsm.trx_burst_if(
 			self.trx_remote_addr, str(self.trx_base_port))
 
@@ -115,6 +118,9 @@
 			(self.gsm_input, 'ctrl_in'))
 
 		self.msg_connect((self.gsm_receiver, 'C0'),
+			(self.gsm_ts_filter, 'in'))
+
+		self.msg_connect((self.gsm_ts_filter, 'out'),
 			(self.gsm_trx_burst_if, 'bursts'))
 
 	def check_available(self):
