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