diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 574d47b..1c8127b 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -5438,9 +5438,21 @@
  * Osmocom Style Dynamic Timeslot Support
  ***********************************************************************/
 
-private function f_dyn_osmo_pdch_act(integer pcu_conn_id, integer bts_nr, integer trx_nr)
+private altstep as_pcuif_check_pdch_mask(integer pcu_conn_id, BIT1 exp,
+					 integer bts_nr, integer trx_nr)
 runs on ConnHdlr {
 	var PCUIF_send_data sd;
+
+	[] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {
+		var bitstring pdch_mask := sd.data.u.info_ind.trx[trx_nr].pdch_mask;
+		if (substr(pdch_mask, g_chan_nr.tn, 1) != exp) {
+			repeat;
+		}
+	}
+}
+
+private function f_dyn_osmo_pdch_act(integer pcu_conn_id, integer bts_nr, integer trx_nr)
+runs on ConnHdlr {
 	/* Expect BTS to immediately acknowledge activation as PDCH */
 	PCU.clear;
 	f_rsl_chan_act(g_pars.chan_mode);
@@ -5448,13 +5460,7 @@
 	timer T_wait := 2.0;
 	T_wait.start;
 	alt {
-	[] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {
-		if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '1'B) {
-			log("PCUIF_INFO_IND PDCH_MASK not yet '1' after PDCH ACT on TS", g_chan_nr.tn,
-			    " mask:", sd.data.u.info_ind.trx[trx_nr].pdch_mask);
-			repeat;
-		}
-		}
+	[] as_pcuif_check_pdch_mask(pcu_conn_id, '1'B, bts_nr, trx_nr);
 	[] PCU.receive { repeat; }
 	[] T_wait.timeout {
 		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
@@ -5468,7 +5474,6 @@
 
 private function f_dyn_osmo_pdch_deact(integer pcu_conn_id, integer bts_nr, integer trx_nr)
 runs on ConnHdlr {
-	var PCUIF_send_data sd;
 	/* Send RSL CHAN REL (deactivate) */
 	PCU.clear;
 	RSL.send(ts_RSL_RF_CHAN_REL(g_chan_nr));
@@ -5476,13 +5481,7 @@
 	timer T_wait := 2.0;
 	T_wait.start;
 	alt {
-	[] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {
-		if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '0'B) {
-			log("PCUIF_INFO_IND PDCH_MASK not yet '0' after PDCH DEACT on TS", g_chan_nr.tn,
-			    " mask:", sd.data.u.info_ind.trx[trx_nr].pdch_mask);
-			repeat;
-		}
-		}
+	[] as_pcuif_check_pdch_mask(pcu_conn_id, '0'B, bts_nr, trx_nr);
 	[] PCU.receive { repeat; }
 	[] T_wait.timeout {
 		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
@@ -5638,7 +5637,6 @@
 
 private function f_dyn_ipa_pdch_act(integer pcu_conn_id, integer bts_nr, integer trx_nr)
 runs on ConnHdlr {
-	var PCUIF_send_data sd;
 	/* Expect BTS to immediately acknowledge activation as PDCH */
 	PCU.clear;
 	RSL.send(ts_RSL_IPA_PDCH_ACT(g_chan_nr));
@@ -5646,13 +5644,7 @@
 	timer T_wait := 2.0;
 	T_wait.start;
 	alt {
-	[] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {
-		if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '1'B) {
-			log("PCUIF_INFO_IND PDCH_MASK not yet '1' after PDCH ACT on TS", g_chan_nr.tn,
-			    " mask:", sd.data.u.info_ind.trx[trx_nr].pdch_mask);
-			repeat;
-		}
-		}
+	[] as_pcuif_check_pdch_mask(pcu_conn_id, '1'B, bts_nr, trx_nr);
 	[] PCU.receive { repeat; }
 	[] T_wait.timeout {
 	        Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
@@ -5668,7 +5660,6 @@
 
 private function f_dyn_ipa_pdch_deact(integer pcu_conn_id, integer bts_nr, integer trx_nr)
 runs on ConnHdlr {
-	var PCUIF_send_data sd;
 	/* Send RSL CHAN REL (deactivate) */
 	RSL.send(ts_RSL_IPA_PDCH_DEACT(g_chan_nr));
 	PCU.clear;
@@ -5676,13 +5667,7 @@
 	timer T_wait := 2.0;
 	T_wait.start;
 	alt {
-	[] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {
-		if (substr(sd.data.u.info_ind.trx[trx_nr].pdch_mask, g_chan_nr.tn, 1) != '0'B) {
-			log("PCUIF_INFO_IND PDCH_MASK not yet '0' after PDCH DEACT on TS", g_chan_nr.tn,
-			    " mask:", sd.data.u.info_ind.trx[trx_nr].pdch_mask);
-			repeat;
-		}
-		}
+	[] as_pcuif_check_pdch_mask(pcu_conn_id, '0'B, bts_nr, trx_nr);
 	[] PCU.receive { repeat; }
 	[] T_wait.timeout {
 	        Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
