diff --git a/src/osmo_gsm_tester/bts_osmotrx.py b/src/osmo_gsm_tester/bts_osmotrx.py
index fb13545..ea644f1 100644
--- a/src/osmo_gsm_tester/bts_osmotrx.py
+++ b/src/osmo_gsm_tester/bts_osmotrx.py
@@ -23,6 +23,9 @@
 from . import log, config, util, template, process, event_loop, pcu_osmo, bts_osmo
 
 class OsmoBtsTrx(bts_osmo.OsmoBtsMainUnit):
+##############
+# PROTECTED
+##############
     run_dir = None
     inst = None
     env = None
@@ -47,32 +50,6 @@
     def launch_trx_enabled(self):
         return util.str2bool(self.conf.get('launch_trx'))
 
-    def start(self):
-        if self.bsc is None:
-            raise RuntimeError('BTS needs to be added to a BSC or NITB before it can be started')
-        self.suite_run.poll()
-
-        self.log('Starting to connect to', self.bsc)
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
-        self.configure()
-
-        if self.launch_trx_enabled():
-            self.trx = OsmoTrx(self.suite_run, self.trx_remote_ip(), self.remote_addr())
-            self.trx.start()
-            self.log('Waiting for osmo-trx to start up...')
-            event_loop.wait(self, self.trx.trx_ready)
-
-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-bts')))
-        lib = self.inst.child('lib')
-        if not os.path.isdir(lib):
-            raise RuntimeError('No lib/ in %r' % self.inst)
-        self.env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }
-
-        self.proc_bts = self.launch_process(OsmoBtsTrx.BIN_BTS_TRX, '-r', '1',
-                            '-c', os.path.abspath(self.config_file),
-                            '-i', self.bsc.addr())
-        self.suite_run.poll()
-
     def launch_process(self, binary_name, *args):
         binary = os.path.abspath(self.inst.child('bin', binary_name))
         run_dir = self.run_dir.new_dir(binary_name)
@@ -110,6 +87,9 @@
             self.dbg(r)
             f.write(r)
 
+########################
+# PUBLIC - INTERNAL API
+########################
     def conf_for_bsc(self):
         values = config.get_defaults('bsc_bts')
         config.overlay(values, config.get_defaults('osmo_bts_trx'))
@@ -129,6 +109,35 @@
         self.dbg(conf=values)
         return values
 
+###################
+# PUBLIC (test API included)
+###################
+    def start(self):
+        if self.bsc is None:
+            raise RuntimeError('BTS needs to be added to a BSC or NITB before it can be started')
+        self.suite_run.poll()
+
+        self.log('Starting to connect to', self.bsc)
+        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.configure()
+
+        if self.launch_trx_enabled():
+            self.trx = OsmoTrx(self.suite_run, self.trx_remote_ip(), self.remote_addr())
+            self.trx.start()
+            self.log('Waiting for osmo-trx to start up...')
+            event_loop.wait(self, self.trx.trx_ready)
+
+        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-bts')))
+        lib = self.inst.child('lib')
+        if not os.path.isdir(lib):
+            raise RuntimeError('No lib/ in %r' % self.inst)
+        self.env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }
+
+        self.proc_bts = self.launch_process(OsmoBtsTrx.BIN_BTS_TRX, '-r', '1',
+                            '-c', os.path.abspath(self.config_file),
+                            '-i', self.bsc.addr())
+        self.suite_run.poll()
+
 class OsmoTrx(log.Origin):
     suite_run = None
     run_dir = None
