diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn
index f569eaf..5f5d835 100644
--- a/gbproxy/GBProxy_Tests.ttcn
+++ b/gbproxy/GBProxy_Tests.ttcn
@@ -2357,7 +2357,7 @@
  * FLUSH-LL procedure
  ***********************************************************************/
 
-private function f_TC_flush_ll(charstring id) runs on BSSGP_ConnHdlr {
+private function f_TC_flush_ll_bvci_new(charstring id) runs on BSSGP_ConnHdlr {
 	var BssgpBvci bvci := g_pars.pcu[0].cfg.bvc[0].bvci;
 	var integer i;
 	for (i := 0; i < 10; i := i+1) {
@@ -2367,18 +2367,46 @@
 
 		f_sgsn2pcu(pdu_tx, pdu_rx, use_sig := true);
 
-		pdu_tx := ts_BSSGP_FLUSH_LL_ACK(g_pars.tlli, int2oct(0, 1), 23, bvci_new := bvci);
+		pdu_tx := ts_BSSGP_FLUSH_LL_ACK(g_pars.tlli, int2oct(1, 1), 23, bvci_new := bvci);
 		/* we cannot use pdu_tx as there are some subtle differences in the length field :/ */
-		pdu_rx := tr_BSSGP_FLUSH_LL_ACK(g_pars.tlli, int2oct(0, 1), 23, bvci_new := bvci);
+		pdu_rx := tr_BSSGP_FLUSH_LL_ACK(g_pars.tlli, int2oct(1, 1), 23, bvci_new := bvci);
 
 		f_pcu2sgsn(pdu_tx, pdu_rx, use_sig := true);
 	}
 	setverdict(pass);
 }
-testcase TC_flush_ll() runs on test_CT
+
+testcase TC_flush_ll_bvci_new() runs on test_CT
 {
 	f_init();
-	f_start_handlers(refers(f_TC_flush_ll), testcasename(), 6);
+	f_start_handlers(refers(f_TC_flush_ll_bvci_new), testcasename(), 6);
+	/* TODO: start multiple handlers (UEs) on various cells on same and other NSEs */
+	f_cleanup();
+}
+
+private function f_TC_flush_ll_no_bvci_new(charstring id) runs on BSSGP_ConnHdlr {
+	var BssgpBvci bvci := g_pars.pcu[0].cfg.bvc[0].bvci;
+	var integer i;
+	for (i := 0; i < 10; i := i+1) {
+		var template (value) PDU_BSSGP pdu_tx := ts_BSSGP_FLUSH_LL(g_pars.tlli, bvci);
+		/* we cannot use pdu_tx as there are some subtle differences in the length field :/ */
+		var template (present) PDU_BSSGP pdu_rx := tr_BSSGP_FLUSH_LL(g_pars.tlli, bvci);
+
+		f_sgsn2pcu(pdu_tx, pdu_rx, use_sig := true);
+
+		pdu_tx := ts_BSSGP_FLUSH_LL_ACK(g_pars.tlli, int2oct(0, 1), 23);
+		/* we cannot use pdu_tx as there are some subtle differences in the length field :/ */
+		pdu_rx := tr_BSSGP_FLUSH_LL_ACK(g_pars.tlli, int2oct(0, 1), 23);
+
+		f_pcu2sgsn(pdu_tx, pdu_rx, use_sig := true);
+	}
+	setverdict(pass);
+}
+
+testcase TC_flush_ll_no_bvci_new() runs on test_CT
+{
+	f_init();
+	f_start_handlers(refers(f_TC_flush_ll_no_bvci_new), testcasename(), 6);
 	/* TODO: start multiple handlers (UEs) on various cells on same and other NSEs */
 	f_cleanup();
 }
@@ -3643,7 +3671,12 @@
 	execute( TC_rim_from_eutran() );
 
 
-	execute( TC_flush_ll() );
+	execute( TC_flush_ll_bvci_new() );
+
+	/* Depends on osmo-gbproxy > 0.2.0 */
+	if (Misc_Helpers.f_osmo_repo_is("nightly")) {
+		execute( TC_flush_ll_no_bvci_new() );
+	}
 	execute( TC_fc_bvc() );
 	execute( TC_fc_ms() );
 	execute( TC_ms_reg_enq() );
