diff --git a/quic/core/quic_dispatcher.cc b/quic/core/quic_dispatcher.cc
index 553fcd4..cb81f05 100644
--- a/quic/core/quic_dispatcher.cc
+++ b/quic/core/quic_dispatcher.cc
@@ -306,28 +306,14 @@
   DCHECK(QuicUtils::VariableLengthConnectionIdAllowedForVersion(
       version.transport_version));
 
-  if (!GetQuicRestartFlag(quic_deterministic_replacement_connection_ids)) {
-    auto it = connection_id_map_.find(server_connection_id);
-    if (it != connection_id_map_.end()) {
-      return it->second;
-    }
-  } else {
-    // TODO(dschinazi) Remove QuicDispatcher::connection_id_map_ entirely
-    // when quic_deterministic_replacement_connection_ids is deprecated.
-    QUIC_RESTART_FLAG_COUNT_N(quic_deterministic_replacement_connection_ids, 1,
-                              2);
-  }
   QuicConnectionId new_connection_id =
       GenerateNewServerConnectionId(version, server_connection_id);
   DCHECK_EQ(expected_server_connection_id_length_, new_connection_id.length());
-  if (!GetQuicRestartFlag(quic_deterministic_replacement_connection_ids)) {
-    connection_id_map_.insert(
-        std::make_pair(server_connection_id, new_connection_id));
-  } else {
-    // Verify that GenerateNewServerConnectionId is deterministic.
-    DCHECK_EQ(new_connection_id,
-              GenerateNewServerConnectionId(version, server_connection_id));
-  }
+
+  // Verify that GenerateNewServerConnectionId is deterministic.
+  DCHECK_EQ(new_connection_id,
+            GenerateNewServerConnectionId(version, server_connection_id));
+
   QUIC_DLOG(INFO) << "Replacing incoming connection ID " << server_connection_id
                   << " with " << new_connection_id;
   return new_connection_id;
@@ -336,13 +322,6 @@
 QuicConnectionId QuicDispatcher::GenerateNewServerConnectionId(
     ParsedQuicVersion /*version*/,
     QuicConnectionId connection_id) const {
-  if (!GetQuicRestartFlag(quic_deterministic_replacement_connection_ids)) {
-    return QuicUtils::CreateRandomConnectionId();
-  }
-
-  QUIC_RESTART_FLAG_COUNT_N(quic_deterministic_replacement_connection_ids, 2,
-                            2);
-
   return QuicUtils::CreateReplacementConnectionId(connection_id);
 }
 
diff --git a/quic/core/quic_dispatcher.h b/quic/core/quic_dispatcher.h
index 566d3bc..abcd4f2 100644
--- a/quic/core/quic_dispatcher.h
+++ b/quic/core/quic_dispatcher.h
@@ -113,10 +113,6 @@
                                            QuicConnectionId,
                                            QuicConnectionIdHash>;
 
-  const ConnectionIdMap& connection_id_map() const {
-    return connection_id_map_;
-  }
-
   // The largest packet number we expect to receive with a connection
   // ID for a connection that is not established yet.  The current design will
   // send a handshake and then up to 50 or so data packets, and then it may
@@ -334,9 +330,6 @@
 
   SessionMap session_map_;
 
-  // Map of connection IDs with bad lengths to their replacements.
-  ConnectionIdMap connection_id_map_;
-
   // Entity that manages connection_ids in time wait state.
   std::unique_ptr<QuicTimeWaitListManager> time_wait_list_manager_;
 
diff --git a/quic/core/quic_dispatcher_test.cc b/quic/core/quic_dispatcher_test.cc
index b8cc470..b3f13d9 100644
--- a/quic/core/quic_dispatcher_test.cc
+++ b/quic/core/quic_dispatcher_test.cc
@@ -132,17 +132,6 @@
   MOCK_METHOD1(ShouldCreateOrBufferPacketForConnection,
                bool(const ReceivedPacketInfo& packet_info));
 
-  QuicConnectionId GenerateNewServerConnectionId(
-      ParsedQuicVersion /*version*/,
-      QuicConnectionId connection_id) const override {
-    if (!GetQuicRestartFlag(quic_deterministic_replacement_connection_ids)) {
-      return QuicUtils::CreateRandomConnectionId(random_);
-    }
-    // TODO(dschinazi) Remove this override entirely when
-    // quic_deterministic_replacement_connection_ids is deprecated.
-    return QuicUtils::CreateReplacementConnectionId(connection_id);
-  }
-
   struct TestQuicPerPacketContext : public QuicPerPacketContext {
     std::string custom_packet_context;
   };
@@ -760,14 +749,8 @@
   QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
 
   QuicConnectionId bad_connection_id = TestConnectionIdNineBytesLong(2);
-  QuicConnectionId fixed_connection_id;
-  if (!GetQuicRestartFlag(quic_deterministic_replacement_connection_ids)) {
-    fixed_connection_id =
-        QuicUtils::CreateRandomConnectionId(mock_helper_.GetRandomGenerator());
-  } else {
-    fixed_connection_id =
-        QuicUtils::CreateReplacementConnectionId(bad_connection_id);
-  }
+  QuicConnectionId fixed_connection_id =
+      QuicUtils::CreateReplacementConnectionId(bad_connection_id);
 
   EXPECT_CALL(*dispatcher_,
               CreateQuicSession(fixed_connection_id, client_address,
@@ -799,14 +782,8 @@
   QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
 
   QuicConnectionId bad_connection_id = EmptyQuicConnectionId();
-  QuicConnectionId fixed_connection_id;
-  if (!GetQuicRestartFlag(quic_deterministic_replacement_connection_ids)) {
-    fixed_connection_id =
-        QuicUtils::CreateRandomConnectionId(mock_helper_.GetRandomGenerator());
-  } else {
-    fixed_connection_id =
-        QuicUtils::CreateReplacementConnectionId(bad_connection_id);
-  }
+  QuicConnectionId fixed_connection_id =
+      QuicUtils::CreateReplacementConnectionId(bad_connection_id);
 
   // Disable validation of invalid short connection IDs.
   dispatcher_->SetAllowShortInitialServerConnectionIds(true);
@@ -842,14 +819,8 @@
 
   QuicSocketAddress client_address(QuicIpAddress::Loopback4(), 1);
   QuicConnectionId bad_connection_id = TestConnectionIdNineBytesLong(2);
-  QuicConnectionId fixed_connection_id;
-  if (!GetQuicRestartFlag(quic_deterministic_replacement_connection_ids)) {
-    fixed_connection_id =
-        QuicUtils::CreateRandomConnectionId(mock_helper_.GetRandomGenerator());
-  } else {
-    fixed_connection_id =
-        QuicUtils::CreateReplacementConnectionId(bad_connection_id);
-  }
+  QuicConnectionId fixed_connection_id =
+      QuicUtils::CreateReplacementConnectionId(bad_connection_id);
 
   EXPECT_CALL(*dispatcher_,
               CreateQuicSession(TestConnectionId(1), client_address,
