diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index de7102e..353ab16 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -1298,11 +1298,10 @@
 				  template BSSMAP_FIELD_CellIdentificationList cid_list,
 				  BtsIdList bts_ids := { 0 },
 				  template RSL_ChanNeeded rsl_chneed := omit,
-				  template OCT4 tmsi := omit) runs on test_CT
+				  template (omit) OCT4 tmsi := omit) runs on test_CT
 {
 	var template BSSMAP_IE_ChannelNeeded bssmap_chneed;
-	/* FIXME (unused): var MobileIdentity mi; */
-	var template octetstring id_enc; /* FIXME */
+	var template MobileIdentityV mi;
 	var RSL_Message rx_rsl;
 	var integer paging_group := hex2int(imsi[lengthof(imsi)-1]);
 	var integer i;
@@ -1323,17 +1322,14 @@
 
 	f_bssap_tx_ud(ts_BSSMAP_Paging(imsi, cid_list, tmsi, bssmap_chneed));
 
-/* FIXME: Disabled due to bugs in both GSM_RR_Types and MobileL3_CommonIE_Types IMSI encoder
-	if (isvalue(tmsi)) {
-		mi := valueof(t_Osmo_MI_TMSI(oct2int(valueof(tmsi))));
+	if (not istemplatekind(tmsi, "omit")) {
+		mi := t_MI_TMSI(tmsi);
 	} else {
-		mi := valueof(ts_Osmo_MI_IMSI(imsi));
+		mi := tr_MI_IMSI(imsi);
 	}
-	id_enc := enc_MobileIdentity(mi);
-*/
-	id_enc := ?;
+
 	for (i := 0; i < sizeof(bts_ids); i := i + 1) {
-		rx_rsl := f_exp_ipa_rx(bts_ids[i], tr_RSL_PAGING_CMD(id_enc));
+		rx_rsl := f_exp_ipa_rx(bts_ids[i], tr_RSL_PAGING_CMD(mi));
 		/* check channel type, paging group */
 		if (rx_rsl.ies[1].body.paging_group != paging_group) {
 			setverdict(fail, "Paging for wrong paging group");
@@ -1352,7 +1348,7 @@
 		}
 		T.start;
 		alt {
-		[] IPA_RSL[i].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_PAGING_CMD(id_enc))) {
+		[] IPA_RSL[i].receive(tr_ASP_RSL_UD(IPAC_PROTO_RSL_TRX0, tr_RSL_PAGING_CMD(mi))) {
 			setverdict(fail, "Paging on BTS ", i, " which is not part of ", bts_ids);
 			}
 		[] IPA_RSL[i].receive { repeat; }
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");
diff --git a/library/L3_Templates.ttcn b/library/L3_Templates.ttcn
index 7e53709..092026e 100644
--- a/library/L3_Templates.ttcn
+++ b/library/L3_Templates.ttcn
@@ -122,6 +122,12 @@
 		imsi := f_tr_MI_IMSI(imsi)
 	}
 };
+template (value) MobileIdentityV ts_MI_IMSI(hexstring imsi) := {
+	typeOfIdentity := '001'B,
+	oddEvenInd_identity := {
+		imsi := f_enc_IMSI_L3(imsi)
+	}
+};
 
 
 /* send template for Mobile Identity (TMSI) */
diff --git a/library/RSL_Types.ttcn b/library/RSL_Types.ttcn
index f905973..ff0e2e5 100644
--- a/library/RSL_Types.ttcn
+++ b/library/RSL_Types.ttcn
@@ -16,6 +16,8 @@
 	import from General_Types all;
 	import from Osmocom_Types all;
 	import from GSM_Types all;
+	import from MobileL3_CommonIE_Types all;
+	import from L3_Templates all;
 
 	/* Section 9.1 */
 	type enumerated RSL_MessageGroup {
@@ -819,7 +821,7 @@
 		uint8_t			smscb_chan_ind,
 		RSL_IE_RequestRef	req_ref,
 		RSL_LV			full_imm_ass_info,
-		RSL_LV			ms_identity,
+		MobileIdentityLV	ms_identity,
 
 		uint16_t		ipa_conn_id,
 		uint16_t		ipa_local_port,
@@ -1677,23 +1679,23 @@
 	}
 
 	/* 8.5.5 BSC -> BTS */
-	template RSL_Message tr_RSL_PAGING_CMD(template octetstring identity, template uint3_t tn := ?) := {
+	template RSL_Message tr_RSL_PAGING_CMD(template MobileIdentityV mi, template uint3_t tn := ?) := {
 		msg_disc := tr_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
 		msg_type := RSL_MT_PAGING_CMD,
 		ies := {
 			tr_RSL_IE(RSL_IE_Body:{chan_nr := t_RslChanNr_PCH_AGCH(tn)}),
 			tr_RSL_IE(RSL_IE_Body:{paging_group := ?}),
-			tr_RSL_IE(RSL_IE_Body:{ms_identity := tr_RSL_LV(identity)}),
+			tr_RSL_IE(RSL_IE_Body:{ms_identity := tr_MI_LV(mi)}),
 			* /* opt: channel needed, eMLPP prio */
 		}
 	}
-	template (value) RSL_Message ts_RSL_PAGING_CMD(octetstring identity, uint8_t pg, uint3_t tn := 0) := {
+	template (value) RSL_Message ts_RSL_PAGING_CMD(MobileIdentityV mi, uint8_t pg, uint3_t tn := 0) := {
 		msg_disc := ts_RSL_MsgDisc(RSL_MDISC_CCHAN, false),
 		msg_type := RSL_MT_PAGING_CMD,
 		ies := {
 			t_RSL_IE(RSL_IE_CHAN_NR, RSL_IE_Body:{chan_nr := ts_RslChanNr_PCH_AGCH(tn)}),
 			t_RSL_IE(RSL_IE_PAGING_GROUP, RSL_IE_Body:{paging_group := pg}),
-			t_RSL_IE(RSL_IE_MS_IDENTITY, RSL_IE_Body:{ms_identity := ts_RSL_LV(identity)})
+			t_RSL_IE(RSL_IE_MS_IDENTITY, RSL_IE_Body:{ms_identity := ts_MI_LV(mi)})
 		}
 	}
 
