diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index 462e073..f0b9d92 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -101,12 +101,10 @@
       enable_round_robin_scheduling_(false),
       was_zero_rtt_rejected_(false),
       liveness_testing_in_progress_(false),
-      remove_streams_waiting_for_acks_(
-          GetQuicReloadableFlag(quic_remove_streams_waiting_for_acks)),
       do_not_use_stream_map_(GetQuicReloadableFlag(quic_do_not_use_stream_map)),
       remove_zombie_streams_(
           GetQuicReloadableFlag(quic_remove_zombie_streams) &&
-          do_not_use_stream_map_ && remove_streams_waiting_for_acks_) {
+          do_not_use_stream_map_) {
   closed_streams_clean_up_alarm_ =
       QuicWrapUnique<QuicAlarm>(connection_->alarm_factory()->CreateAlarm(
           new ClosedStreamsCleanUpDelegate(this)));
@@ -933,12 +931,6 @@
       zombie_streams_[stream_id] = std::move(it->second);
     }
   } else {
-    // Clean up the stream since it is no longer waiting for acks.
-    if (remove_streams_waiting_for_acks_) {
-      QUIC_RELOADABLE_FLAG_COUNT_N(quic_remove_streams_waiting_for_acks, 1, 4);
-    } else {
-      streams_waiting_for_acks_.erase(stream_id);
-    }
     closed_streams_.push_back(std::move(it->second));
     if (remove_zombie_streams_) {
       // When zombie_streams_ is removed, stream is only erased from stream map
@@ -2073,12 +2065,6 @@
 }
 
 void QuicSession::OnStreamDoneWaitingForAcks(QuicStreamId id) {
-  if (remove_streams_waiting_for_acks_) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_remove_streams_waiting_for_acks, 2, 4);
-  } else {
-    streams_waiting_for_acks_.erase(id);
-  }
-
   if (!remove_zombie_streams_) {
     auto it = zombie_streams_.find(id);
     if (it == zombie_streams_.end()) {
@@ -2105,31 +2091,6 @@
   streams_with_pending_retransmission_.erase(id);
 }
 
-void QuicSession::OnStreamWaitingForAcks(QuicStreamId id) {
-  if (remove_streams_waiting_for_acks_) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_remove_streams_waiting_for_acks, 3, 4);
-    return;
-  }
-  // Exclude crypto stream's status since it is counted in HasUnackedCryptoData.
-  if (GetCryptoStream() != nullptr && id == GetCryptoStream()->id()) {
-    return;
-  }
-
-  streams_waiting_for_acks_.insert(id);
-
-  // The number of the streams waiting for acks should not be larger than the
-  // number of streams.
-  DCHECK(!remove_zombie_streams_ || zombie_streams_.empty());
-  if (static_cast<size_t>(stream_map_.size() + zombie_streams_.size()) <
-      streams_waiting_for_acks_.size()) {
-    QUIC_BUG << "More streams are waiting for acks than the number of streams. "
-             << "Sizes: streams: " << stream_map_.size()
-             << ", zombie streams: " << zombie_streams_.size()
-             << ", vs streams waiting for acks: "
-             << streams_waiting_for_acks_.size();
-  }
-}
-
 QuicStream* QuicSession::GetStream(QuicStreamId id) const {
   auto active_stream = stream_map_.find(id);
   if (active_stream != stream_map_.end()) {
@@ -2282,10 +2243,6 @@
 }
 
 bool QuicSession::HasUnackedStreamData() const {
-  if (!remove_streams_waiting_for_acks_) {
-    return !streams_waiting_for_acks_.empty();
-  }
-  QUIC_RELOADABLE_FLAG_COUNT_N(quic_remove_streams_waiting_for_acks, 4, 4);
   DCHECK(!remove_zombie_streams_ || zombie_streams_.empty());
   if (!zombie_streams().empty()) {
     return true;
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h
index 14a46dd..7a8c2c1 100644
--- a/quic/core/quic_session.h
+++ b/quic/core/quic_session.h
@@ -346,10 +346,6 @@
   // TODO(b/136274541): rename to CloseZombieStreams.
   void OnStreamDoneWaitingForAcks(QuicStreamId id);
 
-  // TODO(b/136274541): Remove this once quic_remove_streams_waiting_for_acks is
-  // deprecated. Called when stream |id| is newly waiting for acks.
-  void OnStreamWaitingForAcks(QuicStreamId id);
-
   // Returns true if there is pending handshake data in the crypto stream.
   // TODO(ianswett): Make this private or remove.
   bool HasPendingHandshake() const;
@@ -768,11 +764,6 @@
   // which are waiting for the first byte of payload to arrive.
   PendingStreamMap pending_stream_map_;
 
-  // TODO(b/136274541): Remove this once quic_remove_streams_waiting_for_acks is
-  // deprecated. Set of stream ids that are waiting for acks excluding crypto
-  // stream id.
-  QuicHashSet<QuicStreamId> streams_waiting_for_acks_;
-
   // TODO(fayang): Consider moving LegacyQuicStreamIdManager into
   // UberQuicStreamIdManager.
   // Manages stream IDs for Google QUIC.
@@ -856,9 +847,6 @@
   // creation of new outgoing bidirectional streams.
   bool liveness_testing_in_progress_;
 
-  // Latched value of flag quic_remove_streams_waiting_for_acks.
-  const bool remove_streams_waiting_for_acks_;
-
   // Latched value of flag quic_do_not_use_stream_map.
   const bool do_not_use_stream_map_;
 
diff --git a/quic/core/quic_stream.cc b/quic/core/quic_stream.cc
index 0271352..9849239 100644
--- a/quic/core/quic_stream.cc
+++ b/quic/core/quic_stream.cc
@@ -1215,10 +1215,6 @@
   if (consumed_data.bytes_consumed > 0 || consumed_data.fin_consumed) {
     busy_counter_ = 0;
   }
-
-  if (IsWaitingForAcks()) {
-    session_->OnStreamWaitingForAcks(id_);
-  }
 }
 
 uint64_t QuicStream::BufferedDataBytes() const {
