diff --git a/quic/core/http/quic_spdy_client_session_test.cc b/quic/core/http/quic_spdy_client_session_test.cc
index c466a9f..6408667 100644
--- a/quic/core/http/quic_spdy_client_session_test.cc
+++ b/quic/core/http/quic_spdy_client_session_test.cc
@@ -1179,13 +1179,15 @@
     return;
   }
 
+  SetQuicReloadableFlag(quic_fix_gquic_stream_type, true);
+
   CompleteFirstConnection();
 
   // Create a second connection, but disable 0-RTT on the server.
   CreateConnection();
   QuicConfig config = DefaultQuicConfig();
   // Server doesn't allow any outgoing streams.
-  config.SetInitialMaxStreamDataBytesIncomingBidirectionalToSend(1);
+  config.SetInitialMaxStreamDataBytesIncomingBidirectionalToSend(2);
   config.SetInitialMaxStreamDataBytesUnidirectionalToSend(1);
   SSL_CTX_set_early_data_enabled(server_crypto_config_->ssl_ctx(), false);
   session_->CryptoConnect();
@@ -1207,7 +1209,7 @@
                 CloseConnection(
                     QUIC_ZERO_RTT_UNRETRANSMITTABLE,
                     "Server rejected 0-RTT, aborting because new stream max "
-                    "data 1 for stream 3 is less than currently used: 5",
+                    "data 2 for stream 3 is less than currently used: 5",
                     _))
         .Times(1)
         .WillOnce(testing::Invoke(connection_,
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index ad7fce3..fec3fe5 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -98,7 +98,9 @@
       use_http2_priority_write_scheduler_(false),
       is_configured_(false),
       enable_round_robin_scheduling_(false),
-      was_zero_rtt_rejected_(false) {
+      was_zero_rtt_rejected_(false),
+      fix_gquic_stream_type_(
+          GetQuicReloadableFlag(quic_fix_gquic_stream_type)) {
   closed_streams_clean_up_alarm_ =
       QuicWrapUnique<QuicAlarm>(connection_->alarm_factory()->CreateAlarm(
           new ClosedStreamsCleanUpDelegate(this)));
@@ -1324,8 +1326,15 @@
   // Inform all existing outgoing unidirectional streams about the new window.
   for (auto const& kv : stream_map_) {
     const QuicStreamId id = kv.first;
-    if (QuicUtils::IsBidirectionalStreamId(id)) {
-      continue;
+    if (fix_gquic_stream_type_ && !version().HasIetfQuicFrames()) {
+      QUIC_RELOADABLE_FLAG_COUNT_N(quic_fix_gquic_stream_type, 1, 3);
+      if (kv.second->type() == BIDIRECTIONAL) {
+        continue;
+      }
+    } else {
+      if (QuicUtils::IsBidirectionalStreamId(id)) {
+        continue;
+      }
     }
     if (!QuicUtils::IsOutgoingStreamId(connection_->version(), id,
                                        perspective())) {
@@ -1351,8 +1360,15 @@
   // Inform all existing outgoing bidirectional streams about the new window.
   for (auto const& kv : stream_map_) {
     const QuicStreamId id = kv.first;
-    if (!QuicUtils::IsBidirectionalStreamId(id)) {
-      continue;
+    if (fix_gquic_stream_type_ && !version().HasIetfQuicFrames()) {
+      QUIC_RELOADABLE_FLAG_COUNT_N(quic_fix_gquic_stream_type, 2, 3);
+      if (kv.second->type() != BIDIRECTIONAL) {
+        continue;
+      }
+    } else {
+      if (!QuicUtils::IsBidirectionalStreamId(id)) {
+        continue;
+      }
     }
     if (!QuicUtils::IsOutgoingStreamId(connection_->version(), id,
                                        perspective())) {
@@ -1378,8 +1394,15 @@
   // Inform all existing incoming bidirectional streams about the new window.
   for (auto const& kv : stream_map_) {
     const QuicStreamId id = kv.first;
-    if (!QuicUtils::IsBidirectionalStreamId(id)) {
-      continue;
+    if (fix_gquic_stream_type_ && !version().HasIetfQuicFrames()) {
+      QUIC_RELOADABLE_FLAG_COUNT_N(quic_fix_gquic_stream_type, 3, 3);
+      if (kv.second->type() != BIDIRECTIONAL) {
+        continue;
+      }
+    } else {
+      if (!QuicUtils::IsBidirectionalStreamId(id)) {
+        continue;
+      }
     }
     if (QuicUtils::IsOutgoingStreamId(connection_->version(), id,
                                       perspective())) {
diff --git a/quic/core/quic_session.h b/quic/core/quic_session.h
index e5e794f..9233402 100644
--- a/quic/core/quic_session.h
+++ b/quic/core/quic_session.h
@@ -818,6 +818,9 @@
 
   // Whether the session has received a 0-RTT rejection (QUIC+TLS only).
   bool was_zero_rtt_rejected_;
+
+  // Latched value of flag quic_fix_gquic_stream_type.
+  const bool fix_gquic_stream_type_;
 };
 
 }  // namespace quic
