diff --git a/quiche/quic/core/quic_connection.cc b/quiche/quic/core/quic_connection.cc
index 16c01d3..d4af137 100644
--- a/quiche/quic/core/quic_connection.cc
+++ b/quiche/quic/core/quic_connection.cc
@@ -3397,8 +3397,7 @@
   QuicSocketAddress send_to_address = packet->peer_address;
   // Self address is always the default self address on this code path.
   const bool send_on_current_path = send_to_address == peer_address();
-  if (!send_on_current_path && only_send_probing_frames_on_alternative_path_) {
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_not_bundle_ack_on_alternative_path, 2, 2);
+  if (!send_on_current_path) {
     QUIC_BUG_IF(quic_send_non_probing_frames_on_alternative_path,
                 ContainsNonProbingFrame(*packet))
         << "Packet " << packet->packet_number
@@ -6558,34 +6557,6 @@
     return connected_;
   }
   if (connection_migration_use_new_cid_) {
-    if (!only_send_probing_frames_on_alternative_path_) {
-      {
-        QuicConnectionId client_cid, server_cid;
-        FindOnPathConnectionIds(self_address, effective_peer_address,
-                                &client_cid, &server_cid);
-        QuicPacketCreator::ScopedPeerAddressContext context(
-            &packet_creator_, peer_address, client_cid, server_cid,
-            connection_migration_use_new_cid_);
-        if (writer == writer_) {
-          ScopedPacketFlusher flusher(this);
-          // It's on current path, add the PATH_CHALLENGE the same way as other
-          // frames. This may cause connection to be closed.
-          packet_creator_.AddPathChallengeFrame(data_buffer);
-        } else {
-          std::unique_ptr<SerializedPacket> probing_packet =
-              packet_creator_.SerializePathChallengeConnectivityProbingPacket(
-                  data_buffer);
-          QUICHE_DCHECK_EQ(IsRetransmittable(*probing_packet),
-                           NO_RETRANSMITTABLE_DATA);
-          QUICHE_DCHECK_EQ(self_address, alternative_path_.self_address);
-          WritePacketUsingWriter(std::move(probing_packet), writer,
-                                 self_address, peer_address,
-                                 /*measure_rtt=*/false);
-        }
-      }
-      return connected_;
-    }
-    QUIC_RELOADABLE_FLAG_COUNT_N(quic_not_bundle_ack_on_alternative_path, 1, 2);
     QuicConnectionId client_cid, server_cid;
     FindOnPathConnectionIds(self_address, effective_peer_address, &client_cid,
                             &server_cid);
diff --git a/quiche/quic/core/quic_connection.h b/quiche/quic/core/quic_connection.h
index 5f0fafb..0e4c956 100644
--- a/quiche/quic/core/quic_connection.h
+++ b/quiche/quic/core/quic_connection.h
@@ -2308,9 +2308,6 @@
 
   RetransmittableOnWireBehavior retransmittable_on_wire_behavior_ = DEFAULT;
 
-  bool only_send_probing_frames_on_alternative_path_ =
-      GetQuicReloadableFlag(quic_not_bundle_ack_on_alternative_path);
-
   // If true, throttle sending if next created packet will exceed amplification
   // limit.
   const bool enforce_strict_amplification_factor_ =
diff --git a/quiche/quic/core/quic_connection_test.cc b/quiche/quic/core/quic_connection_test.cc
index fe5be6f..2095700 100644
--- a/quiche/quic/core/quic_connection_test.cc
+++ b/quiche/quic/core/quic_connection_test.cc
@@ -13709,7 +13709,6 @@
       .WillOnce(Invoke([this]() {
         connection_.SendControlFrame(QuicFrame(QuicWindowUpdateFrame(1, 0, 0)));
       }));
-  if (GetQuicReloadableFlag(quic_not_bundle_ack_on_alternative_path)) {
     EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
         .WillOnce(Invoke([&]() {
           EXPECT_EQ(kNewPeerAddress, writer_->last_write_peer_address());
@@ -13726,13 +13725,6 @@
         QuicPathValidatorPeer::retry_timer(
             QuicConnectionPeer::path_validator(&connection_)))
         ->Fire();
-  } else {
-    EXPECT_QUIC_BUG(static_cast<TestAlarmFactory::TestAlarm*>(
-                        QuicPathValidatorPeer::retry_timer(
-                            QuicConnectionPeer::path_validator(&connection_)))
-                        ->Fire(),
-                    "quic_bug_12645_2");
-  }
 }
 
 TEST_P(QuicConnectionTest, DoNotIssueNewCidIfVisitorSaysNo) {
diff --git a/quiche/quic/core/quic_flags_list.h b/quiche/quic/core/quic_flags_list.h
index fe43e10..4b4cfd7 100644
--- a/quiche/quic/core/quic_flags_list.h
+++ b/quiche/quic/core/quic_flags_list.h
@@ -49,8 +49,6 @@
 QUIC_FLAG(quic_reloadable_flag_quic_enable_disable_resumption, true)
 // If true, discard INITIAL packet if the key has been dropped.
 QUIC_FLAG(quic_reloadable_flag_quic_discard_initial_packet_with_key_dropped, true)
-// If true, do not bundle ACK while sending PATH_CHALLENGE on alternative path.
-QUIC_FLAG(quic_reloadable_flag_quic_not_bundle_ack_on_alternative_path, true)
 // If true, do not issue a new connection ID that has been claimed by another connection.
 QUIC_FLAG(quic_reloadable_flag_quic_check_cid_collision_when_issue_new_cid, true)
 // If true, do not mark stream connection level write blocked if its write side has been closed.
