diff --git a/contrib/jenkins-remote-update.sh b/contrib/jenkins-remote-update.sh
index 3b4fc74..f30855e 100755
--- a/contrib/jenkins-remote-update.sh
+++ b/contrib/jenkins-remote-update.sh
@@ -17,7 +17,7 @@
     echo "$status"
     exit 1
   fi
-  ssh "$osmo_gsm_tester_host" "cd \"$osmo_gsm_tester_src\"; git clean -fdx; git pull"
+  ssh "$osmo_gsm_tester_host" "cd \"$osmo_gsm_tester_src\"; git clean -fdx; git fetch; git reset --hard origin/master"
 else
   osmo_gsm_tester_src_dirname="$(dirname "$osmo_gsm_tester_src")"
   ssh "$osmo_gsm_tester_host" "git clone git://git.osmocom.org/osmo-gsm-tester.git \"$osmo_gsm_tester_src\""
diff --git a/contrib/jenkins-run.sh b/contrib/jenkins-run.sh
index 62394d1..b0b4925 100755
--- a/contrib/jenkins-run.sh
+++ b/contrib/jenkins-run.sh
@@ -11,7 +11,8 @@
 osmo_gsm_tester_dir="/var/tmp/osmo-gsm-tester"
 tmp_dir="/var/tmp/prep-osmo-gsm-tester"
 
-trial_name="$NODE_NAME-$BUILD_TAG"
+#trial_name="$NODE_NAME-$BUILD_TAG"
+trial_name="trial-$BUILD_NUMBER"
 local_trial_base="./compose_trial"
 local_trial_dir="$local_trial_base/$trial_name"
 
@@ -33,4 +34,4 @@
 ssh "$osmo_gsm_tester_host" "mv $tmp_dir/$trial_name $osmo_gsm_tester_dir"
 trial_dir="$osmo_gsm_tester_dir/$trial_name"
 
-ssh "$osmo_gsm_tester_host" "$osmo_gsm_tester_src/src/osmo-gsm-tester.py $trial_dir"
+ssh "$osmo_gsm_tester_host" "$osmo_gsm_tester_src/src/osmo-gsm-tester.py $trial_dir -T"
diff --git a/src/osmo_gsm_tester/ofono_client.py b/src/osmo_gsm_tester/ofono_client.py
index 5f91781..a10784f 100644
--- a/src/osmo_gsm_tester/ofono_client.py
+++ b/src/osmo_gsm_tester/ofono_client.py
@@ -62,14 +62,18 @@
         self.msisdn = msisdn
 
     def imsi(self):
-        return self.conf.get('imsi')
+        imsi = self.conf.get('imsi')
+        if not imsi:
+            with self:
+                raise RuntimeError('No IMSI')
+        return imsi
 
     def ki(self):
         return self.conf.get('ki')
 
     def set_powered(self, on=True):
         test.poll()
-        self.dbus_obj.SetProperty('Powered', Variant('b', on))
+        self.dbus_obj().SetProperty('Powered', Variant('b', on))
         test.poll()
 
     def dbus_obj(self):
@@ -78,6 +82,7 @@
         self._dbus_obj = get(self.path)
         self._dbus_obj.PropertyChanged.connect(self._on_property_change)
         self._on_interfaces_change(self.properties().get('Interfaces'))
+        return self._dbus_obj
 
     def properties(self):
         return self.dbus_obj().GetProperties()
@@ -107,7 +112,7 @@
     def _on_interface_enabled(self, interface_name):
         self.dbg('Interface enabled:', interface_name)
         if interface_name == I_SMS:
-            self._dbus_obj[I_SMS].IncomingMessage.connect(self._on_incoming_message)
+            self.dbus_obj()[I_SMS].IncomingMessage.connect(self._on_incoming_message)
 
     def _on_interface_disabled(self, interface_name):
         self.dbg('Interface disabled:', interface_name)
@@ -131,7 +136,7 @@
         if not self.has_interface(I_SMS):
             raise RuntimeError('Modem cannot send SMS, interface not active: %r' % I_SMS)
         sms = Sms(self.msisdn(), to_msisdn)
-        mm = self.dbus_obj[I_SMS]
+        mm = self.dbus_obj()[I_SMS]
         mm.SendMessage(to_msisdn, str(sms))
         return sms
 
diff --git a/src/osmo_gsm_tester/osmo_nitb.py b/src/osmo_gsm_tester/osmo_nitb.py
index 8fce371..4cd6055 100644
--- a/src/osmo_gsm_tester/osmo_nitb.py
+++ b/src/osmo_gsm_tester/osmo_nitb.py
@@ -95,15 +95,16 @@
             OsmoNitbCtrl(self).subscriber_add(modem.imsi(), msisdn, modem.ki())
 
     def subscriber_attached(self, *modems):
-        return self.imsi_attached([m.imsi() for m in modems])
+        return self.imsi_attached(*[m.imsi() for m in modems])
 
     def imsi_attached(self, *imsis):
         attached = self.imsi_list_attached()
-        return all([imsi in attached for imsi in imsis])
+        self.dbg('attached:', attached)
+        return all([(imsi in attached) for imsi in imsis])
 
     def imsi_list_attached(self):
         with self:
-            OsmoNitbCtrl(self).subscriber_list_active()
+            return OsmoNitbCtrl(self).subscriber_list_active()
 
     def running(self):
         return not self.process.terminated()
@@ -133,7 +134,7 @@
         else:
             value = '%s,%s' % (imsi, msisdn)
 
-        with osmo_ctrl.OsmoCtrl(self.nitb.addr(), OsmoNitbCtrl.PORT) as ctrl:
+        with self.ctrl() as ctrl:
             ctrl.do_set(OsmoNitbCtrl.SUBSCR_MODIFY_VAR, value)
             data = ctrl.receive()
             (answer, data) = ctrl.remove_ipa_ctrl_header(data)
@@ -147,15 +148,16 @@
     def subscriber_list_active(self):
         var = 'subscriber-list-active-v1'
         aslist_str = ""
-        with osmo_ctrl.OsmoCtrl(self.nitb.addr(), OsmoNitbCtrl.PORT) as ctrl:
-            self.ctrl.do_get(OsmoNitbCtrl.SUBSCR_LIST_ACTIVE_VAR)
+        with self.ctrl() as ctrl:
+            ctrl.do_get(OsmoNitbCtrl.SUBSCR_LIST_ACTIVE_VAR)
             # This is legacy code from the old osmo-gsm-tester.
             # looks like this doesn't work for long data.
-            data = self.ctrl.receive()
+            data = ctrl.receive()
             while (len(data) > 0):
-                (answer, data) = self.ctrl.remove_ipa_ctrl_header(data)
-                answer = answer.replace('\n', ' ')
-                aslist_str = answer
+                (answer, data) = ctrl.remove_ipa_ctrl_header(data)
+                answer_str = answer.decode('utf-8')
+                answer_str = answer_str.replace('\n', ' ')
+                aslist_str = answer_str
             return aslist_str
 
 # vim: expandtab tabstop=4 shiftwidth=4
