diff --git a/quic/core/congestion_control/bandwidth_sampler.cc b/quic/core/congestion_control/bandwidth_sampler.cc
index 8899704..1915843 100644
--- a/quic/core/congestion_control/bandwidth_sampler.cc
+++ b/quic/core/congestion_control/bandwidth_sampler.cc
@@ -60,13 +60,7 @@
       max_tracked_packets_(GetQuicFlag(FLAGS_quic_max_tracked_packet_count)),
       unacked_packet_map_(unacked_packet_map),
       max_ack_height_tracker_(max_height_tracker_window_length),
-      total_bytes_acked_after_last_ack_event_(0),
-      quic_track_ack_height_in_bandwidth_sampler_(
-          GetQuicReloadableFlag(quic_track_ack_height_in_bandwidth_sampler2)) {
-  if (quic_track_ack_height_in_bandwidth_sampler_) {
-    QUIC_RELOADABLE_FLAG_COUNT(quic_track_ack_height_in_bandwidth_sampler2);
-  }
-}
+      total_bytes_acked_after_last_ack_event_(0) {}
 
 BandwidthSampler::~BandwidthSampler() {}
 
diff --git a/quic/core/congestion_control/bandwidth_sampler.h b/quic/core/congestion_control/bandwidth_sampler.h
index 8b279c6..5bbb6ba 100644
--- a/quic/core/congestion_control/bandwidth_sampler.h
+++ b/quic/core/congestion_control/bandwidth_sampler.h
@@ -282,10 +282,6 @@
     max_ack_height_tracker_.Reset(new_height, new_time);
   }
 
-  bool quic_track_ack_height_in_bandwidth_sampler() const {
-    return quic_track_ack_height_in_bandwidth_sampler_;
-  }
-
  private:
   friend class test::BandwidthSamplerPeer;
 
@@ -399,9 +395,6 @@
 
   MaxAckHeightTracker max_ack_height_tracker_;
   QuicByteCount total_bytes_acked_after_last_ack_event_;
-
-  // Latched value of --quic_track_ack_height_in_bandwidth_sampler2.
-  const bool quic_track_ack_height_in_bandwidth_sampler_;
 };
 
 }  // namespace quic
diff --git a/quic/core/congestion_control/bbr_sender.cc b/quic/core/congestion_control/bbr_sender.cc
index ae1432a..b0fd50d 100644
--- a/quic/core/congestion_control/bbr_sender.cc
+++ b/quic/core/congestion_control/bbr_sender.cc
@@ -93,9 +93,6 @@
       sampler_(unacked_packets, kBandwidthWindowSize),
       round_trip_count_(0),
       max_bandwidth_(kBandwidthWindowSize, QuicBandwidth::Zero(), 0),
-      max_ack_height_(kBandwidthWindowSize, 0, 0),
-      aggregation_epoch_start_time_(QuicTime::Zero()),
-      aggregation_epoch_bytes_(0),
       min_rtt_(QuicTime::Delta::Zero()),
       min_rtt_timestamp_(QuicTime::Zero()),
       congestion_window_(initial_tcp_congestion_window * kDefaultTCPMSS),
@@ -175,12 +172,6 @@
     exiting_quiescence_ = true;
   }
 
-  if (!sampler_.quic_track_ack_height_in_bandwidth_sampler()) {
-    if (!aggregation_epoch_start_time_.IsInitialized()) {
-      aggregation_epoch_start_time_ = sent_time;
-    }
-  }
-
   sampler_.OnPacketSent(sent_time, packet_number, bytes, bytes_in_flight,
                         is_retransmittable);
 }
@@ -287,18 +278,10 @@
     startup_rate_reduction_multiplier_ = 2;
   }
   if (config.HasClientRequestedIndependentOption(kBBR4, perspective)) {
-    if (sampler_.quic_track_ack_height_in_bandwidth_sampler()) {
-      sampler_.SetMaxAckHeightTrackerWindowLength(2 * kBandwidthWindowSize);
-    } else {
-      max_ack_height_.SetWindowLength(2 * kBandwidthWindowSize);
-    }
+    sampler_.SetMaxAckHeightTrackerWindowLength(2 * kBandwidthWindowSize);
   }
   if (config.HasClientRequestedIndependentOption(kBBR5, perspective)) {
-    if (sampler_.quic_track_ack_height_in_bandwidth_sampler()) {
-      sampler_.SetMaxAckHeightTrackerWindowLength(4 * kBandwidthWindowSize);
-    } else {
-      max_ack_height_.SetWindowLength(4 * kBandwidthWindowSize);
-    }
+    sampler_.SetMaxAckHeightTrackerWindowLength(4 * kBandwidthWindowSize);
   }
   if (GetQuicReloadableFlag(quic_bbr_less_probe_rtt) &&
       config.HasClientRequestedIndependentOption(kBBR6, perspective)) {
@@ -413,13 +396,8 @@
     UpdateRecoveryState(last_acked_packet, !lost_packets.empty(),
                         is_round_start);
 
-    const QuicByteCount bytes_acked =
-        sampler_.total_bytes_acked() - total_bytes_acked_before;
-
-    excess_acked = sampler_.quic_track_ack_height_in_bandwidth_sampler()
-                       ? sampler_.OnAckEventEnd(max_bandwidth_.GetBest(),
-                                                round_trip_count_)
-                       : UpdateAckAggregationBytes(event_time, bytes_acked);
+    excess_acked =
+        sampler_.OnAckEventEnd(max_bandwidth_.GetBest(), round_trip_count_);
   }
 
   // Handle logic specific to PROBE_BW mode.
@@ -661,11 +639,7 @@
     rounds_without_bandwidth_gain_ = 0;
     if (expire_ack_aggregation_in_startup_) {
       // Expire old excess delivery measurements now that bandwidth increased.
-      if (sampler_.quic_track_ack_height_in_bandwidth_sampler()) {
-        sampler_.ResetMaxAckHeightTracker(0, round_trip_count_);
-      } else {
-        max_ack_height_.Reset(0, round_trip_count_);
-      }
+      sampler_.ResetMaxAckHeightTracker(0, round_trip_count_);
     }
     return;
   }
@@ -786,31 +760,6 @@
   }
 }
 
-// TODO(ianswett): Move this logic into BandwidthSampler.
-QuicByteCount BbrSender::UpdateAckAggregationBytes(
-    QuicTime ack_time,
-    QuicByteCount newly_acked_bytes) {
-  // Compute how many bytes are expected to be delivered, assuming max bandwidth
-  // is correct.
-  QuicByteCount expected_bytes_acked =
-      max_bandwidth_.GetBest() * (ack_time - aggregation_epoch_start_time_);
-  // Reset the current aggregation epoch as soon as the ack arrival rate is less
-  // than or equal to the max bandwidth.
-  if (aggregation_epoch_bytes_ <= expected_bytes_acked) {
-    // Reset to start measuring a new aggregation epoch.
-    aggregation_epoch_bytes_ = newly_acked_bytes;
-    aggregation_epoch_start_time_ = ack_time;
-    return 0;
-  }
-
-  // Compute how many extra bytes were delivered vs max bandwidth.
-  // Include the bytes most recently acknowledged to account for stretch acks.
-  aggregation_epoch_bytes_ += newly_acked_bytes;
-  max_ack_height_.Update(aggregation_epoch_bytes_ - expected_bytes_acked,
-                         round_trip_count_);
-  return aggregation_epoch_bytes_ - expected_bytes_acked;
-}
-
 void BbrSender::CalculatePacingRate() {
   if (BandwidthEstimate().IsZero()) {
     return;
@@ -865,9 +814,7 @@
       GetTargetCongestionWindow(congestion_window_gain_);
   if (is_at_full_bandwidth_) {
     // Add the max recently measured ack aggregation to CWND.
-    target_window += sampler_.quic_track_ack_height_in_bandwidth_sampler()
-                         ? sampler_.max_ack_height()
-                         : max_ack_height_.GetBest();
+    target_window += sampler_.max_ack_height();
   } else if (enable_ack_aggregation_during_startup_) {
     // Add the most recent excess acked.  Because CWND never decreases in
     // STARTUP, this will automatically create a very localized max filter.
diff --git a/quic/core/congestion_control/bbr_sender.h b/quic/core/congestion_control/bbr_sender.h
index 592893e..8321b8c 100644
--- a/quic/core/congestion_control/bbr_sender.h
+++ b/quic/core/congestion_control/bbr_sender.h
@@ -273,13 +273,6 @@
   // round-trips.
   MaxBandwidthFilter max_bandwidth_;
 
-  // Tracks the maximum number of bytes acked faster than the sending rate.
-  MaxAckHeightFilter max_ack_height_;
-
-  // The time this aggregation started and the number of bytes acked during it.
-  QuicTime aggregation_epoch_start_time_;
-  QuicByteCount aggregation_epoch_bytes_;
-
   // Minimum RTT estimate.  Automatically expires within 10 seconds (and
   // triggers PROBE_RTT mode) if no new value is sampled during that period.
   QuicTime::Delta min_rtt_;
