diff --git a/dia2gsup/DIA2GSUP_Tests.ttcn b/dia2gsup/DIA2GSUP_Tests.ttcn
index d709512..6a3f85c 100644
--- a/dia2gsup/DIA2GSUP_Tests.ttcn
+++ b/dia2gsup/DIA2GSUP_Tests.ttcn
@@ -1,5 +1,6 @@
 module DIA2GSUP_Tests {
 
+import from Misc_Helpers all;
 import from General_Types all;
 import from Osmocom_Types all;
 import from L3_Common all;
@@ -21,11 +22,11 @@
 	var IPA_Emulation_CT vc_GSUP_IPA;
 	port IPA_CTRL_PT GSUP_IPA_EVENT;
 
+	timer g_Tguard;
 };
 
 type component D2G_ConnHdlr extends DIAMETER_ConnHdlr, GSUP_ConnHdlr {
 	var D2G_ConnHdlrPars g_pars;
-	timer g_Tguard := 30.0;
 };
 
 type record D2G_ConnHdlrPars {
@@ -33,7 +34,7 @@
 	AuthVector vec optional
 };
 
-private function f_init_pars(integer imsi_suffix)
+private function f_init_pars(integer imsi_suffix := 1)
 runs on MTC_CT return D2G_ConnHdlrPars {
 	var D2G_ConnHdlrPars pars := {
 		imsi := f_gen_imsi(imsi_suffix),
@@ -59,10 +60,9 @@
 	charstring mp_diam_realm := "localdomain";
 }
 
-private altstep as_Tguard() runs on D2G_ConnHdlr {
+private altstep as_Tguard() runs on MTC_CT {
 	[] g_Tguard.timeout {
-		setverdict(fail, "Tguard timeout");
-		mtc.stop;
+		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Tguard timeout");
 	}
 }
 
@@ -95,18 +95,18 @@
 	}
 }
 
-private function f_init_handler(D2G_ConnHdlrPars pars, float t_guard := 20.0) runs on D2G_ConnHdlr {
+private type function void_fn(charstring id) runs on D2G_ConnHdlr;
+
+private function f_init_handler(void_fn fn, charstring id, D2G_ConnHdlrPars pars) runs on D2G_ConnHdlr {
 	g_pars := pars;
-	activate(as_Tguard());
-	g_Tguard.start(t_guard);
 
 	/* tell GSUP dispatcher to send this IMSI to us */
 	f_create_gsup_expect(hex2str(g_pars.imsi));
+
+	fn.apply(id);
 }
 
-private type function void_fn(charstring id, D2G_ConnHdlrPars pars) runs on D2G_ConnHdlr;
-
-private function f_start_handler_with_pars(void_fn fn, D2G_ConnHdlrPars pars)
+private function f_start_handler(void_fn fn, D2G_ConnHdlrPars pars)
 runs on MTC_CT return D2G_ConnHdlr {
 	var D2G_ConnHdlr vc_conn;
 	var charstring id := testcasename();
@@ -121,7 +121,7 @@
 
 	DIAMETER_UNIT.receive(DiameterCapabilityExchgInd:?);
 
-	vc_conn.start(derefers(fn)(id, pars));
+	vc_conn.start(f_init_handler(fn, id, pars));
 	return vc_conn;
 }
 
@@ -154,13 +154,17 @@
 	vc_DIAMETER.start(DIAMETER_Emulation.main(ops, pars, id));
 }
 
-private function f_init() runs on MTC_CT {
+private function f_init(float t_guard := 40.0) runs on MTC_CT {
+
+	g_Tguard.start(t_guard);
+	activate(as_Tguard());
+
 	f_init_gsup(testcasename());
 	f_init_diameter(testcasename());
 }
 
 
-private function f_DIA_AI() runs on D2G_ConnHdlr {
+private function f_DIA_AI_success() runs on D2G_ConnHdlr {
 	var PDU_DIAMETER rx_dia;
 	var UINT32 hbh_id := f_rnd_octstring(4);
 	var UINT32 ete_id := f_rnd_octstring(4);
@@ -191,25 +195,25 @@
 	[] DIAMETER.receive(tr_DIA_AIA) {
 		setverdict(pass);
 		}
+	[] DIAMETER.receive(PDU_DIAMETER:?) -> value rx_dia {
+		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Unexpected Diameter msg rx: ", rx_dia));
+		}
 	}
 }
 
-private function f_TC_authinfo_normal(charstring id, D2G_ConnHdlrPars pars) runs on D2G_ConnHdlr {
-	f_init_handler(pars);
-	f_DIA_AI();
+private function f_TC_authinfo_normal(charstring id) runs on D2G_ConnHdlr {
+	f_DIA_AI_success();
 }
 
 testcase TC_authinfo_normal() runs on MTC_CT {
-	var D2G_ConnHdlrPars pars := f_init_pars(1);
+	var D2G_ConnHdlrPars pars := f_init_pars();
 	var D2G_ConnHdlr vc_conn;
 	f_init();
-	f_sleep(10.0);
-	vc_conn := f_start_handler_with_pars(refers(f_TC_authinfo_normal), pars);
+	vc_conn := f_start_handler(refers(f_TC_authinfo_normal), pars);
 	vc_conn.done;
 	setverdict(pass);
 }
 
-
 control {
 	execute ( TC_authinfo_normal() );
 }
