diff --git a/hnbgw/HNBGW_Tests.ttcn b/hnbgw/HNBGW_Tests.ttcn
index 71761b5..1c0b121 100644
--- a/hnbgw/HNBGW_Tests.ttcn
+++ b/hnbgw/HNBGW_Tests.ttcn
@@ -474,6 +474,28 @@
 	}
 }
 
+private function f_bssap_expect(template (present) RANAP_PDU exp_rx) runs on ConnHdlr return RANAP_PDU
+{
+	var RANAP_PDU rx;
+	timer T := 5.0;
+	T.start;
+	alt {
+	[] BSSAP.receive(exp_rx) -> value rx {
+		setverdict(pass);
+		}
+	[] BSSAP.receive(RANAP_PDU:?) {
+		setverdict(fail, "Got an unexpected RANAP message on BSSAP port, was waiting for ", exp_rx);
+		mtc.stop;
+		}
+	[] T.timeout {
+		setverdict(fail, "Timeout waiting for RANAP on BSSAP port: ", exp_rx);
+		mtc.stop;
+		}
+	}
+	T.stop;
+	return rx;
+}
+
 /* send RANAP on Iuh and expect it to show up on Iu */
 function f_iuh2iu(template (present) RANAP_PDU tx, template RANAP_PDU exp_rx := omit)
 runs on ConnHdlr return RANAP_PDU {
@@ -485,17 +507,8 @@
 	}
 
 	RUA.send(tx);
-	T.start;
 
-	alt {
-	[] BSSAP.receive(exp_rx) -> value rx {
-		setverdict(pass);
-		}
-	[] T.timeout {
-		setverdict(fail, "Timeout waiting for Iu ", exp_rx);
-		}
-	}
-	return rx;
+	return f_bssap_expect(exp_rx);
 }
 
 /* send RANAP on Iu and expect it to show up on Iuh */
@@ -560,16 +573,7 @@
 	}
 
 	/* expect to receive it on the Iu side */
-	T.start;
-	alt {
-	[] BSSAP.receive(exp_rx) -> value rx {
-		setverdict(pass);
-		}
-	[] T.timeout {
-		setverdict(fail, "Timeout waiting for Iu ", exp_rx);
-		}
-	}
-	return rx;
+	return f_bssap_expect(exp_rx);
 }
 
 /* 3GPP TS 48.006 9.2 Connection release:
@@ -600,17 +604,10 @@
 	RUA.send(RUA_Disc_Req:{tx, cause});
 
 	/* expect to receive it on the Iu side */
-	T.start;
-	alt {
-	[] BSSAP.receive(exp_rx) -> value rx {
-		}
-	[] T.timeout {
-		setverdict(fail, "Timeout waiting for Iu ", exp_rx);
-		return rx;
-		}
-	}
+	rx := f_bssap_expect(exp_rx);
 
 	/* expect disconnect on the Iu side */
+	T.start;
 	alt {
 	[] BSSAP.receive(RAN_Conn_Prim:MSC_CONN_PRIM_DISC_IND) {
 		setverdict(pass);
@@ -969,13 +966,11 @@
 	var MgcpCommand mgcp_cmd;
 	var RANAP_PDU tx;
 	var template RAB_SetupOrModifiedList rab_smdl;
-	timer T := 5.0;
 
 	/* Send back RAB Assignment Response via Iuh */
 	rab_smdl := ts_RAB_SMdL(t_RAB_id(23), f_ts_RAB_TLA(pars.hnb_rtp_ip), t_RAB_binding_port(pars.hnb_rtp_port));
 	tx := valueof(ts_RANAP_RabAssResp(rab_smdl));
 	RUA.send(tx);
-	T.start;
 
 	interleave {
 	/* Expect MDCX with IP/port from RAB Assignment Response */
@@ -1000,14 +995,7 @@
 	rab_smdl := ts_RAB_SMdL(t_RAB_id(23), f_ts_RAB_TLA(pars.mgw_conn_2.mgw_rtp_ip), t_RAB_binding_port(pars.mgw_conn_2.mgw_rtp_port));
 	tx := valueof(ts_RANAP_RabAssResp(rab_smdl));
 
-	alt {
-	[] BSSAP.receive(tx) {
-		setverdict(pass);
-		}
-	[] T.timeout {
-		setverdict(fail, "Timeout waiting for Iuh ", tx);
-		}
-	}
+	f_bssap_expect(tx);
 }
 
 private altstep as_mgcp_dlcx(inout TestHdlrParams pars) runs on ConnHdlr {
@@ -1398,7 +1386,7 @@
 	PFCP.send(r);
 
 	rab_smdl := ts_RAB_SMdL_ps(t_RAB_id(23), f_ts_RAB_TLA(gtp_pars.core.local.addr), gtp_pars.core.local.teid);
-	BSSAP.receive(tr_RANAP_RabAssResp(rab_smdl));
+	f_bssap_expect(tr_RANAP_RabAssResp(rab_smdl));
 
 	f_sleep(2.0);
 	tx := valueof(ts_RANAP_IuReleaseCommand(ts_RanapCause_om_intervention));
@@ -1464,7 +1452,7 @@
 	RUA.send(tx);
 
 	/* Expect on IuPS: unmodified RAB Assignment Response */
-	BSSAP.receive(tr_RANAP_RabAssResp(rab_smdl));
+	f_bssap_expect(tr_RANAP_RabAssResp(rab_smdl));
 
 	f_sleep(2.0);
 	tx := valueof(ts_RANAP_IuReleaseCommand(ts_RanapCause_om_intervention));
