diff --git a/quiche/quic/core/congestion_control/bbr2_misc.h b/quiche/quic/core/congestion_control/bbr2_misc.h
index aac7f80..8f0f8f6 100644
--- a/quiche/quic/core/congestion_control/bbr2_misc.h
+++ b/quiche/quic/core/congestion_control/bbr2_misc.h
@@ -137,11 +137,6 @@
   int64_t probe_bw_full_loss_count =
       GetQuicFlag(quic_bbr2_default_probe_bw_full_loss_count);
 
-  // When attempting to grow inflight_hi in PROBE_UP, check whether we are cwnd
-  // limited before the current aggregation epoch, instead of before the current
-  // ack event.
-  bool probe_bw_check_cwnd_limited_before_aggregation_epoch = false;
-
   // Pacing gains.
   float probe_bw_probe_up_pacing_gain = 1.25;
   float probe_bw_probe_down_pacing_gain = 0.75;
@@ -152,7 +147,6 @@
   /*
    * PROBE_UP parameters.
    */
-  bool probe_up_includes_acks_after_cwnd_limited = false;
   bool probe_up_ignore_inflight_hi = true;
   bool probe_up_simplify_inflight_hi = false;
 
diff --git a/quiche/quic/core/congestion_control/bbr2_probe_bw.cc b/quiche/quic/core/congestion_control/bbr2_probe_bw.cc
index 5dd509f..523763c 100644
--- a/quiche/quic/core/congestion_control/bbr2_probe_bw.cc
+++ b/quiche/quic/core/congestion_control/bbr2_probe_bw.cc
@@ -361,47 +361,11 @@
       return;
     }
   } else {
-    if (Params().probe_bw_check_cwnd_limited_before_aggregation_epoch) {
-      if (!model_->cwnd_limited_before_aggregation_epoch()) {
-        QUIC_DVLOG(3) << sender_
-                      << " Raising inflight_hi early return: Not cwnd limited "
-                         "before aggregation epoch.";
-        // Not fully utilizing cwnd, so can't safely grow.
-        return;
-      }
-    } else if (Params().probe_up_includes_acks_after_cwnd_limited) {
-      // Don't continue adding bytes to probe_up_acked if the sender was not
-      // app-limited after being inflight_hi limited at least once.
-      if (!cycle_.probe_up_app_limited_since_inflight_hi_limited_ ||
-          congestion_event.last_packet_send_state.is_app_limited) {
-        cycle_.probe_up_app_limited_since_inflight_hi_limited_ = false;
-        if (congestion_event.prior_bytes_in_flight <
-            congestion_event.prior_cwnd) {
-          QUIC_DVLOG(3)
-              << sender_
-              << " Raising inflight_hi early return: Not cwnd limited.";
-          // Not fully utilizing cwnd, so can't safely grow.
-          return;
-        }
-
-        if (congestion_event.prior_cwnd < model_->inflight_hi()) {
-          QUIC_DVLOG(3) << sender_
-                        << " Raising inflight_hi early return: inflight_hi not "
-                           "fully used.";
-          // Not fully using inflight_hi, so don't grow it.
-          return;
-        }
-      }
-      // Start a new period of adding bytes_acked, because inflight_hi limited.
-      cycle_.probe_up_app_limited_since_inflight_hi_limited_ = true;
-    } else {
-      if (congestion_event.prior_bytes_in_flight <
-          congestion_event.prior_cwnd) {
-        QUIC_DVLOG(3) << sender_
-                      << " Raising inflight_hi early return: Not cwnd limited.";
-        // Not fully utilizing cwnd, so can't safely grow.
-        return;
-      }
+    if (congestion_event.prior_bytes_in_flight < congestion_event.prior_cwnd) {
+      QUIC_DVLOG(3) << sender_
+                    << " Raising inflight_hi early return: Not cwnd limited.";
+      // Not fully utilizing cwnd, so can't safely grow.
+      return;
     }
 
     if (congestion_event.prior_cwnd < model_->inflight_hi()) {
diff --git a/quiche/quic/core/congestion_control/bbr2_sender.cc b/quiche/quic/core/congestion_control/bbr2_sender.cc
index 00c136a..4df888b 100644
--- a/quiche/quic/core/congestion_control/bbr2_sender.cc
+++ b/quiche/quic/core/congestion_control/bbr2_sender.cc
@@ -169,9 +169,6 @@
   if (ContainsQuicTag(connection_options, kBBQ9)) {
     params_.bw_lo_mode_ = Bbr2Params::QuicBandwidthLoMode::CWND_REDUCTION;
   }
-  if (ContainsQuicTag(connection_options, kB201)) {
-    params_.probe_bw_check_cwnd_limited_before_aggregation_epoch = true;
-  }
   if (ContainsQuicTag(connection_options, kB202)) {
     params_.max_probe_up_queue_rounds = 1;
   }
@@ -193,9 +190,6 @@
   if (ContainsQuicTag(connection_options, kBBRB)) {
     model_.SetLimitMaxAckHeightTrackerBySendRate(true);
   }
-  if (ContainsQuicTag(connection_options, kBBQ0)) {
-    params_.probe_up_includes_acks_after_cwnd_limited = true;
-  }
   if (ContainsQuicTag(connection_options, kB206)) {
     params_.startup_full_loss_count = params_.probe_bw_full_loss_count;
   }
diff --git a/quiche/quic/core/crypto/crypto_protocol.h b/quiche/quic/core/crypto/crypto_protocol.h
index e0a725c..e8320a1 100644
--- a/quiche/quic/core/crypto/crypto_protocol.h
+++ b/quiche/quic/core/crypto/crypto_protocol.h
@@ -107,8 +107,7 @@
 const QuicTag kBBRB = TAG('B', 'B', 'R', 'B');   // Use send rate in BBR's
                                                  // MaxAckHeightTracker
 const QuicTag kBBRS = TAG('B', 'B', 'R', 'S');   // DEPRECATED
-const QuicTag kBBQ1 = TAG('B', 'B', 'Q', '1');   // BBR with lower 2.77 STARTUP
-                                                 // pacing and CWND gain.
+const QuicTag kBBQ1 = TAG('B', 'B', 'Q', '1');   // DEPRECATED
 const QuicTag kBBQ2 = TAG('B', 'B', 'Q', '2');   // BBRv2 with 2.885 STARTUP and
                                                  // DRAIN CWND gain.
 const QuicTag kBBQ3 = TAG('B', 'B', 'Q', '3');   // BBR with ack aggregation
@@ -164,9 +163,7 @@
                                                  // aggregation
 const QuicTag kB2DL = TAG('B', '2', 'D', 'L');   // Increase inflight_hi based
                                                  // on delievered, not inflight.
-const QuicTag kB201 = TAG('B', '2', '0', '1');   // In PROBE_UP, check if cwnd
-                                                 // limited before aggregation
-                                                 // epoch, instead of ack event.
+const QuicTag kB201 = TAG('B', '2', '0', '1');   // DEPRECATED
 const QuicTag kB202 = TAG('B', '2', '0', '2');   // Do not exit PROBE_UP if
                                                  // inflight dips below 1.25*BW.
 const QuicTag kB203 = TAG('B', '2', '0', '3');   // Ignore inflight_hi until
