diff --git a/quiche/quic/core/quic_connection.cc b/quiche/quic/core/quic_connection.cc
index 78a463f..fa8330a 100644
--- a/quiche/quic/core/quic_connection.cc
+++ b/quiche/quic/core/quic_connection.cc
@@ -5830,27 +5830,17 @@
 
 void QuicConnection::PostProcessAfterAckFrame(bool acked_new_packet) {
   if (!packet_creator_.has_ack()) {
-    if (least_unacked_plus_1_) {
-      QuicPacketNumber largest_packet_peer_knows_is_acked =
-          SupportsMultiplePacketNumberSpaces()
-              ? sent_packet_manager_.GetLargestPacketPeerKnowsIsAcked(
-                    last_received_packet_info_.decrypted_level)
-              : sent_packet_manager_.largest_packet_peer_knows_is_acked();
-      if (largest_packet_peer_knows_is_acked.IsInitialized()) {
-        QUIC_RELOADABLE_FLAG_COUNT(quic_least_unacked_plus_1);
-        ++largest_packet_peer_knows_is_acked;
-      }
-      uber_received_packet_manager_.DontWaitForPacketsBefore(
-          last_received_packet_info_.decrypted_level,
-          largest_packet_peer_knows_is_acked);
-    } else {
-      uber_received_packet_manager_.DontWaitForPacketsBefore(
-          last_received_packet_info_.decrypted_level,
-          SupportsMultiplePacketNumberSpaces()
-              ? sent_packet_manager_.GetLargestPacketPeerKnowsIsAcked(
-                    last_received_packet_info_.decrypted_level)
-              : sent_packet_manager_.largest_packet_peer_knows_is_acked());
+    QuicPacketNumber largest_packet_peer_knows_is_acked =
+        sent_packet_manager_.GetLargestPacketPeerKnowsIsAcked(
+            last_received_packet_info_.decrypted_level);
+    if (least_unacked_plus_1_ &&
+        largest_packet_peer_knows_is_acked.IsInitialized()) {
+      QUIC_RELOADABLE_FLAG_COUNT(quic_least_unacked_plus_1);
+      ++largest_packet_peer_knows_is_acked;
     }
+    uber_received_packet_manager_.DontWaitForPacketsBefore(
+        last_received_packet_info_.decrypted_level,
+        largest_packet_peer_knows_is_acked);
   }
   // Always reset the retransmission alarm when an ack comes in, since we now
   // have a better estimate of the current rtt than when it was set.
diff --git a/quiche/quic/core/quic_sent_packet_manager.cc b/quiche/quic/core/quic_sent_packet_manager.cc
index cee3e88..ae905a5 100644
--- a/quiche/quic/core/quic_sent_packet_manager.cc
+++ b/quiche/quic/core/quic_sent_packet_manager.cc
@@ -1576,9 +1576,11 @@
 
 QuicPacketNumber QuicSentPacketManager::GetLargestPacketPeerKnowsIsAcked(
     EncryptionLevel decrypted_packet_level) const {
-  QUICHE_DCHECK(supports_multiple_packet_number_spaces());
-  return largest_packets_peer_knows_is_acked_[QuicUtils::GetPacketNumberSpace(
-      decrypted_packet_level)];
+  if (supports_multiple_packet_number_spaces()) {
+    return largest_packets_peer_knows_is_acked_[QuicUtils::GetPacketNumberSpace(
+        decrypted_packet_level)];
+  }
+  return largest_packet_peer_knows_is_acked_;
 }
 
 QuicTime::Delta
diff --git a/quiche/quic/core/quic_sent_packet_manager.h b/quiche/quic/core/quic_sent_packet_manager.h
index a8a219c..4b0dfe6 100644
--- a/quiche/quic/core/quic_sent_packet_manager.h
+++ b/quiche/quic/core/quic_sent_packet_manager.h
@@ -437,11 +437,6 @@
     return initial_congestion_window_;
   }
 
-  QuicPacketNumber largest_packet_peer_knows_is_acked() const {
-    QUICHE_DCHECK(!supports_multiple_packet_number_spaces());
-    return largest_packet_peer_knows_is_acked_;
-  }
-
   size_t pending_timer_transmission_count() const {
     return pending_timer_transmission_count_;
   }
diff --git a/quiche/quic/core/quic_sent_packet_manager_test.cc b/quiche/quic/core/quic_sent_packet_manager_test.cc
index 09a2541..0427cfb 100644
--- a/quiche/quic/core/quic_sent_packet_manager_test.cc
+++ b/quiche/quic/core/quic_sent_packet_manager_test.cc
@@ -728,7 +728,8 @@
 }
 
 TEST_F(QuicSentPacketManagerTest, AckAckAndUpdateRtt) {
-  EXPECT_FALSE(manager_.largest_packet_peer_knows_is_acked().IsInitialized());
+  EXPECT_FALSE(manager_.GetLargestPacketPeerKnowsIsAcked(ENCRYPTION_INITIAL)
+                   .IsInitialized());
   SendDataPacket(1);
   SendAckPacket(2, 1);
 
@@ -741,7 +742,8 @@
   EXPECT_EQ(PACKETS_NEWLY_ACKED,
             manager_.OnAckFrameEnd(clock_.Now(), QuicPacketNumber(1),
                                    ENCRYPTION_INITIAL, kEmptyCounts));
-  EXPECT_EQ(QuicPacketNumber(1), manager_.largest_packet_peer_knows_is_acked());
+  EXPECT_EQ(QuicPacketNumber(1),
+            manager_.GetLargestPacketPeerKnowsIsAcked(ENCRYPTION_INITIAL));
 
   SendAckPacket(3, 3);
 
@@ -755,7 +757,7 @@
             manager_.OnAckFrameEnd(clock_.Now(), QuicPacketNumber(2),
                                    ENCRYPTION_INITIAL, kEmptyCounts));
   EXPECT_EQ(QuicPacketNumber(3u),
-            manager_.largest_packet_peer_knows_is_acked());
+            manager_.GetLargestPacketPeerKnowsIsAcked(ENCRYPTION_INITIAL));
 }
 
 TEST_F(QuicSentPacketManagerTest, Rtt) {
