diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/external/HttpAsyncClientCompatibilityTest.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/external/HttpAsyncClientCompatibilityTest.java
index ffdb17a..0f5a3ec 100644
--- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/external/HttpAsyncClientCompatibilityTest.java
+++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/external/HttpAsyncClientCompatibilityTest.java
@@ -81,13 +81,13 @@
                 new HttpAsyncClientCompatibilityTest(
                         HttpVersion.HTTP_1_1,
                         new HttpHost("test-httpd", 8443, "https"), new HttpHost("localhost", 8889),
-                        new UsernamePasswordCredentials("squid", "nopassword".toCharArray()))
-//                new HttpAsyncClientCompatibilityTest(
-//                        HttpVersion.HTTP_2_0,
-//                        new HttpHost("localhost", 8080, "http"), null, null),
-//                new HttpAsyncClientCompatibilityTest(
-//                        HttpVersion.HTTP_2_0,
-//                        new HttpHost("localhost", 8443, "https"), null, null)
+                        new UsernamePasswordCredentials("squid", "nopassword".toCharArray())),
+                new HttpAsyncClientCompatibilityTest(
+                        HttpVersion.HTTP_2_0,
+                        new HttpHost("localhost", 8080, "http"), null, null),
+                new HttpAsyncClientCompatibilityTest(
+                        HttpVersion.HTTP_2_0,
+                        new HttpHost("localhost", 8443, "https"), null, null)
         };
         for (final HttpAsyncClientCompatibilityTest test: tests) {
             try {
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpAsyncClientBuilder.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpAsyncClientBuilder.java
index 61351d7..619efca 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpAsyncClientBuilder.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/HttpAsyncClientBuilder.java
@@ -760,9 +760,6 @@
         }
         b.addAll(
                 new RequestDefaultHeaders(defaultHeaders),
-                new H2RequestContent(),
-                new H2RequestTargetHost(),
-                new H2RequestConnControl(),
                 new RequestUserAgent(userAgentCopy),
                 new RequestExpectContinue());
         if (!cookieManagementDisabled) {
@@ -875,7 +872,7 @@
         }
         final AsyncPushConsumerRegistry pushConsumerRegistry = new AsyncPushConsumerRegistry();
         final IOEventHandlerFactory ioEventHandlerFactory = new HttpAsyncClientEventHandlerFactory(
-                NoopHttpProcessor.INSTANCE,
+                new DefaultHttpProcessor(new H2RequestContent(), new H2RequestTargetHost(), new H2RequestConnControl()),
                 new HandlerFactory<AsyncPushConsumer>() {
 
                     @Override
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/NoopHttpProcessor.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/NoopHttpProcessor.java
deleted file mode 100644
index 8b406ce..0000000
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/NoopHttpProcessor.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-
-package org.apache.hc.client5.http.impl.async;
-
-import java.io.IOException;
-
-import org.apache.hc.core5.http.EntityDetails;
-import org.apache.hc.core5.http.HttpException;
-import org.apache.hc.core5.http.HttpRequest;
-import org.apache.hc.core5.http.HttpResponse;
-import org.apache.hc.core5.http.protocol.HttpContext;
-import org.apache.hc.core5.http.protocol.HttpProcessor;
-
-final class NoopHttpProcessor implements HttpProcessor {
-
-    static final NoopHttpProcessor INSTANCE = new NoopHttpProcessor();
-
-    @Override
-    public void process(
-            final HttpRequest request, final EntityDetails entity, final HttpContext context) throws HttpException, IOException {
-    }
-
-    @Override
-    public void process(
-            final HttpResponse response, final EntityDetails entity, final HttpContext context) throws HttpException, IOException {
-    }
-
-}
