diff --git a/library/PCUIF_Types.ttcn b/library/PCUIF_Types.ttcn
index a36e261..ae0762a 100644
--- a/library/PCUIF_Types.ttcn
+++ b/library/PCUIF_Types.ttcn
@@ -677,62 +677,13 @@
 		ts_PCUIF_InfoTrx, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL,
 		ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL, ts_PCUIF_InfoTrxNULL };
 
-
 template (value) PCUIF_Message ts_PCUIF_INFO_IND(template (value) uint8_t bts_nr,
-						 template (value) uint16_t nsei,
-						 template (value) uint16_t nsvci,
-						 template (value) uint16_t bvci,
-						 template (value) uint16_t local_port,
-						 template (value) uint16_t remote_port,
-						 template (value) OCT4 remote_ip,
-						 template (value) PCUIF_Flags flags := c_PCUIF_Flags_default,
-						 template (value) uint16_t mcc := 262,
-						 template (value) uint16_t mnc := 42,
-						 template (value) uint16_t lac := 13135,
-						 template (value) uint8_t rac := 0,
-						 template (value) uint16_t cell_id := 20960,
-						 template (value) uint8_t bsic := 7,
-						 template (value) PCUIF_InfoTrxs trx := ts_PCUIF_InfoTrxs_def,
-						 template (value) uint32_t version := PCU_IF_VERSION) := {
+						 template (value) PCUIF_info_ind info_ind) := {
 	msg_type := PCU_IF_MSG_INFO_IND,
 	bts_nr := bts_nr,
 	spare := '0000'O,
 	u := {
-		info_ind := {
-			version := version,
-			flags := flags,
-			trx := trx,
-			bsic := bsic,
-			mcc := mcc,
-			mnc := mnc,
-			mnc_3_digits := 0,
-			lac := lac,
-			rac := rac,
-			nsei := nsei,
-			nse_timer := { 3, 3, 3, 3, 30, 3, 10 },
-			cell_timer := { 3, 3, 3, 3, 3, 10, 3, 10, 3, 10, 3 },
-			cell_id := cell_id,
-			repeat_time := 5 * 50,
-			repeat_count := 3,
-			bvci := bvci,
-			t3142 := 20,
-			t3169 := 5,
-			t3191 := 5,
-			t3193_10ms := 160,
-			t3195 := 5,
-			t3101 := 10,
-			t3103 := 4,
-			t3105 := 8,
-			cv_countdown := 15,
-			dl_tbf_ext := 250 * 10, /* ms */
-			ul_tbf_ext := 250 * 10, /* ms */
-			initial_cs := 2,
-			initial_mcs := 6,
-			nsvci := { nsvci, 0 },
-			local_pprt := { local_port, 0 },
-			remote_port := { remote_port, 0 },
-			remote_ip := { remote_ip , '00000000'O }
-		}
+		info_ind := info_ind
 	}
 }
 template PCUIF_Message tr_PCUIF_INFO_IND(template uint8_t bts_nr := ?,
diff --git a/pcu/PCU_Tests_RAW.ttcn b/pcu/PCU_Tests_RAW.ttcn
index 4d20027..d5e53e2 100644
--- a/pcu/PCU_Tests_RAW.ttcn
+++ b/pcu/PCU_Tests_RAW.ttcn
@@ -69,9 +69,50 @@
 		}
 }
 
+/* FIXME: make sure to use parameters from mp_gb_cfg.cell_id in the PCU INFO IND */
+template (value) PCUIF_info_ind ts_PCUIF_INFO_default := {
+	version := PCU_IF_VERSION,
+	flags := c_PCUIF_Flags_default,
+	trx := valueof(ts_PCUIF_InfoTrxs_def),
+	bsic := 7,
+	mcc := 262,
+	mnc := 42,
+	mnc_3_digits := 0,
+	lac := 13135,
+	rac := 0,
+	nsei := mp_nsconfig.nsei,
+	nse_timer := { 3, 3, 3, 3, 30, 3, 10 },
+	cell_timer := { 3, 3, 3, 3, 3, 10, 3, 10, 3, 10, 3 },
+	cell_id := 20960,
+	repeat_time := 5 * 50,
+	repeat_count := 3,
+	bvci := mp_gb_cfg.bvci,
+	t3142 := 20,
+	t3169 := 5,
+	t3191 := 5,
+	t3193_10ms := 160,
+	t3195 := 5,
+	t3101 := 10,
+	t3103 := 4,
+	t3105 := 8,
+	cv_countdown := 15,
+	dl_tbf_ext := 250 * 10, /* ms */
+	ul_tbf_ext := 250 * 10, /* ms */
+	initial_cs := 2,
+	initial_mcs := 6,
+	nsvci := { mp_nsconfig.nsvci, 0 },
+	local_pprt := { mp_nsconfig.remote_udp_port, 0 },
+	remote_port := { mp_nsconfig.local_udp_port, 0 },
+	remote_ip := { f_inet_haddr(mp_nsconfig.local_ip) , '00000000'O }
+}
+
 function f_init_pcuif() runs on RAW_PCU_CT {
+	var PCUIF_info_ind info_ind;
 	map(self:PCU, system:PCU);
 
+
+	info_ind := valueof(ts_PCUIF_INFO_default);
+
 	/* Connect the Unix Domain Socket */
 	g_pcu_conn_id := f_pcuif_listen(PCU, mp_pcu_sock_path);
 	PCU.receive(UD_connected:?);
@@ -79,15 +120,8 @@
 	/* Wait for PCU_VERSION and return INFO_IND */
 	PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_TXT_IND(0, PCU_VERSION, ?)));
 	/* FIXME: make sure to use parameters from mp_gb_cfg.cell_id in the PCU INFO IND */
-	var template PCUIF_Message info_ind := ts_PCUIF_INFO_IND(bts_nr := 0,
-								nsei := mp_nsconfig.nsei,
-								nsvci := mp_nsconfig.nsvci,
-								bvci := mp_gb_cfg.bvci,
-								local_port := mp_nsconfig.remote_udp_port,
-								remote_port := mp_nsconfig.local_udp_port,
-								remote_ip := f_inet_haddr(mp_nsconfig.local_ip)
-								);
-	PCU.send(t_SD_PCUIF(g_pcu_conn_id, info_ind));
+	var template PCUIF_Message info_ind_msg := ts_PCUIF_INFO_IND(0, info_ind);
+	PCU.send(t_SD_PCUIF(g_pcu_conn_id, info_ind_msg));
 }
 
 function f_pcuif_tx(template (value) PCUIF_Message msg) runs on RAW_PCU_CT {
@@ -439,9 +473,8 @@
 		}
 }
 
-private function f_init_raw(charstring id)
+private function f_init_raw(charstring id, template (value) PCUIF_info_ind info_ind := ts_PCUIF_INFO_default)
 runs on RAW_PCU_Test_CT {
-	var PCUIF_info_ind info_ind;
 	var RAW_PCUIF_CT vc_PCUIF;
 	var RAW_PCU_BTS_CT vc_BTS;
 
@@ -459,44 +492,8 @@
 	connect(vc_BTS:PCUIF, vc_PCUIF:BTS);
 	connect(vc_BTS:TC, self:BTS);
 
-	/* FIXME: make sure to use parameters from mp_gb_cfg.cell_id in the PCU INFO IND */
-	info_ind := {
-		version := PCU_IF_VERSION,
-		flags := c_PCUIF_Flags_default,
-		trx := valueof(ts_PCUIF_InfoTrxs_def),
-		/* TODO: make this configurable */
-		bsic := 7, mcc := 262, mnc := 42,
-		mnc_3_digits := 0,
-		/* TODO: make this configurable */
-		lac := 13135, rac := 0,
-		nsei := mp_nsconfig.nsei,
-		nse_timer := { 3, 3, 3, 3, 30, 3, 10 },
-		cell_timer := { 3, 3, 3, 3, 3, 10, 3, 10, 3, 10, 3 },
-		cell_id := 20960,
-		repeat_time := 5 * 50,
-		repeat_count := 3,
-		bvci := mp_gb_cfg.bvci,
-		t3142 := 20,
-		t3169 := 5,
-		t3191 := 5,
-		t3193_10ms := 160,
-		t3195 := 5,
-		t3101 := 10,
-		t3103 := 4,
-		t3105 := 8,
-		cv_countdown := 15,
-		dl_tbf_ext := 250 * 10, /* ms */
-		ul_tbf_ext := 250 * 10, /* ms */
-		initial_cs := 2,
-		initial_mcs := 6,
-		nsvci := { mp_nsconfig.nsvci, 0 },
-		local_pprt := { mp_nsconfig.remote_udp_port, 0 },
-		remote_port := { mp_nsconfig.local_udp_port, 0 },
-		remote_ip := { f_inet_haddr(mp_nsconfig.local_ip), '00000000'O }
-	};
-
 	vc_PCUIF.start(f_PCUIF_CT_handler(mp_pcu_sock_path));
-	vc_BTS.start(f_BTS_CT_handler(0, info_ind));
+	vc_BTS.start(f_BTS_CT_handler(0, valueof(info_ind)));
 
 	/* Wait until the BTS is ready (SI13 negotiated) */
 	BTS.receive(tr_RAW_PCU_EV(BTS_EV_SI13_NEGO));
