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;
 	}
 }
 
