diff --git a/src/osmo_gsm_tester/obj/epc_amarisoft.py b/src/osmo_gsm_tester/obj/epc_amarisoft.py
index 3e91b5c..1291891 100644
--- a/src/osmo_gsm_tester/obj/epc_amarisoft.py
+++ b/src/osmo_gsm_tester/obj/epc_amarisoft.py
@@ -168,8 +168,7 @@
 
     def subscriber_add(self, modem, msisdn=None, algo_str=None):
         if msisdn is None:
-            msisdn = self.testenv.msisdn()
-        modem.set_msisdn(msisdn)
+            msisdn = modem.msisdn()
 
         if algo_str is None:
             algo_str = modem.auth_algo() or util.OSMO_AUTH_ALGO_NONE
diff --git a/src/osmo_gsm_tester/obj/epc_srs.py b/src/osmo_gsm_tester/obj/epc_srs.py
index 80f66e8..b5ae0bd 100644
--- a/src/osmo_gsm_tester/obj/epc_srs.py
+++ b/src/osmo_gsm_tester/obj/epc_srs.py
@@ -183,8 +183,7 @@
 
     def subscriber_add(self, modem, msisdn=None, algo_str=None):
         if msisdn is None:
-            msisdn = self.testenv.msisdn()
-        modem.set_msisdn(msisdn)
+            msisdn = modem.msisdn()
 
         if algo_str is None:
             algo_str = modem.auth_algo() or util.OSMO_AUTH_ALGO_NONE
diff --git a/src/osmo_gsm_tester/obj/hlr_osmo.py b/src/osmo_gsm_tester/obj/hlr_osmo.py
index ecff75e..b999363 100644
--- a/src/osmo_gsm_tester/obj/hlr_osmo.py
+++ b/src/osmo_gsm_tester/obj/hlr_osmo.py
@@ -106,8 +106,7 @@
 
     def subscriber_add(self, modem, msisdn=None, algo_str=None):
         if msisdn is None:
-            msisdn = self.testenv.msisdn()
-        modem.set_msisdn(msisdn)
+            msisdn = modem.msisdn()
         subscriber_id = self.next_subscriber_id
         self.next_subscriber_id += 1
 
diff --git a/src/osmo_gsm_tester/obj/ms.py b/src/osmo_gsm_tester/obj/ms.py
index 417ad52..60103d7 100644
--- a/src/osmo_gsm_tester/obj/ms.py
+++ b/src/osmo_gsm_tester/obj/ms.py
@@ -42,8 +42,9 @@
 ##############
 # PROTECTED
 ##############
-    def __init__(self, name, conf):
+    def __init__(self, name, testenv, conf):
         super().__init__(log.C_TST, name)
+        self.testenv = testenv
         self._conf = conf
         self._msisdn = None
 
@@ -114,6 +115,9 @@
         self._msisdn = msisdn
 
     def msisdn(self):
+        # If none was set, allocate next one available:
+        if self._msisdn is None:
+            self.set_msisdn(self.testenv.msisdn())
         return self._msisdn
 
     def get_counter(self, counter_name):
diff --git a/src/osmo_gsm_tester/obj/ms_amarisoft.py b/src/osmo_gsm_tester/obj/ms_amarisoft.py
index f151850..fa16d63 100644
--- a/src/osmo_gsm_tester/obj/ms_amarisoft.py
+++ b/src/osmo_gsm_tester/obj/ms_amarisoft.py
@@ -82,7 +82,7 @@
 
     def __init__(self, testenv, conf):
         self._run_node = RunNode.from_conf(conf.get('run_node', {}))
-        super().__init__('amarisoftue_%s' % self.addr(), conf)
+        super().__init__('amarisoftue_%s' % self.addr(), testenv, conf)
         self.enb = None
         self.run_dir = None
         self.inst = None
@@ -98,7 +98,6 @@
         self.remote_config_rf_file =  None
         self.remote_log_file = None
         self.remote_ifup_file = None
-        self.testenv = testenv
         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))
         if conf.get('rf_dev_type') == 'zmq':
diff --git a/src/osmo_gsm_tester/obj/ms_ofono.py b/src/osmo_gsm_tester/obj/ms_ofono.py
index 0c67e0a..38fa4d4 100644
--- a/src/osmo_gsm_tester/obj/ms_ofono.py
+++ b/src/osmo_gsm_tester/obj/ms_ofono.py
@@ -373,7 +373,7 @@
     CTX_PROT_IPv46 = 'dual'
 
     def __init__(self, testenv, conf):
-        super().__init__('modem', conf)
+        super().__init__('modem', testenv, conf)
         _import_external_modules()
         self.syspath = conf.get('path')
         self.dbuspath = get_dbuspath_from_syspath(self.syspath)
diff --git a/src/osmo_gsm_tester/obj/ms_osmo_mobile.py b/src/osmo_gsm_tester/obj/ms_osmo_mobile.py
index cc54174..11600ff 100644
--- a/src/osmo_gsm_tester/obj/ms_osmo_mobile.py
+++ b/src/osmo_gsm_tester/obj/ms_osmo_mobile.py
@@ -23,6 +23,9 @@
 class MSOsmoMobile(ms.MS):
     """Represent a osmocom-bb mobile."""
 
+    def __init__(self, testenv, conf):
+        super().__init__('ms_osmo', testenv, conf)
+
     def cleanup(self):
         # do nothing for a virtual resource
         pass
diff --git a/src/osmo_gsm_tester/obj/ms_srs.py b/src/osmo_gsm_tester/obj/ms_srs.py
index 0a7624a..a3505c8 100644
--- a/src/osmo_gsm_tester/obj/ms_srs.py
+++ b/src/osmo_gsm_tester/obj/ms_srs.py
@@ -77,7 +77,7 @@
 
     def __init__(self, testenv, conf):
         self._run_node = RunNode.from_conf(conf.get('run_node', {}))
-        super().__init__('srsue_%s' % self.addr(), conf)
+        super().__init__('srsue_%s' % self.addr(), testenv, conf)
         srslte_common.__init__(self)
         self.enb = None
         self.run_dir = None
@@ -96,7 +96,6 @@
         self.remote_metrics_file = None
         self.enable_pcap = False
         self.num_carriers = 1
-        self.testenv = testenv
         self._additional_args = []
         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))
diff --git a/src/osmo_gsm_tester/obj/nitb_osmo.py b/src/osmo_gsm_tester/obj/nitb_osmo.py
index c12648f..a424927 100644
--- a/src/osmo_gsm_tester/obj/nitb_osmo.py
+++ b/src/osmo_gsm_tester/obj/nitb_osmo.py
@@ -120,8 +120,7 @@
 
     def subscriber_add(self, modem, msisdn=None, algo=None):
         if msisdn is None:
-            msisdn = self.testenv.msisdn()
-        modem.set_msisdn(msisdn)
+            msisdn = modem.msisdn()
 
         if not algo:
             alg_str = modem.auth_algo()
