diff --git a/bts/BTS_Tests.ttcn b/bts/BTS_Tests.ttcn
index 3018bca..9534a8b 100644
--- a/bts/BTS_Tests.ttcn
+++ b/bts/BTS_Tests.ttcn
@@ -2978,18 +2978,17 @@
 			/* Send paging cmds based on elapsed time */
 			var integer new_sent := f_min(pkt_total, float2int(T_total.read * pch_blocks_per_sec) + 1);
 			while (st.num_paging_sent < new_sent) {
+				var MobileIdentityV mi;
+
 				/* build mobile Identity */
-				var MobileIdentityLV mi;
 				if (cfg.use_tmsi) {
-					mi := valueof(ts_MI_TMSI_LV(f_rnd_octstring(4)));
+					mi := valueof(t_MI_TMSI(f_rnd_octstring(4)));
 				} else {
-					mi := valueof(ts_MI_IMSI_LV(f_gen_imsi(st.num_paging_sent)));
+					mi := valueof(ts_MI_IMSI(f_gen_imsi(st.num_paging_sent)));
 				}
-				var octetstring mi_enc_lv := enc_MobileIdentityLV(mi);
-				var octetstring mi_enc := substr(mi_enc_lv, 1, lengthof(mi_enc_lv)-1);
 
 				/* Send RSL PAGING COMMAND */
-				RSL_CCHAN.send(ts_RSL_UD(ts_RSL_PAGING_CMD(mi_enc, st.num_paging_sent mod 4)));
+				RSL_CCHAN.send(ts_RSL_UD(ts_RSL_PAGING_CMD(mi, st.num_paging_sent mod 4)));
 
 				st.num_paging_sent := st.num_paging_sent + 1;
 			}
@@ -4570,22 +4569,27 @@
 	f_init_pcu_test();
 
 	for (var integer i := 0; i < 100; i := i+1) {
-		var MobileIdentityLV mi;
+		var MobileIdentityLV mi_lv;
+		var octetstring mi_lv_enc;
+		var MobileIdentityV mi;
 		timer T := 3.0;
+
 		if (i < 50) {
-			mi := valueof(ts_MI_TMSI_LV(f_rnd_octstring(4)));
+			mi := valueof(t_MI_TMSI(f_rnd_octstring(4)));
 		} else {
-			mi := valueof(ts_MI_IMSI_LV(f_gen_imsi(i)));
+			mi := valueof(ts_MI_IMSI(f_gen_imsi(i)));
 		}
-		var octetstring mi_enc_lv := enc_MobileIdentityLV(mi);
-		var octetstring mi_enc := substr(mi_enc_lv, 1, lengthof(mi_enc_lv)-1);
-		var octetstring t_mi_lv := f_pad_oct(mi_enc_lv, 9, '00'O);
+
+		/* Fancy encoding for PCUIF */
+		mi_lv := valueof(ts_MI_LV(mi));
+		mi_lv_enc := enc_MobileIdentityLV(mi_lv);
+		mi_lv_enc := f_pad_oct(mi_lv_enc, 9, '00'O);
 
 		/* Send RSL PAGING COMMAND */
-		RSL_CCHAN.send(ts_RSL_UD(ts_RSL_PAGING_CMD(mi_enc, i mod 4)));
+		RSL_CCHAN.send(ts_RSL_UD(ts_RSL_PAGING_CMD(mi, i mod 4)));
 		T.start;
 		alt {
-		[] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_PAG_REQ(0, t_mi_lv))) {
+		[] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_PAG_REQ(0, mi_lv_enc))) {
 			}
 		[] PCU.receive(t_SD_PCUIF(g_pcu_conn_id, tr_PCUIF_PAG_REQ)) {
 			Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "Unexpected PAGING REQ");
