diff --git a/msc_tests/BSC_ConnectionHandler.ttcn b/msc_tests/BSC_ConnectionHandler.ttcn
index 97c02b8..a7ce1ea 100644
--- a/msc_tests/BSC_ConnectionHandler.ttcn
+++ b/msc_tests/BSC_ConnectionHandler.ttcn
@@ -454,6 +454,41 @@
 	setverdict(pass);
 }
 
+/* expect a clear command */
+function f_expect_clear(float t := 5.0) runs on BSC_ConnHdlr {
+	timer T := t;
+
+	T.start;
+	alt {
+	[] BSSAP.receive(tr_BSSMAP_ClearCommand) { }
+	[] BSSAP.receive {
+		setverdict(fail, "Unexpected BSSMAP while waiting for ClearCommand");
+		self.stop;
+		}
+	[] T.timeout {
+		setverdict(inconc, "Timeout waiting for ClearCommand");
+		self.stop;
+		}
+	}
+
+	BSSAP.send(ts_BSSMAP_ClearComplete);
+
+	T.start;
+	alt {
+	[] BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
+		setverdict(pass);
+		}
+	[] BSSAP.receive {
+		setverdict(fail, "Unexpected BSSMAP while waiting for SCCP Release");
+		self.stop;
+		}
+	[] T.timeout {
+		setverdict(inconc, "Timeout waiting for SCCP Release");
+		self.stop;
+		}
+	}
+}
+
 
 
 
diff --git a/msc_tests/MSC_Tests.ttcn b/msc_tests/MSC_Tests.ttcn
index 2e9176f..c241d74 100644
--- a/msc_tests/MSC_Tests.ttcn
+++ b/msc_tests/MSC_Tests.ttcn
@@ -437,10 +437,7 @@
 			self.stop;
 		}
 	}
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-	setverdict(pass);
+	f_expect_clear();
 }
 testcase TC_lu_imsi_reject() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -467,10 +464,7 @@
 			self.stop;
 		}
 	}
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-	setverdict(pass);
+	f_expect_clear();
 }
 testcase TC_lu_imsi_timeout_gsup() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -520,13 +514,7 @@
 	[] T.timeout { setverdict(inconc, "Timeout waiting for CM SERV REQ"); }
 	}
 
-	alt {
-	[] BSSAP.receive(tr_BSSMAP_ClearCommand) {
-		setverdict(pass);
-		}
-	[] BSSAP.receive { setverdict(fail, "Received unexpected BSSAP"); }
-	[] T.timeout { setverdict(inconc, "Timeout waiting for CM SERV REQ"); }
-	}
+	f_expect_clear();
 }
 testcase TC_cmserv_imsi_unknown() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -573,10 +561,7 @@
 	/* The HLR would normally return an auth vector here, but we fail to do so. */
 
 	BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej));
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-	setverdict(pass);
+	f_expect_clear();
 }
 testcase TC_lu_auth_sai_timeout() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -607,10 +592,7 @@
 	GSUP.send(ts_GSUP_SAI_ERR(g_pars.imsi, 13));
 
 	BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej));
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-	setverdict(pass);
+	f_expect_clear();
 }
 testcase TC_lu_auth_sai_err() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -704,10 +686,7 @@
 	[] BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_MM_ID_Req)) { repeat; }
 	}
 	/* wait for normal teardown */
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-	setverdict(pass);
+	f_expect_clear();
 }
 testcase TC_lu_by_imei() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -753,10 +732,7 @@
 	}
 
 	/* wait for normal teardown */
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-	setverdict(pass);
+	f_expect_clear();
 }
 testcase TC_lu_by_tmsi_noauth_unknown() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -780,10 +756,7 @@
 	BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));
 
 	/* wait for normal teardown */
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-	setverdict(pass);
+	f_expect_clear();
 }
 testcase TC_imsi_detach_by_imsi() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -806,10 +779,7 @@
 	BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));
 
 	/* wait for normal teardown */
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-	setverdict(pass);
+	f_expect_clear();
 }
 testcase TC_imsi_detach_by_tmsi() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -832,10 +802,7 @@
 	BSSAP.send(ts_BSSMAP_ClassmarkUpd(g_pars.cm2, g_pars.cm3));
 
 	/* wait for normal teardown */
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-	setverdict(pass);
+	f_expect_clear();
 }
 testcase TC_imsi_detach_by_imei() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -885,11 +852,7 @@
 	BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_CC_RELEASE(tid)));
 
 	/* clearing of radio channel */
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-
-	f_sleep(5.0);
+	f_expect_clear();
 }
 
 /* establish an emergency call by IMEI, no SIM inserted (and hence no IMSI) */
@@ -900,10 +863,7 @@
 	var PDU_ML3_MS_NW l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_EMERG_CALL, mi));
 	f_bssap_compl_l3(l3_info);
 	BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_REJ('05'O)));
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-	setverdict(pass);
+	f_expect_clear();
 }
 testcase TC_emerg_call_imei_reject() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -940,10 +900,7 @@
 	var PDU_ML3_MS_NW l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_VGCS, mi));
 	f_bssap_compl_l3(l3_info);
 	BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_REJ(int2oct(32,1))));
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-	setverdict(pass);
+	f_expect_clear();
 }
 testcase TC_cm_serv_req_vgcs_reject() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -964,10 +921,7 @@
 	var PDU_ML3_MS_NW l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_VBS, mi));
 	f_bssap_compl_l3(l3_info);
 	BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_REJ(int2oct(32,1))));
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-	setverdict(pass);
+	f_expect_clear();
 }
 testcase TC_cm_serv_req_vbs_reject() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -988,10 +942,7 @@
 	var PDU_ML3_MS_NW l3_info := valueof(ts_CM_SERV_REQ(CM_TYPE_LCS, mi));
 	f_bssap_compl_l3(l3_info);
 	BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_REJ(int2oct(32,1))));
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-	setverdict(pass);
+	f_expect_clear();
 }
 testcase TC_cm_serv_req_lcs_reject() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -1012,10 +963,7 @@
 	var PDU_ML3_MS_NW l3_info := valueof(ts_CM_REEST_REQ(0, mi));
 	f_bssap_compl_l3(l3_info);
 	BSSAP.receive(tr_PDU_DTAP_MT(tr_CM_SERV_REJ(int2oct(32,1))));
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-	setverdict(pass);
+	f_expect_clear();
 }
 testcase TC_cm_reest_req_reject() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -1054,10 +1002,7 @@
 
 	/* Expect LU REJECT with Cause == Illegal MS */
 	BSSAP.receive(tr_PDU_DTAP_MT(tr_ML3_MT_LU_Rej('03'O)));
-	BSSAP.receive(tr_BSSMAP_ClearCommand);
-	BSSAP.send(ts_BSSMAP_ClearComplete);
-	BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-	setverdict(pass);
+	f_expect_clear();
 }
 testcase TC_lu_auth_2G_fail() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -1146,20 +1091,7 @@
 	f_perform_lu(false, true, true, false);
 
 	f_establish_fully(valueof(ts_MI_IMSI_LV(g_pars.imsi)), false, false);
-	timer T := 30.0;
-	T.start;
-	alt {
-	[] T.timeout { setverdict(fail, "Timeout waiting for channel release"); self.stop; }
-	[] BSSAP.receive(tr_BSSMAP_ClearCommand) {
-		BSSAP.send(ts_BSSMAP_ClearComplete);
-		BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-		setverdict(pass);
-		}
-	[] BSSAP.receive { repeat; }
-	[] MNCC.receive { repeat; }
-	[] GSUP.receive { repeat; }
-	[] MGCP.receive { repeat; }
-	}
+	f_expect_clear();
 }
 testcase TC_establish_and_nothing() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -1183,20 +1115,7 @@
 
 	BSSAP.send(ts_PDU_DTAP_MO(ts_ML3_MO_CC_SETUP(cpars.transaction_id, cpars.called_party)));
 
-	timer T := 30.0;
-	T.start;
-	alt {
-	[] T.timeout { setverdict(fail, "Timeout waiting for channel release"); self.stop; }
-	[] BSSAP.receive(tr_BSSMAP_ClearCommand) {
-		BSSAP.send(ts_BSSMAP_ClearComplete);
-		BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-		setverdict(pass);
-		}
-	[] BSSAP.receive { repeat; }
-	[] MNCC.receive { repeat; }
-	[] GSUP.receive { repeat; }
-	[] MGCP.receive { repeat; }
-	}
+	f_expect_clear(30.0);
 }
 testcase TC_mo_setup_and_nothing() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
@@ -1230,20 +1149,7 @@
 	cpars.mgcp_ep := mgcp_cmd.line.ep;
 	/* never respond to this */
 
-	timer T := 30.0;
-	T.start;
-	alt {
-	[] T.timeout { setverdict(fail, "Timeout waiting for channel release"); self.stop; }
-	[] BSSAP.receive(tr_BSSMAP_ClearCommand) {
-		BSSAP.send(ts_BSSMAP_ClearComplete);
-		BSSAP.receive(BSSAP_Conn_Prim:MSC_CONN_PRIM_DISC_IND);
-		setverdict(pass);
-		}
-	[] BSSAP.receive { repeat; }
-	[] MNCC.receive { repeat; }
-	[] GSUP.receive { repeat; }
-	[] MGCP.receive { repeat; }
-	}
+	f_expect_clear(30.0);
 }
 testcase TC_mo_crcx_ran_timeout() runs on MTC_CT {
 	var BSC_ConnHdlr vc_conn;
