diff --git a/apps/trx/ctrl_if.py b/apps/trx/ctrl_if.py
index 58960c5..0129d7f 100644
--- a/apps/trx/ctrl_if.py
+++ b/apps/trx/ctrl_if.py
@@ -2,7 +2,7 @@
 # -*- coding: utf-8 -*-
 
 # GR-GSM based transceiver
-# Transceiver UDP interface
+# CTRL interface implementation
 #
 # (C) 2016-2017 by Vadim Yanitskiy <axilirator@gmail.com>
 #
@@ -22,25 +22,18 @@
 # with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
-import socket
-import select
-
 from udp_link import UDPLink
 
 class CTRLInterface(UDPLink):
-	def __init__(self, remote_addr, remote_port, bind_port, radio_if):
-		print("[i] Init TRX CTRL interface")
-		UDPLink.__init__(self, remote_addr, remote_port, bind_port)
-		self.tb = radio_if
-
-	def shutdown(self):
-		print("[i] Shutdown TRX CTRL interface")
-		UDPLink.shutdown(self)
-
 	def handle_rx(self, data):
 		if self.verify_req(data):
 			request = self.prepare_req(data)
-			self.parse_cmd(request)
+			rc = self.parse_cmd(request)
+
+			if type(rc) is tuple:
+				self.send_response(request, rc[0], rc[1])
+			else:
+				self.send_response(request, rc)
 		else:
 			print("[!] Wrong data on CTRL interface")
 
@@ -72,61 +65,18 @@
 
 		return True
 
-	def parse_cmd(self, request):
-		response_code = "0"
-
-		# Power control
-		if self.verify_cmd(request, "POWERON", 0):
-			print("[i] Recv POWERON cmd")
-			if not self.tb.trx_started:
-				if self.tb.check_available():
-					print("[i] Starting transceiver...")
-					self.tb.trx_started = True
-					self.tb.start()
-				else:
-					print("[!] Transceiver isn't ready to start")
-					response_code = "-1"
-			else:
-				print("[!] Transceiver already started!")
-				response_code = "-1"
-		elif self.verify_cmd(request, "POWEROFF", 0):
-			print("[i] Recv POWEROFF cmd")
-			print("[i] Stopping transceiver...")
-			self.tb.trx_started = False
-			# TODO: flush all buffers between blocks
-			self.tb.stop()
-		elif self.verify_cmd(request, "SETRXGAIN", 1):
-			print("[i] Recv SETRXGAIN cmd")
-			# TODO: check gain value
-			gain = int(request[1])
-			self.tb.set_gain(gain)
-
-		# Tuning Control
-		elif self.verify_cmd(request, "RXTUNE", 1):
-			print("[i] Recv RXTUNE cmd")
-			# TODO: check freq range
-			freq = int(request[1]) * 1000
-			self.tb.set_fc(freq)
-		elif self.verify_cmd(request, "TXTUNE", 1):
-			print("[i] Recv TXTUNE cmd")
-			# TODO: is not implemented yet
-
-		# Misc
-		elif self.verify_cmd(request, "ECHO", 0):
-			print("[i] Recv ECHO cmd")
-
-		# Wrong / unknown command
-		else:
-			print("[!] Wrong request on CTRL interface")
-			response_code = "-1"
-
-		# Anyway, we need to respond
-		self.send_response(request, response_code)
-
-	def send_response(self, request, response_code):
+	def send_response(self, request, response_code, params = None):
 		# Include status code, for example ["TXTUNE", "0", "941600"]
-		request.insert(1, response_code)
+		request.insert(1, str(response_code))
+
+		# Optionally append command specific parameters
+		if params is not None:
+			request += params
+
 		# Add the response signature, and join back to string
 		response = "RSP " + " ".join(request) + "\0"
 		# Now we have something like "RSP TXTUNE 0 941600"
 		self.send(response)
+
+	def parse_cmd(self, request):
+		raise NotImplementedError
diff --git a/apps/trx/ctrl_if_bb.py b/apps/trx/ctrl_if_bb.py
new file mode 100644
index 0000000..8f7b57a
--- /dev/null
+++ b/apps/trx/ctrl_if_bb.py
@@ -0,0 +1,104 @@
+#!/usr/bin/env python2
+# -*- coding: utf-8 -*-
+
+# GR-GSM based transceiver
+# CTRL interface for OsmocomBB
+#
+# (C) 2016-2017 by Vadim Yanitskiy <axilirator@gmail.com>
+#
+# All Rights Reserved
+#
+# This program 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+from ctrl_if import CTRLInterface
+
+class CTRLInterfaceBB(CTRLInterface):
+	def __init__(self, remote_addr, remote_port, bind_port, tb):
+		print("[i] Init CTRL interface")
+		CTRLInterface.__init__(self, remote_addr, remote_port, bind_port)
+
+		# Set link to the follow graph (top block)
+		self.tb = tb
+
+	def shutdown(self):
+		print("[i] Shutdown CTRL interface")
+		CTRLInterface.shutdown(self)
+
+	def parse_cmd(self, request):
+		# Power control
+		if self.verify_cmd(request, "POWERON", 0):
+			print("[i] Recv POWERON CMD")
+
+			# Ensure transceiver isn't working
+			if self.tb.trx_started:
+				print("[!] Transceiver already started")
+				return -1
+
+			# Ensure transceiver is ready to start
+			if not self.tb.check_available():
+				print("[!] Transceiver isn't ready to start")
+				return -1
+
+			print("[i] Starting transceiver...")
+			self.tb.trx_started = True
+			self.tb.start()
+
+			return 0
+
+		elif self.verify_cmd(request, "POWEROFF", 0):
+			print("[i] Recv POWEROFF cmd")
+
+			# TODO: flush all buffers between blocks
+			if self.tb.trx_started:
+				print("[i] Stopping transceiver...")
+				self.tb.trx_started = False
+				self.tb.stop()
+
+			return 0
+
+		elif self.verify_cmd(request, "SETRXGAIN", 1):
+			print("[i] Recv SETRXGAIN cmd")
+
+			# TODO: check gain value
+			gain = int(request[1])
+			self.tb.set_gain(gain)
+
+			return 0
+
+		# Tuning Control
+		elif self.verify_cmd(request, "RXTUNE", 1):
+			print("[i] Recv RXTUNE cmd")
+
+			# TODO: check freq range
+			freq = int(request[1]) * 1000
+			self.tb.set_fc(freq)
+
+			return 0
+
+		elif self.verify_cmd(request, "TXTUNE", 1):
+			print("[i] Recv TXTUNE cmd")
+
+			# TODO: is not implemented yet
+			return 0
+
+		# Misc
+		elif self.verify_cmd(request, "ECHO", 0):
+			print("[i] Recv ECHO cmd")
+			return 0
+
+		# Wrong / unknown command
+		else:
+			print("[!] Wrong request on CTRL interface")
+			return -1
diff --git a/apps/trx/grgsm_trx.py b/apps/trx/grgsm_trx.py
index 7a1ece3..dbc1c9f 100755
--- a/apps/trx/grgsm_trx.py
+++ b/apps/trx/grgsm_trx.py
@@ -25,7 +25,7 @@
 import getopt
 import sys
 
-from ctrl_if import CTRLInterface
+from ctrl_if_bb import CTRLInterfaceBB
 from radio_if import RadioInterface
 
 COPYRIGHT = \
@@ -61,7 +61,7 @@
 			self.remote_addr, self.base_port)
 
 		# Init TRX CTRL interface
-		self.server = CTRLInterface(self.remote_addr,
+		self.server = CTRLInterfaceBB(self.remote_addr,
 			self.base_port + 101, self.base_port + 1, self.radio)
 
 		print("[i] Init complete")
