diff --git a/src/osmo_gsm_tester/bts_osmotrx.py b/src/osmo_gsm_tester/bts_osmotrx.py
index d8675cb..7496ce8 100644
--- a/src/osmo_gsm_tester/bts_osmotrx.py
+++ b/src/osmo_gsm_tester/bts_osmotrx.py
@@ -27,9 +27,8 @@
     run_dir = None
     inst = None
     env = None
-    proc_trx = None
+    trx = None
 
-    BIN_TRX = 'osmo-trx'
     BIN_BTS_TRX = 'osmo-bts-trx'
     BIN_PCU = 'osmo-pcu'
 
@@ -54,27 +53,23 @@
         self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
         self.configure()
 
+        self.trx = OsmoTrx(self.suite_run)
+        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(OsmoBtsTrx.BIN_BTS_TRX)))
         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_trx = self.launch_process(OsmoBtsTrx.BIN_TRX, '-x')
-        self.log('Waiting for osmo-trx to start up...')
-        event_loop.wait(self, self.trx_ready)
-        self.proc_trx.log(self.proc_trx.get_stdout_tail(1))
         self.launch_process(OsmoBtsTrx.BIN_BTS_TRX, '-r', '1',
                             '-c', os.path.abspath(self.config_file),
                             '-i', self.bsc.addr())
         #self.launch_process(OsmoBtsTrx.BIN_PCU, '-r', '1')
         self.suite_run.poll()
 
-    def trx_ready(self):
-        if not self.proc_trx or not self.proc_trx.is_running:
-            return False
-        return '-- Transceiver active with' in (self.proc_trx.get_stdout() or '')
-
     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)
@@ -120,4 +115,39 @@
     def set_bsc(self, bsc):
         self.bsc = bsc
 
+class OsmoTrx(log.Origin):
+    suite_run = None
+    run_dir = None
+    inst = None
+    env = None
+    proc_trx = None
+
+    BIN_TRX = 'osmo-trx'
+
+    def __init__(self, suite_run):
+        super().__init__(log.C_RUN, OsmoTrx.BIN_TRX)
+        self.suite_run = suite_run
+        self.env = {}
+
+    def start(self):
+        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst(OsmoTrx.BIN_TRX)))
+        self.proc_trx = self.launch_process(OsmoTrx.BIN_TRX, '-x')
+
+    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)
+        if not os.path.isfile(binary):
+            raise RuntimeError('Binary missing: %r' % binary)
+        proc = process.Process(binary_name, run_dir,
+                               (binary,) + args,
+                               env=self.env)
+        self.suite_run.remember_to_stop(proc)
+        proc.launch()
+        return proc
+
+    def trx_ready(self):
+        if not self.proc_trx or not self.proc_trx.is_running:
+            return False
+        return '-- Transceiver active with' in (self.proc_trx.get_stdout() or '')
 # vim: expandtab tabstop=4 shiftwidth=4
