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();
diff --git a/hlr/HLR_Tests.ttcn b/hlr/HLR_Tests.ttcn
index 51d45ba..753f92e 100644
--- a/hlr/HLR_Tests.ttcn
+++ b/hlr/HLR_Tests.ttcn
@@ -91,7 +91,7 @@
 private altstep as_Tguard() runs on test_CT {
 	[] g_Tguard.timeout {
 		setverdict(fail, "g_Tguard timeout");
-		self.stop;
+		mtc.stop;
 	}
 }
 
@@ -131,7 +131,7 @@
 		[legacy] GSUP.receive(ASP_IPA_Event:{up_down := ASP_IPA_EVENT_UP}) { }
 		[] T.timeout {
 			setverdict(fail, "No connection to GSUP Port");
-			self.stop;
+			mtc.stop;
 		}
 	}
 }
@@ -270,7 +270,7 @@
 	var charstring ret := f_vty_transceive_ret(pt, cmd);
 	if (not match(ret, exp_ret)) {
 		setverdict(fail, "Non-matching VTY response: ", ret);
-		self.stop;
+		mtc.stop;
 	}
 }
 
@@ -359,7 +359,7 @@
 	[] GSUP.receive { repeat; }
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for SAI response");
-		self.stop;
+		mtc.stop;
 		}
 	}
 	return ret;
@@ -405,7 +405,7 @@
 	[] GSUP.receive { repeat; }
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for UL response");
-		self.stop;
+		mtc.stop;
 		}
 	}
 	return ret;
@@ -443,7 +443,7 @@
 	[] GSUP.receive { repeat; }
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for PURGE response");
-		self.stop;
+		mtc.stop;
 		}
 	}
 	return ret;
diff --git a/mgw/MGCP_Test.ttcn b/mgw/MGCP_Test.ttcn
index 659d5f1..82ed608 100644
--- a/mgw/MGCP_Test.ttcn
+++ b/mgw/MGCP_Test.ttcn
@@ -71,7 +71,7 @@
 			res := MGCP_CodecPort_CtrlFunct.f_IPL4_connect(MGCP, mp_remote_ip, mp_remote_udp_port, mp_local_ip, mp_local_udp_port, 0, { udp := {} });
 			if (not ispresent(res.connId)) {
 				setverdict(fail, "Could not connect MGCP, check your configuration");
-				self.stop;
+				mtc.stop;
 			}
 			g_mgcp_conn_id := res.connId;
 
@@ -180,9 +180,15 @@
 		T.start;
 		alt {
 			[] MGCP.receive(mrt) -> value mrf { }
-			[] MGCP.receive(tr_MGCP_RecvFrom_R(?)) { setverdict(fail); }
+			[] MGCP.receive(tr_MGCP_RecvFrom_R(?)) {
+				setverdict(fail, "Response didn't match template");
+				mtc.stop;
+				}
 			[] MGCP.receive { repeat; }
-			[] T.timeout { setverdict(fail); }
+			[] T.timeout {
+				setverdict(fail, "Timeout waiting for response to ", cmd);
+				mtc.stop;
+				}
 		}
 		T.stop;
 
@@ -202,7 +208,8 @@
 				return str2hex(par.val);
 			}
 		}
-		setverdict(fail);
+		setverdict(fail, "Could not find conn id for MgcpReponse");
+		mtc.stop;
 		return '00000000'H;
 	}
 
@@ -390,12 +397,14 @@
 		   payload type should be visible in the SDP of the response. */
 		if (resp.sdp.media_list[0].media_field.fmts[0] != "0") {
 			setverdict(fail, "SDP contains unexpected codec");
+			mtc.stop;
 		}
 
 		/* See also OS#2658: We also expect the MGW to assign a port
 		   number to us. */
 		if (isbound(resp.sdp.media_list[0].media_field.ports.port_number) == false) {
 			setverdict(fail, "SDP does not contain a port number");
+			mtc.stop;
 		}
 	}
 
@@ -579,6 +588,7 @@
 		}
 		if (f_mgcp_find_param(resp_msg, "Z", ep_assigned) == false) {
 			setverdict(fail, "No SpecificEndpointName in MGCP response", resp);
+			mtc.stop;
 		}
 
 		/* clean-up */
@@ -611,6 +621,7 @@
 			}
 			if (f_mgcp_find_param(resp_msg, "Z", ep_assigned[i]) == false) {
 				setverdict(fail, "No SpecificEndpointName in MGCP response", resp);
+				mtc.stop;
 			}
 		}
 
@@ -920,6 +931,7 @@
 		stats[1] := f_rtpem_stats_get(RTPEM[1]);
 		if (not f_rtpem_stats_compare(stats[0], stats[1])) {
 			setverdict(fail, "RTP endpoint statistics don't match");
+			mtc.stop;
 		}
 		setverdict(pass);
 	}
@@ -1047,6 +1059,7 @@
 		stats[1] := f_rtpem_stats_get(RTPEM[1]);
 		if (not f_rtpem_stats_compare(stats[0], stats[1], tolerance)) {
 			setverdict(fail, "RTP endpoint statistics don't match");
+			mtc.stop;
 		}
 
 		setverdict(pass);
@@ -1092,10 +1105,12 @@
 		stats[0] := f_rtpem_stats_get(RTPEM[0]);
 		if (stats[0].num_pkts_rx_err_disabled != 0) {
 			setverdict(fail, "received packets from MGW on recvonly connection");
+			mtc.stop;
 		}
 		stats[1] := f_rtpem_stats_get(RTPEM[1]);
 		if (stats[1].num_pkts_rx_err_disabled != 0) {
 			setverdict(fail, "received packets from MGW on recvonly connection");
+			mtc.stop;
 		}
 
 		/* The second leg starts transmitting a little later */
@@ -1104,10 +1119,12 @@
 		stats[0] := f_rtpem_stats_get(RTPEM[0]);
 		if (stats[0].num_pkts_rx_err_disabled != 0) {
 			setverdict(fail, "received packets from MGW on recvonly connection");
+			mtc.stop;
 		}
 		stats[1] := f_rtpem_stats_get(RTPEM[1]);
 		if (stats[1].num_pkts_rx_err_disabled != 0) {
 			setverdict(fail, "received packets from MGW on recvonly connection");
+			mtc.stop;
 		}
 
 		/* The first leg will now be switched into bidirectional
@@ -1117,10 +1134,12 @@
 		stats[0] := f_rtpem_stats_get(RTPEM[0]);
 		if (stats[1].num_pkts_rx_err_disabled != 0) {
 			setverdict(fail, "received packets from MGW on recvonly connection");
+			mtc.stop;
 		}
 		stats[1] := f_rtpem_stats_get(RTPEM[1]);
 		if (stats[1].num_pkts_rx_err_disabled != 0) {
 			setverdict(fail, "received packets from MGW on recvonly connection");
+			mtc.stop;
 		}
 
 		/* When the second leg is switched into bidirectional mode
@@ -1142,11 +1161,13 @@
 		temp := stats[0].num_pkts_tx - num_pkts_tx[0] - stats[1].num_pkts_rx;
 		if (temp > 3 or temp < -3) {
 			setverdict(fail, "number of packets not within normal parameters");
+			mtc.stop;
 		}
 
 		temp := stats[1].num_pkts_tx - num_pkts_tx[1] - stats[0].num_pkts_rx;
 		if (temp > 3 or temp < -3) {
 			setverdict(fail, "number of packets not within normal parameters");
+			mtc.stop;
 		}
 
 		/* Tear down */
@@ -1197,6 +1218,7 @@
 		stats[1] := f_rtpem_stats_get(RTPEM[1]);
 		if (not f_rtpem_stats_compare(stats[0], stats[1])) {
 			setverdict(fail, "RTP endpoint statistics don't match");
+			mtc.stop;
 		}
 
 		setverdict(pass);
@@ -1254,10 +1276,12 @@
 		stats[1] := f_rtpem_stats_get(RTPEM[1]);
 		if (not f_rtpem_stats_compare(stats[0], stats[1], 5)) {
 			setverdict(fail, "RTP endpoint statistics don't match");
+			mtc.stop;
 		}
 		stats[2] := f_rtpem_stats_get(RTPEM[2]);
 		if (stats[2].num_pkts_rx_err_disabled != 0) {
 			setverdict(fail, "received packets on old leg after handover");
+			mtc.stop;
 		}
 
 		setverdict(pass);
diff --git a/mgw/RTP_Endpoint.ttcn b/mgw/RTP_Endpoint.ttcn
index 3c939a2..c73aa58 100644
--- a/mgw/RTP_Endpoint.ttcn
+++ b/mgw/RTP_Endpoint.ttcn
@@ -111,7 +111,7 @@
 					sub.local_name, sub.local_port, sub.connection_id, { udp := {} });
 		if (not ispresent(res.connId)) {
 			setverdict(fail, "Could not connect RTP, check your configuration");
-			self.stop;
+			mtc.stop;
 		}
 		/* connect without previous bind: save conenction id allocated by IPL4asp */
 		if (sub.connection_id == -1) {
@@ -136,7 +136,7 @@
 		res := f_IPL4_listen(RTP, sub.local_name, sub.local_port, { udp := {} });
 		if (not ispresent(res.connId)) {
 			setverdict(fail, "Could not listen to RTP, check your configuration");
-			self.stop;
+			mtc.stop;
 		}
 		sub.connection_id := res.connId;
 	}
diff --git a/msc/BSC_ConnectionHandler.ttcn b/msc/BSC_ConnectionHandler.ttcn
index 803cb4d..4e02d6c 100644
--- a/msc/BSC_ConnectionHandler.ttcn
+++ b/msc/BSC_ConnectionHandler.ttcn
@@ -109,7 +109,7 @@
 private altstep as_Tguard() runs on BSC_ConnHdlr {
 	[] g_Tguard.timeout {
 		setverdict(fail, "Tguard timeout");
-		self.stop;
+		mtc.stop;
 	}
 }
 
@@ -183,7 +183,7 @@
 	[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_CONF_IND) {}
 	[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
 			setverdict(fail, "DISC.ind from SCCP");
-			self.stop;
+			mtc.stop;
 		}
 	}
 }
@@ -294,7 +294,7 @@
 			}
 		[] BSSAP.receive(tr_BSSMAP_CipherModeCmd(?, g_pars.vec.kc)) {
 			setverdict(fail, "Wrong ciphering algorithm mask in CiphModCmd");
-			self.stop;
+			mtc.stop;
 			}
 		}
 		/* FIXME: Send the best available algorithm */
@@ -331,7 +331,7 @@
 			if (not ispresent(lu_acc.mobileIdentityTLV) or
 			    not ischosen(lu_acc.mobileIdentityTLV.mobileIdentityLV.mobileIdentityV.oddEvenInd_identity.tmsi_ptmsi)) {
 				setverdict(fail, "Expected TMSI but no TMSI was allocated");
-				self.stop;
+				mtc.stop;
 			} else {
 				g_pars.tmsi := lu_acc.mobileIdentityTLV.mobileIdentityLV.mobileIdentityV.oddEvenInd_identity.tmsi_ptmsi.octets;
 				BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_TmsiRealloc_Cmpl));
@@ -340,13 +340,13 @@
 			if (ispresent(lu_acc.mobileIdentityTLV) and
 			    ischosen(lu_acc.mobileIdentityTLV.mobileIdentityLV.mobileIdentityV.oddEvenInd_identity.tmsi_ptmsi)) {
 				setverdict(fail, "Expected no TMSI but TMSI was allocated");
-				self.stop;
+				mtc.stop;
 			}
 		}
 		}
 	[] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej)) {
 		setverdict(fail, "Expected LU ACK, but received LU REJ");
-		self.stop;
+		mtc.stop;
 		}
 	}
 	/* FIXME: there could be pending SMS or other common procedures by the MSC, let's ignore them */
@@ -695,7 +695,7 @@
 	[] MNCC.receive(tr_MNCC_START_DTMF_ind(cpars.mncc_callref, "2")) {}
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for START_DTMF_ind");
-		self.stop;
+		mtc.stop;
 		}
 	}
 
@@ -704,7 +704,7 @@
 	alt {
 	[] MNCC.receive(tr_MNCC_START_DTMF_ind(cpars.mncc_callref, "2")) {
 		setverdict(fail, "Received duplicate START_DTMF_ind");
-		self.stop;
+		mtc.stop;
 		}
 	[] T.timeout { }
 	}
@@ -716,7 +716,7 @@
 	[] MNCC.receive(tr_MNCC_START_DTMF_ind(cpars.mncc_callref, "3")) { }
 	[] T.timeout {
 		setverdict(fail, "Received duplicate START_DTMF_ind");
-		self.stop;
+		mtc.stop;
 		}
 	}
 
@@ -732,13 +732,13 @@
 			}
 		[] BSSAP.receive {
 			setverdict(fail, "Unexpected BSSMAP while waiting for SCCP Release");
-			self.stop;
+			mtc.stop;
 			}
 		}
 		}
 	[] BSSAP.receive {
 		setverdict(fail, "Unexpected BSSMAP while waiting for ClearCommand");
-		self.stop;
+		mtc.stop;
 		}
 }
 
@@ -750,7 +750,7 @@
 	[] as_clear_cmd_compl_disc(t) { }
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for ClearCommand/Release");
-		self.stop;
+		mtc.stop;
 		}
 	}
 }
@@ -808,7 +808,7 @@
 private altstep as_other_sms() runs on BSC_ConnHdlr {
 	[] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_SMS(?, ?, ?), ?)) {
 		setverdict(fail, "Unexpected SMS related PDU from MSC");
-		self.stop;
+		mtc.stop;
 	}
 }
 
diff --git a/msc/MSC_Tests.ttcn b/msc/MSC_Tests.ttcn
index a18b9b0..161744c 100644
--- a/msc/MSC_Tests.ttcn
+++ b/msc/MSC_Tests.ttcn
@@ -133,7 +133,7 @@
 private altstep as_Tguard_direct() runs on MTC_CT {
 	[] Tguard_direct.timeout {
 		setverdict(fail, "Tguard timeout");
-		self.stop;
+		mtc.stop;
 	}
 }
 
@@ -213,7 +213,7 @@
 		[] GSUP_IPA_EVENT.receive(t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_UP)) { }
 		[] T.timeout {
 			setverdict(fail, "No connection to GSUP Port");
-			self.stop
+			mtc.stop
 		}
 	}
 }
@@ -226,7 +226,7 @@
 	g_initialized := true;
 
 	if (num_bsc > NUM_BSC) {
-		setverdict(fail, "excess number of BSC instances requested");
+		testcase.stop("excess number of BSC instances requested");
 	}
 
 	for (var integer i := 0; i < num_bsc; i := i + 1) {
@@ -234,7 +234,7 @@
 			f_bssap_init(g_bssap[i], mp_bssap_cfg[i], "MSC_Test_" & int2str(i), BSC_BssmapOps);
 			f_bssap_start(g_bssap[i]);
 		} else {
-			setverdict(fail, "missing BSSAP configuration");
+			testcase.stop("missing BSSAP configuration");
 		}
 	}
 
@@ -529,7 +529,7 @@
 			}
 		[] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Acc)) {
 			setverdict(fail, "Expecting LU REJ, but got ACCEPT");
-			self.stop;
+			mtc.stop;
 		}
 	}
 	f_expect_clear();
@@ -558,7 +558,7 @@
 			}
 		[] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Acc)) {
 			setverdict(fail, "Expecting LU REJ, but got ACCEPT");
-			self.stop;
+			mtc.stop;
 		}
 	}
 	f_expect_clear();
@@ -605,11 +605,18 @@
 	alt {
 	[] BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_REJ)) { }
 	//[] BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_ACC)) { }
-	[] BSSAP.receive { setverdict(fail, "Received unexpected BSSAP"); }
+	[] BSSAP.receive {
+		setverdict(fail, "Received unexpected BSSAP");
+		mtc.stop;
+		}
 	[] GSUP.receive(tr_GSUP_UL_REQ(g_pars.imsi)) {
 		setverdict(fail, "Unexpected GSUP UL REQ");
+		mtc.stop;
 		}
-	[] T.timeout { setverdict(fail, "Timeout waiting for CM SERV REQ"); }
+	[] T.timeout {
+		setverdict(fail, "Timeout waiting for CM SERV REQ");
+		mtc.stop;
+		}
 	}
 
 	f_expect_clear();
@@ -730,6 +737,7 @@
 	/* See https://osmocom.org/issues/2862 */
 	[] BSSAP.receive(tr_BSSMAP_ClearCommand) {
 			setverdict(fail, "Got a second Clear Command, only one expected");
+			mtc.stop;
 			repeat;
 		}
 	[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {}
@@ -840,6 +848,7 @@
 		}
 	[] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej)) {
 		setverdict(fail, "Expected LU ACK, but received REJ");
+		mtc.stop;
 		}
 	}
 
@@ -1127,7 +1136,7 @@
 	[] as_clear_cmd_compl_disc();
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for ClearCommand or SCCP Release");
-		self.stop;
+		mtc.stop;
 		}
 	}
 	setverdict(pass);
@@ -1161,7 +1170,7 @@
 	[] as_clear_cmd_compl_disc();
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for ClearCommand or SCCP Release");
-		self.stop;
+		mtc.stop;
 		}
 	}
 	setverdict(pass);
@@ -1305,7 +1314,10 @@
 	timer T := 30.0;
 	T.start;
 	alt {
-	[] T.timeout { setverdict(fail, "Timeout waiting for channel release"); self.stop; }
+	[] T.timeout {
+		setverdict(fail, "Timeout waiting for channel release");
+		mtc.stop;
+		}
 	[] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_RELEASE(cpars.transaction_id))) {
 		BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_REL_COMPL(cpars.transaction_id)));
 		repeat;
@@ -1317,7 +1329,10 @@
 	 * the current implementation, there is no recovery mechanism implemented
 	 * and a DLCX can not be performed as the MSC does not know a specific
 	 * endpoint yet. */
-	[] MGCP.receive { setverdict(fail, "Unexpected MGCP message"); self.stop; }
+	[] MGCP.receive {
+		setverdict(fail, "Unexpected MGCP message");
+		mtc.stop;
+		}
 	[] as_clear_cmd_compl_disc();
 	}
 }
@@ -1405,7 +1420,10 @@
 	timer T := 30.0;
 	T.start;
 	alt {
-	[] T.timeout { setverdict(fail, "Timeout waiting for channel release"); self.stop; }
+	[] T.timeout {
+		setverdict(fail, "Timeout waiting for channel release");
+		mtc.stop;
+		}
 	[] BSSAP.receive { repeat; }
 	[] MNCC.receive { repeat; }
 	[] GSUP.receive { repeat; }
@@ -1449,7 +1467,10 @@
 	timer T := 190.0;
 	T.start;
 	alt {
-	[] T.timeout { setverdict(fail, "Timeout waiting for T310"); self.stop; }
+	[] T.timeout {
+		setverdict(fail, "Timeout waiting for T310");
+		mtc.stop;
+		}
 	[] MNCC.receive(tr_MNCC_DISC_ind(cpars.mncc_callref)) {
 		MNCC.send(ts_MNCC_REL_req(cpars.mncc_callref, valueof(ts_MNCC_cause(23))));
 		}
@@ -1496,7 +1517,7 @@
 	[] GSUP.receive(tr_GSUP_CL_RES(g_pars.imsi)) { }
 	[] GSUP.receive(tr_GSUP_CL_ERR(g_pars.imsi)) {
 		setverdict(fail, "Received GSUP Location Cancel Error");
-		self.stop;
+		mtc.stop;
 		}
 	}
 
@@ -1508,7 +1529,7 @@
 	[] BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_REJ)) { }
 	[] BSSAP.receive {
 		setverdict(fail, "Received unexpected BSSAP instead of CM SERV REJ");
-		self.stop;
+		mtc.stop;
 		}
 	}
 	setverdict(pass);
@@ -1581,11 +1602,11 @@
 		}
 	[] BSSAP.receive(tr_BSSMAP_CipherModeCmd(?,?)) {
 		setverdict(fail, "CipherModeCommand despite no A5 intersection");
-		self.stop;
+		mtc.stop;
 		}
 	[] BSSAP.receive {
 		setverdict(fail, "Unknown/unexpected BSSAP received");
-		self.stop;
+		mtc.stop;
 		}
 	}
 	setverdict(pass);
@@ -1648,11 +1669,11 @@
 		}
 	[] BSSAP.receive(tr_BSSMAP_CipherModeCmd(?,?)) {
 		setverdict(fail, "CipherModeCommand despite no A5 intersection");
-		self.stop;
+		mtc.stop;
 		}
 	[] BSSAP.receive {
 		setverdict(fail, "Unknown/unexpected BSSAP received");
-		self.stop;
+		mtc.stop;
 		}
 	}
 	setverdict(pass);
@@ -1764,6 +1785,7 @@
 	[reset_ack_seen == true] T.timeout { setverdict(pass) }
 	[reset_ack_seen == false] T.timeout {
 		setverdict(fail, "no BSSMAP RESET ACK seen!");
+		mtc.stop;
 	}
 	}	
 }
@@ -1999,7 +2021,7 @@
 	case ('110'B) { return abbreviated; }
 	}
 	setverdict(fail, "Unknown TON ", ton);
-	self.stop;
+	mtc.stop;
 }
 /* convert GSM L3 NPI to SMPP_NPI enum */
 function f_sm_npi_from_gsm(BIT4 npi) return SMPP_NPI {
@@ -2014,7 +2036,7 @@
 	case ('1010'B) { return ermes; }
 	}
 	setverdict(fail, "Unknown NPI ", npi);
-	self.stop;
+	mtc.stop;
 }
 
 /* build a SMPP_SM from SmsParameters */
@@ -2154,7 +2176,7 @@
 		}
 	[] BSSAP.receive {
 		setverdict(fail, "Unknown/unexpected BSSAP received");
-		self.stop;
+		mtc.stop;
 		}
 	}
 
@@ -2217,7 +2239,7 @@
 		}
 	[] BSSAP.receive {
 		setverdict(fail, "Unknown/unexpected BSSAP received");
-		self.stop;
+		mtc.stop;
 		}
 	}
 
diff --git a/pcu/GPRS_TBF.ttcn b/pcu/GPRS_TBF.ttcn
index 3e8658e..951cf4a 100644
--- a/pcu/GPRS_TBF.ttcn
+++ b/pcu/GPRS_TBF.ttcn
@@ -121,7 +121,7 @@
 	var integer idx := n - us.et.v_a;
 	if (idx < 0 or idx > lengthof(us.et.v_b)) {
 		setverdict(fail, "UlTbf: Cannot ACK ", n, " while V(A) is ", us.et.v_a);
-		self.stop;
+		mtc.stop;
 	}
 	/* set the bit in the acknowledge state array */
 	us.et.v_b[idx] := '1'B;
@@ -411,7 +411,7 @@
 
 function f_dl_tbf_is_in_window(integer bsn) return boolean {
 	setverdict(fail, "pleaes implement me");
-	self.stop;
+	mtc.stop;
 }
 
 function f_dl_tbf_is_received(inout DlTbfState ds, integer bsn) return boolean {
@@ -471,7 +471,7 @@
 	var integer bsn := db.mac_hdr.hdr_ext.bsn;
 	if (db.mac_hdr.hdr_ext.tfi != ds.tfi) {
 		setverdict(fail, "Unexpected TFI of DL Data Block ", db);
-		self.stop;
+		mtc.stop;
 	}
 	f_dl_tbf_mark_received(ds, bsn);
 	if (ds.tbf.ack_mode) {
@@ -480,7 +480,7 @@
 		 * SNS */
 		if (bsn < ds.er.v_q or bsn > ds.er.v_q + ds.tbf.ws) {
 			setverdict(fail, "Unexpected BSN outside of window ", bsn);
-			self.stop;
+			mtc.stop;
 		}
 
 		/* In RLC acknowledged mode, the value of V(Q) shall be updated when the RLC
diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn
index 6e36f68..dfd380d 100644
--- a/pcu/PCU_Tests.ttcn
+++ b/pcu/PCU_Tests.ttcn
@@ -131,7 +131,8 @@
 		log("NS Expected: ", b);
 
 		if (a != b) {
-			setverdict(fail);
+			setverdict(fail, "Values mismatch", a, b);
+			mtc.stop;
 		} else {
 			setverdict(pass);
 		}
@@ -188,7 +189,10 @@
 		alt {
 			[] BSSGP.receive(t_BssgpStsInd(?, ?, BVC_S_UNBLOCKED)) { }
 			[] BSSGP.receive { repeat; }
-			[] T.timeout { setverdict(fail); }
+			[] T.timeout {
+				setverdict(fail, "Timeout establishing BSSGP connection");
+				mtc.stop;
+			}
 		}
 		T.stop
 		log("BSSGP successfully initialized");
@@ -233,7 +237,7 @@
 			[] L1.receive { repeat; }
 			[] T.timeout {
 				setverdict(fail, "Timeout establishing UL TBF");
-				self.stop;
+				mtc.stop;
 			}
 		}
 		T.stop;
@@ -275,6 +279,7 @@
 		}
 	[] T.timeout {
 		setverdict(fail, "Timeout waiting for ", bd_exp);
+		mtc.stop;
 		}
 	}
 }
@@ -365,7 +370,8 @@
 		log("LLC Expected: ", b);
 
 		if (a != b) {
-			setverdict(fail);
+			setverdict(fail, "LLC input ", b, " != expected ", a);
+			mtc.stop;
 		} else {
 			setverdict(pass);
 		}
@@ -437,7 +443,10 @@
 		log("Dec: ", udb);
 		var octetstring enc := enc_RlcmacUlBlock(udb);
 		log("Enc: ", enc);
-		if (enc != buf) { setverdict(fail, "Re-encoded data doesn't equal input data"); }
+		if (enc != buf) {
+			setverdict(fail, "Re-encoded data doesn't equal input data");
+			mtc.stop;
+		}
 	}
 
 	function f_rlcmac_uld_decenc(in octetstring buf) {
@@ -447,7 +456,10 @@
 		log("Dec: ", udb);
 		var octetstring enc := enc_RlcmacUlDataBlock(udb);
 		log("Enc: ", enc);
-		if (enc != buf) { setverdict(fail, "Re-encoded data doesn't equal input data"); }
+		if (enc != buf) {
+			setverdict(fail, "Re-encoded data doesn't equal input data");
+			mtc.stop;
+		}
 	}
 
 	function f_rlcmac_dld_decenc(in octetstring buf) {
@@ -457,7 +469,10 @@
 		log("Dec: ", udb);
 		var octetstring enc := enc_RlcmacDlDataBlock(udb);
 		log("Enc: ", enc);
-		if (enc != buf) { setverdict(fail, "Re-encoded data doesn't equal input data"); }
+		if (enc != buf) {
+			setverdict(fail, "Re-encoded data doesn't equal input data");
+			mtc.stop;
+		}
 	}
 
 
@@ -561,7 +576,7 @@
 		[] L1.receive { repeat };
 		[] T.timeout {
 			setverdict(fail, "Timeout waiting for IMM ASS")
-			self.stop;
+			mtc.stop;
 			}
 		}
 		T.stop;
diff --git a/selftest/Selftest.ttcn b/selftest/Selftest.ttcn
index 826d244..8411b3d 100644
--- a/selftest/Selftest.ttcn
+++ b/selftest/Selftest.ttcn
@@ -57,7 +57,7 @@
 	res := IPL4asp_PortType.f_IPL4_connect(IP, "127.0.0.1", 55555, "", -1,-1, {tcp:={}});
 	if (not ispresent(res.connId)) {
 		setverdict(fail, "Could not connect to TCP port, check your configuration");
-		self.stop;
+		mtc.stop;
 	}
 	g_ip_conn_id := res.connId;
 }
diff --git a/sgsn/SGSN_Tests.ttcn b/sgsn/SGSN_Tests.ttcn
index 78086af..0a20dd6 100644
--- a/sgsn/SGSN_Tests.ttcn
+++ b/sgsn/SGSN_Tests.ttcn
@@ -134,7 +134,7 @@
 		[] GSUP_IPA_EVENT.receive(t_ASP_IPA_EVT_UD(ASP_IPA_EVENT_UP)) { }
 		[] T.timeout {
 			setverdict(fail, "No connection to GSUP Port");
-			self.stop;
+			mtc.stop;
 		}
 	}
 }
@@ -240,7 +240,7 @@
 private altstep as_Tguard() runs on BSSGP_ConnHdlr {
 	[] g_Tguard.timeout {
 		setverdict(fail, "Tguard timeout");
-		self.stop;
+		mtc.stop;
 	}
 }
 
@@ -385,19 +385,19 @@
 	if (not (g_pars.bssgp_cell_id.ra_id.lai.mcc_mnc == aa_plmn)) {
 		  setverdict(fail, "mismatching PLMN in Attach Accept: " & hex2str(aa_plmn)
 				   & "; expected " & hex2str(g_pars.bssgp_cell_id.ra_id.lai.mcc_mnc));
-		  self.stop;
+		  mtc.stop;
 	}
 	g_pars.ra := aa.routingAreaIdentification;
 	if (ispresent(aa.allocatedPTMSI)) {
 		if (not g_pars.net.expect_ptmsi) {
 			setverdict(fail, "unexpected P-TMSI allocation");
-			self.stop;
+			mtc.stop;
 		}
 		f_upd_ptmsi_and_tlli(aa.allocatedPTMSI.mobileIdentityLV.mobileIdentityV.oddEvenInd_identity.tmsi_ptmsi.octets);
 	}
 	if (ispresent(aa.msIdentity)) {
 		setverdict(fail, "unexpected TMSI allocation in non-combined attach");
-		self.stop;
+		mtc.stop;
 	}
 	/* P-TMSI.sig */
 	if (ispresent(aa.ptmsiSignature)) {
@@ -414,13 +414,13 @@
 	if (ispresent(ra.allocatedPTMSI)) {
 		if (not g_pars.net.expect_ptmsi) {
 			setverdict(fail, "unexpected P-TMSI allocation");
-			self.stop;
+			mtc.stop;
 		}
 		f_upd_ptmsi_and_tlli(ra.allocatedPTMSI.mobileIdentityLV.mobileIdentityV.oddEvenInd_identity.tmsi_ptmsi.octets);
 	}
 	if (ispresent(ra.msIdentity)) {
 		setverdict(fail, "unexpected TMSI allocation in non-combined attach");
-		self.stop;
+		mtc.stop;
 	}
 	/* P-TMSI.sig */
 	if (ispresent(ra.ptmsiSignature)) {
@@ -540,6 +540,7 @@
 		}
 	[] BSSGP.receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {
 		setverdict(fail, "Wrong Attach Reject Cause");
+		mtc.stop;
 		}
 	}
 }
@@ -608,6 +609,7 @@
 	[] BSSGP.receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?))) -> value bd {
 		f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);
 		setverdict(fail);
+		mtc.stop;
 		}
 	}
 }
@@ -637,6 +639,7 @@
 	[] BSSGP.receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT('001'B, ?, ?))) -> value bd {
 		f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);
 		setverdict(fail);
+		mtc.stop;
 		}
 	}
 }
@@ -718,6 +721,7 @@
 		}
 	[] BSSGP.receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT(*, *, *))) {
 		setverdict(fail);
+		mtc.stop;
 		}
 	}
 }
@@ -771,6 +775,7 @@
 		}
 	[] BSSGP.receive(tr_BD_L3_MT(tr_GMM_RAU_REJECT)) {
 		setverdict(fail, "Unexpected RAU Reject");
+		mtc.stop;
 		}
 	[] BSSGP.receive { repeat; }
 	}
@@ -796,10 +801,12 @@
 	alt {
 	[not expect_purge] GSUP.receive(tr_GSUP_PURGE_MS_REQ(?)) {
 		setverdict(fail, "Unexpected GSUP PURGE MS for unregistered TLLI");
+		mtc.stop;
 		}
 	[power_off] BSSGP.receive(tr_BD_L3_MT(tr_GMM_DET_ACCEPT_MT)) -> value bd {
 		g_pars.ra := omit;
 		setverdict(fail, "Unexpected ATTACH ACCEPT in no-power-off DETACH");
+		mtc.stop;
 		/* TODO: check if any PDP contexts are deactivated on network side? */
 		}
 	[power_off] T.timeout {
@@ -930,9 +937,11 @@
 		}
 	[exp_rej] BSSGP.receive(tr_BD_L3_MT(tr_SM_ACT_PDP_ACCEPT)) {
 		setverdict(fail, "Unexpected PDP CTX ACT ACC");
+		mtc.stop;
 		}
 	[not exp_rej] BSSGP.receive(tr_BD_L3_MT(tr_SM_ACT_PDP_REJ(apars.tid, ?))) {
 		setverdict(fail, "Unexpected PDP CTX ACT FAIL");
+		mtc.stop;
 		}
 	[not exp_rej] BSSGP.receive(tr_BD_L3_MT(tr_SM_ACT_PDP_ACCEPT(apars.tid, apars.sapi))) {
 		setverdict(pass);
@@ -1159,9 +1168,11 @@
 		}
 	[] GTP.receive(tr_GTPC_MsgType(?, createPDPContextRequest, ?)) {
 		setverdict(fail, "Unexpected GTP PDP CTX ACT");
+		mtc.stop;
 		}
 	[] BSSGP.receive(tr_BD_L3_MT(tr_SM_ACT_PDP_ACCEPT(?, ?))) {
 		setverdict(fail, "Unexpected SM PDP CTX ACT ACK");
+		mtc.stop;
 		}
 	[] BSSGP.receive { repeat; }
 	}
@@ -1403,10 +1414,11 @@
 		[] BSSGP.receive(tr_BD_L3_MT(tr_GMM_DET_REQ_MT(*, *, *))) {
 			T.stop;
 			setverdict(fail, "Unexpected GMM Detach Request");
+			mtc.stop;
 		}
 		[] T.timeout {
 			setverdict(pass);
-			self.stop;
+			mtc.stop;
 		}
 		[] BSSGP.receive {
 			repeat;
@@ -1569,6 +1581,7 @@
 	}
 	if (count_req != 5) {
 		setverdict(fail, "Did not received GMM ID Request Type IMEI 5 times!");
+		mtc.stop;
 	}
 	setverdict(pass);
 }
@@ -1616,6 +1629,7 @@
 	}
 	if (count_req != 5) {
 		setverdict(fail, "Did not received GMM ID Request Type IMSI 5 times!");
+		mtc.stop;
 	}
 	setverdict(pass);
 }
@@ -1675,6 +1689,7 @@
 	alt {
 		[] BSSGP.receive(tr_BD_L3_MT(tr_GMM_ATTACH_REJECT(?))) {
 			setverdict(fail, "Received unexpected GMM Attach REJECT");
+			mtc.stop;
 		}
 		[] BSSGP.receive(tr_BD_L3_MT(tr_GMM_ATTACH_ACCEPT(*, *, *))) -> value bd {
 			f_process_attach_accept(bd.l3_mt.msgs.gprs_mm.attachAccept);
@@ -1730,6 +1745,7 @@
 	}
 	if (count_req != 5) {
 		setverdict(fail, "Did not received GMM Attach Complete.");
+		mtc.stop;
 	}
 	setverdict(pass);
 }
diff --git a/sip/SIP_Tests.ttcn b/sip/SIP_Tests.ttcn
index f690dc7..24b3622 100644
--- a/sip/SIP_Tests.ttcn
+++ b/sip/SIP_Tests.ttcn
@@ -131,7 +131,7 @@
 private altstep as_Tguard() runs on ConnHdlr {
 	[] g_Tguard.timeout {
 		setverdict(fail, "Tguard timeout");
-		self.stop;
+		mtc.stop;
 	}
 }
 
diff --git a/sysinfo/Test.ttcn b/sysinfo/Test.ttcn
index 02a2279..c35da91 100644
--- a/sysinfo/Test.ttcn
+++ b/sysinfo/Test.ttcn
@@ -139,8 +139,8 @@
 	/* ensure a given TC slot of the SI vector contains given SI type at least once at TC */
 	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)) {
-			log("Fail: No ", key, " in TC=", tc, "!");
-			setverdict(fail);
+			setverdict(fail, "Fail: No ", key, " in TC=", tc, "!");
+			mtc.stop;
 		}
 	}
 
@@ -180,8 +180,8 @@
 	/* ensure a given TC slot of the SI vector contains given SI type at least N out of M times at TC */
 	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)) {
-			log("Fail: Not ", n, "/", m, " of ", key, " in TC=", tc, "!");
-			setverdict(fail);
+			setverdict(fail, "Fail: Not ", n, "/", m, " of ", key, " in TC=", tc, "!");
+			mtc.stop;
 		}
 	}
 
@@ -202,8 +202,8 @@
 	/* ensure a given TC slot of the SI vector contains only given SI type */
 	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)) {
-			log("Fail: Not all ", key, " in TC=", tc, "!");
-			setverdict(fail);
+			setverdict(fail, "Fail: Not all ", key, " in TC=", tc, "!");
+			mtc.stop;
 		}
 	}
 
@@ -233,6 +233,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=0!");
+				mtc.stop;
 			}
 		}
 		if (cfg.si1_present) {
@@ -313,6 +314,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) {
@@ -323,6 +325,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!");
@@ -368,6 +371,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);
@@ -399,6 +403,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;
 				}
 			}
 		}
@@ -413,6 +418,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!");
@@ -484,6 +490,7 @@
 		var SystemInformation si := f_gsmtap_get_si(pt, msg_type);
 		if (not match(si, t)) {
 			setverdict(fail, "SI ", si, " doesn't match ", t);
+			mtc.stop;
 		} else {
 			setverdict(pass);
 		}
