diff --git a/quiche/common/quiche_feature_flags_list.h b/quiche/common/quiche_feature_flags_list.h
index 66751cf..8c58b90 100755
--- a/quiche/common/quiche_feature_flags_list.h
+++ b/quiche/common/quiche_feature_flags_list.h
@@ -9,7 +9,6 @@
 #if defined(QUICHE_FLAG)
 
 QUICHE_FLAG(bool, quiche_reloadable_flag_enable_h3_origin_frame, false, true, "If true, enables support for parsing HTTP/3 ORIGIN frames.")
-QUICHE_FLAG(bool, quiche_reloadable_flag_http2_avoid_decompose_representation, true, true, "If true, HPACK encoding will use a different iteration method that avoids unnecessary copies and string splitting.")
 QUICHE_FLAG(bool, quiche_reloadable_flag_quic_act_upon_invalid_header, true, true, "If true, reject or send error response code upon receiving invalid request or response headers.")
 QUICHE_FLAG(bool, quiche_reloadable_flag_quic_add_stream_info_to_idle_close_detail, false, true, "If true, include stream information in idle timeout connection close detail.")
 QUICHE_FLAG(bool, quiche_reloadable_flag_quic_bandwidth_sampler_guard_rtt_subtraction, false, false, "When true, BandwidthSampler::OnPacketAcknowledgedInner() will return early rather than compute a negative RTT.")
diff --git a/quiche/http2/adapter/oghttp2_adapter_test.cc b/quiche/http2/adapter/oghttp2_adapter_test.cc
index 97a9f80..c35e3e5 100644
--- a/quiche/http2/adapter/oghttp2_adapter_test.cc
+++ b/quiche/http2/adapter/oghttp2_adapter_test.cc
@@ -7292,13 +7292,8 @@
               OnHeaderForStream(1, ":authority", "example.com"));
   EXPECT_CALL(server_visitor,
               OnHeaderForStream(1, ":path", "/this/is/request/one"));
-  if (GetQuicheReloadableFlag(http2_avoid_decompose_representation)) {
-    EXPECT_CALL(server_visitor, OnHeaderForStream(1, "cookie", "a; b=2; c"));
-    EXPECT_CALL(server_visitor, OnHeaderForStream(1, "cookie", "d=e, f, g; h"));
-  } else {
-    EXPECT_CALL(server_visitor,
-                OnHeaderForStream(1, "cookie", "a; b=2; c; d=e, f, g; h"));
-  }
+  EXPECT_CALL(server_visitor, OnHeaderForStream(1, "cookie", "a; b=2; c"));
+  EXPECT_CALL(server_visitor, OnHeaderForStream(1, "cookie", "d=e, f, g; h"));
   EXPECT_CALL(server_visitor, OnEndHeadersForStream(1));
   EXPECT_CALL(server_visitor, OnEndStream(1));
 
diff --git a/quiche/http2/hpack/hpack_encoder.cc b/quiche/http2/hpack/hpack_encoder.cc
index e5ddb5f..b157b72 100644
--- a/quiche/http2/hpack/hpack_encoder.cc
+++ b/quiche/http2/hpack/hpack_encoder.cc
@@ -101,45 +101,21 @@
   // Separate header set into pseudo-headers and regular headers.
   Representations pseudo_headers;
   Representations regular_headers;
-  if (GetQuicheReloadableFlag(http2_avoid_decompose_representation)) {
-    QUICHE_RELOADABLE_FLAG_COUNT_N(http2_avoid_decompose_representation, 1, 4);
-    header_set.ForEach(
-        [&pseudo_headers, &regular_headers, crumble_cookies = crumble_cookies_](
-            absl::string_view name, absl::string_view value) {
-          QUICHE_RELOADABLE_FLAG_COUNT_N(http2_avoid_decompose_representation,
-                                         2, 4);
-          if (name == "cookie") {
-            if (crumble_cookies) {
-              CookieToCrumbs({name, value}, &regular_headers);
-            } else {
-              regular_headers.push_back({name, value});
-            }
-          } else if (!name.empty() && name[0] == kPseudoHeaderPrefix) {
-            pseudo_headers.push_back({name, value});
+  header_set.ForEach(
+      [&pseudo_headers, &regular_headers, crumble_cookies = crumble_cookies_](
+          absl::string_view name, absl::string_view value) {
+        if (name == "cookie") {
+          if (crumble_cookies) {
+            CookieToCrumbs({name, value}, &regular_headers);
           } else {
             regular_headers.push_back({name, value});
           }
-        });
-  } else {
-    bool found_cookie = false;
-    for (const auto& header : header_set) {
-      if (!found_cookie && header.first == "cookie") {
-        // Note that there can only be one "cookie" header, because header_set
-        // is a map.
-        found_cookie = true;
-        if (crumble_cookies_) {
-          CookieToCrumbs(header, &regular_headers);
+        } else if (!name.empty() && name[0] == kPseudoHeaderPrefix) {
+          pseudo_headers.push_back({name, value});
         } else {
-          DecomposeRepresentation(header, &regular_headers);
+          regular_headers.push_back({name, value});
         }
-      } else if (!header.first.empty() &&
-                 header.first[0] == kPseudoHeaderPrefix) {
-        DecomposeRepresentation(header, &pseudo_headers);
-      } else {
-        DecomposeRepresentation(header, &regular_headers);
-      }
-    }
-  }
+      });
 
   RepresentationIterator iter(pseudo_headers, regular_headers);
   return EncodeRepresentations(&iter);
@@ -344,45 +320,19 @@
 HpackEncoder::Encoderator::Encoderator(
     const quiche::HttpHeaderBlock& header_set, HpackEncoder* encoder)
     : encoder_(encoder), has_next_(true) {
-  if (GetQuicheReloadableFlag(http2_avoid_decompose_representation)) {
-    QUICHE_RELOADABLE_FLAG_COUNT_N(http2_avoid_decompose_representation, 3, 4);
-    header_set.ForEach([this](absl::string_view name, absl::string_view value) {
-      QUICHE_RELOADABLE_FLAG_COUNT_N(http2_avoid_decompose_representation, 4,
-                                     4);
-      if (name == "cookie") {
-        if (encoder_->crumble_cookies_) {
-          CookieToCrumbs({name, value}, &regular_headers_);
-        } else {
-          regular_headers_.push_back({name, value});
-        }
-      } else if (!name.empty() && name[0] == kPseudoHeaderPrefix) {
-        pseudo_headers_.push_back({name, value});
+  header_set.ForEach([this](absl::string_view name, absl::string_view value) {
+    if (name == "cookie") {
+      if (encoder_->crumble_cookies_) {
+        CookieToCrumbs({name, value}, &regular_headers_);
       } else {
         regular_headers_.push_back({name, value});
       }
-    });
-
-  } else {
-    // Separate header set into pseudo-headers and regular headers.
-    bool found_cookie = false;
-    for (const auto& header : header_set) {
-      if (!found_cookie && header.first == "cookie") {
-        // Note that there can only be one "cookie" header, because header_set
-        // is a map.
-        found_cookie = true;
-        if (encoder_->crumble_cookies_) {
-          CookieToCrumbs(header, &regular_headers_);
-        } else {
-          DecomposeRepresentation(header, &regular_headers_);
-        }
-      } else if (!header.first.empty() &&
-                 header.first[0] == kPseudoHeaderPrefix) {
-        DecomposeRepresentation(header, &pseudo_headers_);
-      } else {
-        DecomposeRepresentation(header, &regular_headers_);
-      }
+    } else if (!name.empty() && name[0] == kPseudoHeaderPrefix) {
+      pseudo_headers_.push_back({name, value});
+    } else {
+      regular_headers_.push_back({name, value});
     }
-  }
+  });
   header_it_ = std::make_unique<RepresentationIterator>(pseudo_headers_,
                                                         regular_headers_);
 
