diff --git a/quic/core/congestion_control/bbr2_misc.cc b/quic/core/congestion_control/bbr2_misc.cc
index 153f63e..6053185 100644
--- a/quic/core/congestion_control/bbr2_misc.cc
+++ b/quic/core/congestion_control/bbr2_misc.cc
@@ -211,13 +211,7 @@
   bandwidth_sampler_.RemoveObsoletePackets(least_unacked_packet);
 }
 
-void Bbr2NetworkModel::UpdateNetworkParameters(QuicBandwidth bandwidth,
-                                               QuicTime::Delta rtt) {
-  if (!improve_adjust_network_parameters_ && !bandwidth.IsInfinite() &&
-      bandwidth > MaxBandwidth()) {
-    max_bandwidth_filter_.Update(bandwidth);
-  }
-
+void Bbr2NetworkModel::UpdateNetworkParameters(QuicTime::Delta rtt) {
   if (!rtt.IsZero()) {
     min_rtt_filter_.Update(rtt, MinRttTimestamp());
   }
diff --git a/quic/core/congestion_control/bbr2_misc.h b/quic/core/congestion_control/bbr2_misc.h
index de30377..8732118 100644
--- a/quic/core/congestion_control/bbr2_misc.h
+++ b/quic/core/congestion_control/bbr2_misc.h
@@ -326,10 +326,8 @@
                                const Bbr2CongestionEvent& congestion_event);
 
   // Update the model without a congestion event.
-  // Max bandwidth is updated if |bandwidth| is larger than existing max
-  // bandwidth. Min rtt is updated if |rtt| is non-zero and smaller than
-  // existing min rtt.
-  void UpdateNetworkParameters(QuicBandwidth bandwidth, QuicTime::Delta rtt);
+  // Min rtt is updated if |rtt| is non-zero and smaller than existing min rtt.
+  void UpdateNetworkParameters(QuicTime::Delta rtt);
 
   // Update inflight/bandwidth short-term lower bounds.
   void AdaptLowerBounds(const Bbr2CongestionEvent& congestion_event);
@@ -450,10 +448,6 @@
   float pacing_gain() const { return pacing_gain_; }
   void set_pacing_gain(float pacing_gain) { pacing_gain_ = pacing_gain; }
 
-  bool improve_adjust_network_parameters() const {
-    return improve_adjust_network_parameters_;
-  }
-
  private:
   const Bbr2Params& Params() const { return *params_; }
   const Bbr2Params* const params_;
@@ -485,9 +479,6 @@
 
   float cwnd_gain_;
   float pacing_gain_;
-
-  const bool improve_adjust_network_parameters_ =
-      GetQuicReloadableFlag(quic_bbr2_improve_adjust_network_parameters);
 };
 
 enum class Bbr2Mode : uint8_t {
diff --git a/quic/core/congestion_control/bbr2_sender.cc b/quic/core/congestion_control/bbr2_sender.cc
index 90fc785..4b2fac8 100644
--- a/quic/core/congestion_control/bbr2_sender.cc
+++ b/quic/core/congestion_control/bbr2_sender.cc
@@ -160,33 +160,21 @@
 }
 
 void Bbr2Sender::AdjustNetworkParameters(const NetworkParams& params) {
-  model_.UpdateNetworkParameters(params.bandwidth, params.rtt);
+  model_.UpdateNetworkParameters(params.rtt);
 
   if (mode_ == Bbr2Mode::STARTUP) {
     const QuicByteCount prior_cwnd = cwnd_;
 
-    if (model_.improve_adjust_network_parameters()) {
-      QUIC_RELOADABLE_FLAG_COUNT(quic_bbr2_improve_adjust_network_parameters);
-      QuicBandwidth effective_bandwidth =
-          std::max(params.bandwidth, model_.BandwidthEstimate());
-      cwnd_ = cwnd_limits().ApplyLimits(model_.BDP(effective_bandwidth));
-    } else {
-      // Normally UpdateCongestionWindow updates |cwnd_| towards the target by a
-      // small step per congestion event, by changing |cwnd_| to the bdp at here
-      // we are reducing the number of updates needed to arrive at the target.
-      cwnd_ = model_.BDP(model_.BandwidthEstimate());
-      UpdateCongestionWindow(0);
-    }
+    QuicBandwidth effective_bandwidth =
+        std::max(params.bandwidth, model_.BandwidthEstimate());
+    cwnd_ = cwnd_limits().ApplyLimits(model_.BDP(effective_bandwidth));
 
     if (!params.allow_cwnd_to_decrease) {
       cwnd_ = std::max(cwnd_, prior_cwnd);
     }
 
-    if (model_.improve_adjust_network_parameters()) {
-      pacing_rate_ = std::max(
-          pacing_rate_,
-          QuicBandwidth::FromBytesAndTimeDelta(cwnd_, model_.MinRtt()));
-    }
+    pacing_rate_ = std::max(pacing_rate_, QuicBandwidth::FromBytesAndTimeDelta(
+                                              cwnd_, model_.MinRtt()));
   }
 }
 
diff --git a/quic/core/congestion_control/bbr2_simulator_test.cc b/quic/core/congestion_control/bbr2_simulator_test.cc
index 1ff703d..1ebe60c 100644
--- a/quic/core/congestion_control/bbr2_simulator_test.cc
+++ b/quic/core/congestion_control/bbr2_simulator_test.cc
@@ -1007,13 +1007,9 @@
 
   EXPECT_EQ(params.BDP(), sender_->ExportDebugState().congestion_window);
 
-  if (GetQuicReloadableFlag(quic_bbr2_improve_adjust_network_parameters)) {
-    EXPECT_EQ(params.BottleneckBandwidth(),
-              sender_->PacingRate(/*bytes_in_flight=*/0));
-    EXPECT_NE(params.BottleneckBandwidth(), sender_->BandwidthEstimate());
-  } else {
-    EXPECT_EQ(params.BottleneckBandwidth(), sender_->BandwidthEstimate());
-  }
+  EXPECT_EQ(params.BottleneckBandwidth(),
+            sender_->PacingRate(/*bytes_in_flight=*/0));
+  EXPECT_NE(params.BottleneckBandwidth(), sender_->BandwidthEstimate());
 
   EXPECT_APPROX_EQ(params.RTT(), sender_->ExportDebugState().min_rtt, 0.01f);
 
