diff --git a/quic/core/congestion_control/bbr_sender.cc b/quic/core/congestion_control/bbr_sender.cc
index 53a1300..940fe26 100644
--- a/quic/core/congestion_control/bbr_sender.cc
+++ b/quic/core/congestion_control/bbr_sender.cc
@@ -284,22 +284,17 @@
   const QuicBandwidth& bandwidth = params.bandwidth;
   const QuicTime::Delta& rtt = params.rtt;
 
-  if (!params.quic_bbr_donot_inject_bandwidth && !bandwidth.IsZero()) {
-    max_bandwidth_.Update(bandwidth, round_trip_count_);
-  }
   if (!rtt.IsZero() && (min_rtt_ > rtt || min_rtt_.IsZero())) {
     min_rtt_ = rtt;
   }
 
-  if (params.quic_fix_bbr_cwnd_in_bandwidth_resumption && mode_ == STARTUP) {
+  if (mode_ == STARTUP) {
     if (bandwidth.IsZero()) {
       // Ignore bad bandwidth samples.
       return;
     }
 
-    auto cwnd_bootstrapping_rtt = params.quic_bbr_donot_inject_bandwidth
-                                      ? GetMinRtt()
-                                      : rtt_stats_->SmoothedOrInitialRtt();
+    auto cwnd_bootstrapping_rtt = GetMinRtt();
     if (params.max_initial_congestion_window > 0) {
       max_congestion_window_with_network_parameters_adjusted_ =
           params.max_initial_congestion_window * kDefaultTCPMSS;
@@ -330,13 +325,12 @@
       set_high_cwnd_gain(kDerivedHighCWNDGain);
     }
     congestion_window_ = new_cwnd;
-    if (params.quic_bbr_fix_pacing_rate) {
-      // Pace at the rate of new_cwnd / RTT.
-      QuicBandwidth new_pacing_rate =
-          QuicBandwidth::FromBytesAndTimeDelta(congestion_window_, GetMinRtt());
-      pacing_rate_ = std::max(pacing_rate_, new_pacing_rate);
-      detect_overshooting_ = true;
-    }
+
+    // Pace at the rate of new_cwnd / RTT.
+    QuicBandwidth new_pacing_rate =
+        QuicBandwidth::FromBytesAndTimeDelta(congestion_window_, GetMinRtt());
+    pacing_rate_ = std::max(pacing_rate_, new_pacing_rate);
+    detect_overshooting_ = true;
   }
 }
 
@@ -525,7 +519,7 @@
     min_rtt_ = sample_min_rtt;
     min_rtt_timestamp_ = now;
   }
-  DCHECK(!min_rtt_.IsZero());
+  QUICHE_DCHECK(!min_rtt_.IsZero());
 
   return min_rtt_expired;
 }
@@ -592,7 +586,7 @@
   rounds_without_bandwidth_gain_++;
   if ((rounds_without_bandwidth_gain_ >= num_startup_rtts_) ||
       ShouldExitStartupDueToLoss(last_packet_send_state)) {
-    DCHECK(has_non_app_limited_sample_);
+    QUICHE_DCHECK(has_non_app_limited_sample_);
     is_at_full_bandwidth_ = true;
   }
 }
@@ -611,7 +605,7 @@
 }
 
 void BbrSender::OnExitStartup(QuicTime now) {
-  DCHECK_EQ(mode_, STARTUP);
+  QUICHE_DCHECK_EQ(mode_, STARTUP);
   if (stats_) {
     stats_->slowstart_duration.Stop(now);
   }
diff --git a/quic/core/congestion_control/send_algorithm_interface.h b/quic/core/congestion_control/send_algorithm_interface.h
index a038754..2fa1217 100644
--- a/quic/core/congestion_control/send_algorithm_interface.h
+++ b/quic/core/congestion_control/send_algorithm_interface.h
@@ -47,25 +47,13 @@
       return bandwidth == other.bandwidth && rtt == other.rtt &&
              max_initial_congestion_window ==
                  other.max_initial_congestion_window &&
-             allow_cwnd_to_decrease == other.allow_cwnd_to_decrease &&
-             quic_fix_bbr_cwnd_in_bandwidth_resumption ==
-                 other.quic_fix_bbr_cwnd_in_bandwidth_resumption &&
-             quic_bbr_fix_pacing_rate == other.quic_bbr_fix_pacing_rate &&
-             quic_bbr_donot_inject_bandwidth ==
-                 other.quic_bbr_donot_inject_bandwidth;
+             allow_cwnd_to_decrease == other.allow_cwnd_to_decrease;
     }
 
     QuicBandwidth bandwidth;
     QuicTime::Delta rtt;
     int max_initial_congestion_window = 0;
     bool allow_cwnd_to_decrease;
-    // Code changes that are controlled by flags.
-    // TODO(b/131899599): Remove after impact of fix is measured.
-    bool quic_fix_bbr_cwnd_in_bandwidth_resumption = true;
-    // TODO(b/143540157): Remove after impact of fix is measured.
-    bool quic_bbr_fix_pacing_rate = true;
-    // TODO(b/72089315, b/143891040): Remove after impact of fix is measured.
-    bool quic_bbr_donot_inject_bandwidth = true;
   };
 
   static SendAlgorithmInterface* Create(
