diff --git a/quic/core/congestion_control/bandwidth_sampler.cc b/quic/core/congestion_control/bandwidth_sampler.cc
index 1a56e62..dc8509f 100644
--- a/quic/core/congestion_control/bandwidth_sampler.cc
+++ b/quic/core/congestion_control/bandwidth_sampler.cc
@@ -85,10 +85,6 @@
       max_ack_height_tracker_(max_height_tracker_window_length),
       total_bytes_acked_after_last_ack_event_(0),
       overestimate_avoidance_(false) {
-  if (remove_packets_once_per_congestion_event_) {
-    QUIC_RELOADABLE_FLAG_COUNT(
-        quic_bw_sampler_remove_packets_once_per_congestion_event2);
-  }
   if (one_bw_sample_per_ack_event_) {
     QUIC_RELOADABLE_FLAG_COUNT(quic_one_bw_sample_per_ack_event2);
   }
@@ -283,9 +279,6 @@
   }
   BandwidthSample sample =
       OnPacketAcknowledgedInner(ack_time, packet_number, *sent_packet_pointer);
-  if (!remove_packets_once_per_congestion_event_) {
-    connection_state_map_.Remove(packet_number);
-  }
   return sample;
 }
 
@@ -403,20 +396,13 @@
   // QUIC_BUG when removal fails.
   SendTimeState send_time_state;
 
-  if (remove_packets_once_per_congestion_event_) {
-    total_bytes_lost_ += bytes_lost;
-    ConnectionStateOnSentPacket* sent_packet_pointer =
-        connection_state_map_.GetEntry(packet_number);
-    if (sent_packet_pointer != nullptr) {
-      SentPacketToSendTimeState(*sent_packet_pointer, &send_time_state);
-    }
-  } else {
-    send_time_state.is_valid = connection_state_map_.Remove(
-        packet_number, [&](const ConnectionStateOnSentPacket& sent_packet) {
-          total_bytes_lost_ += sent_packet.size;
-          SentPacketToSendTimeState(sent_packet, &send_time_state);
-        });
+  total_bytes_lost_ += bytes_lost;
+  ConnectionStateOnSentPacket* sent_packet_pointer =
+      connection_state_map_.GetEntry(packet_number);
+  if (sent_packet_pointer != nullptr) {
+    SentPacketToSendTimeState(*sent_packet_pointer, &send_time_state);
   }
+
   return send_time_state;
 }
 
@@ -438,20 +424,7 @@
   // QuicSentPacketManager::RetransmitCryptoPackets retransmits a crypto packet,
   // the packet is removed from QuicUnackedPacketMap's inflight, but is not
   // marked as acked or lost in the BandwidthSampler.
-  if (remove_packets_once_per_congestion_event_) {
-    connection_state_map_.RemoveUpTo(least_unacked);
-    return;
-  }
-  while (!connection_state_map_.IsEmpty() &&
-         connection_state_map_.first_packet() < least_unacked) {
-    connection_state_map_.Remove(
-        connection_state_map_.first_packet(),
-        [&](const ConnectionStateOnSentPacket& sent_packet) {
-          // Obsoleted packets as either acked or lost but the sampler doesn't
-          // know. We count them as acked here, since most packets are acked.
-          total_bytes_acked_ += sent_packet.size;
-        });
-  }
+  connection_state_map_.RemoveUpTo(least_unacked);
 }
 
 QuicByteCount BandwidthSampler::total_bytes_sent() const {
diff --git a/quic/core/congestion_control/bandwidth_sampler.h b/quic/core/congestion_control/bandwidth_sampler.h
index 210a219..6f27ddd 100644
--- a/quic/core/congestion_control/bandwidth_sampler.h
+++ b/quic/core/congestion_control/bandwidth_sampler.h
@@ -365,10 +365,6 @@
     max_ack_height_tracker_.Reset(new_height, new_time);
   }
 
-  bool remove_packets_once_per_congestion_event() const {
-    return remove_packets_once_per_congestion_event_;
-  }
-
   bool one_bw_sample_per_ack_event() const {
     return one_bw_sample_per_ack_event_;
   }
@@ -471,9 +467,7 @@
                           sampler.total_bytes_sent_,
                           sampler.total_bytes_acked_,
                           sampler.total_bytes_lost_,
-                          sampler.remove_packets_once_per_congestion_event()
-                              ? bytes_in_flight
-                              : 0) {}
+                          bytes_in_flight) {}
 
     // Default constructor.  Required to put this structure into
     // PacketNumberIndexedQueue.
@@ -563,14 +557,8 @@
   MaxAckHeightTracker max_ack_height_tracker_;
   QuicByteCount total_bytes_acked_after_last_ack_event_;
 
-  // Latched value of quic_bw_sampler_remove_packets_once_per_congestion_event2.
-  const bool remove_packets_once_per_congestion_event_ = GetQuicReloadableFlag(
-      quic_bw_sampler_remove_packets_once_per_congestion_event2);
-
-  // Latched value of quic_bw_sampler_remove_packets_once_per_congestion_event2
-  // and quic_one_bw_sample_per_ack_event2.
+  // Latched value of quic_one_bw_sample_per_ack_event2.
   const bool one_bw_sample_per_ack_event_ =
-      remove_packets_once_per_congestion_event_ &&
       GetQuicReloadableFlag(quic_one_bw_sample_per_ack_event2);
 
   // True if --quic_avoid_overestimate_bandwidth_with_aggregation=true and
diff --git a/quic/core/congestion_control/bandwidth_sampler_test.cc b/quic/core/congestion_control/bandwidth_sampler_test.cc
index 2529ba1..c523654 100644
--- a/quic/core/congestion_control/bandwidth_sampler_test.cc
+++ b/quic/core/congestion_control/bandwidth_sampler_test.cc
@@ -203,9 +203,8 @@
     QuicBandwidth current_sample = AckPacket(i);
     EXPECT_EQ(expected_bandwidth, current_sample);
   }
-  if (sampler_.remove_packets_once_per_congestion_event()) {
-    sampler_.RemoveObsoletePackets(QuicPacketNumber(25));
-  }
+  sampler_.RemoveObsoletePackets(QuicPacketNumber(25));
+
   EXPECT_EQ(0u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_));
   EXPECT_EQ(0u, bytes_in_flight_);
 }
@@ -263,15 +262,13 @@
       EXPECT_EQ(PacketsToBytes(1), send_time_state.total_bytes_acked);
       EXPECT_EQ(PacketsToBytes(2), send_time_state.total_bytes_lost);
     }
-    if (sampler_.remove_packets_once_per_congestion_event()) {
-      // This equation works because there is no neutered bytes.
-      EXPECT_EQ(send_time_state.total_bytes_sent -
-                    send_time_state.total_bytes_acked -
-                    send_time_state.total_bytes_lost,
-                send_time_state.bytes_in_flight);
-    } else {
-      EXPECT_EQ(0u, send_time_state.bytes_in_flight);
-    }
+
+    // This equation works because there is no neutered bytes.
+    EXPECT_EQ(send_time_state.total_bytes_sent -
+                  send_time_state.total_bytes_acked -
+                  send_time_state.total_bytes_lost,
+              send_time_state.bytes_in_flight);
+
     clock_.AdvanceTime(time_between_packets);
   }
 }
@@ -293,9 +290,8 @@
     EXPECT_EQ(expected_bandwidth, last_bandwidth) << "i is " << i;
     clock_.AdvanceTime(time_between_packets);
   }
-  if (sampler_.remove_packets_once_per_congestion_event()) {
-    sampler_.RemoveObsoletePackets(QuicPacketNumber(41));
-  }
+  sampler_.RemoveObsoletePackets(QuicPacketNumber(41));
+
   EXPECT_EQ(0u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_));
   EXPECT_EQ(0u, bytes_in_flight_);
 }
@@ -336,9 +332,8 @@
     }
     clock_.AdvanceTime(time_between_packets);
   }
-  if (sampler_.remove_packets_once_per_congestion_event()) {
-    sampler_.RemoveObsoletePackets(QuicPacketNumber(41));
-  }
+  sampler_.RemoveObsoletePackets(QuicPacketNumber(41));
+
   EXPECT_EQ(0u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_));
   EXPECT_EQ(0u, bytes_in_flight_);
 }
@@ -386,10 +381,8 @@
     }
     clock_.AdvanceTime(time_between_packets);
   }
+  sampler_.RemoveObsoletePackets(QuicPacketNumber(41));
 
-  if (sampler_.remove_packets_once_per_congestion_event()) {
-    sampler_.RemoveObsoletePackets(QuicPacketNumber(41));
-  }
   // Since only congestion controlled packets are entered into the map, it has
   // to be empty at this point.
   EXPECT_EQ(0u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_));
@@ -418,9 +411,9 @@
     clock_.AdvanceTime(ridiculously_small_time_delta);
   }
   EXPECT_EQ(expected_bandwidth, last_bandwidth);
-  if (sampler_.remove_packets_once_per_congestion_event()) {
-    sampler_.RemoveObsoletePackets(QuicPacketNumber(41));
-  }
+
+  sampler_.RemoveObsoletePackets(QuicPacketNumber(41));
+
   EXPECT_EQ(0u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_));
   EXPECT_EQ(0u, bytes_in_flight_);
 }
@@ -450,9 +443,8 @@
     EXPECT_EQ(expected_bandwidth, last_bandwidth);
     clock_.AdvanceTime(time_between_packets);
   }
-  if (sampler_.remove_packets_once_per_congestion_event()) {
-    sampler_.RemoveObsoletePackets(QuicPacketNumber(61));
-  }
+  sampler_.RemoveObsoletePackets(QuicPacketNumber(61));
+
   EXPECT_EQ(0u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_));
   EXPECT_EQ(0u, bytes_in_flight_);
 }
@@ -502,10 +494,8 @@
     EXPECT_EQ(expected_bandwidth, last_bandwidth);
     clock_.AdvanceTime(time_between_packets);
   }
+  sampler_.RemoveObsoletePackets(QuicPacketNumber(81));
 
-  if (sampler_.remove_packets_once_per_congestion_event()) {
-    sampler_.RemoveObsoletePackets(QuicPacketNumber(81));
-  }
   EXPECT_EQ(0u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_));
   EXPECT_EQ(0u, bytes_in_flight_);
 }
@@ -559,14 +549,13 @@
   sampler_.RemoveObsoletePackets(QuicPacketNumber(4));
   EXPECT_EQ(2u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_));
   sampler_.OnPacketLost(QuicPacketNumber(4), kRegularPacketSize);
-  if (sampler_.remove_packets_once_per_congestion_event()) {
-    sampler_.RemoveObsoletePackets(QuicPacketNumber(5));
-  }
+  sampler_.RemoveObsoletePackets(QuicPacketNumber(5));
+
   EXPECT_EQ(1u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_));
   AckPacket(5);
-  if (sampler_.remove_packets_once_per_congestion_event()) {
-    sampler_.RemoveObsoletePackets(QuicPacketNumber(6));
-  }
+
+  sampler_.RemoveObsoletePackets(QuicPacketNumber(6));
+
   EXPECT_EQ(0u, BandwidthSamplerPeer::GetNumberOfTrackedPackets(sampler_));
 }
 
diff --git a/quic/core/congestion_control/bbr2_misc.cc b/quic/core/congestion_control/bbr2_misc.cc
index 352e7e6..6c3ea73 100644
--- a/quic/core/congestion_control/bbr2_misc.cc
+++ b/quic/core/congestion_control/bbr2_misc.cc
@@ -164,26 +164,21 @@
     }
   }
 
-  if (!bandwidth_sampler_.remove_packets_once_per_congestion_event()) {
-    congestion_event->bytes_in_flight = bytes_in_flight();
-  }
-
   congestion_event->bytes_acked = total_bytes_acked() - prior_bytes_acked;
   congestion_event->bytes_lost = total_bytes_lost() - prior_bytes_lost;
-  if (bandwidth_sampler_.remove_packets_once_per_congestion_event()) {
-    if (congestion_event->prior_bytes_in_flight >=
-        congestion_event->bytes_acked + congestion_event->bytes_lost) {
-      congestion_event->bytes_in_flight =
-          congestion_event->prior_bytes_in_flight -
-          congestion_event->bytes_acked - congestion_event->bytes_lost;
-    } else {
-      QUIC_LOG_FIRST_N(ERROR, 1)
-          << "prior_bytes_in_flight:" << congestion_event->prior_bytes_in_flight
-          << " is smaller than the sum of bytes_acked:"
-          << congestion_event->bytes_acked
-          << " and bytes_lost:" << congestion_event->bytes_lost;
-      congestion_event->bytes_in_flight = 0;
-    }
+
+  if (congestion_event->prior_bytes_in_flight >=
+      congestion_event->bytes_acked + congestion_event->bytes_lost) {
+    congestion_event->bytes_in_flight =
+        congestion_event->prior_bytes_in_flight -
+        congestion_event->bytes_acked - congestion_event->bytes_lost;
+  } else {
+    QUIC_LOG_FIRST_N(ERROR, 1)
+        << "prior_bytes_in_flight:" << congestion_event->prior_bytes_in_flight
+        << " is smaller than the sum of bytes_acked:"
+        << congestion_event->bytes_acked
+        << " and bytes_lost:" << congestion_event->bytes_lost;
+    congestion_event->bytes_in_flight = 0;
   }
 
   if (congestion_event->bytes_lost > 0) {
diff --git a/quic/core/congestion_control/bbr2_misc.h b/quic/core/congestion_control/bbr2_misc.h
index 191790b..500226e 100644
--- a/quic/core/congestion_control/bbr2_misc.h
+++ b/quic/core/congestion_control/bbr2_misc.h
@@ -404,11 +404,6 @@
     return bandwidth_sampler_.total_bytes_sent();
   }
 
-  QuicByteCount bytes_in_flight() const {
-    DCHECK(!bandwidth_sampler_.remove_packets_once_per_congestion_event());
-    return total_bytes_sent() - total_bytes_acked() - total_bytes_lost();
-  }
-
   int64_t loss_events_in_round() const { return loss_events_in_round_; }
 
   bool always_count_loss_events() const { return always_count_loss_events_; }
diff --git a/quic/core/congestion_control/bbr_sender_test.cc b/quic/core/congestion_control/bbr_sender_test.cc
index 2b262c9..55ac77c 100644
--- a/quic/core/congestion_control/bbr_sender_test.cc
+++ b/quic/core/congestion_control/bbr_sender_test.cc
@@ -966,9 +966,7 @@
 
 // Test exiting STARTUP earlier upon loss due to the LRTT connection option.
 TEST_F(BbrSenderTest, SimpleTransferLRTTStartup) {
-  if (!GetQuicReloadableFlag(
-          quic_bw_sampler_remove_packets_once_per_congestion_event2) ||
-      !GetQuicReloadableFlag(quic_one_bw_sample_per_ack_event2) ||
+  if (!GetQuicReloadableFlag(quic_one_bw_sample_per_ack_event2) ||
       !GetQuicReloadableFlag(quic_bbr_loss_based_startup_exit)) {
     return;
   }
@@ -1000,9 +998,7 @@
 
 // Test exiting STARTUP earlier upon loss due to the LRTT connection option.
 TEST_F(BbrSenderTest, SimpleTransferLRTTStartupSmallBuffer) {
-  if (!GetQuicReloadableFlag(
-          quic_bw_sampler_remove_packets_once_per_congestion_event2) ||
-      !GetQuicReloadableFlag(quic_one_bw_sample_per_ack_event2) ||
+  if (!GetQuicReloadableFlag(quic_one_bw_sample_per_ack_event2) ||
       !GetQuicReloadableFlag(quic_bbr_loss_based_startup_exit)) {
     return;
   }
