diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 005b1d7..58947c5 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -472,7 +472,7 @@
 	trxc_conn_id := res.connId;
 }
 
-/* global init function */
+/* global init function (without PCUIF connection) */
 friend function f_init(uint8_t trx_nr := 0)
 runs on test_CT
 {
@@ -555,9 +555,6 @@
 	f_rsl_bcch_fill(RSL_SYSTEM_INFO_2, ts_SI2_default);
 	f_rsl_bcch_fill(RSL_SYSTEM_INFO_4, ts_SI4_default);
 
-	map(self:PCU, system:PCU);
-	f_init_pcu(PCU, id, g_pcu_conn_id, g_pcu_last_info);
-
 	if (mp_bts_trxc_port != -1) {
 		var TrxcMessage ret;
 
@@ -4283,7 +4280,9 @@
 }
 
 testcase TC_si_sched_13() runs on test_CT {
-	f_init();
+	/* NOTE: PCUIF connection is not used in this test case, but
+	 * without it the IUT would not broadcast SI13 (see OS#3075). */
+	f_init_with_pcuif();
 	si_cfg.si13_present := true;
 	f_rsl_bcch_fill_raw(RSL_SYSTEM_INFO_13, '0106009000185a6fc9e08410ab2b2b2b2b2b2b2b2b2b2b'O);
 	f_TC_si_sched();
@@ -4291,7 +4290,9 @@
 }
 
 testcase TC_si_sched_13_2bis_2ter_2quater() runs on test_CT {
-	f_init();
+	/* NOTE: PCUIF connection is not used in this test case, but
+	 * without it the IUT would not broadcast SI13 (see OS#3075). */
+	f_init_with_pcuif();
 	si_cfg.si2bis_present := true;
 	f_rsl_bcch_fill_raw(RSL_SYSTEM_INFO_2bis, '550602bfe809b3ff00000000000000000000007900002b'O);
 	si_cfg.si2ter_present := true;
@@ -4626,6 +4627,8 @@
 
 friend function f_init_with_pcuif() runs on test_CT {
 	f_init();
+	map(self:PCU, system:PCU);
+	f_init_pcu(PCU, testcasename(), g_pcu_conn_id, g_pcu_last_info);
 	PCU.send(t_SD_PCUIF(g_pcu_conn_id, ts_PCUIF_TXT_IND(0, PCU_VERSION, testcasename())));
 }
 
@@ -5453,7 +5456,7 @@
 	var ConnHdlrPars pars;
 	var ConnHdlr vc_conn;
 
-	f_init();
+	f_init_with_pcuif();
 
 	pars := valueof(t_Pars(t_RslChanNr_SDCCH4(0,3), ts_RSL_ChanMode_SIGN));
 	vc_conn := f_start_handler(refers(f_TC_rr_suspend_req), pars, true);
@@ -5465,7 +5468,7 @@
 	timer T := 5.0;
 
 	/* this (among other things) establishes the first connection to the PCUIF socket */
-	f_init();
+	f_init_with_pcuif();
 
 	/* try to establish a second connection, expect it to fail */
 	PCU.send(UD_connect:{mp_pcu_socket, -1});
@@ -5487,7 +5490,7 @@
 /* Ensure that PCUIF socket can disconnect + reconnect */
 testcase TC_pcu_socket_reconnect() runs on test_CT {
 	/* this (among other things) establishes the first connection to the PCUIF socket */
-	f_init();
+	f_init_with_pcuif();
 
 	f_sleep(1.0);
 
@@ -5548,13 +5551,7 @@
 /* Make sure that GPRS Indicator is absent when the PCU is not connected */
 private function f_TC_pcu_socket_noconnect(RrMessageType si_type)
 runs on test_CT {
-	/* don't call f_init() as this would connect PCU socket */
-	f_init_rsl(testcasename());
-
-	/* Send both System Information Type 3 and 4 (with GPRS Indicator) */
-	f_rsl_bcch_fill(RSL_SYSTEM_INFO_3, ts_SI3_default);
-	f_rsl_bcch_fill(RSL_SYSTEM_INFO_4, ts_SI4_default);
-
+	f_init();
 	f_init_l1ctl();
 	f_l1_tune(L1CTL);
 	f_sleep(2.0);
@@ -5581,7 +5578,7 @@
 private function f_TC_pcu_socket_connect(RrMessageType si_type)
 runs on test_CT {
 	/* this (among other things) establishes the first connection to the PCUIF socket */
-	f_init();
+	f_init_with_pcuif();
 	f_init_l1ctl();
 	f_l1_tune(L1CTL);
 
@@ -5609,7 +5606,7 @@
 private function f_TC_pcu_socket_disconnect(RrMessageType si_type)
 runs on test_CT {
 	/* this (among other things) establishes the first connection to the PCUIF socket */
-	f_init();
+	f_init_with_pcuif();
 	f_init_l1ctl();
 	f_l1_tune(L1CTL);
 
@@ -5646,7 +5643,7 @@
 testcase TC_pcu_socket_verify_info_ind() runs on test_CT {
 	var SystemInformation si3 := valueof(ts_SI3_default);
 
-	f_init();
+	f_init_with_pcuif();
 
 	/* actually give the BTS some time to fully come up and to send a PCU INFO IND with the correct
 	 * information */
@@ -5681,7 +5678,7 @@
 	var PCUIF_info_ind info_ind;
 	var FreqHopPars fhp;
 
-	f_init();
+	f_init_with_pcuif();
 
 	info_ind := g_pcu_last_info.u.info_ind;
 
@@ -5726,7 +5723,7 @@
 	f_vty_config2(BSCVTY, {"network", "bts 0"} , "gprs nsvc 0 remote ip 127.127.127.127");
 	f_vty_transceive(BSCVTY, "drop bts connection 0 oml");
 
-	f_init();
+	f_init_with_pcuif();
 
 	var PCUIF_RemoteAddr remote_addr := g_pcu_last_info.u.info_ind.remote_addr;
 	var template PCUIF_RemoteAddr tr_remote_addr := {
@@ -5746,7 +5743,7 @@
 	f_init_vty_bsc();
 	f_vty_config2(BSCVTY, {"network", "bts 0"} , "gprs nsvc 0 remote ip fd00::ca:ff:ee");
 
-	f_init();
+	f_init_with_pcuif();
 
 	var PCUIF_RemoteAddr remote_addr := g_pcu_last_info.u.info_ind.remote_addr;
 	var template PCUIF_RemoteAddr tr_remote_addr := {
