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))
