diff --git a/python/trx/transceiver.py b/python/trx/transceiver.py
new file mode 100644
index 0000000..837a61f
--- /dev/null
+++ b/python/trx/transceiver.py
@@ -0,0 +1,98 @@
+#!/usr/bin/env python2
+# -*- coding: utf-8 -*-
+
+# GR-GSM based transceiver
+# Transceiver implementation
+#
+# (C) 2018-2019 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_bb import CTRLInterfaceBB
+
+class Transceiver:
+	""" Base transceiver implementation.
+
+	Represents a single transceiver, that can be used as for the BTS side,
+	as for the MS side. Each individual instance of Transceiver unifies
+	three basic interfaces built on three independent UDP connections:
+
+	  - CLCK (base port + 100/0) - clock indications from TRX to L1,
+	  - CTRL (base port + 101/1) - control interface for L1,
+	  - DATA (base port + 102/2) - bidirectional data interface for bursts.
+
+	A transceiver can be either in active (i.e. working), or in idle mode.
+
+	NOTE: both CLCK and DATA interfaces are handled by the flow-graph,
+	      (see RadioInterface), so we only initialize CTRL interface.
+
+	"""
+
+	def __init__(self, bind_addr, remote_addr, base_port, radio_if):
+		# Connection info
+		self.remote_addr = remote_addr
+		self.bind_addr = bind_addr
+		self.base_port = base_port
+
+		# Execution state (running or idle)
+		self.running = False
+
+		# Radio interface (handles both CLCK and DATA interfaces)
+		self.radio_if = radio_if
+
+		# Init CTRL interface
+		self.ctrl_if = CTRLInterfaceBB(self,
+			remote_addr, base_port + 101,
+			bind_addr, base_port + 1)
+
+	def start(self):
+		# Check execution state
+		if self.running:
+			print("[!] Transceiver is already started")
+			return False
+
+		# Make sure that Radio interface is ready, i.e.
+		# all parameters (e.g. RX / RX freq) are set.
+		if not self.radio_if.ready:
+			print("[!] RadioInterface is not ready")
+			return False
+
+		print("[i] Starting transceiver...")
+		self.radio_if.start()
+		self.running = True
+
+		return True
+
+	def stop(self):
+		# POWEROFF is also used to reset transceiver,
+		# so we should not complain that it isn't running.
+		if not self.running:
+			print("[i] Resetting transceiver")
+			self.radio_if.reset()
+			return
+
+		print("[i] Stopping transceiver...")
+
+		# TODO: flush all buffers between blocks
+		self.radio_if.stop()
+		self.radio_if.wait()
+
+		self.running = False
+
+	def measure(self, freq):
+		# TODO: transceiver should be in idle mode
+		return self.radio_if.measure(freq)
