diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 1e96dcb..2dc6635 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -5687,7 +5687,7 @@
 
 	for (var integer i := 0; i < mp_transceiver_num; i := i + 1) {
 		for (var integer tn := 0; tn < 8; tn := tn + 1) {
-			if (info_ind.trx.v10[i].pdch_mask[tn] != '1'B) {
+			if (info_ind.trx[i].pdch_mask[tn] != '1'B) {
 				/* Skip inactive timeslots */
 				continue;
 			}
@@ -5708,7 +5708,7 @@
 				tr_ts := tr_PCUIF_InfoTrxTsH0;
 			}
 
-			var PCUIF_InfoTrxTs ts := info_ind.trx.v10[i].ts[tn];
+			var PCUIF_InfoTrxTs ts := info_ind.trx[i].ts[tn];
 			log("Checking timeslot #", tn, " of trx#", i, ": ", ts);
 			if (not match(ts, tr_ts)) {
 				setverdict(fail, "Hopping parameters do not match: ",
@@ -5720,7 +5720,7 @@
 	}
 }
 
-/* Verify IPv4 NSVC address in the INFO.ind message (version >= 10) */
+/* Verify IPv4 NSVC address in the INFO.ind message */
 testcase TC_pcu_socket_nsvc_ipv4() runs on test_CT {
 	f_init_vty_bsc();
 	f_vty_config2(BSCVTY, {"network", "bts 0"} , "gprs nsvc 0 remote ip 127.127.127.127");
@@ -5729,23 +5729,19 @@
 	f_init();
 
 	var PCUIF_RemoteAddr remote_addr := g_pcu_last_info.u.info_ind.remote_addr;
-	if (not ischosen(remote_addr.v10)) {
-		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
-					log2str("Unexpected remote_addr: ", remote_addr));
-	}
+	var template PCUIF_RemoteAddr tr_remote_addr := {
+		addr_type := { PCUIF_ADDR_TYPE_IPV4, ? },
+		addr := { f_inet_addr("127.127.127.127"), ? }
+	};
 
-	if (remote_addr.v10.addr_type[0] != PCUIF_ADDR_TYPE_IPV4) {
-		setverdict(fail, "Received address family is not IPv4");
-	}
-
-	if (substr(remote_addr.v10.addr[0], 0, 4) != f_inet_addr("127.127.127.127")) {
-		setverdict(fail, "Unexpected address: ", remote_addr.v10.addr[0]);
+	if (not match(remote_addr, tr_remote_addr)) {
+		setverdict(fail, "NSVC address ", remote_addr, " does not match ", tr_remote_addr);
 	}
 
 	setverdict(pass);
 }
 
-/* Verify IPv4 NSVC address in the INFO.ind message (version >= 10) */
+/* Verify IPv4 NSVC address in the INFO.ind message */
 testcase TC_pcu_socket_nsvc_ipv6() runs on test_CT {
 	f_init_vty_bsc();
 	f_vty_config2(BSCVTY, {"network", "bts 0"} , "gprs nsvc 0 remote ip fd00::ca:ff:ee");
@@ -5753,17 +5749,13 @@
 	f_init();
 
 	var PCUIF_RemoteAddr remote_addr := g_pcu_last_info.u.info_ind.remote_addr;
-	if (not ischosen(remote_addr.v10)) {
-		Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
-					log2str("Unexpected remote_addr: ", remote_addr));
-	}
+	var template PCUIF_RemoteAddr tr_remote_addr := {
+		addr_type := { PCUIF_ADDR_TYPE_IPV6, ? },
+		addr := { f_inet6_addr("fd00::ca:ff:ee"), ? }
+	};
 
-	if (remote_addr.v10.addr_type[0] != PCUIF_ADDR_TYPE_IPV6) {
-		setverdict(fail, "Received address family is not IPv6");
-	}
-
-	if (remote_addr.v10.addr[0] != f_inet6_addr("fd00::ca:ff:ee")) {
-		setverdict(fail, "Unexpected address: ", remote_addr.v10.addr[0]);
+	if (not match(remote_addr, tr_remote_addr)) {
+		setverdict(fail, "NSVC address ", remote_addr, " does not match ", tr_remote_addr);
 	}
 
 	setverdict(pass);
@@ -5779,7 +5771,7 @@
 	var PCUIF_send_data sd;
 
 	[] PCU.receive(t_SD_PCUIF(pcu_conn_id, tr_PCUIF_INFO_IND(bts_nr, ?))) -> value sd {
-		var BIT8 pdch_mask := f_PCUIF_ver_INFO_PDCHMask_get(sd.data.u.info_ind, trx_nr);
+		var BIT8 pdch_mask := sd.data.u.info_ind.trx[trx_nr].pdch_mask;
 		if (substr(pdch_mask, g_chan_nr.tn, 1) != exp) {
 			repeat;
 		}
@@ -7358,12 +7350,9 @@
 		execute( TC_dyn_osmo_pdch_double_act() );
 		execute( TC_dyn_ipa_pdch_act_deact() );
 		execute( TC_dyn_ipa_pdch_act_tchf_act_nack() );
-
-		if (PCUIF_Types.mp_pcuif_version >= 10) {
-			execute( TC_pcu_info_ind_fh_params() );
-			execute( TC_pcu_socket_nsvc_ipv4() );
-			execute( TC_pcu_socket_nsvc_ipv6() );
-		}
+		execute( TC_pcu_info_ind_fh_params() );
+		execute( TC_pcu_socket_nsvc_ipv4() );
+		execute( TC_pcu_socket_nsvc_ipv6() );
 	} else {
 		log("PCU socket path not available, skipping PCU tests");
 	}
