diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn
index 0513c02..0767331 100644
--- a/gbproxy/GBProxy_Tests.ttcn
+++ b/gbproxy/GBProxy_Tests.ttcn
@@ -1468,6 +1468,26 @@
 	f_cleanup();
 }
 
+/* Rejected PS-PAGING on PTP-BVC for BVCI (one cell) */
+testcase TC_paging_ps_reject_ptp_bvci() runs on test_CT {
+	f_init();
+	f_start_handlers(refers(f_TC_paging_ps_reject_ptp_bvci), testcasename(), 16);
+	f_cleanup();
+}
+
+/* Rejected PS-PAGING on PTP-BVC for BVCI (one cell) using IMSI only (no P-TMSI allocated) */
+private function f_TC_paging_ps_reject_ptp_bvci(charstring id) runs on BSSGP_ConnHdlr
+{
+	/* first send the PS-PAGING from SGSN -> PCU */
+	f_send_paging_ps_exp_one_bss(ts_BssgpP4Bvci(pcu_bvc_cfg[0].bvci), 0, false, 0);
+	/* then simulate the PS-PAGING-REJECT from the PCU */
+	f_send_paging_ps_rej(use_sig:=false);
+}
+testcase TC_paging_ps_reject_ptp_bvci_imsi() runs on test_CT {
+	f_init();
+	f_start_handlers(refers(f_TC_paging_ps_reject_ptp_bvci), testcasename(), 16, have_ptmsi:=false);
+	f_cleanup();
+}
 
 /* PS-PAGING on PTP-BVC for unknown BVCI */
 private function f_TC_paging_ps_ptp_bvci_unknown(charstring id) runs on BSSGP_ConnHdlr
@@ -1536,6 +1556,53 @@
 	setverdict(pass);
 }
 
+/* Send PAGING-PS-REJECT on SIG BVC, expect it to arrive on the "right" SGSN */
+private function f_send_paging_ps_rej(boolean use_sig := true, integer pcu_idx := 0) runs on BSSGP_ConnHdlr
+{
+	var template (value) PDU_BSSGP pdu_tx;
+	var template (present) PDU_BSSGP exp_rx;
+	var PDU_BSSGP pdu_rx;
+	timer T := 5.0;
+	var template (omit) GsmTmsi tmsi_int := omit;
+
+	if (ispresent(g_pars.p_tmsi)) {
+		tmsi_int := oct2int(g_pars.p_tmsi);
+	}
+
+	pdu_tx := ts_BSSGP_PAGING_PS_REJ(g_pars.imsi, 23, 42, tmsi_int);
+	exp_rx := tr_BSSGP_PAGING_PS_REJ(g_pars.imsi, 23, 42, tmsi_int);
+
+	if (use_sig) {
+		PCU_SIG[pcu_idx].send(pdu_tx);
+	} else {
+		PCU_PTP[pcu_idx].send(pdu_tx);
+	}
+	T.start;
+	alt {
+	[use_sig] SGSN_SIG[g_pars.sgsn_idx].receive(exp_rx) -> value pdu_rx {
+		setverdict(pass);
+		}
+	[use_sig] SGSN_SIG[g_pars.sgsn_idx].receive {
+		setverdict(fail, "Unexpected PDU on SGSN");
+		}
+	[use_sig] any from SGSN_SIG.receive(exp_rx) -> value pdu_rx {
+		setverdict(fail, "PAGING-PS-REJECT arrived on wrong SGSN");
+		}
+	[not use_sig] SGSN_PTP[g_pars.sgsn_idx].receive(exp_rx) -> value pdu_rx {
+		setverdict(pass);
+		}
+	[not use_sig] SGSN_PTP[g_pars.sgsn_idx].receive {
+		setverdict(fail, "Unexpected PDU on SGSN");
+		}
+	[not use_sig] any from SGSN_PTP.receive(exp_rx) -> value pdu_rx {
+		setverdict(fail, "PAGING-PS-REJECT arrived on wrong SGSN");
+		}
+	[] T.timeout {
+		setverdict(fail, "Timeout waiting for PAGING-PS-REJECT");
+		}
+	}
+}
+
 /* PS-PAGING on SIG-BVC for BSS Area */
 private function f_TC_paging_ps_sig_bss(charstring id) runs on BSSGP_ConnHdlr
 {
@@ -1635,6 +1702,28 @@
 	f_cleanup();
 }
 
+/* Rejected PS-PAGING on SIG-BVC for BVCI (one cell) */
+private function f_TC_paging_ps_reject_sig_bvci(charstring id) runs on BSSGP_ConnHdlr
+{
+	/* first send the PS-PAGING from SGSN -> PCU */
+	f_send_paging_ps_exp_multi(ts_BssgpP4Bvci(pcu_bvc_cfg[0].bvci), 0, {0});
+	/* then simulate the PS-PAGING-REJECT from the PCU */
+	f_send_paging_ps_rej(use_sig:=true);
+
+}
+testcase TC_paging_ps_reject_sig_bvci() runs on test_CT {
+	f_init();
+	f_start_handlers(refers(f_TC_paging_ps_reject_sig_bvci), testcasename(), 16);
+	f_cleanup();
+}
+
+/* Rejected PS-PAGING on SIG-BVC for BVCI (one cell) using IMSI only (no P-TMSI allocated) */
+testcase TC_paging_ps_reject_sig_bvci_imsi() runs on test_CT {
+	f_init();
+	f_start_handlers(refers(f_TC_paging_ps_reject_sig_bvci), testcasename(), 16, have_ptmsi:=false);
+	f_cleanup();
+}
+
 /* PS-PAGING on SIG-BVC for unknown BVCI */
 private function f_TC_paging_ps_sig_bvci_unknown(charstring id) runs on BSSGP_ConnHdlr
 {
@@ -2482,6 +2571,8 @@
 	execute( TC_paging_ps_ptp_bvci() );
 	execute( TC_paging_ps_ptp_bvci_imsi() );
 	execute( TC_paging_ps_ptp_bvci_unknown() );
+	execute( TC_paging_ps_reject_ptp_bvci() );
+	execute( TC_paging_ps_reject_ptp_bvci_imsi() );
 
 	/* PAGING-PS over SIG BVC */
 	execute( TC_paging_ps_sig_bss() );
@@ -2492,6 +2583,8 @@
 	execute( TC_paging_ps_sig_bvci() );
 	execute( TC_paging_ps_sig_bvci_imsi() );
 	execute( TC_paging_ps_sig_bvci_unknown() );
+	execute( TC_paging_ps_reject_sig_bvci() );
+	execute( TC_paging_ps_reject_sig_bvci_imsi() );
 
 	/* PAGING-CS over PTP BVC */
 	execute( TC_paging_cs_ptp_bss() );
