diff --git a/msc_tests/BSC_ConnectionHandler.ttcn b/msc_tests/BSC_ConnectionHandler.ttcn
index bc6eebc..843197e 100644
--- a/msc_tests/BSC_ConnectionHandler.ttcn
+++ b/msc_tests/BSC_ConnectionHandler.ttcn
@@ -30,6 +30,7 @@
 /* this component represents a single subscriber connection */
 type component BSC_ConnHdlr extends BSSAP_ConnHdlr, MNCC_ConnHdlr, GSUP_ConnHdlr, MGCP_ConnHdlr {
 	var BSC_ConnHdlrPars g_pars;
+	timer g_Tguard := 60.0;
 }
 
 type record AuthVector {
@@ -52,6 +53,23 @@
 	AuthVector vec optional
 };
 
+/* altstep for the global guard timer */
+private altstep as_Tguard() runs on BSC_ConnHdlr {
+	[] g_Tguard.timeout {
+		setverdict(inconc, "Tguard timeout");
+		self.stop;
+	}
+}
+
+/* init function, called as first function in new BSC_ConnHdlr */
+function f_init_handler(BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
+	/* make parameters available via component variable */
+	g_pars := pars;
+	/* Start guard timer and activate it as default */
+	g_Tguard.start;
+	activate(as_Tguard());
+}
+
 
 /* Callback function from general BSSMAP_Emulation whenever a connectionless
  * BSSMAP message arrives. Canreturn a PDU_BSSAPthat should be sent in return */
diff --git a/msc_tests/MSC_Tests.ttcn b/msc_tests/MSC_Tests.ttcn
index 8512d3e..f38b989 100644
--- a/msc_tests/MSC_Tests.ttcn
+++ b/msc_tests/MSC_Tests.ttcn
@@ -379,6 +379,8 @@
 	connect(vc_conn:GSUP, vc_GSUP:GSUP_CLIENT);
 	connect(vc_conn:GSUP_PROC, vc_GSUP:GSUP_PROC);
 
+	/* We cannot use vc_conn.start(f_init_handler(fn, id, pars)); as we cannot have
+	 * a stand-alone 'derefers()' call, see https://www.eclipse.org/forums/index.php/t/1091364/ */
 	vc_conn.start(derefers(fn)(id, pars));
 	return vc_conn;
 }
@@ -395,7 +397,7 @@
 }
 
 private function f_tc_lu_imsi_noauth_tmsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	f_perform_lu(false, true, true);
 }
 testcase TC_lu_imsi_noauth_tmsi() runs on MTC_CT {
@@ -407,7 +409,7 @@
 }
 
 private function f_tc_lu_imsi_noauth_notmsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	f_perform_lu(false, false, true);
 }
 testcase TC_lu_imsi_noauth_notmsi() runs on MTC_CT {
@@ -421,7 +423,7 @@
 
 /* Do LU by IMSI, refuse it on GSUP and expect LU REJ back to MS */
 private function f_tc_lu_imsi_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi);
 
 	f_create_gsup_expect(hex2str(g_pars.imsi));
@@ -450,7 +452,7 @@
 
 /* Do LU by IMSI, timeout on GSUP */
 private function f_tc_lu_imsi_timeout_gsup(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi);
 
 	f_create_gsup_expect(hex2str(g_pars.imsi));
@@ -479,7 +481,7 @@
 }
 
 private function f_tc_lu_imsi_auth_tmsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	f_perform_lu(true, true, true);
 }
 testcase TC_lu_imsi_auth_tmsi() runs on MTC_CT {
@@ -495,7 +497,7 @@
 /* Send CM SERVICE REQ for IMSI that has never performed LU before */
 private function f_tc_cmserv_imsi_unknown(charstring id, BSC_ConnHdlrPars pars)
 runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var MobileIdentityLV mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));
 	var BSSMAP_IE_CellIdentifier cell_id := valueof(ts_CellId_CGI('262'H, '042'H, 23, 42));
@@ -534,7 +536,7 @@
 }
 
 private function f_tc_lu_and_mo_call(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	var CallParameters cpars := valueof(t_CallParams('12345'H, 0));
 	cpars.bss_rtp_port := 1110;
 	cpars.mgcp_connection_id_bss := '22222'H;
@@ -553,7 +555,7 @@
 
 /* Test LU (with authentication enabled), where HLR times out sending SAI response */
 private function f_tc_lu_auth_sai_timeout(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)
 	var PDU_DTAP_MT dtap_mt;
@@ -587,7 +589,7 @@
 
 /* Test LU (with authentication enabled), where HLR rejects sending SAI error */
 private function f_tc_lu_auth_sai_err(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)
 	var PDU_DTAP_MT dtap_mt;
@@ -621,7 +623,7 @@
 
 /* Test LU but BSC will send a clear request in the middle */
 private function f_tc_lu_clear_request(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)
 	var PDU_DTAP_MT dtap_mt;
@@ -653,7 +655,7 @@
 
 /* Test LU but BSC will send a clear request in the middle */
 private function f_tc_lu_disconnect(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)
 	var PDU_DTAP_MT dtap_mt;
@@ -683,7 +685,7 @@
 
 /* Test LU but with illegal mobile identity type = IMEI */
 private function f_tc_lu_by_imei(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imei(g_pars.imei)
 	var PDU_DTAP_MT dtap_mt;
@@ -717,7 +719,7 @@
 
 /* Test LU by TMSI with unknown TMSI, expect (and answer) ID REQ. */
 private function f_tc_lu_tmsi_noauth_unknown(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_tmsi('01020304'O); /* FIXME: Random */
 	var PDU_DTAP_MT dtap_mt;
@@ -767,7 +769,7 @@
 
 /* Test IMSI DETACH (MI=IMSI) */
 private function f_tc_imsi_detach_by_imsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var MobileIdentityLV mi := valueof(ts_MI_IMSI_LV(g_pars.imsi));
 
@@ -793,7 +795,7 @@
 
 /* Test IMSI DETACH (MI=TMSI) */
 private function f_tc_imsi_detach_by_tmsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var MobileIdentityLV mi := valueof(ts_MI_TMSI_LV('01020304'O));
 
@@ -819,7 +821,7 @@
 
 /* Test IMSI DETACH (MI=IMEI), which is illegal */
 private function f_tc_imsi_detach_by_imei(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var MobileIdentityLV mi := valueof(ts_MI_IMEI_LV(g_pars.imei));
 
@@ -892,7 +894,7 @@
 
 /* establish an emergency call by IMEI, no SIM inserted (and hence no IMSI) */
 private function f_tc_emerg_call_imei_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var MobileIdentityLV mi := valueof(ts_MI_IMEI_LV(g_pars.imei));
 	var PDU_ML3_MS_NW l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_EMERG_CALL, mi));
@@ -913,7 +915,7 @@
 
 /* establish an emergency call by IMSI, SIM inserted (and hence IMSI) */
 private function f_tc_emerg_call_imsi(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	/* First perform location update to ensure subscriber is known */
 	f_perform_lu(false, true, true);
 	/* Then issue emergency call identified by IMSI */
@@ -929,7 +931,7 @@
 
 /* CM Service Request for VGCS -> reject */
 private function f_tc_cm_serv_req_vgcs_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	/* First perform location update to ensure subscriber is known */
 	f_perform_lu(false, true, true);
@@ -953,7 +955,7 @@
 
 /* CM Service Request for VBS -> reject */
 private function f_tc_cm_serv_req_vbs_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	/* First perform location update to ensure subscriber is known */
 	f_perform_lu(false, true, true);
@@ -977,7 +979,7 @@
 
 /* CM Service Request for LCS -> reject */
 private function f_tc_cm_serv_req_lcs_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	/* First perform location update to ensure subscriber is known */
 	f_perform_lu(false, true, true);
@@ -1001,7 +1003,7 @@
 
 /* CM Re-Establishment Request */
 private function f_tc_cm_reest_req_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	/* First perform location update to ensure subscriber is known */
 	f_perform_lu(false, true, true);
@@ -1025,7 +1027,7 @@
 
 /* Test LU (with authentication enabled), with wrong response from MS */
 private function f_tc_lu_auth_2G_fail(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var PDU_ML3_MS_NW l3_lu := f_build_lu_imsi(g_pars.imsi)
 
@@ -1067,7 +1069,7 @@
 }
 
 private function f_tc_lu_imsi_auth_tmsi_encr_13_13(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	f_perform_lu(true, true, true, true);
 }
 testcase TC_lu_imsi_auth_tmsi_encr_13_13() runs on MTC_CT {
@@ -1082,7 +1084,7 @@
 
 /* Test Complete L3 without payload */
 private function f_tc_cl3_no_payload(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	/* Send Complete L3 Info with empty L3 frame */
 	BSSAP.send(ts_BSSAP_Conn_Req(g_pars.sccp_addr_peer, g_pars.sccp_addr_own,
@@ -1108,7 +1110,7 @@
 
 /* Test Complete L3 with random payload */
 private function f_tc_cl3_rnd_payload(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	var integer len := float2int(rnd() * 256.0);
 	var octetstring payl := f_rnd_octstring(len);
@@ -1139,7 +1141,7 @@
 
 /* Test Complete L3 with random payload */
 private function f_tc_establish_and_nothing(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 
 	f_perform_lu(false, true, true, false);
 
@@ -1169,7 +1171,8 @@
 
 /* Test MO Call SETUP with no response from MNCC */
 private function f_tc_mo_setup_and_nothing(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
+
 	var CallParameters cpars := valueof(t_CallParams('12345'H, 0));
 
 	f_perform_lu(false, true, true, false);
@@ -1205,7 +1208,7 @@
 
 /* Test MO Call with no response to RAN-side CRCX */
 private function f_tc_mo_crcx_ran_timeout(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	var CallParameters cpars := valueof(t_CallParams('12345'H, 0));
 	var MNCC_PDU mncc;
 	var MgcpCommand mgcp_cmd;
@@ -1252,7 +1255,7 @@
 
 /* Test MO Call with reject to RAN-side CRCX */
 private function f_tc_mo_crcx_ran_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	var CallParameters cpars := valueof(t_CallParams('12345'H, 0));
 	var MNCC_PDU mncc;
 	var MgcpCommand mgcp_cmd;
@@ -1344,7 +1347,7 @@
 
 /* Test MT Call */
 private function f_tc_mt_crcx_ran_reject(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	var CallParameters cpars := valueof(t_CallParams('123456'H, 0));
 	var MNCC_PDU mncc;
 	var MgcpCommand mgcp_cmd;
@@ -1402,7 +1405,7 @@
 
 /* Test MT Call T310 timer */
 private function f_tc_mt_t310(charstring id, BSC_ConnHdlrPars pars) runs on BSC_ConnHdlr {
-	g_pars := pars;
+	f_init_handler(pars);
 	var CallParameters cpars := valueof(t_CallParams('123456'H, 0));
 	var MNCC_PDU mncc;
 	var MgcpCommand mgcp_cmd;
