diff --git a/quic/core/congestion_control/bbr2_misc.cc b/quic/core/congestion_control/bbr2_misc.cc
index 6053185..9f6744e 100644
--- a/quic/core/congestion_control/bbr2_misc.cc
+++ b/quic/core/congestion_control/bbr2_misc.cc
@@ -243,21 +243,29 @@
 }
 
 bool Bbr2NetworkModel::IsInflightTooHigh(
-    const Bbr2CongestionEvent& congestion_event) const {
+    const Bbr2CongestionEvent& congestion_event,
+    int64_t max_loss_events) const {
   const SendTimeState& send_state = congestion_event.last_packet_send_state;
   if (!send_state.is_valid) {
     // Not enough information.
     return false;
   }
 
+  if (loss_events_in_round() < max_loss_events) {
+    return false;
+  }
+
   const QuicByteCount inflight_at_send = BytesInFlight(send_state);
   // TODO(wub): Consider total_bytes_lost() - send_state.total_bytes_lost, which
   // is the total bytes lost when the largest numbered packet was inflight.
   // bytes_lost_in_round_, OTOH, is the total bytes lost in the "current" round.
   const QuicByteCount bytes_lost_in_round = bytes_lost_in_round_;
 
-  QUIC_DVLOG(3) << "IsInflightTooHigh: bytes_lost_in_round:"
-                << bytes_lost_in_round << ", lost_in_round_threshold:"
+  QUIC_DVLOG(3) << "IsInflightTooHigh: loss_events_in_round:"
+                << loss_events_in_round()
+
+                << " bytes_lost_in_round:" << bytes_lost_in_round
+                << ", lost_in_round_threshold:"
                 << inflight_at_send * Params().loss_threshold;
 
   if (inflight_at_send > 0 && bytes_lost_in_round > 0) {
diff --git a/quic/core/congestion_control/bbr2_misc.h b/quic/core/congestion_control/bbr2_misc.h
index f68092b..a6f710a 100644
--- a/quic/core/congestion_control/bbr2_misc.h
+++ b/quic/core/congestion_control/bbr2_misc.h
@@ -394,9 +394,10 @@
   bool IsCongestionWindowLimited(
       const Bbr2CongestionEvent& congestion_event) const;
 
-  // TODO(wub): Replace this by a new version which takes two thresholds, one
-  // is the number of loss events, the other is the percentage of bytes lost.
-  bool IsInflightTooHigh(const Bbr2CongestionEvent& congestion_event) const;
+  // Return true if the number of loss events exceeds max_loss_events and
+  // fraction of bytes lost exceed the loss threshold.
+  bool IsInflightTooHigh(const Bbr2CongestionEvent& congestion_event,
+                         int64_t max_loss_events) const;
 
   QuicPacketNumber last_sent_packet() const {
     return round_trip_counter_.last_sent_packet();
diff --git a/quic/core/congestion_control/bbr2_probe_bw.cc b/quic/core/congestion_control/bbr2_probe_bw.cc
index 1729118..fa72d9f 100644
--- a/quic/core/congestion_control/bbr2_probe_bw.cc
+++ b/quic/core/congestion_control/bbr2_probe_bw.cc
@@ -199,10 +199,8 @@
     return NOT_ADAPTED_INVALID_SAMPLE;
   }
 
-  const bool has_enough_loss_events =
-      model_->loss_events_in_round() >= Params().probe_bw_full_loss_count;
-
-  if (has_enough_loss_events && model_->IsInflightTooHigh(congestion_event)) {
+  if (model_->IsInflightTooHigh(congestion_event,
+                                Params().probe_bw_full_loss_count)) {
     if (cycle_.is_sample_from_probing) {
       cycle_.is_sample_from_probing = false;
 
diff --git a/quic/core/congestion_control/bbr2_startup.cc b/quic/core/congestion_control/bbr2_startup.cc
index 1141ca0..c134765 100644
--- a/quic/core/congestion_control/bbr2_startup.cc
+++ b/quic/core/congestion_control/bbr2_startup.cc
@@ -93,8 +93,6 @@
     return;
   }
 
-  const int64_t loss_events_in_round = model_->loss_events_in_round();
-
   // TODO(wub): In TCP, loss based exit only happens at end of a loss round, in
   // QUIC we use the end of the normal round here. It is possible to exit after
   // any congestion event, using information of the "rolling round".
@@ -102,19 +100,13 @@
     return;
   }
 
-  QUIC_DVLOG(3)
-      << sender_
-      << " CheckExcessiveLosses at end of round. loss_events_in_round:"
-      << loss_events_in_round
-      << ", threshold:" << Params().startup_full_loss_count << "  @ "
-      << congestion_event.event_time;
-
   // At the end of a round trip. Check if loss is too high in this round.
-  if (loss_events_in_round >= Params().startup_full_loss_count &&
-      model_->IsInflightTooHigh(congestion_event)) {
+  if (model_->IsInflightTooHigh(congestion_event,
+                                Params().startup_full_loss_count)) {
     const QuicByteCount bdp = model_->BDP(model_->MaxBandwidth());
     QUIC_DVLOG(3) << sender_
                   << " Exiting STARTUP due to loss. inflight_hi:" << bdp;
+    // TODO(ianswett): Add a shared method to set inflight_hi in the model.
     model_->set_inflight_hi(bdp);
 
     full_bandwidth_reached_ = true;
