diff --git a/pcu/GPRS_Components.ttcn b/pcu/GPRS_Components.ttcn
index d6abf6d..7364476 100644
--- a/pcu/GPRS_Components.ttcn
+++ b/pcu/GPRS_Components.ttcn
@@ -934,8 +934,10 @@
 	return f_rrbp_ack_fn(dl_fn, rrbp);
 }
 
-function f_pkt_paging_match_tmsi(in PacketPagingReq req, template GsmTmsi tmsi)
-runs on MS_BTS_IFACE_CT {
+/* Return true if a given Packet Paging Request contains the given IMSI, false otherwise */
+function f_pkt_paging_match_imsi(in PacketPagingReq req, template hexstring imsi,
+				 boolean cs_domain := true, boolean ps_domain := true)
+runs on MS_BTS_IFACE_CT return boolean {
 	if (not ispresent(req.repeated_pageinfo)) {
 		setverdict(fail, "Packet Paging Request without MIs?!?");
 		f_shutdown(__BFILE__, __LINE__);
@@ -943,18 +945,57 @@
 
 	for (var integer i := 0; i < lengthof(req.repeated_pageinfo); i := i + 1) {
 		var PageInfo info := req.repeated_pageinfo[i].item;
-		if (not ischosen(info.cs))
-			{ continue; }
+		var MobileIdentityLV_Paging mi_lv;
 
-		if (match(info.cs.tmsi, tmsi)) {
-			setverdict(pass);
-			return;
+		if (ischosen(info.cs)) { /* CS domain */
+			if (not ispresent(info.cs.mobile_identity))
+				{ continue; }
+			if (not cs_domain)
+				{ continue; }
+			mi_lv := info.cs.mobile_identity;
+		} else { /* PS domain */
+			if (not ispresent(info.ps.mobile_identity))
+				{ continue; }
+			if (not ps_domain)
+				{ continue; }
+			mi_lv := info.ps.mobile_identity;
+		}
+
+		/* Make sure MI contains IMSI before referencing it */
+		if (match(mi_lv.mobile_id, decmatch tr_MI_IMSI(imsi))) {
+			return true;
 		}
 	}
 
-	setverdict(fail, "Mobile Identity (TMSI/P-TMSI) ", tmsi,
-		   " is not present in ", req.repeated_pageinfo);
-	f_shutdown(__BFILE__, __LINE__);
+	return false;
+}
+
+/* Return true if a given Packet Paging Request contains the given P-TMSI, false otherwise */
+function f_pkt_paging_match_tmsi(in PacketPagingReq req, template GsmTmsi tmsi,
+				 boolean cs_domain := true, boolean ps_domain := true)
+runs on MS_BTS_IFACE_CT return boolean {
+	if (not ispresent(req.repeated_pageinfo)) {
+		setverdict(fail, "Packet Paging Request without MIs?!?");
+		f_shutdown(__BFILE__, __LINE__);
+	}
+
+	for (var integer i := 0; i < lengthof(req.repeated_pageinfo); i := i + 1) {
+		var PageInfo info := req.repeated_pageinfo[i].item;
+
+		if (cs_domain and ischosen(info.cs)) {
+			if (not ispresent(info.cs.tmsi))
+				{ continue; }
+			if (match(info.cs.tmsi, tmsi))
+				{ return true; }
+		} else if (ps_domain) {
+			if (not ispresent(info.ps.ptmsi))
+				{ continue; }
+			if (match(info.ps.ptmsi, tmsi))
+				{ return true; }
+		}
+	}
+
+	return false;
 }
 
 }
