diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index aee081e..4f0f0ef 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -257,7 +257,7 @@
 		}
 	[] pt.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(?, ?, ?))) -> value sd {
 		setverdict(fail, "Invalid PCU Version/BTS Number received");
-		self.stop;
+		mtc.stop;
 		}
 }
 
@@ -276,7 +276,7 @@
 	[] as_pcu_info_ind(pt, pcu_conn_id, pcu_last_info);
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for PCU INFO_IND");
-		self.stop;
+		mtc.stop;
 		}
 	}
 }
@@ -316,7 +316,7 @@
 	[] RSL_CCHAN.receive(ASP_IPA_Event:{up_down := ASP_IPA_EVENT_UP});
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for ASP_IPA_EVENT_UP");
-		self.stop;
+		mtc.stop;
 		}
 	}
 	f_sleep(0.5);	/* workaround for OS#3000 */
@@ -389,7 +389,7 @@
 private altstep as_Tguard() runs on ConnHdlr {
 	[] g_Tguard.timeout {
 		setverdict(fail, "Tguard timeout");
-		self.stop;
+		mtc.stop;
 	}
 }
 
@@ -404,7 +404,7 @@
 							"", -1, -1, {udp:={}}, {});
 	if (not ispresent(res.connId)) {
 		setverdict(fail, "Could not connect to trx-control interface of trxcon, check your configuration");
-		self.stop;
+		mtc.stop;
 	}
 	g_bb_trxc_conn_id := res.connId;
 }
@@ -455,14 +455,14 @@
 		}
 	[] T.timeout {
 		setverdict(fail, "Timeout expecting " & id);
-		self.stop;
+		mtc.stop;
 		}
 	[not ignore_other] as_l1_sacch();
 	[not ignore_other] as_meas_res();
 	[not ignore_other] as_l1_dcch();
 	[not ignore_other] RSL.receive {
 		setverdict(fail, "Unexpected RSL message received");
-		self.stop;
+		mtc.stop;
 		}
 	[ignore_other] RSL.receive { repeat; }
 	}
@@ -550,6 +550,7 @@
 	alt {
 	[] RSL.receive(tr_RSL_CHAN_ACT_ACK(g_chan_nr)) {
 		setverdict(fail, "Unexpected CHAN ACT ACK on double activation");
+		mtc.stop;
 		}
 	[] RSL.receive(tr_RSL_CHAN_ACT_NACK(g_chan_nr)) {
 		setverdict(pass);
@@ -577,6 +578,7 @@
 		}
 	[] T.timeout {
 		setverdict(fail, "Timeout expecting RF_CHAN_REL_ACK");
+		mtc.stop;
 		}
 	}
 }
@@ -594,6 +596,7 @@
 	alt {
 	[] RSL.receive(tr_RSL_CHAN_ACT_ACK(g_chan_nr)) {
 		setverdict(fail, "Unexpected CHAN ACT ACK");
+		mtc.stop;
 		}
 	[] RSL.receive(tr_RSL_CHAN_ACT_NACK(g_chan_nr)) {
 		setverdict(pass);
@@ -667,6 +670,7 @@
 	alt {
 	[not exp] L1CTL.receive(tr_L1CTL_DATA_IND(g_chan_nr, tr_RslLinkID_SACCH(0))) {
 		setverdict(fail, "Received SACCH when not expecting it");
+		mtc.stop;
 		}
 	[not exp] T_sacch.timeout {
 		setverdict(pass);
@@ -676,6 +680,7 @@
 		}
 	[exp] T_sacch.timeout {
 		setverdict(fail, "Timeout waiting for SACCH on ", g_chan_nr);
+		mtc.stop;
 		}
 	[] L1CTL.receive { repeat; }
 	[] RSL.receive { repeat; }
@@ -740,7 +745,7 @@
 	[] L1CTL.receive { repeat; }
 	[] T_sacch.timeout {
 		setverdict(fail, "Timeout waiting for SACCH ", l3_exp);
-		self.stop;
+		mtc.stop;
 		}
 	}
 }
@@ -986,7 +991,7 @@
 		var GsmFrameNumber fn := f_L1CTL_RACH(L1CTL, oct2int(ra));
 		if (fn == fn_last) {
 			setverdict(fail, "Two RACH in same FN?!?");
-			self.stop;
+			mtc.stop;
 		}
 		fn_last := fn;
 
@@ -998,12 +1003,12 @@
 			}
 		[] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_CHAN_RQD(?, ?, ?))) {
 			setverdict(fail, "Unexpected CHAN RQD");
-			self.stop;
+			mtc.stop;
 			}
 		[] RSL_CCHAN.receive { repeat; }
 		[] T.timeout {
 			setverdict(fail, "Timeout waiting for CHAN RQD");
-			self.stop;
+			mtc.stop;
 			}
 		}
 	}
@@ -1024,7 +1029,7 @@
 		var GsmFrameNumber fn := f_L1CTL_RACH(L1CTL, oct2int(ra));
 		if (fn == fn_last) {
 			setverdict(fail, "Two RACH in same FN?!?");
-			self.stop;
+			mtc.stop;
 		}
 		fn_last := fn;
 	}
@@ -1055,7 +1060,7 @@
 							"", -1, -1, {udp:={}}, {});
 	if (not ispresent(res.connId)) {
 		setverdict(fail, "Could not connect to trx-control interface of trxcon, check your configuration");
-		self.stop;
+		mtc.stop;
 	}
 	g_bb_trxc_conn_id := res.connId;
 }
@@ -1079,6 +1084,7 @@
 		}
 	[not expect_pass] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_CHAN_RQD(ra, fn))) {
 		setverdict(fail, "RACH passed but was expected to be dropped: ", toffs256);
+		mtc.stop;
 		}
 	[] RSL_CCHAN.receive { repeat; }
 	[not expect_pass] T.timeout {
@@ -1086,6 +1092,7 @@
 		}
 	[expect_pass] T.timeout {
 		setverdict(fail, "Timeout waiting for CHAN RQD");
+		mtc.stop;
 		}
 	}
 }
@@ -1287,16 +1294,16 @@
 			repeat;
 		} else {
 			setverdict(fail, "Received unspecific MEAS RES ", rsl);
-			self.stop;
+			mtc.stop;
 		}
 		}
 	[] RSL.receive(tr_RSL_MEAS_RES(?)) -> value rsl {
 		setverdict(fail, "Received unexpected MEAS RES ", rsl);
-		self.stop;
+		mtc.stop;
 		}
 	[g_Tmeas_exp.running] g_Tmeas_exp.timeout {
 		setverdict(fail, "Didn't receive expected measurement result")
-		self.stop;
+		mtc.stop;
 		}
 }
 
@@ -1312,7 +1319,7 @@
 	case (RSL_ALG_ID_A5_7) { return 7; }
 	case else {
 		setverdict(fail, "Unknwon Algorithm ID");
-		self.stop;
+		mtc.stop;
 		}
 	}
 }
@@ -1328,7 +1335,7 @@
 	case (RSL_ALG_ID_A5_7) { return '110'B; }
 	case else {
 		setverdict(fail, "Unknwon Algorithm ID");
-		self.stop;
+		mtc.stop;
 		}
 	}
 }
@@ -1405,12 +1412,13 @@
 	[] as_l1_dcch();
 	[] L1CTL.receive { repeat; }
 	[g_Tmeas_exp.running] T.timeout {
-		/* as_meas_res() would have done setverdict(fail) / self.stop in case
+		/* as_meas_res() would have done setverdict(fail) / mtc.stop in case
 		 * of any earlier errors, so if we reach this timeout, we're good */
 		setverdict(pass);
 		}
 	[] T.timeout {
 		setverdict(fail, "No MEAS RES received at all");
+		mtc.stop;
 		}
 	}
 	f_rsl_chan_deact();
@@ -1494,6 +1502,7 @@
 	[] RSL.receive { repeat };
 	[] T.timeout {
 		setverdict(fail, "No CONN FAIL IND received");
+		mtc.stop;
 		}
 	}
 	f_rsl_chan_deact();
@@ -1639,6 +1648,7 @@
 			}
 		[not cfg.exp_overload]  RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_PAGING_LOAD_IND(0))) {
 			setverdict(fail, "Unexpected PCH Overload");
+			mtc.stop;
 			}
 		[cfg.exp_load_ind] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_PAGING_LOAD_IND)) {
 			log("Rx LOAD_IND");
@@ -1664,6 +1674,7 @@
 	[] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_PAGING_LOAD_IND)) { repeat; }
 	[] T_wait.timeout {
 		setverdict(fail, "Waiting for empty paging queue");
+		mtc.stop;
 		}
 	[] as_rsl_res_ind();
 	}
@@ -1830,7 +1841,7 @@
 		if (not match(rr, tr_IMM_ASS(42, ?, 5, ?, ?))) {
 			/* FIXME: Why are we seeing paging requests on PCH/AGCH? */
 			//setverdict(fail, "Unexpected IMM-ASS values on AGCH: ", rr);
-			//self.stop;
+			//mtc.stop;
 		} else {
 			num_rx := num_rx+1;
 		}
@@ -1843,6 +1854,7 @@
 	log("AGCH test: " & res_str);
 	if (num_rx + num_del != num_tx) {
 		setverdict(fail, "RX + DEL != TX ?!?: " & res_str);
+		mtc.stop
 	}
 	rx_ratio := int2float(num_rx) / int2float(num_tx);
 	if (rx_ratio < exp_pass*0.8 or rx_ratio > exp_pass*1.2) {
@@ -1850,6 +1862,7 @@
 	} else {
 		setverdict(pass);
 	}
+	f_shutdown();
 }
 
 /* send a long burst of 1000 IMM.ASS with 20ms spacing (50 per s); expect 75% of them to be deleted */
@@ -1903,6 +1916,7 @@
 function f_ensure_si_vec_contains(SystemInformationVectorPerTc arr, integer tc, RrMessageType key, boolean ext_bcch := false) {
 	if (not f_si_vecslot_contains(arr[tc], key, ext_bcch)) {
 		setverdict(fail, "No ", key, " in TC=", tc, "!");
+		mtc.stop;
 	}
 }
 
@@ -1922,7 +1936,7 @@
 	var integer count := 0;
 	if (sizeof(arr) < m) {
 		setverdict(fail, "Error: Insufficient SI in array");
-		self.stop;
+		mtc.stop;
 	}
 	for (var integer i:= 0; i < m; i := i + 1) {
 		var integer fn_mod51 := arr[i].frame_number mod 51;
@@ -1944,6 +1958,7 @@
 function f_ensure_si_vec_contains_n_of_m(SystemInformationVectorPerTc arr, integer tc, RrMessageType key, boolean ext_bcch := false, integer n, integer m) {
 	if (not f_si_vecslot_contains_n_of_m(arr[tc], key, ext_bcch, n, m)) {
 		setverdict(fail, "Not ", n, "/", m, " of ", key, " in TC=", tc, "!");
+		mtc.stop;
 	}
 }
 
@@ -1965,6 +1980,7 @@
 function f_ensure_si_vec_contains_only(SystemInformationVectorPerTc arr, integer tc, RrMessageType key, boolean ext_bcch := false) {
 	if (not f_si_vecslot_contains_only(arr[tc], key, ext_bcch)) {
 		setverdict(fail, "Not all ", key, " in TC=", tc, "!");
+		mtc.stop;
 	}
 }
 
@@ -1994,6 +2010,7 @@
 	for (i := 0; i < sizeof(si_per_tc); i := i + 1) {
 		if (sizeof(si_per_tc[i]) == 0) {
 			setverdict(fail, "No SI messages for TC=", i);
+			mtc.stop;
 		}
 	}
 	if (cfg.si1_present) {
@@ -2076,6 +2093,7 @@
 		}
 		if (f_si_vec_contains(si_per_tc, SYSTEM_INFORMATION_TYPE_13alt)) {
 			setverdict(fail, "Cannot have SI13alt and SI13");
+			mtc.stop;
 		}
 	}
 	if (cfg.si16_present or cfg.si17_present) {
@@ -2086,6 +2104,7 @@
 		}
 		if (f_si_vec_contains(si_per_tc, SYSTEM_INFORMATION_TYPE_22)) {
 			setverdict(fail, "Cannot have SI16/SI17 and SI22!");
+			mtc.stop;
 		}
 		if (not cfg.bcch_extended) {
 			testcase.stop("Error: SI16/SI17 requires BCCH Extd!");
@@ -2131,6 +2150,7 @@
 		}
 		if (f_si_vec_contains(si_per_tc, SYSTEM_INFORMATION_TYPE_13)) {
 			setverdict(fail, "Cannot have SI13alt and SI13");
+			mtc.stop;
 		}
 		if (not cfg.bcch_extended) {
 			f_ensure_si_vec_contains_n_of_m(si_per_tc, 4, SYSTEM_INFORMATION_TYPE_13alt, false, 1, 4);
@@ -2162,6 +2182,7 @@
 			f_ensure_si_vec_contains_n_of_m(si_per_tc, 4, SYSTEM_INFORMATION_TYPE_21, true, 1, 4);
 			if (f_si_vecslot_contains(si_per_tc[4], SYSTEM_INFORMATION_TYPE_21)) {
 				setverdict(fail, "Cannot have SI21 on BCCH Norm if BCCH Extd enabled!");
+				mtc.stop;
 			}
 		}
 	}
@@ -2176,6 +2197,7 @@
 		if (f_si_vec_contains(si_per_tc, SYSTEM_INFORMATION_TYPE_16) or
 		    f_si_vec_contains(si_per_tc, SYSTEM_INFORMATION_TYPE_17)) {
 			setverdict(fail, "Cannot have SI16/SI17 and SI22!");
+			mtc.stop;
 		}
 		if (not cfg.bcch_extended) {
 			testcase.stop("Error: SI22 requires BCCH Extd!");
@@ -2337,12 +2359,14 @@
 		}
 	[] RSL_CCHAN.receive(tr_RSL_UD(tr_RSL_ERROR_REPORT(?))) {
 		setverdict(fail, "Wrong cause in RSL ERR REP");
+		mtc.stop;
 		}
 	[] RSL_CCHAN.receive {
 		repeat;
 		}
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for RSL ERR REP");
+		mtc.stop;
 		}
 	}
 }
@@ -2489,7 +2513,7 @@
 	alt {
 	[] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RTS_REQ(bts_nr))) {
 		setverdict(fail, "PCU RTS.req before PDCH active?");
-		self.stop;
+		mtc.stop;
 		}
 	[] PCU.receive { repeat; }
 	[] T.timeout { }
@@ -2507,15 +2531,16 @@
 	[not exp_success] PCU.receive(t_SD_PCUIF(g_pcu_conn_id,
 						 tr_PCUIF_RTS_REQ(bts_nr, trx_nr, ts_nr))) {
 		setverdict(fail, "Unexpected RTS.req for supposedly failing activation");
-		self.stop;
+		mtc.stop;
 		}
 	[] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RTS_REQ)) {
 		setverdict(fail, "RTS.req for wrong TRX/TS");
-		self.stop;
+		mtc.stop;
 		}
 	[] PCU.receive { repeat; }
 	[exp_success] T.timeout {
 		setverdict(fail, "Timeout waiting for PCU RTS.req");
+		mtc.stop;
 		}
 	[not exp_success] T.timeout {
 		setverdict(pass);
@@ -2536,7 +2561,7 @@
 	alt {
 	[] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RTS_REQ(bts_nr, trx_nr, ts_nr))) {
 		setverdict(fail, "Received unexpected PCU RTS.req");
-		self.stop;
+		mtc.stop;
 		}
 	[] PCU.receive { repeat; }
 	[] T.timeout {
@@ -2607,7 +2632,7 @@
 	[] PCU.receive { repeat; }
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for SI13");
-		self.stop;
+		mtc.stop;
 		}
 	}
 }
@@ -2641,6 +2666,7 @@
 	[] PCU.receive { repeat; }
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for RTS.ind");
+		mtc.stop;
 		}
 	}
 }
@@ -2714,6 +2740,7 @@
 	[] L1CTL.receive { repeat; }
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for PCU-originated AGCH block on Um");
+		mtc.stop;
 		}
 	}
 }
@@ -2738,6 +2765,7 @@
 	[] L1CTL.receive { repeat; }
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for PCU-originated AGCH block on Um");
+		mtc.stop;
 		}
 	}
 }
@@ -2754,7 +2782,7 @@
 		var GsmFrameNumber fn := f_L1CTL_RACH(L1CTL, oct2int(ra));
 		if (fn == fn_last) {
 			setverdict(fail, "Two RACH in same FN?!?");
-			self.stop;
+			mtc.stop;
 		}
 		fn_last := fn;
 
@@ -2766,12 +2794,12 @@
 			}
 		[] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_RACH_IND)) {
 			setverdict(fail, "Unexpected RACH IND");
-			self.stop;
+			mtc.stop;
 			}
 		[] PCU.receive { repeat; }
 		[] T.timeout {
 			setverdict(fail, "Timeout waiting for RACH IND");
-			self.stop;
+			mtc.stop;
 			}
 		}
 	}
@@ -2810,12 +2838,12 @@
 			}
 		[] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_PAG_REQ)) {
 			setverdict(fail, "Unexpected PAGING REQ");
-			self.stop;
+			mtc.stop;
 			}
 		[] PCU.receive { repeat; }
 		[] T.timeout {
 			setverdict(fail, "Timeout waiting for PAGING REQ");
-			self.stop;
+			mtc.stop;
 			}
 		}
 	}
@@ -2837,7 +2865,7 @@
 	[] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {
 		if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '1'B) {
 			setverdict(fail, "PCUIF_INFO_IND PDCH_MASK not '1' after PDCH ACT");
-			self.stop;
+			mtc.stop;
 		}
 		}
 	[] PCU.receive { repeat; }
@@ -2858,7 +2886,7 @@
 	[] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {
 		if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '0'B) {
 			setverdict(fail, "PCUIF_INFO_IND PDCH_MASK not '0' after PDCH DEACT");
-			self.stop;
+			mtc.stop;
 		}
 		}
 	[] PCU.receive { repeat; }
@@ -3021,7 +3049,7 @@
 	[] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {
 		if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '1'B) {
 			setverdict(fail, "PCUIF_INFO_IND PDCH_MASK not '1' after PDCH ACT");
-			self.stop;
+			mtc.stop;
 		}
 		}
 	[] PCU.receive { repeat; }
@@ -3044,7 +3072,7 @@
 	[] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {
 		if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '0'B) {
 			setverdict(fail, "PCUIF_INFO_IND PDCH_MASK not '0' after PDCH DEACT");
-			self.stop;
+			mtc.stop;
 		}
 		}
 	[] PCU.receive { repeat; }
@@ -3130,7 +3158,7 @@
 	[] RSL.receive(tr_RSL_IPA_PDCH_ACT_NACK(g_chan_nr, ?));
 	[] RSL.receive(tr_RSL_IPA_PDCH_ACT_ACK(g_chan_nr, ?)) {
 		setverdict(fail, "Unexpected PDCH ACT ACK");
-		self.stop;
+		mtc.stop;
 		}
 	[] RSL.receive { repeat; }
 	}
@@ -3254,6 +3282,7 @@
 			setverdict(pass);
 		} else {
 			setverdict(fail, "Unexpected EST IND with L3 in ", tc);
+			mtc.stop;
 		}
 		}
 	[tc.l3 == ''O] RSL.receive(tr_RSL_EST_IND_NOL3(g_chan_nr, tc.link_id)) {
@@ -3261,10 +3290,12 @@
 			setverdict(pass);
 		} else {
 			setverdict(fail, "Unexpected EST IND without L3 in ", tc);
+			mtc.stop;
 		}
 		}
 	[tc.exp] T.timeout {
 		setverdict(fail, "Timeout waiting for EST IND");
+		mtc.stop;
 		}
 	[not tc.exp] T.timeout {
 		setverdict(pass);
@@ -3326,7 +3357,7 @@
 	[] L1CTL.receive { repeat; }
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for SABM");
-		self.stop;
+		mtc.stop;
 		}
 	}
 
@@ -3381,7 +3412,7 @@
 	alt {
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for LAPDm ", exp);
-		self.stop;
+		mtc.stop;
 		}
 	[] as_l1_exp_lapdm(exp);
 	}
@@ -3397,7 +3428,7 @@
 	[l3 == ''O] RSL.receive(tr_RSL_EST_IND_NOL3(g_chan_nr, link_id));
 	[] RSL.receive(tr_RSL_ERROR_IND(g_chan_nr, link_id, ?)) {
 		setverdict(fail, "Failing due to RSL_ERROR_IND");
-		self.stop;
+		mtc.stop;
 		}
 	[] RSL.receive { repeat; }
 	}
@@ -3613,6 +3644,7 @@
 		}
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for UNIT_DATA_IND");
+		mtc.stop;
 		}
 	[] RSL.receive { repeat; }
 	}
@@ -3723,12 +3755,13 @@
 		lf.ab := dec_LapdmFrameAB(enc);
 	} else {
 		setverdict(fail, "unsupported frame type");
-		self.stop;
+		mtc.stop;
 	}
 
 	/* check if decoder result matches expectation */
 	if (not match(lf, exp_match)) {
 		setverdict(fail, name, ": decoded LAPDm doesn't match");
+		mtc.stop;
 	} else {
 		log(name, ": matched");
 		setverdict(pass);
@@ -3738,6 +3771,7 @@
 	reenc := enc_LapdmFrame(lf);
 	if (enc != reenc) {
 		setverdict(fail, name, ": re-encoded LAPDm frame doesn't match");
+		mtc.stop;
 	} else {
 		setverdict(pass);
 	}
