diff --git a/remsim/RemsimServer_Tests.ttcn b/remsim/RemsimServer_Tests.ttcn
index d5af530..135ce15 100644
--- a/remsim/RemsimServer_Tests.ttcn
+++ b/remsim/RemsimServer_Tests.ttcn
@@ -20,6 +20,7 @@
 import from RSPRO_Types all;
 import from REMSIM_Tests all;
 
+import from Misc_Helpers all;
 import from IPA_Emulation all;
 
 import from HTTPmsg_Types all;
@@ -72,13 +73,28 @@
 }
 
 type component test_CT extends rspro_client_CT, http_CT {
+	timer g_T_guard := 60.0;
 };
 
+private altstep as_Tguard() runs on test_CT {
+	[] g_T_guard.timeout {
+		setverdict(fail, "Timeout of T_guard");
+		Misc_Helpers.f_shutdown(__BFILE__, __LINE__);
+		}
+}
+
+private function f_init() runs on test_CT {
+	/* Start the guard timer */
+	g_T_guard.start;
+	activate(as_Tguard());
+}
+
 
 testcase TC_connect_and_nothing() runs on test_CT {
 	var ComponentIdentity rspro_id := valueof(ts_CompId(remsimClient, "foobar"));
 	timer T := 20.0;
 
+	f_init();
 	f_rspro_init(rspro[0], mp_server_ip, mp_server_port, rspro_id, 0);
 	T.start;
 	/* expect that we're disconnected if we never send a ConnectClientReq */
@@ -97,6 +113,7 @@
 	var ComponentIdentity rspro_id := valueof(ts_CompId(remsimClient, "foobar"));
 	var JsRoot js;
 
+	f_init();
 	f_rsres_init();
 	f_rspro_init(rspro[0], mp_server_ip, mp_server_port, rspro_id, 0);
 	rspro[0].rspro_client_slot := valueof(ts_ClientSlot(3,4));
@@ -120,6 +137,7 @@
 	var ComponentIdentity rspro_id := valueof(ts_CompId(remsimBankd, "foobar"));
 	var JsRoot js;
 
+	f_init();
 	f_rsres_init();
 	f_rspro_init(rspro[0], mp_server_ip, mp_server_port, rspro_id, 0);
 	rspro[0].rspro_bank_id := 1;
@@ -170,6 +188,7 @@
 
 /* test adding a single slotmap */
 testcase TC_slotmap_add() runs on test_CT {
+	f_init();
 	f_rsres_init();
 
 	var JsSlotmap sm := valueof(ts_JsSlotmap(ts_BankSlot(1,2), ts_ClientSlot(3,4)));
@@ -181,6 +200,7 @@
 
 /* test adding a single slotmap with out-of-range values */
 testcase TC_slotmap_add_out_of_range() runs on test_CT {
+	f_init();
 	f_rsres_init();
 
 	var HTTPMessage http_resp;
@@ -206,6 +226,8 @@
 
 /* test adding a slotmap and then connecting a client + bankd */
 testcase TC_slotmap_add_conn_cl_b() runs on test_CT {
+	f_init();
+
 	/* Simulate one client */
 	var ComponentIdentity rspro_id := valueof(ts_CompId(remsimClient, testcasename()));
 	f_rspro_init(rspro[0], mp_server_ip, mp_server_port, rspro_id, 0);
@@ -249,6 +271,8 @@
 
 /* test connecting a client and later adding a slotmap for it */
 testcase TC_conn_cl_b_slotmap_add() runs on test_CT {
+	f_init();
+
 	/* Simulate one client */
 	var ComponentIdentity rspro_id := valueof(ts_CompId(remsimClient, testcasename()));
 	f_rspro_init(rspro[0], mp_server_ip, mp_server_port, rspro_id, 0);
@@ -292,6 +316,7 @@
 
 /* simple delete of a 'NEW' slotmap */
 testcase TC_slotmap_del_new() runs on test_CT {
+	f_init();
 	f_rsres_init();
 
 	var JsSlotmap sm := valueof(ts_JsSlotmap(ts_BankSlot(1,2), ts_ClientSlot(3,4)));
@@ -303,6 +328,7 @@
 
 /* simple delete of a non-existant slotmap */
 testcase TC_slotmap_del_nonexistant() runs on test_CT {
+	f_init();
 	f_rsres_init();
 
 	var JsSlotmap sm := valueof(ts_JsSlotmap(ts_BankSlot(11,12), ts_ClientSlot(13,14)));
@@ -314,6 +340,8 @@
 /* simple delete of a 'UNACKNOWLEDGED' slotmap */
 testcase TC_slotmap_del_unack() runs on test_CT {
 	var ComponentIdentity rspro_id := valueof(ts_CompId(remsimBankd, testcasename()));
+
+	f_init();
 	f_rspro_init(rspro[0], mp_server_ip, mp_server_port, rspro_id, 0);
 	rspro[0].rspro_bank_id := 1;
 	rspro[0].rspro_bank_nslots := 8;
@@ -347,6 +375,8 @@
 /* simple delete of a 'ACTIVE' slotmap from server + bankd */
 testcase TC_slotmap_del_active() runs on test_CT {
 	var ComponentIdentity rspro_id := valueof(ts_CompId(remsimBankd, testcasename()));
+
+	f_init();
 	f_rspro_init(rspro[0], mp_server_ip, mp_server_port, rspro_id, 0);
 	rspro[0].rspro_bank_id := 1;
 	rspro[0].rspro_bank_nslots := 8;
@@ -386,6 +416,8 @@
 /* simple delete of a 'ACTIVE' slotmap from client */
 testcase TC_slotmap_del_active_client() runs on test_CT {
 	var ComponentIdentity rspro_id := valueof(ts_CompId(remsimBankd, testcasename()));
+
+	f_init();
 	f_rspro_init(rspro[0], mp_server_ip, mp_server_port, rspro_id, 0);
 	rspro[0].rspro_bank_id := 1;
 	rspro[0].rspro_bank_nslots := 8;
@@ -438,6 +470,8 @@
 /* Add a slotmap to a currently active bank */
 testcase TC_slotmap_add_active_bank() runs on test_CT {
 	var ComponentIdentity rspro_id := valueof(ts_CompId(remsimBankd, testcasename()));
+
+	f_init();
 	f_rspro_init(rspro[0], mp_server_ip, mp_server_port, rspro_id, 0);
 	rspro[0].rspro_bank_id := 1;
 	rspro[0].rspro_bank_nslots := 8;
