diff --git a/quic/core/quic_packet_creator.cc b/quic/core/quic_packet_creator.cc
index d272068..e52c965 100644
--- a/quic/core/quic_packet_creator.cc
+++ b/quic/core/quic_packet_creator.cc
@@ -1453,11 +1453,9 @@
     return false;
   }
 
-  if (GetQuicRestartFlag(quic_coalesce_stream_frames_2) &&
-      frame.type == STREAM_FRAME) {
+  if (frame.type == STREAM_FRAME) {
     if (MaybeCoalesceStreamFrame(frame.stream_frame)) {
       LogCoalesceStreamFrameStatus(true);
-      QUIC_RESTART_FLAG_COUNT_N(quic_coalesce_stream_frames_2, 1, 3);
       return true;
     } else {
       LogCoalesceStreamFrameStatus(false);
diff --git a/quic/core/quic_packet_creator_test.cc b/quic/core/quic_packet_creator_test.cc
index 0134fb6..cbf18a4 100644
--- a/quic/core/quic_packet_creator_test.cc
+++ b/quic/core/quic_packet_creator_test.cc
@@ -316,10 +316,6 @@
     if (level != ENCRYPTION_INITIAL && level != ENCRYPTION_HANDSHAKE) {
       frames_.push_back(QuicFrame(
           QuicStreamFrame(stream_id, false, 0u, quiche::QuicheStringPiece())));
-      if (!GetQuicRestartFlag(quic_coalesce_stream_frames_2)) {
-        frames_.push_back(QuicFrame(
-            QuicStreamFrame(stream_id, true, 0u, quiche::QuicheStringPiece())));
-      }
     }
     SerializedPacket serialized = SerializeAllFrames(frames_);
     EXPECT_EQ(level, serialized.encryption_level);
@@ -342,9 +338,6 @@
           .WillOnce(Return(true));
       if (level != ENCRYPTION_INITIAL && level != ENCRYPTION_HANDSHAKE) {
         EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
-        if (!GetQuicRestartFlag(quic_coalesce_stream_frames_2)) {
-          EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
-        }
       }
       if (client_framer_.version().HasHeaderProtection()) {
         EXPECT_CALL(framer_visitor_, OnPaddingFrame(_))
@@ -2002,7 +1995,6 @@
   if (!GetParam().version_serialization) {
     creator_.StopSendingVersion();
   }
-  SetQuicRestartFlag(quic_coalesce_stream_frames_2, true);
   const size_t max_plaintext_size =
       client_framer_.GetMaxPlaintextSize(creator_.max_packet_length());
   EXPECT_FALSE(creator_.HasPendingFrames());
@@ -2816,8 +2808,7 @@
   EXPECT_FALSE(creator_.HasPendingRetransmittableFrames());
 
   PacketContents contents;
-  contents.num_stream_frames =
-      GetQuicRestartFlag(quic_coalesce_stream_frames_2) ? 1 : 2;
+  contents.num_stream_frames = 1;
   CheckPacketContains(contents, 0);
 }
 
diff --git a/quic/core/quic_stream_send_buffer.cc b/quic/core/quic_stream_send_buffer.cc
index d91ceb8..9adae74 100644
--- a/quic/core/quic_stream_send_buffer.cc
+++ b/quic/core/quic_stream_send_buffer.cc
@@ -147,9 +147,7 @@
     }
     return data_length == 0;
   }
-  // TODO(renjietang): Remove this variable once quic_coalesce_stream_frames_2
-  // is deprecated.
-  bool write_index_hit = false;
+
   QuicDeque<BufferedSlice>::iterator slice_it =
       write_index_ == -1
           ? buffered_slices_.begin()
@@ -161,9 +159,7 @@
       return false;
     }
     // Determine if write actually happens at indexed slice.
-    if (offset >= slice_it->offset) {
-      write_index_hit = true;
-    } else {
+    if (offset < slice_it->offset) {
       // Write index missed, move iterator to the beginning.
       slice_it = buffered_slices_.begin();
     }
@@ -188,35 +184,20 @@
     offset += copy_length;
     data_length -= copy_length;
 
-    if (GetQuicRestartFlag(quic_coalesce_stream_frames_2)) {
-      QUIC_RESTART_FLAG_COUNT_N(quic_coalesce_stream_frames_2, 2, 3);
-      if (write_index_ != -1) {
-        QuicDeque<BufferedSlice>::const_iterator index_slice =
-            buffered_slices_.begin() + write_index_;
-        if (index_slice->offset == slice_it->offset &&
-            copy_length == available_bytes_in_slice) {
-          // The slice pointed by write_index has been fully written, advance
-          // write index.
-          ++write_index_;
-        }
+    if (write_index_ != -1) {
+      QuicDeque<BufferedSlice>::const_iterator index_slice =
+          buffered_slices_.begin() + write_index_;
+      if (index_slice->offset == slice_it->offset &&
+          copy_length == available_bytes_in_slice) {
+        // The slice pointed by write_index has been fully written, advance
+        // write index.
+        ++write_index_;
       }
-    } else if (write_index_hit && copy_length == available_bytes_in_slice) {
-      // Finished writing all data in current slice, advance write index for
-      // next write.
-      ++write_index_;
     }
   }
 
-  if (GetQuicRestartFlag(quic_coalesce_stream_frames_2)) {
-    QUIC_RESTART_FLAG_COUNT_N(quic_coalesce_stream_frames_2, 3, 3);
-    if (write_index_ != -1 &&
-        static_cast<size_t>(write_index_) == buffered_slices_.size()) {
-      write_index_ = -1;
-    }
-  } else if (write_index_hit &&
-             static_cast<size_t>(write_index_) == buffered_slices_.size()) {
-    // Already write to the end of buffer.
-    QUIC_DVLOG(2) << "Finish writing out all buffered data.";
+  if (write_index_ != -1 &&
+      static_cast<size_t>(write_index_) == buffered_slices_.size()) {
     write_index_ = -1;
   }
 
diff --git a/quic/core/quic_stream_send_buffer_test.cc b/quic/core/quic_stream_send_buffer_test.cc
index 325dca0..35d8901 100644
--- a/quic/core/quic_stream_send_buffer_test.cc
+++ b/quic/core/quic_stream_send_buffer_test.cc
@@ -143,12 +143,7 @@
   EXPECT_EQ(copy1 + copy2, quiche::QuicheStringPiece(buf + 1024, 2048));
 
   // Write new data.
-  if (!GetQuicRestartFlag(quic_coalesce_stream_frames_2) &&
-      !GetQuicReloadableFlag(quic_interval_deque)) {
-    EXPECT_EQ(1, QuicStreamSendBufferPeer::write_index(&send_buffer_));
-    EXPECT_QUIC_DEBUG_DEATH(send_buffer_.WriteStreamData(2048, 50, &writer),
-                            "Tried to write data out of sequence.");
-  } else if (!GetQuicReloadableFlag(quic_interval_deque)) {
+  if (!GetQuicReloadableFlag(quic_interval_deque)) {
     EXPECT_EQ(2, QuicStreamSendBufferPeer::write_index(&send_buffer_));
     ASSERT_TRUE(send_buffer_.WriteStreamData(2048, 50, &writer));
     EXPECT_EQ(std::string(50, 'c'),
