diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index a19d821..e5b2fa9 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -37,7 +37,6 @@
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_enable_server_on_wire_ping, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_encrypted_control_frames, false)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_extract_x509_subject_using_certificate_view, true)
-QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_fix_arm_pto_for_application_data, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_fix_missing_initial_keys2, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_fix_out_of_order_sending2, true)
 QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_fix_pto_pending_timer_count, true)
diff --git a/quic/core/quic_sent_packet_manager.cc b/quic/core/quic_sent_packet_manager.cc
index 5927b14..d3e9a82 100644
--- a/quic/core/quic_sent_packet_manager.cc
+++ b/quic/core/quic_sent_packet_manager.cc
@@ -112,7 +112,6 @@
       handshake_packet_acked_(false),
       zero_rtt_packet_acked_(false),
       one_rtt_packet_acked_(false),
-      one_rtt_packet_sent_(false),
       first_pto_srtt_multiplier_(0),
       use_standard_deviation_for_pto_(false),
       pto_multiplier_without_rtt_samples_(3),
@@ -600,7 +599,8 @@
   for (int8_t i = 0; i < NUM_PACKET_NUMBER_SPACES; ++i) {
     const QuicTime sent_time = unacked_packets_.GetLastInFlightPacketSentTime(
         static_cast<PacketNumberSpace>(i));
-    if (!ShouldArmPtoForApplicationData() && i == APPLICATION_DATA) {
+    if (!handshake_finished_ && i == APPLICATION_DATA) {
+      // Do not arm PTO for application data until handshake gets confirmed.
       continue;
     }
     if (!sent_time.IsInitialized() || (earliest_sent_time.IsInitialized() &&
@@ -614,24 +614,6 @@
   return earliest_sent_time;
 }
 
-bool QuicSentPacketManager::ShouldArmPtoForApplicationData() const {
-  DCHECK(supports_multiple_packet_number_spaces());
-  if (GetQuicReloadableFlag(quic_fix_arm_pto_for_application_data)) {
-    QUIC_RELOADABLE_FLAG_COUNT(quic_fix_arm_pto_for_application_data);
-    // Do not arm PTO for application data until handshake gets confirmed.
-    return handshake_finished_;
-  }
-  // Application data must be ignored before handshake completes (1-RTT key
-  // is available). Not arming PTO for application data to prioritize the
-  // completion of handshake. On the server side, handshake_finished_
-  // indicates handshake complete (and confirmed). On the client side,
-  // one_rtt_packet_sent_ indicates handshake complete (while handshake
-  // confirmation will happen later).
-  return handshake_finished_ ||
-         (unacked_packets_.perspective() == Perspective::IS_CLIENT &&
-          one_rtt_packet_sent_);
-}
-
 void QuicSentPacketManager::MarkForRetransmission(
     QuicPacketNumber packet_number,
     TransmissionType transmission_type) {
@@ -829,10 +811,6 @@
                                   has_retransmittable_data);
   }
 
-  if (packet.encryption_level == ENCRYPTION_FORWARD_SECURE) {
-    one_rtt_packet_sent_ = true;
-  }
-
   // Deallocate message data in QuicMessageFrame immediately after packet
   // sent.
   if (packet.has_message) {
@@ -895,7 +873,7 @@
     case PTO_MODE:
       QUIC_DVLOG(1) << ENDPOINT << "PTO mode";
       ++stats_->pto_count;
-      if (handshake_mode_disabled_ && !ShouldArmPtoForApplicationData()) {
+      if (handshake_mode_disabled_ && !handshake_finished_) {
         ++stats_->crypto_retransmit_count;
       }
       ++consecutive_pto_count_;
diff --git a/quic/core/quic_sent_packet_manager.h b/quic/core/quic_sent_packet_manager.h
index 2dba799..67c3c51 100644
--- a/quic/core/quic_sent_packet_manager.h
+++ b/quic/core/quic_sent_packet_manager.h
@@ -551,10 +551,6 @@
   // timeout.
   bool ShouldAddMaxAckDelay(PacketNumberSpace space) const;
 
-  // Returns true if application data should be used to arm PTO. Only used when
-  // multiple packet number space is enabled.
-  bool ShouldArmPtoForApplicationData() const;
-
   // A helper function to return total delay of |num_timeouts| retransmission
   // timeout with TLP and RTO mode.
   QuicTime::Delta GetNConsecutiveRetransmissionTimeoutDelay(
@@ -718,9 +714,6 @@
   // True if any 1-RTT packet gets acknowledged.
   bool one_rtt_packet_acked_;
 
-  // True if any 1-RTT packet gets sent.
-  bool one_rtt_packet_sent_;
-
   // If > 0, arm the 1st PTO with max of earliest in flight sent time + PTO
   // delay and multiplier * srtt from last in flight packet.
   float first_pto_srtt_multiplier_;
diff --git a/quic/core/quic_sent_packet_manager_test.cc b/quic/core/quic_sent_packet_manager_test.cc
index e087211..f6d6f6d 100644
--- a/quic/core/quic_sent_packet_manager_test.cc
+++ b/quic/core/quic_sent_packet_manager_test.cc
@@ -3318,7 +3318,6 @@
   // Send packet 6 in 1-RTT.
   clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(10));
   SendDataPacket(6, ENCRYPTION_FORWARD_SECURE);
-  const QuicTime packet6_sent_time = clock_.Now();
   // Verify PTO timeout is now based on packet 5.
   EXPECT_EQ(packet5_sent_time + expected_pto_delay * 2,
             manager_.GetRetransmissionTime());
@@ -3328,21 +3327,11 @@
   const QuicTime packet7_sent_time = clock_.Now();
   SendDataPacket(7, ENCRYPTION_HANDSHAKE);
 
-  if (GetQuicReloadableFlag(quic_fix_arm_pto_for_application_data)) {
-    expected_pto_delay =
-        srtt + GetPtoRttvarMultiplier() * rtt_stats->mean_deviation();
-    // Verify PTO timeout is now based on packet 7.
-    EXPECT_EQ(packet7_sent_time + expected_pto_delay * 2,
-              manager_.GetRetransmissionTime());
-
-  } else {
-    expected_pto_delay =
-        srtt + GetPtoRttvarMultiplier() * rtt_stats->mean_deviation() +
-        QuicTime::Delta::FromMilliseconds(kDefaultDelayedAckTimeMs);
-    // Verify PTO timeout is now based on packet 6.
-    EXPECT_EQ(packet6_sent_time + expected_pto_delay * 2,
-              manager_.GetRetransmissionTime());
-  }
+  expected_pto_delay =
+      srtt + GetPtoRttvarMultiplier() * rtt_stats->mean_deviation();
+  // Verify PTO timeout is now based on packet 7.
+  EXPECT_EQ(packet7_sent_time + expected_pto_delay * 2,
+            manager_.GetRetransmissionTime());
 
   // Neuter handshake key.
   manager_.SetHandshakeConfirmed();
