diff --git a/quic/core/quic_dispatcher.cc b/quic/core/quic_dispatcher.cc
index 36932c3..18b6e56 100644
--- a/quic/core/quic_dispatcher.cc
+++ b/quic/core/quic_dispatcher.cc
@@ -591,7 +591,11 @@
       QuicTimeWaitListManager::SEND_STATELESS_RESET;
   if (connection->termination_packets() != nullptr &&
       !connection->termination_packets()->empty()) {
-    action = QuicTimeWaitListManager::SEND_TERMINATION_PACKETS;
+    if (GetQuicRestartFlag(quic_replace_time_wait_list_encryption_level)) {
+      action = QuicTimeWaitListManager::SEND_CONNECTION_CLOSE_PACKETS;
+    } else {
+      action = QuicTimeWaitListManager::SEND_TERMINATION_PACKETS;
+    }
   } else {
     if (!connection->IsHandshakeComplete()) {
       if (!VersionHasIetfInvariantHeader(connection->transport_version())) {
diff --git a/quic/core/quic_time_wait_list_manager.cc b/quic/core/quic_time_wait_list_manager.cc
index 2b0c267..433a3ab 100644
--- a/quic/core/quic_time_wait_list_manager.cc
+++ b/quic/core/quic_time_wait_list_manager.cc
@@ -162,12 +162,13 @@
           if (!connection_data->ietf_quic) {
             QUIC_CODE_COUNT(quic_received_short_header_packet_for_gquic);
           }
-          if (connection_data->encryption_level == ENCRYPTION_INITIAL) {
+          if (GetQuicRestartFlag(
+                  quic_replace_time_wait_list_encryption_level) ||
+              connection_data->encryption_level == ENCRYPTION_INITIAL) {
+            // TODO(b/153096082) Rename this code count.
             QUIC_CODE_COUNT(
                 quic_encryption_none_termination_packets_for_short_header);
-            // Send stateless reset in response to short header packets,
-            // because ENCRYPTION_INITIAL termination packets will not be
-            // processed by clients.
+            // Send stateless reset in response to short header packets.
             SendPublicReset(self_address, peer_address, connection_id,
                             connection_data->ietf_quic,
                             std::move(packet_context));
@@ -190,6 +191,19 @@
                           packet_context.get());
       }
       return;
+
+    case SEND_CONNECTION_CLOSE_PACKETS:
+      if (connection_data->termination_packets.empty()) {
+        QUIC_BUG << "There are no termination packets.";
+        return;
+      }
+      for (const auto& packet : connection_data->termination_packets) {
+        SendOrQueuePacket(std::make_unique<QueuedPacket>(
+                              self_address, peer_address, packet->Clone()),
+                          packet_context.get());
+      }
+      return;
+
     case SEND_STATELESS_RESET:
       if (header_format == IETF_QUIC_LONG_HEADER_PACKET) {
         QUIC_CODE_COUNT(quic_stateless_reset_long_header_packet);
diff --git a/quic/core/quic_time_wait_list_manager.h b/quic/core/quic_time_wait_list_manager.h
index c9a5261..64138de 100644
--- a/quic/core/quic_time_wait_list_manager.h
+++ b/quic/core/quic_time_wait_list_manager.h
@@ -44,6 +44,9 @@
     // Send specified termination packets, error if termination packet is
     // unavailable.
     SEND_TERMINATION_PACKETS,
+    // The same as SEND_TERMINATION_PACKETS except that the corresponding
+    // termination packets are provided by the connection.
+    SEND_CONNECTION_CLOSE_PACKETS,
     // Send stateless reset (public reset for GQUIC).
     SEND_STATELESS_RESET,
 
@@ -244,6 +247,7 @@
     int num_packets;
     bool ietf_quic;
     QuicTime time_added;
+    // TODO(b/153096082) Remove this field.
     // Encryption level of termination_packets.
     EncryptionLevel encryption_level;
     // These packets may contain CONNECTION_CLOSE frames, or SREJ messages.
diff --git a/quic/core/quic_time_wait_list_manager_test.cc b/quic/core/quic_time_wait_list_manager_test.cc
index b07c83e..9e09a80 100644
--- a/quic/core/quic_time_wait_list_manager_test.cc
+++ b/quic/core/quic_time_wait_list_manager_test.cc
@@ -322,9 +322,12 @@
   termination_packets.push_back(
       std::unique_ptr<QuicEncryptedPacket>(new QuicEncryptedPacket(
           new char[kConnectionCloseLength], kConnectionCloseLength, true)));
-  AddConnectionId(connection_id_, QuicVersionMax(),
-                  QuicTimeWaitListManager::SEND_TERMINATION_PACKETS,
-                  &termination_packets);
+  AddConnectionId(
+      connection_id_, QuicVersionMax(),
+      GetQuicRestartFlag(quic_replace_time_wait_list_encryption_level)
+          ? QuicTimeWaitListManager::SEND_CONNECTION_CLOSE_PACKETS
+          : QuicTimeWaitListManager::SEND_TERMINATION_PACKETS,
+      &termination_packets);
   EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength,
                                    self_address_.host(), peer_address_, _))
       .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1)));
@@ -342,9 +345,12 @@
   termination_packets.push_back(
       std::unique_ptr<QuicEncryptedPacket>(new QuicEncryptedPacket(
           new char[kConnectionCloseLength], kConnectionCloseLength, true)));
-  AddConnectionId(connection_id_, QuicVersionMax(),
-                  QuicTimeWaitListManager::SEND_TERMINATION_PACKETS,
-                  &termination_packets);
+  AddConnectionId(
+      connection_id_, QuicVersionMax(),
+      GetQuicRestartFlag(quic_replace_time_wait_list_encryption_level)
+          ? QuicTimeWaitListManager::SEND_CONNECTION_CLOSE_PACKETS
+          : QuicTimeWaitListManager::SEND_TERMINATION_PACKETS,
+      &termination_packets);
   EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength,
                                    self_address_.host(), peer_address_, _))
       .Times(2)
@@ -646,6 +652,30 @@
       IETF_QUIC_SHORT_HEADER_PACKET, std::make_unique<QuicPerPacketContext>());
 }
 
+TEST_F(QuicTimeWaitListManagerTest,
+       SendConnectionClosePacketsInResponseToShortHeaders) {
+  SetQuicRestartFlag(quic_replace_time_wait_list_encryption_level, true);
+  const size_t kConnectionCloseLength = 100;
+  EXPECT_CALL(visitor_, OnConnectionAddedToTimeWaitList(connection_id_));
+  std::vector<std::unique_ptr<QuicEncryptedPacket>> termination_packets;
+  termination_packets.push_back(
+      std::unique_ptr<QuicEncryptedPacket>(new QuicEncryptedPacket(
+          new char[kConnectionCloseLength], kConnectionCloseLength, true)));
+  // Add a CONNECTION_CLOSE termination packet.
+  time_wait_list_manager_.AddConnectionIdToTimeWait(
+      connection_id_, /*ietf_quic=*/true,
+      QuicTimeWaitListManager::SEND_CONNECTION_CLOSE_PACKETS,
+      ENCRYPTION_INITIAL, &termination_packets);
+  EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength,
+                                   self_address_.host(), peer_address_, _))
+      .WillOnce(Return(WriteResult(WRITE_STATUS_OK, 1)));
+
+  // Processes IETF short header packet.
+  time_wait_list_manager_.ProcessPacket(
+      self_address_, peer_address_, connection_id_,
+      IETF_QUIC_SHORT_HEADER_PACKET, std::make_unique<QuicPerPacketContext>());
+}
+
 }  // namespace
 }  // namespace test
 }  // namespace quic
