diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index a18777a..005b1d7 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -4624,42 +4624,42 @@
 	}
 }
 
-friend function f_init_pcu_test() runs on test_CT {
+friend function f_init_with_pcuif() runs on test_CT {
 	f_init();
 	PCU.send(t_SD_PCUIF(g_pcu_conn_id, ts_PCUIF_TXT_IND(0, PCU_VERSION, testcasename())));
 }
 
 /* PDCH activation via PCU socket; check for presence of RTS.req */
 testcase TC_pcu_act_req() runs on test_CT {
-	f_init_pcu_test();
+	f_init_with_pcuif();
 
 	f_TC_pcu_act_req(0, 0, 7, true);
 }
 
 /* PDCH activation via PCU socket on non-PDCU timeslot */
 testcase TC_pcu_act_req_wrong_ts() runs on test_CT {
-	f_init_pcu_test();
+	f_init_with_pcuif();
 
 	f_TC_pcu_act_req(0, 0, 1, false);
 }
 
 /* PDCH activation via PCU socket on wrong BTS */
 testcase TC_pcu_act_req_wrong_bts() runs on test_CT {
-	f_init_pcu_test();
+	f_init_with_pcuif();
 
 	f_TC_pcu_act_req(23, 0, 7, false);
 }
 
 /* PDCH activation via PCU socket on wrong TRX */
 testcase TC_pcu_act_req_wrong_trx() runs on test_CT {
-	f_init_pcu_test();
+	f_init_with_pcuif();
 
 	f_TC_pcu_act_req(0, 23, 7, false);
 }
 
 /* PDCH deactivation via PCU socket; check for absence of RTS.req */
 testcase TC_pcu_deact_req() runs on test_CT {
-	f_init_pcu_test();
+	f_init_with_pcuif();
 
 	/* Activate PDCH */
 	f_TC_pcu_act_req(0, 0, 7, true);
@@ -4670,7 +4670,7 @@
 
 /* Attempt to deactivate a PDCH on a non-PDCH timeslot */
 testcase TC_pcu_deact_req_wrong_ts() runs on test_CT {
-	f_init_pcu_test();
+	f_init_with_pcuif();
 
 	f_TC_pcu_deact_req(0, 0, 1);
 }
@@ -4679,7 +4679,7 @@
 function f_TC_pcu_ver_siXX(octetstring si, RSL_IE_SysinfoType rsl_si_type) runs on test_CT {
 	var PCUIF_send_data sd;
 	timer T:= 3.0;
-	f_init_pcu_test();
+	f_init_with_pcuif();
 
 	/* Set SI13 via RSL */
 	f_rsl_bcch_fill_raw(rsl_si_type, si);
@@ -4852,7 +4852,7 @@
 	 * support dynamic timeslots?  But it uses the same scheduler as osmo-bts-trx ?!? */
 	f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 3"}, "phys_chan_config TCH/F");
 	f_vty_config2(BSCVTY, {"network", "bts 0", "trx 0", "timeslot 4"}, "phys_chan_config TCH/F");
-	f_init_pcu_test();
+	f_init_with_pcuif();
 }
 
 private function f_virtphy_common() runs on test_CT {
@@ -4926,7 +4926,7 @@
 	var octetstring data;
 	timer T;
 
-	f_init_pcu_test();
+	f_init_with_pcuif();
 	f_init_l1ctl();
 	f_l1_tune(L1CTL);
 
@@ -4982,7 +4982,7 @@
 /* Send AGCH from PCU; check it appears on Um side */
 testcase TC_pcu_data_req_agch() runs on test_CT {
 	timer T := 3.0;
-	f_init_pcu_test();
+	f_init_with_pcuif();
 	f_init_l1ctl();
 	f_l1_tune(L1CTL);
 
@@ -5004,7 +5004,7 @@
 /* Send AGCH from PCU; check it appears on Um side */
 testcase TC_pcu_data_req_pch() runs on test_CT {
 	timer T := 3.0;
-	f_init_pcu_test();
+	f_init_with_pcuif();
 	f_init_l1ctl();
 	f_l1_tune(L1CTL);
 
@@ -5027,7 +5027,7 @@
 /* Send IMM.ASS from PCU for PCH; check it appears on Um side */
 testcase TC_pcu_data_req_imm_ass_pch() runs on test_CT {
 	var octetstring imm_ass := f_rnd_octstring(23);
-	f_init_pcu_test();
+	f_init_with_pcuif();
 	f_init_l1ctl();
 	f_l1_tune(L1CTL);
 
@@ -5050,7 +5050,7 @@
 
 /* Send RACH from Um side, expect it to show up on PCU socket */
 testcase TC_pcu_rach_content() runs on test_CT {
-	f_init_pcu_test();
+	f_init_with_pcuif();
 	f_init_l1ctl();
 	f_l1_tune(L1CTL);
 
@@ -5091,7 +5091,7 @@
 	var GsmFrameNumber fn;
 	var BIT11 ra11;
 
-	f_init_pcu_test();
+	f_init_with_pcuif();
 	f_init_l1ctl();
 	f_l1_tune(L1CTL);
 
@@ -5188,7 +5188,7 @@
 
 /* Verify C/I (Carrier-to-Interference ratio) processing of PDTCH frames */
 testcase TC_pcu_data_ind_lqual_cb() runs on test_CT {
-	f_init_pcu_test();
+	f_init_with_pcuif();
 	PCU.clear;
 
 	f_init_l1ctl();
@@ -5217,7 +5217,7 @@
 
 /* Send PAGING via RSL, expect it to shw up on PCU socket */
 testcase TC_pcu_paging_from_rsl() runs on test_CT {
-	f_init_pcu_test();
+	f_init_with_pcuif();
 
 	for (var integer i := 0; i < 100; i := i+1) {
 		var MobileIdentityLV mi_lv;
@@ -5262,7 +5262,7 @@
 	var float test_duration := 5.0;
 	timer T;
 
-	f_init_pcu_test();
+	f_init_with_pcuif();
 	f_TC_pcu_act_req(0, 0, 7, true);
 
 	PCU.clear;
@@ -5316,7 +5316,7 @@
 	var float test_duration := 5.0;
 	timer T;
 
-	f_init_pcu_test();
+	f_init_with_pcuif();
 	f_TC_pcu_act_req(0, 0, 7, true);
 
 	PCU.clear;
@@ -5388,7 +5388,7 @@
 	var float test_duration := 5.0;
 	timer T;
 
-	f_init_pcu_test();
+	f_init_with_pcuif();
 	f_TC_pcu_act_req(0, 0, 7, true);
 
 	/* re-connect CTRL port from BTS to BSC */
@@ -5775,7 +5775,7 @@
 	f_vty_config2(BSCVTY, {"network", "bts 0"} , "gprs nsvc 1 remote ip fd00::ca:ff:ee");
 	f_vty_config2(BSCVTY, {"network", "bts 0"} , "gprs nsvc 1 remote udp port 5678");
 
-	f_init_pcu_test();
+	f_init_with_pcuif();
 
 	var PCUIF_info_ind info_ind := g_pcu_last_info.u.info_ind;
 	var PCUIF_RemoteAddr remote_addr := info_ind.remote_addr;
