diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 87150db..c7b5a8f 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -606,11 +606,44 @@
 	setverdict(pass);
 }
 
+function f_expect_chan_rel(integer bts_nr, RslChannelNr rsl_chan_nr, boolean flush := true,
+			   boolean handle_rll_rel := true) runs on test_CT {
+
+	var RslLinkId main_dcch := valueof(ts_RslLinkID_DCCH(0));
+	if (flush) {
+		/* Clear the queue, it might still contain stuff like IMMEDIATE ASSIGN */
+		IPA_RSL[bts_nr].clear;
+	}
+	alt {
+	/* ignore DEACTIVATE SACCH (if any) */
+	[] IPA_RSL[bts_nr].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,
+					tr_RSL_DEACT_SACCH(rsl_chan_nr))) {
+		repeat;
+	}
+	/* acknowledge RLL release (if any)*/
+	[handle_rll_rel] IPA_RSL[bts_nr].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,
+					tr_RSL_REL_REQ(rsl_chan_nr, ?))) {
+		/* FIXME: Why are we getting this for LinkID SACCH? */
+		f_ipa_tx(0, ts_RSL_REL_CONF(rsl_chan_nr, main_dcch));
+		repeat;
+	}
+	/* Expect RF channel release from BSC on Abis */
+	[] IPA_RSL[bts_nr].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,
+						tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL))) {
+		/* respond with CHAN REL ACK */
+		f_ipa_tx(0, ts_RSL_RF_CHAN_REL_ACK(rsl_chan_nr));
+		}
+	/* ignore any user data */
+	[] IPA_RSL[bts_nr].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_MsgTypeR(?))) {
+		repeat;
+		}
+	}
+}
+
 /* Test behavior of channel release after hard Clear Command from MSC */
 testcase TC_chan_rel_hard_clear() runs on test_CT {
 	var BSSAP_N_DATA_ind rx_di;
 	var DchanTuple dt;
-	var RslLinkId main_dcch := valueof(ts_RslLinkID_DCCH(0));
 
 	f_init(1);
 	f_bssap_reset();
@@ -627,36 +660,13 @@
 		BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
 	}
 
-	/* Clear the queue, it might still contain stuff like IMMEDIATE ASSIGN */
-	IPA_RSL[0].clear;
-	alt {
-	/* ignore DEACTIVATE SACCH (if any) */
-	[] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,
-					tr_RSL_DEACT_SACCH(dt.rsl_chan_nr))) {
-		repeat;
-	}
-	/* acknowledge RLL release (if any)*/
-	[] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,
-					tr_RSL_REL_REQ(dt.rsl_chan_nr, ?))) {
-		/* FIXME: Why are we getting this for LinkID SACCH? */
-		f_ipa_tx(0, ts_RSL_REL_CONF(dt.rsl_chan_nr, main_dcch));
-		repeat;
-	}
-	/* Expect RF channel release from BSC on Abis */
-	[] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,
-						tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL))) {
-		/* respond with CHAN REL ACK */
-		f_ipa_tx(0, ts_RSL_RF_CHAN_REL_ACK(dt.rsl_chan_nr));
-		}
-	}
-
+	f_expect_chan_rel(0, dt.rsl_chan_nr);
 	setverdict(pass);
 }
 
 /* Test behavior of channel release after hard RLSD from MSC */
 testcase TC_chan_rel_hard_rlsd() runs on test_CT {
 	var DchanTuple dt;
-	var RslLinkId main_dcch := valueof(ts_RslLinkID_DCCH(0));
 
 	f_init(1);
 	f_bssap_reset();
@@ -666,36 +676,13 @@
 	/* release the SCCP connection */
 	BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
 
-	/* Clear the queue, it might still contain stuff like IMMEDIATE ASSIGN */
-	IPA_RSL[0].clear;
-	alt {
-	/* ignore DEACTIVATE SACCH (if any) */
-	[] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,
-					tr_RSL_DEACT_SACCH(dt.rsl_chan_nr))) {
-		repeat;
-	}
-	/* acknowledge RLL release (if any)*/
-	[] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,
-					tr_RSL_REL_REQ(dt.rsl_chan_nr, ?))) {
-		/* FIXME: Why are we getting this for LinkID SACCH? */
-		f_ipa_tx(0, ts_RSL_REL_CONF(dt.rsl_chan_nr, main_dcch));
-		repeat;
-	}
-	/* Expect RF channel release from BSC on Abis */
-	[] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,
-						tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL))) {
-		/* respond with CHAN REL ACK */
-		f_ipa_tx(0, ts_RSL_RF_CHAN_REL_ACK(dt.rsl_chan_nr));
-		}
-	}
-
+	f_expect_chan_rel(0, dt.rsl_chan_nr);
 	setverdict(pass);
 }
 
 /* Test behavior of channel release after BSSMAP RESET from MSC */
 testcase TC_chan_rel_a_reset() runs on test_CT {
 	var DchanTuple dt;
-	var RslLinkId main_dcch := valueof(ts_RslLinkID_DCCH(0));
 
 	f_init(1);
 	f_bssap_reset();
@@ -712,31 +699,7 @@
 	[] BSSAP.receive(tr_BSSAP_DISC_ind(dt.sccp_conn_id, ?, ?)) { }
 	}
 
-	alt {
-	/* ignore DEACTIVATE SACCH (if any) */
-	[] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,
-					tr_RSL_DEACT_SACCH(dt.rsl_chan_nr))) {
-		repeat;
-	}
-	/* acknowledge RLL release (if any)*/
-	[] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,
-					tr_RSL_REL_REQ(dt.rsl_chan_nr, ?))) {
-		/* FIXME: Why are we getting this for LinkID SACCH? */
-		f_ipa_tx(0, ts_RSL_REL_CONF(dt.rsl_chan_nr, main_dcch));
-		repeat;
-	}
-	/* Expect RF channel release from BSC on Abis */
-	[] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0,
-						tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL))) {
-		/* respond with CHAN REL ACK */
-		f_ipa_tx(0, ts_RSL_RF_CHAN_REL_ACK(dt.rsl_chan_nr));
-		}
-	/* ignore any user data */
-	[] IPA_RSL[0].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_MsgTypeR(?))) {
-		repeat;
-		}
-	}
-
+	f_expect_chan_rel(0, dt.rsl_chan_nr);
 	setverdict(pass);
 }
 
