diff --git a/src/osmo_gsm_tester/core/suite.py b/src/osmo_gsm_tester/core/suite.py
index 0995f8f..1bd6a63 100644
--- a/src/osmo_gsm_tester/core/suite.py
+++ b/src/osmo_gsm_tester/core/suite.py
@@ -72,13 +72,16 @@
         self._resource_modifiers = None
         self._config = None
         self._run_dir = None
-        self.trial = trial
+        self._trial = trial
         self.definition = suite_definition
         self.scenarios = scenarios
         self.resources_pool = resource.ResourcesPool()
         self.status = SuiteRun.UNKNOWN
         self.load_tests()
 
+    def trial(self):
+        return self._trial
+
     def load_tests(self):
         self.tests = []
         for test_basename in self.definition.test_basenames:
@@ -109,7 +112,7 @@
 
     def get_run_dir(self):
         if self._run_dir is None:
-            self._run_dir = util.Dir(self.trial.get_run_dir().new_dir(self.name()))
+            self._run_dir = util.Dir(self._trial.get_run_dir().new_dir(self.name()))
         return self._run_dir
 
     def resource_requirements(self):
@@ -142,7 +145,7 @@
     def run_tests(self, names=None):
         suite_libdir = os.path.join(self.definition.suite_dir, 'lib')
         try:
-            log.large_separator(self.trial.name(), self.name(), sublevel=2)
+            log.large_separator(self._trial.name(), self.name(), sublevel=2)
             self.mark_start()
             util.import_path_prepend(suite_libdir)
             if not self.reserved_resources:
@@ -171,7 +174,7 @@
             else:
                 self.status = SuiteRun.FAIL
 
-            log.large_separator(self.trial.name(), self.name(), self.status, sublevel=2, space_above=False)
+            log.large_separator(self._trial.name(), self.name(), self.status, sublevel=2, space_above=False)
 
     def passed(self):
         return self.status == SuiteRun.PASS
diff --git a/src/osmo_gsm_tester/core/test.py b/src/osmo_gsm_tester/core/test.py
index 76c9ce9..8ab124b 100644
--- a/src/osmo_gsm_tester/core/test.py
+++ b/src/osmo_gsm_tester/core/test.py
@@ -58,7 +58,7 @@
         testenv_obj = None
         try:
             self.log_target = log.FileLogTarget(self.get_run_dir().new_child('log')).set_all_levels(log.L_DBG).style_change(trace=True)
-            log.large_separator(self.suite_run.trial.name(), self.suite_run.name(), self.name(), sublevel=3)
+            log.large_separator(self.suite_run.trial().name(), self.suite_run.name(), self.name(), sublevel=3)
             self.status = Test.UNKNOWN
             self.start_timestamp = time.time()
             testenv_obj = testenv.setup(self.suite_run, self)
diff --git a/src/osmo_gsm_tester/obj/bsc_osmo.py b/src/osmo_gsm_tester/obj/bsc_osmo.py
index 046ef94..22b2dad 100644
--- a/src/osmo_gsm_tester/obj/bsc_osmo.py
+++ b/src/osmo_gsm_tester/obj/bsc_osmo.py
@@ -34,7 +34,7 @@
 
 class OsmoBsc(log.Origin):
 
-    def __init__(self, suite_run, msc, mgw, stp, ip_address):
+    def __init__(self, testenv, msc, mgw, stp, ip_address):
         super().__init__(log.C_RUN, 'osmo-bsc_%s' % ip_address.get('addr'))
         self.run_dir = None
         self.config_file = None
@@ -42,7 +42,7 @@
         self.encryption = None
         self.rsl_ip = None
         self.use_osmux = "off"
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.ip_address = ip_address
         self.bts = []
         self.msc = msc
@@ -51,10 +51,10 @@
 
     def start(self):
         self.log('Starting osmo-bsc')
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
 
-        inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-bsc')))
+        inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-bsc')))
 
         binary = inst.child('bin', 'osmo-bsc')
         if not os.path.isfile(binary):
@@ -67,7 +67,7 @@
             filter = 'host %s or host %s and port not 22' % (self.addr(), self.rsl_ip)
         else:
             filter = 'host %s and port not 22' % self.addr()
-        pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), None, filter)
+        pcap_recorder.PcapRecorder(self.testenv, self.run_dir.new_dir('pcap'), None, filter)
 
         env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }
 
@@ -76,7 +76,7 @@
                                        (binary, '-c',
                                         os.path.abspath(self.config_file)),
                                        env=env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def configure(self):
@@ -84,7 +84,7 @@
         self.dbg(config_file=self.config_file)
 
         values = dict(bsc=config.get_defaults('bsc'))
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, dict(bsc=dict(ip_address=self.ip_address)))
         config.overlay(values, self.mgw.conf_for_client())
         config.overlay(values, self.stp.conf_for_client())
diff --git a/src/osmo_gsm_tester/obj/bts.py b/src/osmo_gsm_tester/obj/bts.py
index e23b555..56e5aaa 100644
--- a/src/osmo_gsm_tester/obj/bts.py
+++ b/src/osmo_gsm_tester/obj/bts.py
@@ -50,7 +50,7 @@
 ##############
 # PROTECTED
 ##############
-    def __init__(self, suite_run, conf, name, defaults_cfg_name):
+    def __init__(self, testenv, conf, name, defaults_cfg_name):
         super().__init__(log.C_RUN, name)
         self.bsc = None
         self.sgsn = None
@@ -61,7 +61,7 @@
         self._num_trx = 1
         self._max_trx = None
         self.overlay_trx_list = []
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.conf = conf
         self.defaults_cfg_name = defaults_cfg_name
         self._init_num_trx()
@@ -162,7 +162,7 @@
         'Nothing to do by default. Subclass can override if required.'
         pass
 
-    def get_instance_by_type(suite_run, conf):
+    def get_instance_by_type(testenv, conf):
         """Allocate a BTS child class based on type. Opts are passed to the newly created object."""
         bts_type = conf.get('type')
         if bts_type is None:
@@ -188,7 +188,7 @@
             bts_class = NanoBts
         else:
             raise log.Error('BTS type not supported:', bts_type)
-        return bts_class(suite_run, conf)
+        return bts_class(testenv, conf)
 
 ###################
 # PUBLIC (test API included)
diff --git a/src/osmo_gsm_tester/obj/bts_nanobts.py b/src/osmo_gsm_tester/obj/bts_nanobts.py
index 3e9b035..5c07bda 100644
--- a/src/osmo_gsm_tester/obj/bts_nanobts.py
+++ b/src/osmo_gsm_tester/obj/bts_nanobts.py
@@ -30,8 +30,8 @@
 ##############
 # PROTECTED
 ##############
-    def __init__(self, suite_run, conf):
-        super().__init__(suite_run, conf, 'nanobts_%s' % conf.get('label', 'nolabel'), 'nanobts')
+    def __init__(self, testenv, conf):
+        super().__init__(testenv, conf, 'nanobts_%s' % conf.get('label', 'nolabel'), 'nanobts')
         self.pwsup_list = []
         self._pcu = None
 
@@ -94,7 +94,7 @@
     def start(self, keepalive=False):
         if self.conf.get('ipa_unit_id') is None:
             raise log.Error('No attribute ipa_unit_id provided in conf!')
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self._configure()
 
         unitid = int(self.conf.get('ipa_unit_id'))
@@ -104,7 +104,7 @@
             self.dbg('Powering cycling NanoBTS TRX')
             pwsup.power_cycle(1.0)
 
-        pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), None,
+        pcap_recorder.PcapRecorder(self.testenv, self.run_dir.new_dir('pcap'), None,
                                    '%s and port not 22' % self.get_pcap_filter_all_trx_ip())
 
 
@@ -116,14 +116,14 @@
             local_bind_ip = util.dst_ip_get_local_bind(bts_trx_ip)
 
             self.log('Finding nanobts %s, binding on %s...' % (bts_trx_ip, local_bind_ip))
-            ipfind = AbisIpFind(self.suite_run, self.run_dir, local_bind_ip, 'preconf')
+            ipfind = AbisIpFind(self.testenv, self.run_dir, local_bind_ip, 'preconf')
             ipfind.start()
             ipfind.wait_bts_ready(bts_trx_ip)
             running_unitid, running_trx = ipfind.get_unitid_by_ip(bts_trx_ip)
             self.log('Found nanobts %s with unit_id %d trx %d' % (bts_trx_ip, running_unitid, running_trx))
             ipfind.stop()
 
-            ipconfig = IpAccessConfig(self.suite_run, self.run_dir, bts_trx_ip)
+            ipconfig = IpAccessConfig(self.testenv, self.run_dir, bts_trx_ip)
             running_oml_ip = ipconfig.get_oml_ip()
 
             if running_unitid != unitid or running_trx != trx_i:
@@ -142,7 +142,7 @@
                 MainLoop.sleep(self, 20)
 
                 self.dbg('Starting to connect id %d trx %d to' % (unitid, trx_i), self.bsc)
-                ipfind = AbisIpFind(self.suite_run, self.run_dir, local_bind_ip, 'postconf')
+                ipfind = AbisIpFind(self.testenv, self.run_dir, local_bind_ip, 'postconf')
                 ipfind.start()
                 ipfind.wait_bts_ready(bts_trx_ip)
                 self.log('nanoBTS id %d trx %d configured and running' % (unitid, trx_i))
@@ -171,12 +171,12 @@
 
     def pcu(self):
         if not self._pcu:
-            self._pcu = pcu.PcuDummy(self.suite_run, self, self.conf)
+            self._pcu = pcu.PcuDummy(self.testenv, self, self.conf)
         return self._pcu
 
 
 class AbisIpFind(log.Origin):
-    suite_run = None
+    testenv = None
     parent_run_dir = None
     run_dir = None
     inst = None
@@ -187,16 +187,16 @@
     BIN_ABISIP_FIND = 'abisip-find'
     BTS_UNIT_ID_RE = re.compile("Unit_ID='(?P<unit_id>\d+)/\d+/(?P<trx_id>\d+)'")
 
-    def __init__(self, suite_run, parent_run_dir, bind_ip, name_suffix):
+    def __init__(self, testenv, parent_run_dir, bind_ip, name_suffix):
         super().__init__(log.C_RUN, AbisIpFind.BIN_ABISIP_FIND + '-' + name_suffix)
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.parent_run_dir = parent_run_dir
         self.bind_ip = bind_ip
         self.env = {}
 
     def start(self):
         self.run_dir = util.Dir(self.parent_run_dir.new_dir(self.name()))
-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-bsc')))
+        self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-bsc')))
 
         lib = self.inst.child('lib')
         if not os.path.isdir(lib):
@@ -209,11 +209,11 @@
         self.proc = process.Process(self.name(), self.run_dir,
                             (ipfind_path, '-i', '1', '-b', self.bind_ip),
                             env=env)
-        self.suite_run.remember_to_stop(self.proc)
+        self.testenv.remember_to_stop(self.proc)
         self.proc.launch()
 
     def stop(self):
-        self.suite_run.stop_process(self.proc)
+        self.testenv.stop_process(self.proc)
 
     def get_line_by_ip(self, ipaddr):
         """Get latest line (more up to date) from abisip-find based on ip address."""
@@ -246,7 +246,7 @@
         MainLoop.sleep(self, 2)
 
 class IpAccessConfig(log.Origin):
-    suite_run = None
+    testenv = None
     parent_run_dir = None
     run_dir = None
     inst = None
@@ -255,9 +255,9 @@
 
     BIN_IPACCESS_CONFIG = 'ipaccess-config'
 
-    def __init__(self, suite_run, parent_run_dir, bts_ip):
+    def __init__(self, testenv, parent_run_dir, bts_ip):
         super().__init__(log.C_RUN, IpAccessConfig.BIN_IPACCESS_CONFIG)
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.parent_run_dir = parent_run_dir
         self.bts_ip = bts_ip
         self.env = {}
@@ -274,7 +274,7 @@
 
     def run(self, name_suffix, *args):
         self.run_dir = util.Dir(self.parent_run_dir.new_dir(self.name()+'-'+name_suffix))
-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-bsc')))
+        self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-bsc')))
         lib = self.inst.child('lib')
         self.env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }
         self.proc = self.create_process(IpAccessConfig.BIN_IPACCESS_CONFIG, *args)
diff --git a/src/osmo_gsm_tester/obj/bts_oc2g.py b/src/osmo_gsm_tester/obj/bts_oc2g.py
index 4a59eee..ee86cc3 100644
--- a/src/osmo_gsm_tester/obj/bts_oc2g.py
+++ b/src/osmo_gsm_tester/obj/bts_oc2g.py
@@ -31,8 +31,8 @@
     BTS_OC2G_BIN = 'osmo-bts-oc2g'
     BTS_OC2G_CFG = 'osmo-bts-oc2g.cfg'
 
-    def __init__(self, suite_run, conf):
-        super().__init__(suite_run, conf, OsmoBtsOC2G.BTS_OC2G_BIN, 'osmo_bts_oc2g')
+    def __init__(self, testenv, conf):
+        super().__init__(testenv, conf, OsmoBtsOC2G.BTS_OC2G_BIN, 'osmo_bts_oc2g')
         self.run_dir = None
         self.inst = None
         self.remote_inst = None
@@ -44,7 +44,7 @@
         return util.str2bool(self.conf.get('direct_pcu'))
 
     def create_pcu(self):
-        return pcu_oc2g.OsmoPcuOC2G(self.suite_run, self, self.conf)
+        return pcu_oc2g.OsmoPcuOC2G(self.testenv, self, self.conf)
 
     def configure(self):
         if self.bsc is None:
@@ -54,7 +54,7 @@
         self.dbg(config_file=self.config_file)
 
         values = { 'osmo_bts_oc2g': config.get_defaults('osmo_bts_oc2g') }
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, {
                         'osmo_bts_oc2g': {
                             'oml_remote_ip': self.bsc.addr(),
@@ -100,10 +100,10 @@
         if self.bsc is None:
             raise RuntimeError('BTS needs to be added to a BSC or NITB before it can be started')
         log.log('Starting OsmoBtsOC2G to connect to', self.bsc)
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
 
-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst(OsmoBtsOC2G.BTS_OC2G_BIN)))
+        self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst(OsmoBtsOC2G.BTS_OC2G_BIN)))
         lib = self.inst.child('lib')
         if not os.path.isdir(lib):
             raise log.Error('No lib/ in', self.inst)
@@ -131,6 +131,6 @@
             args += ('-M',)
 
         self.proc_bts = rem_host.RemoteProcess(OsmoBtsOC2G.BTS_OC2G_BIN, args)
-        self.suite_run.remember_to_stop(self.proc_bts, keepalive)
+        self.testenv.remember_to_stop(self.proc_bts, keepalive)
         self.proc_bts.launch()
 # vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/obj/bts_octphy.py b/src/osmo_gsm_tester/obj/bts_octphy.py
index 11570e8..c4d3910 100644
--- a/src/osmo_gsm_tester/obj/bts_octphy.py
+++ b/src/osmo_gsm_tester/obj/bts_octphy.py
@@ -31,8 +31,8 @@
     BIN_BTS_OCTPHY = 'osmo-bts-octphy'
     CONF_BTS_OCTPHY = 'osmo-bts-octphy.cfg'
 
-    def __init__(self, suite_run, conf):
-        super().__init__(suite_run, conf, OsmoBtsOctphy.BIN_BTS_OCTPHY, 'osmo_bts_octphy')
+    def __init__(self, testenv, conf):
+        super().__init__(testenv, conf, OsmoBtsOctphy.BIN_BTS_OCTPHY, 'osmo_bts_octphy')
         self.run_dir = None
         self.inst = None
         self.env = {}
@@ -46,7 +46,7 @@
         proc = process.Process(binary_name, run_dir,
                                (binary,) + args,
                                env=self.env)
-        self.suite_run.remember_to_stop(proc)
+        self.testenv.remember_to_stop(proc)
         proc.launch()
         return proc
 
@@ -85,7 +85,7 @@
         self.dbg(config_file=self.config_file)
 
         values = dict(osmo_bts_octphy=config.get_defaults('osmo_bts_octphy'))
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, {
                         'osmo_bts_octphy': {
                             'oml_remote_ip': self.bsc.addr(),
@@ -117,13 +117,13 @@
     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.testenv.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.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
 
-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-bts')))
+        self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-bts')))
         btsoct_path = self.inst.child('bin', OsmoBtsOctphy.BIN_BTS_OCTPHY)
         lib = self.inst.child('lib')
         if not os.path.isdir(lib):
@@ -139,6 +139,6 @@
         self.proc_bts = self.launch_process(OsmoBtsOctphy.BIN_BTS_OCTPHY, '-r', '1',
                             '-c', os.path.abspath(self.config_file),
                             '-i', self.bsc.addr(), '-t', str(self.num_trx()))
-        self.suite_run.poll()
+        self.testenv.poll()
 
 # vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/obj/bts_osmo.py b/src/osmo_gsm_tester/obj/bts_osmo.py
index a182c47..c1a1f5c 100644
--- a/src/osmo_gsm_tester/obj/bts_osmo.py
+++ b/src/osmo_gsm_tester/obj/bts_osmo.py
@@ -38,8 +38,8 @@
 ##############
 # PROTECTED
 ##############
-    def __init__(self, suite_run, conf, name, defaults_cfg_name):
-        super().__init__(suite_run, conf, name, defaults_cfg_name)
+    def __init__(self, testenv, conf, name, defaults_cfg_name):
+        super().__init__(testenv, conf, name, defaults_cfg_name)
         self._pcu = None
         self.proc_bts = None
         if len(self.pcu_socket_path().encode()) > 107:
@@ -86,9 +86,9 @@
 # PROTECTED
 ##############
 
-    def __init__(self, suite_run, conf, name, defaults_cfg_name):
+    def __init__(self, testenv, conf, name, defaults_cfg_name):
         self.pcu_sk_tmp_dir = None
-        super().__init__(suite_run, conf, name, defaults_cfg_name)
+        super().__init__(testenv, conf, name, defaults_cfg_name)
 
 ########################
 # PUBLIC - INTERNAL API
@@ -107,7 +107,7 @@
             os.rmdir(self.pcu_sk_tmp_dir)
 
     def create_pcu(self):
-        return pcu_osmo.OsmoPcu(self.suite_run, self, self.conf)
+        return pcu_osmo.OsmoPcu(self.testenv, self, self.conf)
 
     def pcu_socket_path(self):
         if self.pcu_sk_tmp_dir is None:
diff --git a/src/osmo_gsm_tester/obj/bts_osmotrx.py b/src/osmo_gsm_tester/obj/bts_osmotrx.py
index 9234fc8..42ed3f8 100644
--- a/src/osmo_gsm_tester/obj/bts_osmotrx.py
+++ b/src/osmo_gsm_tester/obj/bts_osmotrx.py
@@ -50,8 +50,8 @@
 
     CONF_BTS_TRX = 'osmo-bts-trx.cfg'
 
-    def __init__(self, suite_run, conf):
-        super().__init__(suite_run, conf, OsmoBtsTrx.BIN_BTS_TRX, 'osmo_bts_trx')
+    def __init__(self, testenv, conf):
+        super().__init__(testenv, conf, OsmoBtsTrx.BIN_BTS_TRX, 'osmo_bts_trx')
         self.run_dir = None
         self.inst = None
         self.trx = None
@@ -74,7 +74,7 @@
         proc = process.Process(binary_name, run_dir,
                                (binary,) + args,
                                env=self.env)
-        self.suite_run.remember_to_stop(proc, keepalive)
+        self.testenv.remember_to_stop(proc, keepalive)
         proc.launch()
         return proc
 
@@ -86,7 +86,7 @@
 
         values = dict(osmo_bts_trx=config.get_defaults('osmo_bts_trx'))
         config.overlay(values, dict(osmo_bts_trx=dict(osmo_trx=config.get_defaults('osmo_trx'))))
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, {
                         'osmo_bts_trx': {
                             'oml_remote_ip': self.bsc.addr(),
@@ -155,10 +155,10 @@
     def start(self, keepalive=False):
         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.testenv.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.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
 
         # Power cycle all TRX if needed (right now only TRX0 for SC5):
@@ -170,12 +170,12 @@
             i = i + 1
 
         if self.launch_trx_enabled():
-            self.trx = OsmoTrx.get_instance_by_type(self.get_osmo_trx_type(), self.suite_run, self.conf_for_osmotrx())
+            self.trx = OsmoTrx.get_instance_by_type(self.get_osmo_trx_type(), self.testenv, self.conf_for_osmotrx())
             self.trx.start(keepalive)
             self.log('Waiting for %s to start up...' % self.trx.name())
             MainLoop.wait(self, self.trx.trx_ready)
 
-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-bts')))
+        self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-bts')))
         lib = self.inst.child('lib')
         if not os.path.isdir(lib):
             raise RuntimeError('No lib/ in %r' % self.inst)
@@ -184,7 +184,7 @@
         self.proc_bts = self.launch_process(keepalive, OsmoBtsTrx.BIN_BTS_TRX, '-r', '1',
                             '-c', os.path.abspath(self.config_file),
                             '-i', self.bsc.addr())
-        self.suite_run.poll()
+        self.testenv.poll()
 
 
 ################################################################################
@@ -195,23 +195,23 @@
 ##############
 # PROTECTED
 ##############
-    def __init__(self, suite_run, conf, name):
+    def __init__(self, testenv, conf, name):
         super().__init__(log.C_RUN, name)
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.conf = conf
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.listen_ip = conf.get('osmo_trx', {}).get('trx_ip')
         self.remote_user = conf.get('osmo_trx', {}).get('remote_user', None)
 
     @classmethod
-    def get_instance_by_type(cls, type, suite_run, conf):
+    def get_instance_by_type(cls, type, testenv, conf):
         KNOWN_OSMOTRX_TYPES = {
             'uhd': OsmoTrxUHD,
             'lms': OsmoTrxLMS,
             'sc5': TrxSC5
         }
         osmo_trx_class = KNOWN_OSMOTRX_TYPES.get(type)
-        return osmo_trx_class(suite_run, conf)
+        return osmo_trx_class(testenv, conf)
 
 ##############
 # PUBLIC (test API included)
@@ -233,8 +233,8 @@
 ##############
 # PROTECTED
 ##############
-    def __init__(self, suite_run, conf):
-        super().__init__(suite_run, conf, self.binary_name())
+    def __init__(self, testenv, conf):
+        super().__init__(testenv, conf, self.binary_name())
         self.env = {}
         self.log("OSMOTRX CONF: %r" % conf)
         self.bts_ip = conf.get('osmo_trx', {}).get('bts_ip')
@@ -274,7 +274,7 @@
         proc = process.Process(binary_name, run_dir,
                                (binary,) + args,
                                env=self.env)
-        self.suite_run.remember_to_stop(proc, keepalive)
+        self.testenv.remember_to_stop(proc, keepalive)
         proc.launch()
         return proc
 
@@ -292,7 +292,7 @@
 
         have_inst = rem_host.inst_compatible_for_remote()
         if have_inst:
-            self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-trx')))
+            self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-trx')))
 
         rem_host.recreate_remote_dir(remote_prefix_dir)
         if have_inst:
@@ -311,7 +311,7 @@
             remote_binary = self.binary_name()
         args = (remote_binary, '-C', remote_config_file)
         self.proc_trx = rem_host.RemoteProcessFixIgnoreSIGHUP(self.binary_name(), remote_run_dir, args, remote_env=remote_env)
-        self.suite_run.remember_to_stop(self.proc_trx, keepalive)
+        self.testenv.remember_to_stop(self.proc_trx, keepalive)
         self.proc_trx.launch()
 
 ##############
@@ -323,7 +323,7 @@
             self.start_remotely(keepalive)
             return
         # Run locally if ssh user is not set
-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-trx')))
+        self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-trx')))
         lib = self.inst.child('lib')
         self.env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }
         self.proc_trx = self.launch_process_local(keepalive, self.binary_name(),
@@ -337,8 +337,8 @@
 class OsmoTrxUHD(OsmoTrx):
     BIN_TRX = 'osmo-trx-uhd'
 
-    def __init__(self, suite_run, conf):
-        super().__init__(suite_run, conf)
+    def __init__(self, testenv, conf):
+        super().__init__(testenv, conf)
 
     def binary_name(self):
         return OsmoTrxUHD.BIN_TRX
@@ -346,16 +346,16 @@
 class OsmoTrxLMS(OsmoTrx):
     BIN_TRX = 'osmo-trx-lms'
 
-    def __init__(self, suite_run, conf):
-        super().__init__(suite_run, conf)
+    def __init__(self, testenv, conf):
+        super().__init__(testenv, conf)
 
     def binary_name(self):
         return OsmoTrxLMS.BIN_TRX
 
 class TrxSC5(Trx):
 
-    def __init__(self, suite_run, conf):
-        super().__init__(suite_run, conf, "sc5-trx")
+    def __init__(self, testenv, conf):
+        super().__init__(testenv, conf, "sc5-trx")
         self.ready = False
 
     def start(self, keepalive=False):
diff --git a/src/osmo_gsm_tester/obj/bts_osmovirtual.py b/src/osmo_gsm_tester/obj/bts_osmovirtual.py
index 495b2a8..b6470c1 100644
--- a/src/osmo_gsm_tester/obj/bts_osmovirtual.py
+++ b/src/osmo_gsm_tester/obj/bts_osmovirtual.py
@@ -33,9 +33,9 @@
 
     CONF_BTS = 'osmo-bts-virtual.cfg'
 
-    def __init__(self, suite_run, conf):
+    def __init__(self, testenv, conf):
         """Initializes the OsmoBtsVirtual."""
-        super().__init__(suite_run, conf, OsmoBtsVirtual.BIN_BTS, 'osmo_bts_virtual')
+        super().__init__(testenv, conf, OsmoBtsVirtual.BIN_BTS, 'osmo_bts_virtual')
         self.run_dir = None
         self.inst = None
         self.env = {}
@@ -50,7 +50,7 @@
         proc = process.Process(binary_name, run_dir,
                                (binary,) + args,
                                env=self.env)
-        self.suite_run.remember_to_stop(proc, keepalive)
+        self.testenv.remember_to_stop(proc, keepalive)
         proc.launch()
         return proc
 
@@ -63,7 +63,7 @@
         self.dbg(config_file=self.config_file)
 
         values = dict(osmo_bts_virtual=config.get_defaults('osmo_bts_virtual'))
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, {
                         'osmo_bts_virtual': {
                             'oml_remote_ip': self.bsc.addr(),
@@ -95,13 +95,13 @@
         """Handles starting/turning-up the osmo-bts-virtual process."""
         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.testenv.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.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
 
-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-bts')))
+        self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-bts')))
         lib = self.inst.child('lib')
         if not os.path.isdir(lib):
             raise RuntimeError('No lib/ in %r' % self.inst)
@@ -110,6 +110,6 @@
         self.proc_bts = self.launch_process(keepalive, OsmoBtsVirtual.BIN_BTS, '-r', '1',
                             '-c', os.path.abspath(self.config_file),
                             '-i', self.bsc.addr())
-        self.suite_run.poll()
+        self.testenv.poll()
 
 # vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/obj/bts_sysmo.py b/src/osmo_gsm_tester/obj/bts_sysmo.py
index aecf977..8f76ecb 100644
--- a/src/osmo_gsm_tester/obj/bts_sysmo.py
+++ b/src/osmo_gsm_tester/obj/bts_sysmo.py
@@ -31,8 +31,8 @@
     BTS_SYSMO_BIN = 'osmo-bts-sysmo'
     BTS_SYSMO_CFG = 'osmo-bts-sysmo.cfg'
 
-    def __init__(self, suite_run, conf):
-        super().__init__(suite_run, conf, SysmoBts.BTS_SYSMO_BIN, 'osmo_bts_sysmo')
+    def __init__(self, testenv, conf):
+        super().__init__(testenv, conf, SysmoBts.BTS_SYSMO_BIN, 'osmo_bts_sysmo')
         self.run_dir = None
         self.inst = None
         self.remote_inst = None
@@ -44,7 +44,7 @@
         return util.str2bool(self.conf.get('direct_pcu'))
 
     def create_pcu(self):
-        return pcu_sysmo.OsmoPcuSysmo(self.suite_run, self, self.conf)
+        return pcu_sysmo.OsmoPcuSysmo(self.testenv, self, self.conf)
 
     def configure(self):
         if self.bsc is None:
@@ -54,7 +54,7 @@
         self.dbg(config_file=self.config_file)
 
         values = { 'osmo_bts_sysmo': config.get_defaults('osmo_bts_sysmo') }
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, {
                         'osmo_bts_sysmo': {
                             'oml_remote_ip': self.bsc.addr(),
@@ -94,10 +94,10 @@
         if self.bsc is None:
             raise RuntimeError('BTS needs to be added to a BSC or NITB before it can be started')
         log.log('Starting sysmoBTS to connect to', self.bsc)
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
 
-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst(SysmoBts.BTS_SYSMO_BIN)))
+        self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst(SysmoBts.BTS_SYSMO_BIN)))
         lib = self.inst.child('lib')
         if not os.path.isdir(lib):
             raise log.Error('No lib/ in', self.inst)
@@ -127,7 +127,7 @@
             args += ('-M',)
 
         self.proc_bts = rem_host.RemoteProcess(SysmoBts.BTS_SYSMO_BIN, args)
-        self.suite_run.remember_to_stop(self.proc_bts, keepalive)
+        self.testenv.remember_to_stop(self.proc_bts, keepalive)
         self.proc_bts.launch()
 
 # vim: expandtab tabstop=4 shiftwidth=4
diff --git a/src/osmo_gsm_tester/obj/enb.py b/src/osmo_gsm_tester/obj/enb.py
index 7514604..4848ea4 100644
--- a/src/osmo_gsm_tester/obj/enb.py
+++ b/src/osmo_gsm_tester/obj/enb.py
@@ -66,7 +66,7 @@
 ##############
 # PROTECTED
 ##############
-    def __init__(self, suite_run, conf, name):
+    def __init__(self, testenv, conf, name):
         super().__init__(log.C_RUN, '%s' % name)
         self._conf = conf
         self._addr = conf.get('addr', None)
@@ -86,9 +86,9 @@
         values = dict(enb=config.get_defaults('enb'))
         for config_specifics in config_specifics_li:
             config.overlay(values, dict(enb=config.get_defaults(config_specifics)))
-        config.overlay(values, dict(enb=self.suite_run.config().get('enb', {})))
+        config.overlay(values, dict(enb=self.testenv.suite().config().get('enb', {})))
         for config_specifics in config_specifics_li:
-            config.overlay(values, dict(enb=self.suite_run.config().get(config_specifics, {})))
+            config.overlay(values, dict(enb=self.testenv.suite().config().get(config_specifics, {})))
         config.overlay(values, dict(enb=self._conf))
         self._id = int(values['enb'].get('id', None))
         assert self._id is not None
@@ -192,7 +192,7 @@
 
         return rf_dev_args
 
-    def get_instance_by_type(suite_run, conf):
+    def get_instance_by_type(testenv, conf):
         """Allocate a ENB child class based on type. Opts are passed to the newly created object."""
         enb_type = conf.get('type')
         if enb_type is None:
@@ -206,7 +206,7 @@
             enb_class = srsENB
         else:
             raise log.Error('ENB type not supported:', enb_type)
-        return  enb_class(suite_run, conf)
+        return  enb_class(testenv, conf)
 
 ###################
 # PUBLIC (test API included)
diff --git a/src/osmo_gsm_tester/obj/enb_amarisoft.py b/src/osmo_gsm_tester/obj/enb_amarisoft.py
index 6f7080a..a534708 100644
--- a/src/osmo_gsm_tester/obj/enb_amarisoft.py
+++ b/src/osmo_gsm_tester/obj/enb_amarisoft.py
@@ -45,8 +45,8 @@
     CFGFILE_DRB = 'amarisoft_drb.cfg'
     LOGFILE = 'lteenb.log'
 
-    def __init__(self, suite_run, conf):
-        super().__init__(suite_run, conf, 'amarisoftenb')
+    def __init__(self, testenv, conf):
+        super().__init__(testenv, conf, 'amarisoftenb')
         self.ue = None
         self.run_dir = None
         self.inst = None
@@ -68,7 +68,7 @@
         self.remote_config_drb_file = None
         self.remote_log_file = None
         self.enable_measurements = False
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.remote_user = conf.get('remote_user', None)
         if not rf_type_valid(conf.get('rf_dev_type', None)):
             raise log.Error('Invalid rf_dev_type=%s' % conf.get('rf_dev_type', None))
@@ -77,7 +77,7 @@
         if self._bin_prefix is None:
             self._bin_prefix = os.getenv('AMARISOFT_PATH_ENB', None)
             if self._bin_prefix == None:
-                self._bin_prefix  = self.suite_run.trial.get_inst('amarisoftenb')
+                self._bin_prefix  = self.testenv.suite().trial().get_inst('amarisoftenb')
         return self._bin_prefix
 
     def cleanup(self):
@@ -98,7 +98,7 @@
     def start(self, epc):
         self.log('Starting AmarisoftENB')
         self._epc = epc
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
         self._start()
 
@@ -119,7 +119,7 @@
             args = (remote_binary, self.remote_config_file)
             self.process = self.rem_host.RemoteProcess(AmarisoftENB.BINFILE, args, remote_env=remote_env)
 
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def gen_conf_file(self, path, filename, values):
diff --git a/src/osmo_gsm_tester/obj/enb_srs.py b/src/osmo_gsm_tester/obj/enb_srs.py
index 0816ca6..70f2f35 100644
--- a/src/osmo_gsm_tester/obj/enb_srs.py
+++ b/src/osmo_gsm_tester/obj/enb_srs.py
@@ -46,8 +46,8 @@
     LOGFILE = 'srsenb.log'
     PCAPFILE = 'srsenb.pcap'
 
-    def __init__(self, suite_run, conf):
-        super().__init__(suite_run, conf, srsENB.BINFILE)
+    def __init__(self, testenv, conf):
+        super().__init__(testenv, conf, srsENB.BINFILE)
         self.ue = None
         self.run_dir = None
         self.gen_conf = None
@@ -66,7 +66,7 @@
         self.remote_log_file = None
         self.remote_pcap_file = None
         self.enable_pcap = False
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.remote_user = conf.get('remote_user', None)
         self._additional_args = []
         if not rf_type_valid(conf.get('rf_dev_type', None)):
@@ -94,7 +94,7 @@
     def start(self, epc):
         self.log('Starting srsENB')
         self._epc = epc
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
         if self.remote_user:
             self.start_remotely()
@@ -112,7 +112,7 @@
         args += tuple(self._additional_args)
 
         self.process = self.rem_host.RemoteProcess(srsENB.BINFILE, args, remote_env=remote_env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def start_locally(self):
@@ -123,7 +123,7 @@
         args += tuple(self._additional_args)
 
         self.process = process.Process(self.name(), self.run_dir, args, env=env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def gen_conf_file(self, path, filename, values):
@@ -135,7 +135,7 @@
             f.write(r)
 
     def configure(self):
-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('srslte')))
+        self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('srslte')))
         if not os.path.isdir(self.inst.child('lib')):
             raise log.Error('No lib/ in', self.inst)
         if not self.inst.isfile('bin', srsENB.BINFILE):
diff --git a/src/osmo_gsm_tester/obj/epc.py b/src/osmo_gsm_tester/obj/epc.py
index cbca0fb..177e662 100644
--- a/src/osmo_gsm_tester/obj/epc.py
+++ b/src/osmo_gsm_tester/obj/epc.py
@@ -33,20 +33,20 @@
 ##############
 # PROTECTED
 ##############
-    def __init__(self, suite_run, run_node, name):
+    def __init__(self, testenv, run_node, name):
         super().__init__(log.C_RUN, '%s' % name)
         self._addr = run_node.run_addr()
         self.set_name('%s_%s' % (name, self._addr))
-        self.suite_run = suite_run
+        self.testenv = testenv
         self._run_node = run_node
 
     def configure(self, config_specifics_li):
         values = dict(epc=config.get_defaults('epc'))
         for config_specifics in config_specifics_li:
             config.overlay(values, dict(epc=config.get_defaults(config_specifics)))
-        config.overlay(values, dict(epc=self.suite_run.config().get('epc', {})))
+        config.overlay(values, dict(epc=self.testenv.suite().config().get('epc', {})))
         for config_specifics in config_specifics_li:
-            config.overlay(values, dict(epc=self.suite_run.config().get(config_specifics, {})))
+            config.overlay(values, dict(epc=self.testenv.suite().config().get(config_specifics, {})))
         config.overlay(values, dict(epc={'run_addr': self.addr()}))
         return values
 
@@ -57,10 +57,10 @@
         'Nothing to do by default. Subclass can override if required.'
         pass
 
-    def get_instance_by_type(suite_run, run_node):
+    def get_instance_by_type(testenv, run_node):
         """Allocate a EPC child class based on type. Opts are passed to the newly created object."""
         values = dict(epc=config.get_defaults('epc'))
-        config.overlay(values, dict(epc=suite_run.config().get('epc', {})))
+        config.overlay(values, dict(epc=testenv.suite().config().get('epc', {})))
         epc_type = values['epc'].get('type', None)
         if epc_type is None:
             raise RuntimeError('EPC type is not defined!')
@@ -74,7 +74,7 @@
         else:
             raise log.Error('EPC type not supported:', epc_type)
 
-        return  epc_class(suite_run, run_node)
+        return  epc_class(testenv, run_node)
 
 ###################
 # PUBLIC (test API included)
diff --git a/src/osmo_gsm_tester/obj/epc_amarisoft.py b/src/osmo_gsm_tester/obj/epc_amarisoft.py
index 8606e57..b5304bf 100644
--- a/src/osmo_gsm_tester/obj/epc_amarisoft.py
+++ b/src/osmo_gsm_tester/obj/epc_amarisoft.py
@@ -38,8 +38,8 @@
     LOGFILE = 'ltemme.log'
     IFUPFILE = 'mme-ifup'
 
-    def __init__(self, suite_run, run_node):
-        super().__init__(suite_run, run_node, 'amarisoftepc')
+    def __init__(self, testenv, run_node):
+        super().__init__(testenv, run_node, 'amarisoftepc')
         self.run_dir = None
         self.config_file = None
         self.log_file = None
@@ -58,7 +58,7 @@
         if self._bin_prefix is None:
             self._bin_prefix = os.getenv('AMARISOFT_PATH_EPC', None)
             if self._bin_prefix == None:
-                self._bin_prefix  = self.suite_run.trial.get_inst('amarisoftepc')
+                self._bin_prefix  = self.testenv.suite().trial().get_inst('amarisoftepc')
         return self._bin_prefix
 
     def cleanup(self):
@@ -74,7 +74,7 @@
 
     def start(self):
         self.log('Starting amarisoftepc')
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
         if self._run_node.is_local():
             self.start_locally()
@@ -94,7 +94,7 @@
 
         self.process = self.rem_host.RemoteProcess(AmarisoftEPC.BINFILE, args)
         #self.process = self.rem_host.RemoteProcessFixIgnoreSIGHUP(AmarisoftEPC.BINFILE, remote_run_dir, args)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def start_locally(self):
@@ -112,7 +112,7 @@
         args = (binary, os.path.abspath(self.config_file))
 
         self.process = process.Process(self.name(), self.run_dir, args, env=env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def configure(self):
@@ -168,7 +168,7 @@
 
     def subscriber_add(self, modem, msisdn=None, algo_str=None):
         if msisdn is None:
-            msisdn = self.suite_run.resources_pool.next_msisdn(modem)
+            msisdn = self.testenv.msisdn()
         modem.set_msisdn(msisdn)
 
         if algo_str is None:
diff --git a/src/osmo_gsm_tester/obj/epc_srs.py b/src/osmo_gsm_tester/obj/epc_srs.py
index f859df0..c5e762f 100644
--- a/src/osmo_gsm_tester/obj/epc_srs.py
+++ b/src/osmo_gsm_tester/obj/epc_srs.py
@@ -39,8 +39,8 @@
     PCAPFILE = 'srsepc.pcap'
     LOGFILE = 'srsepc.log'
 
-    def __init__(self, suite_run, run_node):
-        super().__init__(suite_run, run_node, 'srsepc')
+    def __init__(self, testenv, run_node):
+        super().__init__(testenv, run_node, 'srsepc')
         self.run_dir = None
         self.config_file = None
         self.db_file = None
@@ -74,7 +74,7 @@
 
     def start(self):
         self.log('Starting srsepc')
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
         if self._run_node.is_local():
             self.start_locally()
@@ -95,7 +95,7 @@
         args = (remote_binary, self.remote_config_file)
 
         self.process = self.rem_host.RemoteProcess(srsEPC.BINFILE, args)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def start_locally(self):
@@ -114,11 +114,11 @@
         args = (binary, os.path.abspath(self.config_file))
 
         self.process = process.Process(self.name(), self.run_dir, args, env=env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def configure(self):
-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('srslte')))
+        self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('srslte')))
         if not os.path.isdir(self.inst.child('lib')):
             raise log.Error('No lib/ in', self.inst)
         if not self.inst.isfile('bin', srsEPC.BINFILE):
@@ -180,7 +180,7 @@
 
     def subscriber_add(self, modem, msisdn=None, algo_str=None):
         if msisdn is None:
-            msisdn = self.suite_run.resources_pool.next_msisdn(modem)
+            msisdn = self.testenv.msisdn()
         modem.set_msisdn(msisdn)
 
         if algo_str is None:
diff --git a/src/osmo_gsm_tester/obj/ggsn_osmo.py b/src/osmo_gsm_tester/obj/ggsn_osmo.py
index 11745f6..1435fdb 100644
--- a/src/osmo_gsm_tester/obj/ggsn_osmo.py
+++ b/src/osmo_gsm_tester/obj/ggsn_osmo.py
@@ -25,20 +25,20 @@
 
 class OsmoGgsn(log.Origin):
 
-    def __init__(self, suite_run, ip_address):
+    def __init__(self, testenv, ip_address):
         super().__init__(log.C_RUN, 'osmo-ggsn_%s' % ip_address.get('addr'))
         self.run_dir = None
         self.config_file = None
         self.process = None
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.ip_address = ip_address
 
     def start(self):
         self.log('Starting osmo-ggsn')
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
 
-        inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-ggsn')))
+        inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-ggsn')))
 
         binary = inst.child('bin', 'osmo-ggsn')
         if not os.path.isfile(binary):
@@ -47,7 +47,7 @@
         if not os.path.isdir(lib):
             raise log.Error('No lib/ in', inst)
 
-        pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), None,
+        pcap_recorder.PcapRecorder(self.testenv, self.run_dir.new_dir('pcap'), None,
                                    'host %s' % self.addr())
 
         env = {}
@@ -64,7 +64,7 @@
                                        (binary,
                                         '-c', os.path.abspath(self.config_file)),
                                        env=env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def configure(self):
@@ -72,7 +72,7 @@
         self.dbg(config_file=self.config_file)
 
         values = dict(ggsn=config.get_defaults('ggsn'))
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, dict(ggsn=dict(ip_address=self.ip_address)))
         config.overlay(values, dict(ggsn=dict(statedir=self.run_dir.new_dir('statedir'))))
 
diff --git a/src/osmo_gsm_tester/obj/hlr_osmo.py b/src/osmo_gsm_tester/obj/hlr_osmo.py
index 93e5fff..79175f6 100644
--- a/src/osmo_gsm_tester/obj/hlr_osmo.py
+++ b/src/osmo_gsm_tester/obj/hlr_osmo.py
@@ -30,21 +30,21 @@
     process = None
     next_subscriber_id = 1
 
-    def __init__(self, suite_run, ip_address):
+    def __init__(self, testenv, ip_address):
         super().__init__(log.C_RUN, 'osmo-hlr_%s' % ip_address.get('addr'))
         self.run_dir = None
         self.config_file = None
         self.process = None
         self.next_subscriber_id = 1
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.ip_address = ip_address
 
     def start(self):
         self.log('Starting osmo-hlr')
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
 
-        inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-hlr')))
+        inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-hlr')))
 
         binary = inst.child('bin', 'osmo-hlr')
         if not os.path.isfile(binary):
@@ -60,7 +60,7 @@
             raise log.Error('hlr.sql missing:', sql_input)
         self.run_local('create_hlr_db', ('/bin/sh', '-c', 'sqlite3 %r < %r' % (self.db_file, sql_input)))
 
-        pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), None,
+        pcap_recorder.PcapRecorder(self.testenv, self.run_dir.new_dir('pcap'), None,
                                    'host %s' % self.addr())
 
         env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }
@@ -71,7 +71,7 @@
                                         '-c', os.path.abspath(self.config_file),
                                         '--database', self.db_file),
                                        env=env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def configure(self):
@@ -79,7 +79,7 @@
         self.dbg(config_file=self.config_file)
 
         values = dict(hlr=config.get_defaults('hlr'))
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, dict(hlr=dict(ip_address=self.ip_address)))
 
         self.dbg('HLR CONFIG:\n' + pprint.pformat(values))
@@ -106,7 +106,7 @@
 
     def subscriber_add(self, modem, msisdn=None, algo_str=None):
         if msisdn is None:
-            msisdn = self.suite_run.resources_pool.next_msisdn(modem)
+            msisdn = self.testenv.msisdn()
         modem.set_msisdn(msisdn)
         subscriber_id = self.next_subscriber_id
         self.next_subscriber_id += 1
diff --git a/src/osmo_gsm_tester/obj/iperf3.py b/src/osmo_gsm_tester/obj/iperf3.py
index b9fdfe8..ff09f17 100644
--- a/src/osmo_gsm_tester/obj/iperf3.py
+++ b/src/osmo_gsm_tester/obj/iperf3.py
@@ -52,12 +52,12 @@
     LOGFILE = 'iperf3_srv.json'
     REMOTE_DIR = '/tmp'
 
-    def __init__(self, suite_run, ip_address):
+    def __init__(self, testenv, ip_address):
         super().__init__(log.C_RUN, 'iperf3-srv_%s' % ip_address.get('addr'))
         self.run_dir = None
         self.process = None
         self._run_node = None
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.ip_address = ip_address
         self._port = IPerf3Server.DEFAULT_SRV_PORT
         self.log_file = None
@@ -84,7 +84,7 @@
     def start(self):
         self.log('Starting iperf3-srv')
         self.log_copied = False
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.log_file = self.run_dir.new_file(IPerf3Server.LOGFILE)
         if self.runs_locally():
             self.start_locally()
@@ -105,11 +105,11 @@
             args += ('--logfile', self.remote_log_file,)
 
         self.process = self.rem_host.RemoteProcess(self.name(), args)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def start_locally(self):
-        pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), None,
+        pcap_recorder.PcapRecorder(self.testenv, self.run_dir.new_dir('pcap'), None,
                                    'host %s and port not 22' % self.addr())
 
         args = ('iperf3', '-s', '-B', self.addr(),
@@ -118,7 +118,7 @@
             args += ('--logfile', os.path.abspath(self.log_file),)
 
         self.process = process.Process(self.name(), self.run_dir, args, env={})
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def set_run_node(self, run_node):
@@ -128,7 +128,7 @@
         self._port = port
 
     def stop(self):
-        self.suite_run.stop_process(self.process)
+        self.testenv.stop_process(self.process)
 
     def get_results(self):
         if self.logfile_supported:
@@ -153,20 +153,20 @@
         return not self.process.terminated()
 
     def create_client(self):
-        return IPerf3Client(self.suite_run, self)
+        return IPerf3Client(self.testenv, self)
 
 class IPerf3Client(log.Origin):
 
     REMOTE_DIR = '/tmp'
     LOGFILE = 'iperf3_cli.json'
 
-    def __init__(self, suite_run, iperf3srv):
+    def __init__(self, testenv, iperf3srv):
         super().__init__(log.C_RUN, 'iperf3-cli_%s' % iperf3srv.addr())
         self.run_dir = None
         self.process = None
         self._run_node = None
         self.server = iperf3srv
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.log_file = None
         self.rem_host = None
         self.remote_log_file = None
@@ -180,7 +180,7 @@
     def prepare_test_proc(self, downlink=False, netns=None, time_sec=None):
         if time_sec is None:
             values = config.get_defaults('iperf3cli')
-            config.overlay(values, self.suite_run.config().get('iperf3cli', {}))
+            config.overlay(values, self.testenv.suite().config().get('iperf3cli', {}))
             time_sec_str = values.get('time', time_sec)
 
             # Convert duration to seconds
@@ -195,7 +195,7 @@
 
         self.log('Preparing iperf3-client connecting to %s:%d (time=%ds)' % (self.server.addr(), self.server.port(), time_sec))
         self.log_copied = False
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.log_file = self.run_dir.new_file(IPerf3Client.LOGFILE)
         if self.runs_locally():
             return self.prepare_test_proc_locally(downlink, netns, time_sec)
@@ -226,7 +226,7 @@
         return self.process
 
     def prepare_test_proc_locally(self, downlink, netns, time_sec):
-        pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), None,
+        pcap_recorder.PcapRecorder(self.testenv, self.run_dir.new_dir('pcap'), None,
                                    'host %s and port not 22' % self.server.addr(), netns)
 
         popen_args = ('iperf3', '-c',  self.server.addr(),
diff --git a/src/osmo_gsm_tester/obj/mgcpgw_osmo.py b/src/osmo_gsm_tester/obj/mgcpgw_osmo.py
index d31f439..3afa3f1 100644
--- a/src/osmo_gsm_tester/obj/mgcpgw_osmo.py
+++ b/src/osmo_gsm_tester/obj/mgcpgw_osmo.py
@@ -25,21 +25,21 @@
 
 class OsmoMgcpgw(log.Origin):
 
-    def __init__(self, suite_run, ip_address, bts_ip):
+    def __init__(self, testenv, ip_address, bts_ip):
         super().__init__(log.C_RUN, 'osmo-mgcpgw_%s' % ip_address.get('addr'))
         self.run_dir = None
         self.config_file = None
         self.process = None
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.ip_address = ip_address
         # hack: so far mgcpgw needs one specific BTS IP.
         self.bts_ip = bts_ip
 
     def start(self):
         self.log('Starting osmo-mgcpgw')
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
-        inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-nitb')))
+        inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-nitb')))
         binary = inst.child('bin', 'osmo-bsc_mgcp')
         if not os.path.isfile(binary):
             raise RuntimeError('Binary missing: %r' % binary)
@@ -47,7 +47,7 @@
         if not os.path.isdir(lib):
             raise RuntimeError('No lib/ in %r' % inst)
 
-        pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), None,
+        pcap_recorder.PcapRecorder(self.testenv, self.run_dir.new_dir('pcap'), None,
                                    'host %s and port not 22' % self.addr())
 
         env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }
@@ -57,7 +57,7 @@
                                        (binary, '-c',
                                         os.path.abspath(self.config_file)),
                                        env=env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def configure(self):
@@ -65,7 +65,7 @@
         self.dbg(config_file=self.config_file)
 
         values = dict(mgcpgw=config.get_defaults('mgcpgw'))
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, dict(mgcpgw=dict(ip_address=self.ip_address, bts_ip=self.bts_ip)))
 
         self.dbg('MGCPGW CONFIG:\n' + pprint.pformat(values))
diff --git a/src/osmo_gsm_tester/obj/mgw_osmo.py b/src/osmo_gsm_tester/obj/mgw_osmo.py
index 3798b2d..70572a1 100644
--- a/src/osmo_gsm_tester/obj/mgw_osmo.py
+++ b/src/osmo_gsm_tester/obj/mgw_osmo.py
@@ -25,20 +25,20 @@
 
 class OsmoMgw(log.Origin):
 
-    def __init__(self, suite_run, ip_address):
+    def __init__(self, testenv, ip_address):
         super().__init__(log.C_RUN, 'osmo-mgw_%s' % ip_address.get('addr'))
         self.run_dir = None
         self.config_file = None
         self.process = None
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.ip_address = ip_address
         self.use_osmux = "off"
 
     def start(self):
         self.log('Starting osmo-mgw')
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
-        inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-mgw')))
+        inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-mgw')))
         binary = inst.child('bin', 'osmo-mgw')
         if not os.path.isfile(binary):
             raise RuntimeError('Binary missing: %r' % binary)
@@ -46,7 +46,7 @@
         if not os.path.isdir(lib):
             raise RuntimeError('No lib/ in %r' % inst)
 
-        pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), None,
+        pcap_recorder.PcapRecorder(self.testenv, self.run_dir.new_dir('pcap'), None,
                                    'host %s and port not 22' % self.addr())
 
         env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }
@@ -56,7 +56,7 @@
                                        (binary, '-c',
                                         os.path.abspath(self.config_file)),
                                        env=env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def configure(self):
@@ -64,7 +64,7 @@
         self.dbg(config_file=self.config_file)
 
         values = dict(mgw=config.get_defaults('mgw'))
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, { 'mgw': {
                                         'ip_address': self.ip_address,
                                         'use_osmux': self.use_osmux
diff --git a/src/osmo_gsm_tester/obj/ms.py b/src/osmo_gsm_tester/obj/ms.py
index a30a9c7..2774deb 100644
--- a/src/osmo_gsm_tester/obj/ms.py
+++ b/src/osmo_gsm_tester/obj/ms.py
@@ -54,7 +54,7 @@
         """Cleans up resources allocated."""
         pass
 
-    def get_instance_by_type(suite_run, conf):
+    def get_instance_by_type(testenv, conf):
         """Allocate a MS child class based on type. Opts are passed to the newly created object."""
         ms_type = conf.get('type')
         if ms_type is None:
@@ -75,7 +75,7 @@
             ms_class = AmarisoftUE
         else:
             raise log.Error('MS type not supported:', ms_type)
-        return ms_class(suite_run, conf)
+        return ms_class(testenv, conf)
 
 ###################
 # PUBLIC (test API included)
diff --git a/src/osmo_gsm_tester/obj/ms_amarisoft.py b/src/osmo_gsm_tester/obj/ms_amarisoft.py
index 46a92dc..451bbd0 100644
--- a/src/osmo_gsm_tester/obj/ms_amarisoft.py
+++ b/src/osmo_gsm_tester/obj/ms_amarisoft.py
@@ -78,7 +78,7 @@
     LOGFILE = 'lteue.log'
     IFUPFILE = 'ue-ifup'
 
-    def __init__(self, suite_run, conf):
+    def __init__(self, testenv, conf):
         self._addr = conf.get('addr', None)
         if self._addr is None:
             raise log.Error('addr not set')
@@ -98,7 +98,7 @@
         self.remote_config_rf_file =  None
         self.remote_log_file = None
         self.remote_ifup_file = None
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.remote_user = conf.get('remote_user', None)
         if not rf_type_valid(conf.get('rf_dev_type', None)):
             raise log.Error('Invalid rf_dev_type=%s' % conf.get('rf_dev_type', None))
@@ -107,7 +107,7 @@
         if self._bin_prefix is None:
             self._bin_prefix = os.getenv('AMARISOFT_PATH_UE', None)
             if self._bin_prefix == None:
-                self._bin_prefix  = self.suite_run.trial.get_inst('amarisoftue')
+                self._bin_prefix  = self.testenv.suite().trial().get_inst('amarisoftue')
         return self._bin_prefix
 
     def cleanup(self):
@@ -128,12 +128,12 @@
         return "amarisoftue1"
 
     def stop(self):
-        self.suite_run.stop_process(self.process)
+        self.testenv.stop_process(self.process)
 
     def connect(self, enb):
         self.log('Starting amarisoftue')
         self.enb = enb
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
         if self.setup_runs_locally():
             self.start_locally()
@@ -161,7 +161,7 @@
 
         args = (remote_binary, self.remote_config_file)
         self.process = self.rem_host.RemoteProcess(AmarisoftUE.BINFILE, args)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def start_locally(self):
@@ -182,7 +182,7 @@
         args = (binary, os.path.abspath(self.config_file))
         self.dbg(run_dir=self.run_dir, binary=binary, env=env)
         self.process = process.Process(self.name(), self.run_dir, args, env=env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def gen_conf_file(self, path, filename, values):
@@ -232,8 +232,8 @@
 
         values = dict(ue=config.get_defaults('amarisoft'))
         config.overlay(values, dict(ue=config.get_defaults('amarisoftue')))
-        config.overlay(values, dict(ue=self.suite_run.config().get('amarisoft', {})))
-        config.overlay(values, dict(ue=self.suite_run.config().get('modem', {})))
+        config.overlay(values, dict(ue=self.testenv.suite().config().get('amarisoft', {})))
+        config.overlay(values, dict(ue=self.testenv.suite().config().get('modem', {})))
         config.overlay(values, dict(ue=self._conf))
         config.overlay(values, dict(ue=dict(num_antennas = self.enb.num_ports())))
 
diff --git a/src/osmo_gsm_tester/obj/ms_driver.py b/src/osmo_gsm_tester/obj/ms_driver.py
index 2c7bb8b..c7c1c24 100644
--- a/src/osmo_gsm_tester/obj/ms_driver.py
+++ b/src/osmo_gsm_tester/obj/ms_driver.py
@@ -30,9 +30,9 @@
 
 class MsDriver(log.Origin):
 
-    def __init__(self, suite_run):
+    def __init__(self, testenv):
         super().__init__(log.C_RUN, 'ms-driver')
-        self._suite_run = suite_run
+        self._testenv = testenv
 
         # TODO: take config out of the test scenario
         self._time_start = timedelta(seconds=60)
@@ -67,7 +67,7 @@
         """
 
         # Get the base directory for the virtphy/mobile application
-        inst = util.Dir(os.path.abspath(self._suite_run.trial.get_inst('osmocom-bb')))
+        inst = util.Dir(os.path.abspath(self._testenv.trial.get_inst('osmocom-bb')))
 
         # Assume these are dynamically linked and verify there is a lib dir.
         lib = inst.child('lib')
@@ -117,7 +117,7 @@
         self._starter = MobileTestStarter("mass", options, self._cdf,
                                           self._ev_server,
                                           util.Dir(self.event_server_sk_tmp_dir),
-                                          self._results, suite_run=self._suite_run)
+                                          self._results, testenv=self._testenv)
 
         for sub in self._subscribers:
             self._starter.subscriber_add(sub)
diff --git a/src/osmo_gsm_tester/obj/ms_ofono.py b/src/osmo_gsm_tester/obj/ms_ofono.py
index a79f8fb..e03bab8 100644
--- a/src/osmo_gsm_tester/obj/ms_ofono.py
+++ b/src/osmo_gsm_tester/obj/ms_ofono.py
@@ -361,7 +361,7 @@
     CTX_PROT_IPv6 = 'ipv6'
     CTX_PROT_IPv46 = 'dual'
 
-    def __init__(self, suite_run, conf):
+    def __init__(self, testenv, conf):
         self.syspath = conf.get('path')
         self.dbuspath = get_dbuspath_from_syspath(self.syspath)
         super().__init__(self.dbuspath, conf)
@@ -369,7 +369,7 @@
         self._ki = None
         self._imsi = None
         self._apn_ipaddr = None
-        self.run_dir = util.Dir(suite_run.get_test_run_dir().new_dir(self.name().strip('/')))
+        self.run_dir = util.Dir(testenv.suite().get_run_dir().new_dir(self.name().strip('/')))
         self.sms_received_list = []
         self.dbus = ModemDbusInteraction(self.dbuspath)
         self.register_attempts = 0
diff --git a/src/osmo_gsm_tester/obj/ms_srs.py b/src/osmo_gsm_tester/obj/ms_srs.py
index 7d08b66..e5427f0 100644
--- a/src/osmo_gsm_tester/obj/ms_srs.py
+++ b/src/osmo_gsm_tester/obj/ms_srs.py
@@ -77,7 +77,7 @@
     LOGFILE = 'srsue.log'
     METRICSFILE = 'srsue_metrics.csv'
 
-    def __init__(self, suite_run, conf):
+    def __init__(self, testenv, conf):
         self._addr = conf.get('addr', None)
         if self._addr is None:
             raise log.Error('addr not set')
@@ -97,7 +97,7 @@
         self.remote_metrics_file = None
         self.enable_pcap = False
         self.num_carriers = 1
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.remote_user = conf.get('remote_user', None)
         self._additional_args = []
         if not rf_type_valid(conf.get('rf_dev_type', None)):
@@ -132,12 +132,12 @@
         return "srsue1"
 
     def stop(self):
-        self.suite_run.stop_process(self.process)
+        self.testenv.stop_process(self.process)
 
     def connect(self, enb):
         self.log('Starting srsue')
         self.enb = enb
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
         if self.setup_runs_locally():
             self.start_locally()
@@ -170,7 +170,7 @@
 
         self.process = self.rem_host.RemoteProcess(srsUE.BINFILE, args)
         #self.process = self.rem_host.RemoteProcessFixIgnoreSIGHUP(srsUE.BINFILE, remote_run_dir, args, remote_lib)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def start_locally(self):
@@ -194,11 +194,11 @@
         args += tuple(self._additional_args)
 
         self.process = process.Process(self.name(), self.run_dir, args, env=env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def configure(self):
-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('srslte')))
+        self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('srslte')))
         if not os.path.isdir(self.inst.child('lib')):
             raise log.Error('No lib/ in', self.inst)
         if not self.inst.isfile('bin', srsUE.BINFILE):
@@ -220,7 +220,7 @@
                 self.remote_metrics_file = remote_run_dir.child(srsUE.METRICSFILE)
 
         values = dict(ue=config.get_defaults('srsue'))
-        config.overlay(values, dict(ue=self.suite_run.config().get('modem', {})))
+        config.overlay(values, dict(ue=self.testenv.suite().config().get('modem', {})))
         config.overlay(values, dict(ue=self._conf))
         config.overlay(values, dict(ue=dict(num_antennas = self.enb.num_ports())))
 
diff --git a/src/osmo_gsm_tester/obj/msc_osmo.py b/src/osmo_gsm_tester/obj/msc_osmo.py
index 048934e..162614c 100644
--- a/src/osmo_gsm_tester/obj/msc_osmo.py
+++ b/src/osmo_gsm_tester/obj/msc_osmo.py
@@ -32,7 +32,7 @@
 
 class OsmoMsc(log.Origin):
 
-    def __init__(self, suite_run, hlr, mgw, stp, ip_address):
+    def __init__(self, testenv, hlr, mgw, stp, ip_address):
         super().__init__(log.C_RUN, 'osmo-msc_%s' % ip_address.get('addr'))
         self.run_dir = None
         self.config_file = None
@@ -41,7 +41,7 @@
         self.encryption = None
         self.authentication = None
         self.use_osmux = "off"
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.ip_address = ip_address
         self.hlr = hlr
         self.mgw = mgw
@@ -50,9 +50,9 @@
 
     def start(self):
         self.log('Starting osmo-msc')
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
-        inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-msc')))
+        inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-msc')))
         binary = inst.child('bin', 'osmo-msc')
         if not os.path.isfile(binary):
             raise RuntimeError('Binary missing: %r' % binary)
@@ -60,7 +60,7 @@
         if not os.path.isdir(lib):
             raise RuntimeError('No lib/ in %r' % inst)
 
-        pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), None,
+        pcap_recorder.PcapRecorder(self.testenv, self.run_dir.new_dir('pcap'), None,
                                    'host %s and port not 22' % self.addr())
 
         env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }
@@ -70,7 +70,7 @@
                                        (binary, '-c',
                                         os.path.abspath(self.config_file)),
                                        env=env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def configure(self):
@@ -78,7 +78,7 @@
         self.dbg(config_file=self.config_file)
 
         values = dict(msc=config.get_defaults('msc'))
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, dict(msc=dict(ip_address=self.ip_address)))
         config.overlay(values, self.mgw.conf_for_client())
         config.overlay(values, self.hlr.conf_for_client())
diff --git a/src/osmo_gsm_tester/obj/nitb_osmo.py b/src/osmo_gsm_tester/obj/nitb_osmo.py
index 64db425..88ff721 100644
--- a/src/osmo_gsm_tester/obj/nitb_osmo.py
+++ b/src/osmo_gsm_tester/obj/nitb_osmo.py
@@ -26,22 +26,22 @@
 
 class OsmoNitb(log.Origin):
 
-    def __init__(self, suite_run, ip_address):
+    def __init__(self, testenv, ip_address):
         super().__init__(log.C_RUN, 'osmo-nitb_%s' % ip_address.get('addr'))
         self.run_dir = None
         self.config_file = None
         self.process = None
         self.encryption = None
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.ip_address = ip_address
         self.bts = []
         self.smsc = smsc.Smsc((ip_address.get('addr'), 2775))
 
     def start(self):
         self.log('Starting osmo-nitb')
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
-        inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-nitb')))
+        inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-nitb')))
         binary = inst.child('bin', 'osmo-nitb')
         if not os.path.isfile(binary):
             raise RuntimeError('Binary missing: %r' % binary)
@@ -49,7 +49,7 @@
         if not os.path.isdir(lib):
             raise RuntimeError('No lib/ in %r' % inst)
 
-        pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), None,
+        pcap_recorder.PcapRecorder(self.testenv, self.run_dir.new_dir('pcap'), None,
                                    'host %s and port not 22' % self.addr())
 
         env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }
@@ -59,7 +59,7 @@
                                        (binary, '-c',
                                        os.path.abspath(self.config_file)),
                                        env=env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def configure(self):
@@ -67,7 +67,7 @@
         self.dbg(config_file=self.config_file)
 
         values = dict(nitb=config.get_defaults('nitb'))
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, dict(nitb=dict(ip_address=self.ip_address)))
 
         bts_list = []
@@ -120,7 +120,7 @@
 
     def subscriber_add(self, modem, msisdn=None, algo=None):
         if msisdn is None:
-            msisdn = self.suite_run.resources_pool.next_msisdn(modem)
+            msisdn = self.testenv.msisdn()
         modem.set_msisdn(msisdn)
 
         if not algo:
diff --git a/src/osmo_gsm_tester/obj/osmocon.py b/src/osmo_gsm_tester/obj/osmocon.py
index 6f6ac2a..5d1e5ae 100644
--- a/src/osmo_gsm_tester/obj/osmocon.py
+++ b/src/osmo_gsm_tester/obj/osmocon.py
@@ -35,7 +35,7 @@
 
     FIRMWARE_FILE="opt/osmocom-bb/target/firmware/board/compal_e88/layer1.compalram.bin"
 
-    def __init__(self, suite_run, conf):
+    def __init__(self, testenv, conf):
         serial_device = conf.get('serial_device')
         if serial_device is None:
             raise log.Error('osmocon_phone contains no attr "serial_device"')
@@ -43,7 +43,7 @@
         super().__init__(log.C_RUN, 'osmocon_%s' % os.path.basename(self.serial_device))
         self.run_dir = None
         self.process = None
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.conf = conf
         self.sk_tmp_dir = tempfile.mkdtemp('', 'ogtosmoconsk')
         if len(self.l2_socket_path().encode()) > 107:
@@ -62,9 +62,9 @@
         # TODO: make sure the pone is powered off before starting osmocon
 
         self.log('Starting osmocon')
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
 
-        inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmocom-bb')))
+        inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmocom-bb')))
 
         binary = inst.child('sbin', 'osmocon')
         if not os.path.isfile(binary):
@@ -86,7 +86,7 @@
                                        '-l', self.loader_socket_path(),
                                         firmware_path),
                                        env=env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
         self.log('Waiting for osmocon to be up and running')
         MainLoop.wait(self, os.path.exists, self.l2_socket_path())
diff --git a/src/osmo_gsm_tester/obj/pcap_recorder.py b/src/osmo_gsm_tester/obj/pcap_recorder.py
index eb91420..30a3510 100644
--- a/src/osmo_gsm_tester/obj/pcap_recorder.py
+++ b/src/osmo_gsm_tester/obj/pcap_recorder.py
@@ -23,13 +23,13 @@
 
 class PcapRecorder(log.Origin):
 
-    def __init__(self, suite_run, run_dir, iface=None, filters='', netns=None):
+    def __init__(self, testenv, run_dir, iface=None, filters='', netns=None):
         self.iface = iface
         if not self.iface:
             self.iface = "any"
         self.filters = filters
         super().__init__(log.C_RUN, 'pcap-recorder_%s' % self.iface, filters=self.filters)
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.run_dir = run_dir
         self.netns = netns
         self.start()
@@ -45,7 +45,7 @@
             self.process = process.NetNSProcess(self.name(), self.run_dir, self.netns, popen_args)
         else:
             self.process = process.Process(self.name(), self.run_dir, popen_args)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def running(self):
diff --git a/src/osmo_gsm_tester/obj/pcu.py b/src/osmo_gsm_tester/obj/pcu.py
index 6028f06..ed94d49 100644
--- a/src/osmo_gsm_tester/obj/pcu.py
+++ b/src/osmo_gsm_tester/obj/pcu.py
@@ -27,10 +27,10 @@
 # PROTECTED
 ##############
 
-    def __init__(self, suite_run, bts, conf, name):
+    def __init__(self, testenv, bts, conf, name):
         """Base constructor. Must be called by subclass."""
         super().__init__(log.C_RUN, name)
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.bts = bts
         self.conf = conf
 
@@ -55,8 +55,8 @@
 class PcuDummy(Pcu):
     """PCU for BTS without proper PCU control"""
 
-    def __init__(self, suite_run, bts, conf):
-        super().__init__(suite_run, bts, conf, 'PcuDummy')
+    def __init__(self, testenv, bts, conf):
+        super().__init__(testenv, bts, conf, 'PcuDummy')
 
     def start(self, keepalive=False):
         pass
diff --git a/src/osmo_gsm_tester/obj/pcu_oc2g.py b/src/osmo_gsm_tester/obj/pcu_oc2g.py
index 4b67441..cb5e6cb 100644
--- a/src/osmo_gsm_tester/obj/pcu_oc2g.py
+++ b/src/osmo_gsm_tester/obj/pcu_oc2g.py
@@ -28,8 +28,8 @@
     PCU_OC2G_BIN = 'osmo-pcu'
     PCU_OC2G_CFG = 'osmo-pcu-oc2g.cfg'
 
-    def __init__(self, suite_run, btsoc2g, conf):
-        super().__init__(suite_run, btsoc2g, conf, self.PCU_OC2G_BIN)
+    def __init__(self, testenv, btsoc2g, conf):
+        super().__init__(testenv, btsoc2g, conf, self.PCU_OC2G_BIN)
         self.run_dir = None
         self.bsc = None
         self.inst = None
@@ -39,10 +39,10 @@
         self.remote_user = 'root'
 
     def start(self, keepalive=False):
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
 
-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-pcu-oc2g')))
+        self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-pcu-oc2g')))
         lib = self.inst.child('lib')
         if not os.path.isdir(lib):
             raise log.Error('No lib/ in', self.inst)
@@ -87,7 +87,7 @@
 
     def launch_remote(self, name, popen_args, remote_cwd=None, keepalive=False):
         proc = self._process_remote(name, popen_args, remote_cwd)
-        self.suite_run.remember_to_stop(proc, keepalive)
+        self.testenv.remember_to_stop(proc, keepalive)
         proc.launch()
 
     def run_local(self, name, popen_args):
@@ -104,7 +104,7 @@
         self.dbg(config_file=self.config_file)
 
         values = { 'osmo_pcu_oc2g': config.get_defaults('osmo_pcu_oc2g') }
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, {
                         'osmo_pcu_oc2g': {
                             'bts_addr': self.bts.remote_addr(),
diff --git a/src/osmo_gsm_tester/obj/pcu_osmo.py b/src/osmo_gsm_tester/obj/pcu_osmo.py
index 4c79f5a..86e6bbe 100644
--- a/src/osmo_gsm_tester/obj/pcu_osmo.py
+++ b/src/osmo_gsm_tester/obj/pcu_osmo.py
@@ -27,18 +27,18 @@
     BIN_PCU = 'osmo-pcu'
     PCU_OSMO_CFG = 'osmo-pcu.cfg'
 
-    def __init__(self, suite_run, bts, conf):
-        super().__init__(suite_run, bts, conf, OsmoPcu.BIN_PCU)
+    def __init__(self, testenv, bts, conf):
+        super().__init__(testenv, bts, conf, OsmoPcu.BIN_PCU)
         self.run_dir = None
         self.inst = None
         self.conf = conf
         self.env = {}
 
     def start(self, keepalive=False):
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
 
-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-pcu')))
+        self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-pcu')))
         lib = self.inst.child('lib')
         if not os.path.isdir(lib):
             raise RuntimeError('No lib/ in %r' % self.inst)
@@ -47,7 +47,7 @@
         self.launch_process(keepalive, OsmoPcu.BIN_PCU, '-r', '1',
                             '-c', os.path.abspath(self.config_file),
                             '-i', self.bts.bsc.addr())
-        self.suite_run.poll()
+        self.testenv.poll()
 
     def launch_process(self, keepalive, binary_name, *args):
         binary = os.path.abspath(self.inst.child('bin', binary_name))
@@ -57,7 +57,7 @@
         proc = process.Process(binary_name, run_dir,
                                (binary,) + args,
                                env=self.env)
-        self.suite_run.remember_to_stop(proc, keepalive)
+        self.testenv.remember_to_stop(proc, keepalive)
         proc.launch()
         return proc
 
@@ -66,7 +66,7 @@
         self.dbg(config_file=self.config_file)
 
         values = dict(osmo_pcu=config.get_defaults('osmo_pcu'))
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, {
                         'osmo_pcu': {
                             'bts_addr': self.bts.remote_addr(),
diff --git a/src/osmo_gsm_tester/obj/pcu_sysmo.py b/src/osmo_gsm_tester/obj/pcu_sysmo.py
index f7c480d..103ad00 100644
--- a/src/osmo_gsm_tester/obj/pcu_sysmo.py
+++ b/src/osmo_gsm_tester/obj/pcu_sysmo.py
@@ -28,8 +28,8 @@
     PCU_SYSMO_BIN = 'osmo-pcu'
     PCU_SYSMO_CFG = 'osmo-pcu-sysmo.cfg'
 
-    def __init__(self, suite_run, sysmobts, conf):
-        super().__init__(suite_run, sysmobts, conf, self.PCU_SYSMO_BIN)
+    def __init__(self, testenv, sysmobts, conf):
+        super().__init__(testenv, sysmobts, conf, self.PCU_SYSMO_BIN)
         self.run_dir = None
         self.bsc = None
         self.inst = None
@@ -39,10 +39,10 @@
         self.remote_user = 'root'
 
     def start(self, keepalive=False):
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
 
-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-pcu-sysmo')))
+        self.inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-pcu-sysmo')))
         lib = self.inst.child('lib')
         if not os.path.isdir(lib):
             raise log.Error('No lib/ in', self.inst)
@@ -87,7 +87,7 @@
 
     def launch_remote(self, name, popen_args, remote_cwd=None, keepalive=False):
         proc = self._process_remote(name, popen_args, remote_cwd)
-        self.suite_run.remember_to_stop(proc, keepalive)
+        self.testenv.remember_to_stop(proc, keepalive)
         proc.launch()
 
     def run_local(self, name, popen_args):
@@ -104,7 +104,7 @@
         self.dbg(config_file=self.config_file)
 
         values = { 'osmo_pcu_sysmo': config.get_defaults('osmo_pcu_sysmo') }
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, {
                         'osmo_pcu_sysmo': {
                             'bts_addr': self.bts.remote_addr(),
diff --git a/src/osmo_gsm_tester/obj/sgsn_osmo.py b/src/osmo_gsm_tester/obj/sgsn_osmo.py
index 6824d80..a7c7adb 100644
--- a/src/osmo_gsm_tester/obj/sgsn_osmo.py
+++ b/src/osmo_gsm_tester/obj/sgsn_osmo.py
@@ -25,22 +25,22 @@
 
 class OsmoSgsn(log.Origin):
 
-    def __init__(self, suite_run, hlr, ggsn, ip_address):
+    def __init__(self, testenv, hlr, ggsn, ip_address):
         super().__init__(log.C_RUN, 'osmo-sgsn_%s' % ip_address.get('addr'))
         self.run_dir = None
         self.config_file = None
         self.process = None
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.hlr = hlr
         self.ggsn = ggsn
         self.ip_address = ip_address
 
     def start(self):
         self.log('Starting osmo-sgsn')
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
 
-        inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-sgsn')))
+        inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-sgsn')))
 
         binary = inst.child('bin', 'osmo-sgsn')
         if not os.path.isfile(binary):
@@ -49,7 +49,7 @@
         if not os.path.isdir(lib):
             raise log.Error('No lib/ in', inst)
 
-        pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), None,
+        pcap_recorder.PcapRecorder(self.testenv, self.run_dir.new_dir('pcap'), None,
                                    'host %s' % self.addr())
 
         env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }
@@ -59,7 +59,7 @@
                                        (binary,
                                         '-c', os.path.abspath(self.config_file)),
                                        env=env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def configure(self):
@@ -67,7 +67,7 @@
         self.dbg(config_file=self.config_file)
 
         values = dict(sgsn=config.get_defaults('sgsn'))
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, dict(sgsn=dict(ip_address=self.ip_address)))
         config.overlay(values, self.hlr.conf_for_client())
         config.overlay(values, self.ggsn.conf_for_client())
diff --git a/src/osmo_gsm_tester/obj/stp_osmo.py b/src/osmo_gsm_tester/obj/stp_osmo.py
index afb8a04..e8bb4e0 100644
--- a/src/osmo_gsm_tester/obj/stp_osmo.py
+++ b/src/osmo_gsm_tester/obj/stp_osmo.py
@@ -25,20 +25,20 @@
 
 class OsmoStp(log.Origin):
 
-    def __init__(self, suite_run, ip_address):
+    def __init__(self, testenv, ip_address):
         super().__init__(log.C_RUN, 'osmo-stp_%s' % ip_address.get('addr'))
         self.run_dir = None
         self.config_file = None
         self.process = None
-        self.suite_run = suite_run
+        self.testenv = testenv
         self.ip_address = ip_address
 
     def start(self):
         self.log('Starting osmo-stp')
-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))
+        self.run_dir = util.Dir(self.testenv.suite().get_run_dir().new_dir(self.name()))
         self.configure()
 
-        inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-stp')))
+        inst = util.Dir(os.path.abspath(self.testenv.suite().trial().get_inst('osmo-stp')))
 
         binary = inst.child('bin', 'osmo-stp')
         if not os.path.isfile(binary):
@@ -47,7 +47,7 @@
         if not os.path.isdir(lib):
             raise RuntimeError('No lib/ in %r' % inst)
 
-        pcap_recorder.PcapRecorder(self.suite_run, self.run_dir.new_dir('pcap'), None,
+        pcap_recorder.PcapRecorder(self.testenv, self.run_dir.new_dir('pcap'), None,
                                    'host %s and port not 22' % self.addr())
 
         env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }
@@ -57,7 +57,7 @@
                                        (binary, '-c',
                                         os.path.abspath(self.config_file)),
                                        env=env)
-        self.suite_run.remember_to_stop(self.process)
+        self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
     def configure(self):
@@ -65,7 +65,7 @@
         self.dbg(config_file=self.config_file)
 
         values = dict(stp=config.get_defaults('stp'))
-        config.overlay(values, self.suite_run.config())
+        config.overlay(values, self.testenv.suite().config())
         config.overlay(values, dict(stp=dict(ip_address=self.ip_address)))
 
         self.dbg('STP CONFIG:\n' + pprint.pformat(values))
diff --git a/src/osmo_gsm_tester/testenv.py b/src/osmo_gsm_tester/testenv.py
index aa94f3c..0e0860d 100644
--- a/src/osmo_gsm_tester/testenv.py
+++ b/src/osmo_gsm_tester/testenv.py
@@ -36,7 +36,6 @@
 from .obj import bts
 from .obj import ms
 
-trial = None
 suite = None
 test = None
 resources = None
@@ -59,24 +58,17 @@
         super().__init__(log_module.C_TST, test.name())
         self.suite_run = suite_run
         self._test = test
-        self.trial = suite_run.trial # backward compat with objects
-        self.resources_pool = suite_run.resource_pool() # backward compat with objects
         self._processes = []
         self.test_import_modules_to_clean_up = []
         self.objects_to_clean_up = None
         MainLoop.register_poll_func(self.poll)
 
+    def test(self):
+        return self._test
+
     def suite(self):
         return self.suite_run
 
-    # backward compat with objects
-    def get_test_run_dir(self):
-        return self._test.get_run_dir()
-
-    # backward compat with objects
-    def config(self):
-        return self.suite_run.config()
-
     def remember_to_stop(self, process, respawn=False):
         '''Ask suite to monitor and manage lifecycle of the Process object. If a
         process managed by suite finishes before cleanup time, the current test
@@ -321,9 +313,8 @@
     from .core.event_loop import MainLoop
     from .obj.sms import Sms as Sms_class
 
-    global trial, suite, test, resources, log, dbg, err, wait, wait_no_raise, sleep, poll, prompt, Sms, process
+    global suite, test, resources, log, dbg, err, wait, wait_no_raise, sleep, poll, prompt, Sms, process
 
-    trial = suite_run.trial
     test = _test
     resources = suite_run.reserved_resources # TODO: remove this global, only used in selftest
     log = test.log
diff --git a/src/osmo_ms_driver/starter.py b/src/osmo_ms_driver/starter.py
index 702baf0..559e392 100644
--- a/src/osmo_ms_driver/starter.py
+++ b/src/osmo_ms_driver/starter.py
@@ -52,9 +52,9 @@
     def phy_filename(self):
         return self._phy_filename
 
-    def start(self, loop, suite_run=None):
-        if suite_run is not None: # overwrite run_dir to store files if run from inside osmo-gsm-tester:
-            self.run_dir = util.Dir(suite_run.get_test_run_dir().new_dir(self.name()))
+    def start(self, loop, testenv=None):
+        if testenv is not None: # overwrite run_dir to store files if run from inside osmo-gsm-tester:
+            self.run_dir = util.Dir(testenv.suite().get_run_dir().new_dir(self.name()))
         if len(self._phy_filename.encode()) > 107:
             raise log.Error('Path for unix socket is longer than max allowed len for unix socket path (107):', self._phy_filename)
 
@@ -62,8 +62,8 @@
         args = [self._binary, "--l1ctl-sock=" + self._phy_filename]
         self._vphy_proc = process.Process(self.name(), self.run_dir,
                                           args, env=self._env)
-        if suite_run is not None:
-            suite_run.remember_to_stop(self._vphy_proc)
+        if testenv is not None:
+            testenv.remember_to_stop(self._vphy_proc)
         self._vphy_proc.launch()
 
     def verify_ready(self):
@@ -134,9 +134,9 @@
             w.write(mob_vty)
         return mob_cfg_file
 
-    def start(self, loop, suite_run=None):
-        if suite_run is not None: # overwrite run_dir to store files if run from inside osmo-gsm-tester:
-            self.run_dir = util.Dir(suite_run.get_test_run_dir().new_dir(self.name()))
+    def start(self, loop, testenv=None):
+        if testenv is not None: # overwrite run_dir to store files if run from inside osmo-gsm-tester:
+            self.run_dir = util.Dir(testenv.suite().get_run_dir().new_dir(self.name()))
         lua_filename = self.write_lua_cfg()
         mob_filename = self.write_mob_cfg(lua_filename, self._phy_filename)
 
@@ -145,8 +145,8 @@
         args = [self._binary, "-c", mob_filename]
         self._omob_proc = process.Process(self.name(), self.run_dir,
                                           args, env=self._env)
-        if suite_run is not None:
-            suite_run.remember_to_stop(self._omob_proc)
+        if testenv is not None:
+            testenv.remember_to_stop(self._omob_proc)
         self._omob_proc.launch()
 
     def terminate(self):
@@ -168,11 +168,11 @@
     TEMPLATE_CFG = "osmo-mobile.cfg"
 
     def __init__(self, name, options, cdf_function,
-                 event_server, tmp_dir, results, suite_run=None):
+                 event_server, tmp_dir, results, testenv=None):
         super().__init__(log.C_RUN, name)
         self._binary_options = options
         self._cdf = cdf_function
-        self._suite_run = suite_run
+        self._testenv = testenv
         self._tmp_dir = tmp_dir
         self._event_server = event_server
         self._results = results
@@ -225,7 +225,7 @@
         """
         self.log("Pre-launching all virtphy's")
         for phy in self._phys:
-            phy.start(loop, self._suite_run)
+            phy.start(loop, self._testenv)
 
         self.log("Checking if sockets are in the filesystem")
         for phy in self._phys:
@@ -257,7 +257,7 @@
         # start pending MS
         while len(self._started) < self._cdf.current_scaled_value() and len(self._unstarted) > 0:
             ms = self._unstarted.pop(0)
-            ms.start(loop, self._suite_run)
+            ms.start(loop, self._testenv)
             launch_time = time.clock_gettime(time.CLOCK_MONOTONIC)
             self._results[ms.name_number()].set_launch_time(launch_time)
             self._started.append(ms)
