diff --git a/src/osmo_gsm_tester/obj/bsc_osmo.py b/src/osmo_gsm_tester/obj/bsc_osmo.py
index 510063a..877db29 100644
--- a/src/osmo_gsm_tester/obj/bsc_osmo.py
+++ b/src/osmo_gsm_tester/obj/bsc_osmo.py
@@ -50,6 +50,7 @@
         self.mgw = mgw
         self.stp = stp
         self.vty = None
+        self.ctrl = None
 
     def start(self):
         self.log('Starting osmo-bsc')
@@ -84,6 +85,9 @@
         self.vty = OsmoBscVty(self)
         self.vty.connect()
 
+        self.ctrl = OsmoBscCtrl(self)
+        self.ctrl.connect()
+
     def configure(self):
         self.config_file = self.run_dir.new_file('osmo-bsc.cfg')
         self.dbg(config_file=self.config_file)
@@ -149,10 +153,8 @@
         # over this list, we have a 1:1 match in indexes.
         return self.bts.index(bts)
 
-    def bts_is_connected(self, bts, use_ctrl=None):
-        if use_ctrl is None:
-            use_ctrl = self.ctrl()
-        return use_ctrl.bts_is_connected(self.bts_num(bts))
+    def bts_is_connected(self, bts):
+        return self.ctrl.bts_is_connected(self.bts_num(bts))
 
     def running(self):
         return not self.process.terminated()
@@ -161,9 +163,9 @@
         if self.vty is not None:
             self.vty.disconnect()
             self.vty = None
-
-    def ctrl(self):
-        return OsmoBscCtrl(self)
+        if self.ctrl is not None:
+            self.ctrl.disconnect()
+            self.ctrl = None
 
 class OsmoBscCtrl(osmo_ctrl.OsmoCtrl):
     def __init__(self, bsc, port=4249):
diff --git a/src/osmo_gsm_tester/obj/msc_osmo.py b/src/osmo_gsm_tester/obj/msc_osmo.py
index 5a7c0ba..550fb87 100644
--- a/src/osmo_gsm_tester/obj/msc_osmo.py
+++ b/src/osmo_gsm_tester/obj/msc_osmo.py
@@ -49,6 +49,7 @@
         self.mgw = mgw
         self.stp = stp
         self.smsc = smsc.Smsc((ip_address.get('addr'), 2775))
+        self.ctrl = None
 
     def start(self):
         self.log('Starting osmo-msc')
@@ -75,6 +76,9 @@
         self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
+        self.ctrl = OsmoMscCtrl(self)
+        self.ctrl.connect()
+
     def configure(self):
         self.config_file = self.run_dir.new_file('osmo-msc.cfg')
         self.dbg(config_file=self.config_file)
@@ -147,7 +151,7 @@
         return all([(imsi in attached) for imsi in imsis])
 
     def imsi_list_attached(self):
-        return OsmoMscCtrl(self).subscriber_list_active()
+        return self.ctrl.subscriber_list_active()
 
     def set_emergency_call_msisdn(self, msisdn):
         self.dbg('Setting Emergency Call MSISDN', msisdn=msisdn)
@@ -156,6 +160,11 @@
     def running(self):
         return not self.process.terminated()
 
+    def cleanup(self):
+        if self.ctrl is not None:
+            self.ctrl.disconnect()
+            self.ctrl = None
+
 
 class OsmoMscCtrl(osmo_ctrl.OsmoCtrl):
     def __init__(self, msc, port=4255):
diff --git a/src/osmo_gsm_tester/obj/nitb_osmo.py b/src/osmo_gsm_tester/obj/nitb_osmo.py
index ea00a75..a978b71 100644
--- a/src/osmo_gsm_tester/obj/nitb_osmo.py
+++ b/src/osmo_gsm_tester/obj/nitb_osmo.py
@@ -36,6 +36,7 @@
         self.ip_address = ip_address
         self.bts = []
         self.smsc = smsc.Smsc((ip_address.get('addr'), 2775))
+        self.ctrl = None
 
     def start(self):
         self.log('Starting osmo-nitb')
@@ -62,6 +63,9 @@
         self.testenv.remember_to_stop(self.process)
         self.process.launch()
 
+        self.ctrl = OsmoNitbCtrl(self)
+        self.ctrl.connect()
+
     def configure(self):
         self.config_file = self.run_dir.new_file('osmo-nitb.cfg')
         self.dbg(config_file=self.config_file)
@@ -134,11 +138,11 @@
             raise log.Error("Auth algo %r selected and no KI specified" % algo)
 
         self.log('Add subscriber', msisdn=msisdn, imsi=modem.imsi())
-        OsmoNitbCtrl(self).subscriber_add(modem.imsi(), msisdn, modem.ki(), algo)
+        return self.ctrl.subscriber_add(modem.imsi(), msisdn, modem.ki(), algo)
 
     def subscriber_delete(self, modem):
         self.log('Delete subscriber', imsi=modem.imsi())
-        OsmoNitbCtrl(self).subscriber_delete(modem.imsi())
+        return self.ctrl.subscriber_delete(modem.imsi())
 
     def subscriber_attached(self, *modems):
         return self.imsi_attached(*[m.imsi() for m in modems])
@@ -149,14 +153,18 @@
         return all([(imsi in attached) for imsi in imsis])
 
     def imsi_list_attached(self):
-        return OsmoNitbCtrl(self).subscriber_list_active()
+        return self.ctrl.subscriber_list_active()
 
     def bts_is_connected(self, bts):
-        return OsmoNitbCtrl(self).bts_is_connected(self.bts_num(bts))
+        return self.ctrl.bts_is_connected(self.bts_num(bts))
 
     def running(self):
         return not self.process.terminated()
 
+    def cleanup(self):
+        if self.ctrl is not None:
+            self.ctrl.disconnect()
+            self.ctrl = None
 
 class OsmoNitbCtrl(osmo_ctrl.OsmoCtrl):
     def __init__(self, nitb, port=4249):
