diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index bab56d1..a5509fd 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -667,9 +667,23 @@
 	return dt;
 }
 
+/* expect RF CAN REL from BTS, acknowledge it and clear the MSC side */
+private function f_exp_chan_rel_and_clear(DchanTuple dt, integer bts_nr := 0) runs on test_CT {
+	var RSL_Message rx_rsl;
+	/* expect BSC to disable the channel */
+	rx_rsl := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL), T3101_MAX);
+	/* respond with CHAN REL ACK */
+	f_ipa_tx(0, ts_RSL_RF_CHAN_REL_ACK(dt.rsl_chan_nr));
+
+	/* expect Clear Complete from BSC */
+	BSSAP.receive(tr_BSSAP_DATA_ind(dt.sccp_conn_id, tr_BSSMAP_ClearComplete));
+
+	/* MSC disconnects as instructed. */
+	BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
+}
+
 /* Test behavior of channel release after unilateral RLL REL IND (DISC from MS) */
 testcase TC_chan_rel_rll_rel_ind() runs on test_CT {
-	var RSL_Message rx_rsl;
 	var BSSAP_N_DATA_ind rx_di;
 	var DchanTuple dt;
 
@@ -688,15 +702,7 @@
 	BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_ClearCommand(cause)));
 
 	/* expect BSC to disable the channel */
-	rx_rsl := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL), T3101_MAX);
-	/* respond with CHAN REL ACK */
-	f_ipa_tx(0, ts_RSL_RF_CHAN_REL_ACK(dt.rsl_chan_nr));
-
-	/* expect Clear Complete from BSC */
-	BSSAP.receive(tr_BSSAP_DATA_ind(dt.sccp_conn_id, tr_BSSMAP_ClearComplete));
-
-	/* release the SCCP connection */
-	BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
+	f_exp_chan_rel_and_clear(dt, 0);
 
 	/* wait for SCCP emulation to do its job */
 	f_sleep(1.0);
@@ -707,7 +713,6 @@
 /* Test behavior of channel release after CONN FAIL IND from BTS */
 testcase TC_chan_rel_conn_fail() runs on test_CT {
 	var BSSAP_N_DATA_ind rx_di;
-	var RSL_Message rx_rsl;
 	var DchanTuple dt;
 
 	f_init(1);
@@ -726,15 +731,7 @@
 	BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_ClearCommand(cause)));
 
 	/* expect BSC to disable the channel */
-	rx_rsl := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL), T3101_MAX);
-	/* respond with CHAN REL ACK */
-	f_ipa_tx(0, ts_RSL_RF_CHAN_REL_ACK(dt.rsl_chan_nr));
-
-	/* expect Clear Complete from BSC */
-	BSSAP.receive(tr_BSSAP_DATA_ind(dt.sccp_conn_id, tr_BSSMAP_ClearComplete));
-
-	/* release the SCCP connection */
-	BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
+	f_exp_chan_rel_and_clear(dt, 0);
 
 	/* wait for SCCP emulation to do its job */
 	f_sleep(1.0);
@@ -2092,7 +2089,6 @@
 	var integer i;
 	var DchanTuple dt;
 	var BSSAP_N_DATA_ind rx_di;
-	var RSL_Message rx_rsl;
 	var myBSSMAP_Cause cause_val := GSM0808_CAUSE_CALL_CONTROL;
 	var BssmapCause cause := enum2int(cause_val);
 
@@ -2120,15 +2116,7 @@
 		BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_ClearCommand(cause)));
 
 		/* expect BSC to disable the channel */
-		rx_rsl := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL), T3101_MAX);
-		/* respond with CHAN REL ACK */
-		f_ipa_tx(0, ts_RSL_RF_CHAN_REL_ACK(dt.rsl_chan_nr));
-
-		/* expect Clear Complete from BSC */
-		BSSAP.receive(tr_BSSAP_DATA_ind(dt.sccp_conn_id, tr_BSSMAP_ClearComplete));
-
-		/* MSC disconnects as instructed. */
-		BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
+		f_exp_chan_rel_and_clear(dt, 0);
 	}
 
 	/* In the buggy behavior, a timeout of 2 seconds happens between above
@@ -2148,7 +2136,6 @@
 	var integer i;
 	var DchanTuple dt;
 	var BSSAP_N_DATA_ind rx_di;
-	var RSL_Message rx_rsl;
 	var integer j;
 
 	f_init();
@@ -2182,15 +2169,7 @@
 		BSSAP.send(ts_BSSAP_DATA_req(dt.sccp_conn_id, ts_BSSMAP_ClearCommand(cause)));
 
 		/* expect BSC to disable the channel */
-		rx_rsl := f_exp_ipa_rx(0, tr_RSL_MsgTypeD(RSL_MT_RF_CHAN_REL), T3101_MAX);
-		/* respond with CHAN REL ACK */
-		f_ipa_tx(0, ts_RSL_RF_CHAN_REL_ACK(dt.rsl_chan_nr));
-
-		/* expect Clear Complete from BSC */
-		BSSAP.receive(tr_BSSAP_DATA_ind(dt.sccp_conn_id, tr_BSSMAP_ClearComplete));
-
-		/* MSC disconnects as instructed. */
-		BSSAP.send(ts_BSSAP_DISC_req(dt.sccp_conn_id, 0));
+		f_exp_chan_rel_and_clear(dt, 0);
 	}
 
 	/* In the buggy behavior, a timeout of 2 seconds happens between above
