diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn
index 78eb389..064d1ea 100644
--- a/gbproxy/GBProxy_Tests.ttcn
+++ b/gbproxy/GBProxy_Tests.ttcn
@@ -1891,6 +1891,79 @@
 	f_cleanup();
 }
 
+private altstep as_ignore_status(BSSGP_BVC_MGMT_PT pt) {
+[] pt.receive(BssgpStatusIndication:?) { repeat; }
+}
+private function f_get_sgsn_bvc_ct(integer sgsn_idx, BssgpBvci bvci) runs on test_CT return BSSGP_BVC_CT {
+	for (var integer i := 0; i < lengthof(g_sgsn[sgsn_idx].cfg.bvc); i := i+1) {
+		if (g_sgsn[sgsn_idx].cfg.bvc[i].bvci == bvci) {
+			return g_sgsn[sgsn_idx].vc_BSSGP_BVC[i];
+		}
+	}
+	return null;
+}
+private function f_reset_ptp_bvc_from_pcu(integer pcu_idx, integer bvc_idx) runs on test_CT
+{
+	var BSSGP_BVC_CT pcu_bvc_ct := g_pcu[pcu_idx].vc_BSSGP_BVC[bvc_idx];
+	var BssgpBvcConfig bvc_cfg := g_pcu[pcu_idx].cfg.bvc[bvc_idx];
+	var Nsei nsei_pcu := g_pcu[pcu_idx].cfg.nsei;
+	var BSSGP_BVC_CT sgsn_bvc_ct := f_get_sgsn_bvc_ct(0, bvc_cfg.bvci);
+	var default d;
+
+	SGSN_MGMT.clear;
+	PCU_MGMT.clear;
+
+	/* block the PTP BVC from the PCU side */
+	PCU_MGMT.send(BssgpResetRequest:{cause:=BSSGP_CAUSE_OM_INTERVENTION}) to pcu_bvc_ct;
+	/* expect state on both PCU and SGSN side to change */
+	d := activate(as_ignore_status(SGSN_MGMT));
+	interleave {
+	[] PCU_MGMT.receive(tr_BssgpStsInd(nsei_pcu, bvc_cfg.bvci, BVC_S_BLOCKED)) from pcu_bvc_ct;
+	[] SGSN_MGMT.receive(BssgpResetIndication:{bvc_cfg.bvci}) from sgsn_bvc_ct;
+	}
+	deactivate(d);
+	setverdict(pass);
+}
+/* Send a BVC-RESET for a PTP BVC from the BSS side: expect it to propagate */
+testcase TC_bvc_reset_ptp_from_bss() runs on test_CT
+{
+	f_init();
+	f_sleep(3.0);
+	f_reset_ptp_bvc_from_pcu(0, 0);
+	f_cleanup();
+}
+
+private function f_reset_ptp_bvc_from_sgsn(integer pcu_idx, integer bvc_idx) runs on test_CT
+{
+	var BSSGP_BVC_CT pcu_bvc_ct := g_pcu[pcu_idx].vc_BSSGP_BVC[bvc_idx];
+	var BssgpBvcConfig bvc_cfg := g_pcu[pcu_idx].cfg.bvc[bvc_idx];
+	var Nsei nsei_pcu := g_pcu[pcu_idx].cfg.nsei;
+	var BSSGP_BVC_CT sgsn_bvc_ct := f_get_sgsn_bvc_ct(0, bvc_cfg.bvci);
+	var default d;
+
+	SGSN_MGMT.clear;
+	PCU_MGMT.clear;
+
+	/* block the PTP BVC from the PCU side */
+	SGSN_MGMT.send(BssgpResetRequest:{cause:=BSSGP_CAUSE_OM_INTERVENTION}) to sgsn_bvc_ct;
+	/* expect state on both PCU and SGSN side to change */
+	d := activate(as_ignore_status(PCU_MGMT));
+	interleave {
+	[] SGSN_MGMT.receive(tr_BssgpStsInd(?, bvc_cfg.bvci, BVC_S_BLOCKED)) from sgsn_bvc_ct;
+	[] PCU_MGMT.receive(BssgpResetIndication:{bvc_cfg.bvci}) from pcu_bvc_ct;
+	}
+	deactivate(d);
+	setverdict(pass);
+}
+/* Send a BVC-RESET for a PTP BVC from the SGSN side: expect it to propagate */
+testcase TC_bvc_reset_ptp_from_sgsn() runs on test_CT
+{
+	f_init();
+	f_sleep(3.0);
+	f_reset_ptp_bvc_from_sgsn(0, 0);
+	f_cleanup();
+}
+
 control {
 	execute( TC_BVC_bringup() );
 	execute( TC_ul_unitdata() );
@@ -1902,6 +1975,8 @@
 	execute( TC_resume() );
 	execute( TC_bvc_block_ptp() );
 	execute( TC_bvc_unblock_ptp() );
+	execute( TC_bvc_reset_ptp_from_bss() );
+	execute( TC_bvc_reset_ptp_from_sgsn() );
 	if (false) {
 		/* don't enable this by default, as we don't yet have any automatic test setup for FR with 4 NS-VC */
 		execute( TC_load_sharing_dl() );
