diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 2897a0b..d71d3dc 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -113,14 +113,8 @@
 }
 
 private function f_shutdown_helper() runs on test_CT {
-	for (var integer i := 0; i < NUM_BTS; i := i+1) {
-		if (isbound(bts[i]) and isbound(bts[i].rsl)) {
-			f_ipa_rsl_stop(bts[i].rsl);
-		}
-	}
-	f_ipa_ctrl_stop();
-	all port.stop;
 	setverdict(pass);
+	mtc.stop;
 }
 
 private function f_legacy_bssap_reset() runs on test_CT {
@@ -199,7 +193,7 @@
 	[] IPA_RSL[i].receive { repeat }
 	[] T.timeout {
 		setverdict(fail, "Timeout RSL waiting for ASP_IPA_EVENT_ID_ACK");
-		self.stop;
+		mtc.stop;
 		}
 	}
 }
@@ -230,7 +224,7 @@
 		f_sleep(0.1);
 		if (not T.running) {
 			setverdict(fail, "Timeout waiting for oml-connection-state ", status);
-			self.stop;
+			mtc.stop;
 		}
 	}
 }
@@ -240,7 +234,7 @@
 	var BSSAP_N_UNITDATA_ind ud_ind;
 	[] T_guard.timeout {
 			setverdict(fail, "Timeout of T_guard");
-			self.stop;
+			mtc.stop;
 		}
 	/* always respond with RESET ACK to RESET */
 	[] BSSAP.receive(tr_BSSAP_UNITDATA_ind(?, ?, tr_BSSMAP_Reset)) -> value ud_ind {
@@ -253,7 +247,7 @@
 altstep no_bssmap_reset() runs on test_CT {
 	[] BSSAP.receive(tr_BSSAP_UNITDATA_ind(?, ?, tr_BSSMAP_Reset)) {
 		setverdict(fail, "unexpected BSSMAP Reset");
-		self.stop;
+		mtc.stop;
 	}
 }
 
@@ -340,7 +334,7 @@
 	[] IPA_RSL[bts_nr].receive { repeat; }
 	[] T.timeout {
 		setverdict(fail, "Timeout expecting ", t_rx);
-		self.stop;
+		mtc.stop;
 		}
 	}
 	return rx_rsl_ud.rsl;
@@ -1325,7 +1319,7 @@
 	alt {
 	[] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_PAGING_CMD(?))) {
 		setverdict(fail, "Received PAGING after LOAD_IND(0)");
-		self.stop;
+		mtc.stop;
 		}
 	[] T_retrans.timeout {
 		/* re-trnsmit the zero-space LOAD IND to avoid BSC 'auto credit' */
@@ -1404,15 +1398,15 @@
 	alt {
 	[] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_PAGING_CMD(?))) {
 		setverdict(fail, "Received PAGING after A-RESET");
-		self.stop;
+		mtc.stop;
 		}
 	[] IPA_RSL[1].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_PAGING_CMD(?))) {
 		setverdict(fail, "Received PAGING after A-RESET");
-		self.stop;
+		mtc.stop;
 		}
 	[] IPA_RSL[2].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_PAGING_CMD(?))) {
 		setverdict(fail, "Received PAGING after A-RESET");
-		self.stop;
+		mtc.stop;
 		}
 	[] T.timeout {
 		setverdict(pass);
@@ -1467,10 +1461,9 @@
 	}
 	[] IPA_RSL[0].receive { repeat }
 	[] T.timeout {
-		self.stop;
+		return false;
 		}
 	}
-
 	return false;
 }
 
@@ -1762,7 +1755,7 @@
 	}
 	case else {
 		setverdict(fail, "Unsupported codec ", a_elem);
-		self.stop;
+		mtc.stop;
 	}
 	}
 	return ret;
@@ -1835,7 +1828,7 @@
 	var RSL_IE_Body mode_ie;
 	if (f_rsl_find_ie(rsl, RSL_IE_CHAN_MODE, mode_ie) == false) {
 		setverdict(fail, "Couldn't find CHAN_MODE IE");
-		self.stop;
+		mtc.stop;
 	}
 	var template RSL_IE_Body t_mode_ie := f_rsl_chmod_tmpl_from_codec(g_pars.ass_codec_list.codecElements[0]);
 	if (not match(mode_ie, t_mode_ie)) {
@@ -1846,7 +1839,7 @@
 	if (g_pars.expect_mr_conf_ie != omit) {
 		if (f_rsl_find_ie(rsl, RSL_IE_MR_CONFIG, mr_conf) == false) {
 			setverdict(fail, "Missing MR CONFIG IE in RSL Chan Activ");
-			self.stop;
+			mtc.stop;
 		}
 		log("found RSL MR CONFIG IE: ", mr_conf);
 
@@ -1858,7 +1851,7 @@
 		if (f_rsl_find_ie(rsl, RSL_IE_MR_CONFIG, mr_conf) == true) {
 			log("found RSL MR CONFIG IE: ", mr_conf);
 			setverdict(fail, "Found MR CONFIG IE in RSL Chan Activ, expecting omit");
-			self.stop;
+			mtc.stop;
 		}
 	}
 }
@@ -1973,7 +1966,7 @@
 	alt {
 	[] BSSAP.receive(PDU_BSSAP:?) -> value bssap {
 		setverdict(fail, "Unexpected BSSMAP ", bssap);
-		self.stop;
+		mtc.stop;
 		}
 	[] T.timeout {
 		setverdict(pass);
@@ -2087,7 +2080,7 @@
 		ss_nr := chan_nr.u.sdcch8.sub_chan;
 	} else {
 		setverdict(fail, "Invalid ChanNr ", chan_nr);
-		self.stop;
+		mtc.stop;
 	}
 
 	var charstring cmd := "bts "&int2str(bts_nr)&" trx "&int2str(trx_nr)&
@@ -2337,7 +2330,7 @@
 	var charstring mode := f_ts_dyn_mode_get(bts_nr, trx_nr, ts_nr);
 	if (not match(mode, exp)) {
 		setverdict(fail, "Unexpected TS Mode: ", mode);
-		self.stop;
+		mtc.stop;
 	}
 }
 
diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn
index a82728a..102c30e 100644
--- a/bsc/MSC_ConnectionHandler.ttcn
+++ b/bsc/MSC_ConnectionHandler.ttcn
@@ -147,7 +147,7 @@
 		}
 	}
 	setverdict(fail, "Only 2 Connections per EP!");
-	self.stop;
+	mtc.stop;
 }
 
 /* Helper function to pick a specific connection by its cid. Since we reach out
@@ -160,7 +160,7 @@
 		}
 	}
 	setverdict(fail, "No Connection for ID ", cid);
-	self.stop;
+	mtc.stop;
 }
 
 /* altstep for handling of IPACC media related commands. Activated by as_Media() to test
@@ -189,7 +189,7 @@
 		b_unused := f_rsl_find_ie(rsl, RSL_IE_IPAC_CONN_ID, ie);
 		if (g_media.bts.conn_id != ie.ipa_conn_id) {
 			setverdict(fail, "IPA MDCX for unknown ConnId", rsl);
-			self.stop;
+			mtc.stop;
 		}
 		/* mandatory */
 		b_unused := f_rsl_find_ie(rsl, RSL_IE_IPAC_REMOTE_IP, ie);
@@ -233,7 +233,7 @@
 		b_unused := f_rsl_find_ie(rsl, RSL_IE_IPAC_CONN_ID, ie);
 		if (g_media.bts1.conn_id != ie.ipa_conn_id) {
 			setverdict(fail, "IPA MDCX for unknown ConnId", rsl);
-			self.stop;
+			mtc.stop;
 		}
 		/* mandatory */
 		b_unused := f_rsl_find_ie(rsl, RSL_IE_IPAC_REMOTE_IP, ie);
@@ -269,7 +269,7 @@
 		if (match(mgcp_cmd.line.ep, t_MGCP_EP_wildcard)) {
 			if (cid != 0) {
 				setverdict(fail, "MGCP wildcard EP only works in first CRCX");
-				self.stop;
+				mtc.stop;
 			}
 			/* we keep the endpoint name allocated during MediaState_init */
 		} else {
@@ -575,12 +575,12 @@
 	}
 	else {
 		setverdict(fail, "Unknown ChDesc!");
-		self.stop;
+		mtc.stop;
 	}
 
 	if (ch_desc.octet3 and4b '10'O == '10'O) {
 		setverdict(fail, "No support for Hopping");
-		self.stop;
+		mtc.stop;
 	} else {
 		var OCT2 concat := ch_desc.octet3 & ch_desc.octet4;
 		arfcn := oct2int(concat);
@@ -670,7 +670,7 @@
 			repeat;
 		} else {
 			setverdict(fail, "Unexpected L3 received", l3);
-			self.stop;
+			mtc.stop;
 		}
 		}
 	[st.rr_ass_cmpl_seen] RSL.receive(tr_RSL_REL_REQ(st.old_chan_nr, tr_RslLinkID_DCCH(0))) {
@@ -955,7 +955,7 @@
 	}
 	log("g_media ", g_media);
 	if (not isbound(bssap)) {
-		self.stop;
+		mtc.stop;
 	}
 
 	/* When the BSC detects that LCLS is possible it will cross the
@@ -1019,7 +1019,7 @@
 			repeat;
 		} else {
 			setverdict(fail, "Unexpected L3 received", l3);
-			self.stop;
+			mtc.stop;
 		}
 		}
 	[st.rr_ho_cmpl_seen] as_Media_ipacc();
