HttpAsyncClient 5.0 development moved to HttpComponents HttpClient project

git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpasyncclient/trunk@1784147 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/BUILDING.txt b/BUILDING.txt
deleted file mode 100644
index cc22570..0000000
--- a/BUILDING.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-Building HttpComponents AsyncClient 
-============================
-
-(1) Requisites
---------------
-JDK 1.6+ is required in order to compile and run HttpAsyncClient.
-
-HttpAsyncClient utilizes Maven as a distribution management and packaging tool.
-Version 3.0.3 or later is required. 
-
-Maven installation and configuration instructions can be found here:
-
-http://maven.apache.org/run-maven/index.html
-
-(2) Executing test cases
-
-Execute the following command in order to compile and test the components
-
-mvn test
-
-(3) Building packages 
-
-Execute the following command in order to build the JAR packages
-
-mvn package
-
-The resultant packages can be found in the target folders of their respective modules
-
-httpasyncclient/target/httpasyncclient-<VERSION>.jar
-httpasyncclient-cache/target/httpasyncclient-cache-<VERSION>.jar
-httpasyncclient-osgi/target/org.apache.httpcomponents.httpasyncclient_<VERSION>.jar
-
-where <VERSION> is the release version
-
-(4) Validating packages
-
-Check for binary compatibility with the previous version with:
-
-mvn clirr:check
-
-Check for proper license headers with:
-
-mvn apache-rat:check
-
-(5) Building documentation 
-
-Execute the following commands in order to generate Javadoc:
-
-mvn compile javadoc:aggregate
-
diff --git a/LICENSE.txt b/LICENSE.txt
deleted file mode 100644
index 2c41ec8..0000000
--- a/LICENSE.txt
+++ /dev/null
@@ -1,182 +0,0 @@
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-   
-This project contains annotations derived from JCIP-ANNOTATIONS
-Copyright (c) 2005 Brian Goetz and Tim Peierls.
-See http://www.jcip.net and the Creative Commons Attribution License 
-(http://creativecommons.org/licenses/by/2.5)
-
diff --git a/NOTICE.txt b/NOTICE.txt
deleted file mode 100644
index b2bc9c6..0000000
--- a/NOTICE.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-Apache HttpComponents AsyncClient
-Copyright 2010-2015 The Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
diff --git a/README.txt b/README.txt
index 6c0e096..2d1318c 100644
--- a/README.txt
+++ b/README.txt
@@ -1,71 +1,6 @@
 Apache HttpComponents AsyncClient
 ============================
 
-Welcome to the HttpAsyncClient component of the Apache HttpComponents project.
+HttpAsyncClient has moved to Apache HttpComponents Client project. 
 
-Building Instructions
----------------------
-
-For building from source instructions please refer to BUILDING.txt.
-
-Dependencies
-------------
-
-HttpAsyncClient main module requires Java 5.0 compatible runtime and
-depends on the following external libraries:
-
-* Apache HttpComponents HttpCore
-* Apache HttpComponents HttpCore NIO
-* Apache HttpComponents HttpClient
-* Apache Commons Logging
-* Apache Commons Codec
-
-(for detailed information on external dependencies please see pom.xml)
-
-Licensing
----------
-
-Apache HttpComponents AsyncClient is licensed under the Apache License 2.0.
-See the files called LICENSE.txt and NOTICE.txt for more information.
-
-Cryptographic Software Notice
------------------------------
-
-This distribution may include software that has been designed for use
-with cryptographic software. The country in which you currently reside
-may have restrictions on the import, possession, use, and/or re-export
-to another country, of encryption software. BEFORE using any encryption
-software, please check your country's laws, regulations and policies
-concerning the import, possession, or use, and re-export of encryption
-software, to see if this is permitted. See <http://www.wassenaar.org/>
-for more information.
-
-The U.S. Government Department of Commerce, Bureau of Industry and
-Security (BIS), has classified this software as Export Commodity
-Control Number (ECCN) 5D002.C.1, which includes information security
-software using or performing cryptographic functions with asymmetric
-algorithms. The form and manner of this Apache Software Foundation
-distribution makes it eligible for export under the License Exception
-ENC Technology Software Unrestricted (TSU) exception (see the BIS
-Export Administration Regulations, Section 740.13) for both object
-code and source code.
-
-The following provides more details on the included software that
-may be subject to export controls on cryptographic software:
-
-  Apache HttpComponents AsyncClient interfaces with the
-  Java Secure Socket Extension (JSSE) API to provide
-
-    - HTTPS support
-
-  Apache HttpComponents AsyncClient does not include any
-  implementation of JSSE.
-
-Contact
--------
-
-  o For general information visit the main project site at
-    http://hc.apache.org/
-
-  o For current status information visit the status page at
-    http://hc.apache.org/status.html
+As of version 5.0 it shares the same release cycle as classic HttpClient.  
diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt
deleted file mode 100644
index 55d2bfa..0000000
--- a/RELEASE_NOTES.txt
+++ /dev/null
@@ -1,333 +0,0 @@
-Release 4.1
--------------------
-
-This is the first stable (GA) release of HttpAsyncClient 4.1. Notable features and enhancements 
-included in 4.1 series are:
-
-* Support for pipelined request execution 
-
-* Support for the latest HTTP state management specification (RFC 6265). Please note that the old 
-cookie policy is still used by default for compatibility reasons. RFC 6265 compliant cookie 
-policies need to be explicitly configured by the user. Please also note that as of next feature 
-release support for Netscape draft, RFC 2109 and RFC 2965 cookie policies will be deprecated 
-and disabled by default. It is recommended to use RFC 6265 compliant policies for new applications 
-unless compatibility with RFC 2109 and RFC 2965 is required and to migrate existing applications 
-to the default cookie policy.
-
-* Enhanced, redesigned and rewritten default SSL hostname verifier with improved RFC 2818
-compliance
-
-* Default SSL hostname verifier and default cookie policy now validate certificate identity 
-and cookie domain of origin against the public suffix list maintained by Mozilla.org
-<https://publicsuffix.org/list>
-
-* Authentication cache thread-safety: authentication cache used by HttpClient is now thread-safe
-and can be shared by multiple threads in order to re-use authentication state for subsequent
-requests
-
-
-Changelog:
--------------------
-
-* [HTTPASYNC-90] Fixed SNI support.
-  Contributed by David <dblack at atlassian.com>
-
-* [HTTPASYNC-88] persistent connections can time out while kept alive in the pool
-  causing unexpected SocketTimeoutException
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-86]: fixed a race condition upon connection lease from the connection pool:
-  in very rare  circumstances the main execution thread can get jammed for so long
-  that the I/O dispatch thread succeeds in completing the request and releasing the connection
-  while the main still is performing connection validation.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* Update Apache Commons Logging version from 1.1.3 to 1.2. 
-  Contributed by Gary Gregory <ggregory at apache.org>
-
-
-Release 4.1 BETA1
--------------------
-
-This is the first BETA release of HttpAsyncClient 4.1. Notable features and enhancements included
-in 4.1 series are:
-
-* Support for pipelined request execution 
-
-* Enhanced redesigned and rewritten default SSL hostname verifier with improved RFC 2818
-compliance
-
-* Default SSL hostname verifier and default cookie policy now validate certificate identity 
-and cookie domain of origin against the public suffix list maintained by Mozilla.org
-<https://publicsuffix.org/list>
-
-* Authentication cache thread-safety: authentication caches used by HttpAsyncClient is now 
-thread-safe and can be shared by multiple contexts in order to re-use authentication state for 
-subsequent requests
-
-
-Release 4.0.2
--------------------
-
-HttpAsyncClient 4.0.2 (GA) is a bug fix release that addresses several issues reported since 
-release 4.0.1. This release also upgrades HttpClient dependency to the latest stable version. 
-
-All users of HttpAsyncClient 4.0 are strongly advised to upgrade.
-
-Changelog
--------------------
-
-* [HTTPASYNC-79] Rearranged sequence of operations upon connection lease to eliminate possibility
-  of a connection leak due to race condition on keep-alive boundary
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* Replaced dynamic proxies with custom proxy classes to reduce thread contention.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-73] Original request headers are not copied upon redirect
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-
-
-Release 4.0.1
--------------------
-
-This maintenance release fixes a number of bugs including incorrect OSGi bundle metadata
-found since release 4.0. This release also upgrades HttpCore and HttpClient dependencies to 
-the latest stable versions. 
-
-All users of HttpAsyncClient 4.0 are advised to upgrade.
-
-Changelog
--------------------
-
-* [HTTPASYNC-69] Premature cancellation of the response consumer to immediately shut down
-  and release the underlying connection.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-68] Connection closed by the opposite endpoint immediately upon its lease from
-  the pool is never released back and reclaimed by the pool (collection leak).
-  Contributed by Dmitry Potapov <potapov.d at gmail.com>
-
-* Persistent connections always get discarded in case of a response future cancellation
-  even if they can be kept alive.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-64] Race conditions in async caching module.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-65] Relaxed OSGi dependency import version ranges
-  Contributed by Christian Schneider <chris at die-schneider.net> 
-
-* [HTTPCLIENT-1446] NTLM proxy + BASIC target auth fails with 'Unexpected state:
-  MSG_TYPE3_GENERATED'.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-63] ConnectionShutdownException thrown in case of out-of-sequence response.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPCLIENT-1442] Authentication header set by the user gets removed in case
-  of proxy authentication.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-60] Fixed incorrect OSGi Symbolic-BundleName.
-  Contributed by M. van Cuijk <mark at phedny.net>
-
-
-
-Release 4.0
--------------------
-
-This is the first stable (GA) release of Apache HttpAsyncClient 4.0. HttpAsyncClient is a library 
-for asynchronous client-side HTTP communication built on top of HttpCore NIO transport. 
-It is a complementary library to Apache HttpClient intended and optimized for special cases 
-whereby ability to scale to many thousands of concurrent connections is more important than 
-performance in terms of raw data throughput. 
-
-HttpAsyncClient 4.0 is designed to have similar APIs as Apache HttpClient 4.3 and a comparable
-feature set. In addition HttpAsyncClient provides full support for zero-copy file upload and 
-download operations. It presently does not support transparent content decompression and automatic 
-I/O error recovery. These features may be added in future releases.
-
-
-Changelog:
--------------------
-
-* [HTTPASYNC-56] Fixed thread deadlock in DefaultClientExchangeHandlerImpl.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-57] HTTPS request execution via a HTTP proxy can cause an infinite loop.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-52] Proxy configuration set at the request level does not apply.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-51] Request producers do not get correctly reset if the server responds early 
-  (out of sequence), which can cause entity enclosing requests to be malformed in case of 
-  re-execution.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-45] CachingHttpAsyncClient to override Future returned by the backend.
-  Contributed by James Leigh <james at 3roundstones dot com>
-
-
-Release 4.0 Beta 4
--------------------
-
-The 4.0 BETA4 release delivers significant performance improvements in request execution,
-especially for short HTTP messages, and also re-aligns programming interfaces used by the library 
-with HttpCore 4.3 and HttpClient 4.3 APIs. Configuration and preference APIs of HttpAsyncClient
-are now consistent with those used by HttpClient 4.3.
-
-Users of previous releases of HttpAsyncClient are advised to upgrade.
-
-Changelog:
-
-* [HTTPCLIENT-1353] 303 Redirects Should be Cacheable
-  Contributed by James Leigh <james at 3roundstones dot com>
-
-* Redesign of configuration and preference APIs. 
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* Redesign of connection management APIs.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-34] HttpAsyncClient fails to re-start request execution if the opposite end 
-  prematurely terminates persistent connection. 
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-28] PoolEntry's expiry information is never updated.
-  Contributed by Daniel Kulp <dkulp at apache.org>
-
-
-
-Release 4.0 Beta 3
--------------------
-
-The 4.0 BETA3 is a maintenance release that picks up the latest bug fixes in the core components.
-
-Changelog:
-
-* Upgraded HttpCore to version 4.2.2
-
-* [HTTPASYNC-26] OSGi bundle import fix.
-  Contributed by Daniel Kulp <dkulp at apache.org>
-
-* [HTTPASYNC-25] AsyncSchemeRegistry instance set in the execution context takes precedence over
-  the default one.
-  Contributed by Daniel Kulp <dkulp at apache.org> 
-
-* Ported fix for HTTPCLIENT-1224
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-
-Release 4.0 Beta 2
--------------------
-
-The 4.0 BETA2 release fixes a number of non-critical issues found since release 4.0-beta1 and 
-introduces basic support for HTTP/1.1 response caching. Please note that caching for streaming 
-HTTP exchanges is currently not supported.
-
-Users of previous releases of HttpAsyncClient are advised to upgrade.
-
-Changelog:
-
-* [HTTPASYNC-20] HTTP exchange can now be aborted with HttpUriRequest#abort().
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-17] Caching HttpAsyncClient facade.
-  Contributed by Clinton Nielsen <clinton.h.nielsen at gmail.com>
-
-* [HTTPASYNC-19] Fixed incorrect execution of message exchanges that span across multiple hosts 
-  (for instance, in case of a request redirect).  
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-18] Fixed thread deadlock that could occur in the DefaultAsyncRequestDirector 
-  in case of a runtime exception.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-15]: HttpAsyncClient hangs if connection leased from the pool gets immediately closed 
-  by the opposite endpoint.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-
-Release 4.0 Beta 1
--------------------
-
-The 4.0 BETA1 release completes the application programming interface and the feature set 
-of HttpAsyncClient and upgrades to the latest versions of core and client components 
-(HttpCore 4.2-beta1 and HttpClient 4.2-beta1). As of this release HttpAsyncClient is expected
-to be API stable.
-
-Users of previous releases of HttpAsyncClient are advised to upgrade.
-
-Changelog:
-
-* [HTTPASYNC-11]: HttpAsyncClient fails to re-authenticate if connection is non-persistent.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-* [HTTPASYNC-5]: Allow customized LineParser for asynchronous connections.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-
-
-Release 4.0 Alpha 3
--------------------
-
-The 4.0 ALPHA3 release largely completes the application programming interface and feature set 
-of HttpAsyncClient. While the API may still change in the course of the ALPHA development phase, 
-this is expected to be the last round of major API changes and the API is expected to be reasonably
-stable as of this release.
-
-We are kindly asking actual and prospective users of HttpAsyncClient to review its API, evaluate
-its functionality and give us feedback while the 4.0 API is still not final. If no major flaws 
-are discovered the 4.0 API is expected to be frozen with the next BETA release. 
-
-Changelog:
-
-* [HTTPASYNC-6]: Fixed NPE in the DefaultAsyncRequestDirector#responseCompleted method.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-
-Release 4.0 Alpha 2
--------------------
-
-The second ALPHA release of HttpAsyncClient 4.0 comes with a number of important improvements and
-enhancements. As of this version HttpAsyncClient fully supports HTTP state management (cookies) 
-and HTTP authentication (basic, digest, NTLM, spnego/kerberos). Connection management classes have 
-been thoroughly reworked and improved. This version also improves support for zero copy file 
-upload / download operations.
-
-The HttpAsyncClient 4.0 API is still considered experimental and is expected to change 
-in the course of the ALPHA development phase.
-
-Please note that currently HttpAsyncClient DOES NOT support
-
-* Stateful HTTP connections
-
-
-Changelog:
-
-* [HTTPASYNC-3]: Fixed incorrect handling of expired I/O sessions by SessionPool.
-  Contributed by Oleg Kalnichevski <olegk at apache.org>
-
-
-Release 4.0 Alpha 1
--------------------
-
-HttpAsyncClient is a library for asynchronous client-side HTTP communication built on HttpCore NIO
-and HttpClient components.
-
-HttpAsyncClient is NOT meant to replace or supersede Apache HttpClient. It is a complementary
-library to Apache HttpClient intended for special cases where ability to handle a great number of
-concurrent connections is more important than performance in terms of a raw data throughput or
-for those users who prefer event-driven APIs.
-
-The HttpAsyncClient 4.0 API is still very experimental and is expected to change in the course
-of the ALPHA development phase.
-
-Please note that currently HttpAsyncClient DOES NOT support
-
-* HTTP state management (cookies)
-* HTTP authentication
-* Stateful HTTP connections
diff --git a/doap_HttpComponents_AsyncClient.rdf b/doap_HttpComponents_AsyncClient.rdf
deleted file mode 100644
index ea0c3b3..0000000
--- a/doap_HttpComponents_AsyncClient.rdf
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl"?>
-<rdf:RDF xml:lang="en"
-         xmlns="http://usefulinc.com/ns/doap#"
-         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-         xmlns:asfext="http://projects.apache.org/ns/asfext#"
-         xmlns:foaf="http://xmlns.com/foaf/0.1/">
-<!--
-   ====================================================================
-   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 />.
--->
-
-  <Project rdf:about="http://hc.apache.org/httpcomponents-asyncclient/">
-    <created>2007-11-15</created>
-    <license rdf:resource="http://usefulinc.com/doap/licenses/asl20" />
-    <name>Apache HttpComponents AsyncClient</name>
-    <homepage rdf:resource="http://hc.apache.org/httpcomponents-asyncclient/" />
-    <asfext:pmc rdf:resource="http://httpcomponents.apache.org" />
-    <shortdesc>
-Java library implementing an asynchronous HTTP client based on HttpCore NIO and HttpClient
-components.
-    </shortdesc>
-    <description>
-HttpAsyncClient is a library for asynchronous client-side HTTP communication built on HttpCore NIO
-and HttpClient components. It is a complementary library to Apache HttpClient for special cases
-where ability to handle a great number of concurrent connections is more important than
-performance in terms of a raw data throughput.
-    </description>
-    <bug-database rdf:resource="http://issues.apache.org/jira/browse/HTTPASYNC" />
-    <mailing-list rdf:resource="http://httpcomponents.apache.org/mail-lists.html" />
-    <download-page rdf:resource="http://httpcomponents.apache.org/downloads.cgi" />
-    <programming-language>Java</programming-language>
-    <category rdf:resource="http://projects.apache.org/category/http" />
-    <category rdf:resource="http://projects.apache.org/category/library" />
-    <category rdf:resource="http://projects.apache.org/category/network-client" />
-
-    <!-- multiple releases can be listed, each in it's own section -->
-    <release>
-      <Version>
-        <name>httpcomponents-asyncclient-4.0-alpha1</name>
-        <created>2011-01-18</created>
-        <revision>4.0-alpha1</revision>
-      </Version>
-      <Version>
-        <name>httpcomponents-asyncclient-4.0-alpha2</name>
-        <created>2011-05-24</created>
-        <revision>4.0-alpha2</revision>
-      </Version>
-      <Version>
-        <name>httpcomponents-asyncclient-4.0-alpha3</name>
-        <created>2011-09-29</created>
-        <revision>4.0-alpha3</revision>
-      </Version>
-    </release>
-
-    <repository>
-      <SVNRepository>
-        <location rdf:resource="http://svn.apache.org/repos/asf/httpcomponents/httpasyncclient/trunk"/>
-        <browse rdf:resource="http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk"/>
-      </SVNRepository>
-    </repository>
-
-    <asfext:implements><asfext:Standard>
-      <asfext:title>Hypertext Transfer Protocol -- HTTP/1.1</asfext:title>
-      <asfext:body>IETF</asfext:body>
-      <asfext:id>RFC 2616</asfext:id>
-      <asfext:url rdf:resource="http://tools.ietf.org/html/rfc2616"/>
-    </asfext:Standard></asfext:implements>
-    <asfext:implements><asfext:Standard>
-      <asfext:title>Hypertext Transfer Protocol -- HTTP/1.0</asfext:title>
-      <asfext:body>IETF</asfext:body>
-      <asfext:id>RFC 1945</asfext:id>
-      <asfext:url rdf:resource="http://tools.ietf.org/html/rfc1945"/>
-    </asfext:Standard></asfext:implements>
-    <asfext:implements><asfext:Standard>
-      <asfext:title>Upgrading to TLS Within HTTP/1.1</asfext:title>
-      <asfext:body>IETF</asfext:body>
-      <asfext:id>RFC 2817</asfext:id>
-      <asfext:url rdf:resource="http://tools.ietf.org/html/rfc2817"/>
-    </asfext:Standard></asfext:implements>
-    <asfext:implements><asfext:Standard>
-      <asfext:title>HTTP Over TLS</asfext:title>
-      <asfext:body>IETF</asfext:body>
-      <asfext:id>RFC 2818</asfext:id>
-      <asfext:url rdf:resource="http://tools.ietf.org/html/rfc2818"/>
-    </asfext:Standard></asfext:implements>
-    <asfext:implements><asfext:Standard>
-      <asfext:title>HTTP Authentication: Basic and Digest Access Authentication</asfext:title>
-      <asfext:body>IETF</asfext:body>
-      <asfext:id>RFC 2617</asfext:id>
-      <asfext:url rdf:resource="http://tools.ietf.org/html/rfc2617"/>
-    </asfext:Standard></asfext:implements>
-    <asfext:implements><asfext:Standard>
-      <asfext:title>HTTP State Management Mechanism (Cookies)</asfext:title>
-      <asfext:body>IETF</asfext:body>
-      <asfext:id>RFC 2109</asfext:id>
-      <asfext:url rdf:resource="http://tools.ietf.org/html/rfc2109"/>
-    </asfext:Standard></asfext:implements>
-    <asfext:implements><asfext:Standard>
-      <asfext:title>HTTP State Management Mechanism (Cookie2)</asfext:title>
-      <asfext:body>IETF</asfext:body>
-      <asfext:id>RFC 2965</asfext:id>
-      <asfext:url rdf:resource="http://tools.ietf.org/html/rfc2965"/>
-    </asfext:Standard></asfext:implements>
-
-  </Project>
-</rdf:RDF>
diff --git a/httpasyncclient-cache/pom.xml b/httpasyncclient-cache/pom.xml
deleted file mode 100644
index 8574841..0000000
--- a/httpasyncclient-cache/pom.xml
+++ /dev/null
@@ -1,165 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   ====================================================================
-   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 />.
- --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.httpcomponents</groupId>
-    <artifactId>httpcomponents-asyncclient</artifactId>
-    <version>4.2-alpha1-SNAPSHOT</version>
-  </parent>
-  <artifactId>httpasyncclient-cache</artifactId>
-  <name>Apache HttpAsyncClient Cache</name>
-  <description>
-   Apache HttpComponents AsyncClient Cache
-  </description>
-  <url>http://hc.apache.org/httpcomponents-asyncclient</url>
-  <packaging>jar</packaging>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpasyncclient</artifactId>
-      <version>${project.version}</version>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpclient-cache</artifactId>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpclient-cache</artifactId>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.easymock</groupId>
-      <artifactId>easymock</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.easymock</groupId>
-      <artifactId>easymockclassextension</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>verify</phase>
-            <goals>
-              <goal>check</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <excludes>
-            <exclude>.externalToolBuilders/**</exclude>			
-            <exclude>.pmd</exclude>
-            <exclude>maven-eclipse.xml</exclude>
-          </excludes>
-        </configuration>
-      </plugin>	
-    </plugins>
-    <resources>
-      <resource>
-        <directory>src/main/resources</directory>
-        <filtering>true</filtering>
-        <includes>
-          <include>**/*.properties</include>
-        </includes>
-      </resource>
-    </resources>
-  </build>
-
-  <reporting>
-    <plugins>
-
-      <plugin>
-        <artifactId>maven-javadoc-plugin</artifactId>
-        <version>${hc.javadoc.version}</version>
-        <configuration>
-          <source>${maven.compiler.source}</source>
-          <links>
-            <link>http://download.oracle.com/javase/1.5.0/docs/api/</link>
-            <link>http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/</link>
-            <link>http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/</link>
-          </links>
-        </configuration>
-        <reportSets>
-          <reportSet>
-            <reports>
-              <report>javadoc</report>
-            </reports>
-          </reportSet>
-        </reportSets>
-      </plugin>
-
-      <plugin>
-        <artifactId>maven-project-info-reports-plugin</artifactId>
-        <version>${hc.project-info.version}</version>
-        <inherited>false</inherited>
-        <reportSets>
-          <reportSet>
-            <reports>
-              <report>dependencies</report>
-              <report>dependency-info</report>
-              <report>summary</report>
-            </reports>
-          </reportSet>
-        </reportSets>
-      </plugin>
-
-      <plugin>
-        <artifactId>maven-jxr-plugin</artifactId>
-        <version>${hc.jxr.version}</version>
-      </plugin>
-
-      <plugin>
-        <artifactId>maven-surefire-report-plugin</artifactId>
-        <version>${hc.surefire-report.version}</version>
-      </plugin>
-
-    </plugins>
-  </reporting>
-
-</project>
diff --git a/httpasyncclient-cache/src/main/java/org/apache/http/impl/client/cache/AsynchronousAsyncValidationRequest.java b/httpasyncclient-cache/src/main/java/org/apache/http/impl/client/cache/AsynchronousAsyncValidationRequest.java
deleted file mode 100644
index 692440f..0000000
--- a/httpasyncclient-cache/src/main/java/org/apache/http/impl/client/cache/AsynchronousAsyncValidationRequest.java
+++ /dev/null
@@ -1,110 +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.http.impl.client.cache;
-
-import java.util.concurrent.ExecutionException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpResponse;
-import org.apache.http.ProtocolException;
-import org.apache.http.client.cache.HttpCacheContext;
-import org.apache.http.client.cache.HttpCacheEntry;
-import org.apache.http.client.methods.HttpRequestWrapper;
-import org.apache.http.concurrent.BasicFuture;
-import org.apache.http.concurrent.FutureCallback;
-
-/**
- * Class used to represent an asynchronous revalidation event, such as with
- * "stale-while-revalidate"
- */
-class AsynchronousAsyncValidationRequest implements Runnable {
-    private final AsynchronousAsyncValidator parent;
-    private final CachingHttpAsyncClient cachingAsyncClient;
-    private final HttpHost target;
-    private final HttpRequestWrapper request;
-    private final HttpCacheContext clientContext;
-    private final HttpCacheEntry cacheEntry;
-    private final String identifier;
-
-    private final Log log = LogFactory.getLog(getClass());
-
-    /**
-     * Used internally by {@link AsynchronousValidator} to schedule a
-     * revalidation.
-     */
-    AsynchronousAsyncValidationRequest(final AsynchronousAsyncValidator parent,
-            final CachingHttpAsyncClient cachingClient, final HttpHost target, final HttpRequestWrapper request,
-            final HttpCacheContext clientContext, final HttpCacheEntry cacheEntry, final String identifier) {
-        this.parent = parent;
-        this.cachingAsyncClient = cachingClient;
-        this.target = target;
-        this.request = request;
-        this.clientContext = clientContext;
-        this.cacheEntry = cacheEntry;
-        this.identifier = identifier;
-    }
-
-    @Override
-    public void run() {
-        try {
-            final FutureCallback<HttpResponse> callback = new FutureCallback<HttpResponse>() {
-
-                @Override
-                public void cancelled() {
-                }
-
-                @Override
-                public void completed(final HttpResponse httpResponse) {
-                }
-
-                @Override
-                public void failed(final Exception e) {
-                    log.debug("Asynchronous revalidation failed", e);
-                }
-            };
-            final BasicFuture<HttpResponse> future = new BasicFuture<HttpResponse>(callback);
-            this.cachingAsyncClient.revalidateCacheEntry(future, this.target, this.request,
-                    this.clientContext, this.cacheEntry);
-            future.get();
-        } catch (final ProtocolException pe) {
-            this.log.error("ProtocolException thrown during asynchronous revalidation", pe);
-        } catch (final ExecutionException e) {
-            this.log.error("Exception thrown during asynchronous revalidation", e.getCause());
-        } catch (final InterruptedException e) {
-            Thread.currentThread().interrupt();
-        } finally {
-            this.parent.markComplete(this.identifier);
-        }
-    }
-
-    String getIdentifier() {
-        return this.identifier;
-    }
-
-}
diff --git a/httpasyncclient-cache/src/main/java/org/apache/http/impl/client/cache/AsynchronousAsyncValidator.java b/httpasyncclient-cache/src/main/java/org/apache/http/impl/client/cache/AsynchronousAsyncValidator.java
deleted file mode 100644
index 0d95fe2..0000000
--- a/httpasyncclient-cache/src/main/java/org/apache/http/impl/client/cache/AsynchronousAsyncValidator.java
+++ /dev/null
@@ -1,134 +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.http.impl.client.cache;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.HttpHost;
-import org.apache.http.client.cache.HttpCacheContext;
-import org.apache.http.client.cache.HttpCacheEntry;
-import org.apache.http.client.methods.HttpRequestWrapper;
-
-/**
- * Class used for asynchronous revalidations to be used when the "stale-
- * while-revalidate" directive is present
- */
-class AsynchronousAsyncValidator {
-    private final CachingHttpAsyncClient cachingAsyncClient;
-    private final ExecutorService executor;
-    private final Set<String> queued;
-    private final CacheKeyGenerator cacheKeyGenerator;
-
-    private final Log log = LogFactory.getLog(getClass());
-
-    /**
-     * Create AsynchronousValidator which will make revalidation requests using
-     * the supplied {@link CachingHttpAsyncClient}, and a {@link ThreadPoolExecutor}
-     * generated according to the thread pool settings provided in the given
-     * {@link CacheConfig}.
-     *
-     * @param cachingClient
-     *            used to execute asynchronous requests
-     * @param config
-     *            specifies thread pool settings. See
-     *            {@link CacheConfig#getAsynchronousWorkersMax()},
-     *            {@link CacheConfig#getAsynchronousWorkersCore()},
-     *            {@link CacheConfig#getAsynchronousWorkerIdleLifetimeSecs()},
-     *            and {@link CacheConfig#getRevalidationQueueSize()}.
-     */
-    public AsynchronousAsyncValidator(final CachingHttpAsyncClient cachingClient, final CacheConfig config) {
-        this(cachingClient, new ThreadPoolExecutor(config.getAsynchronousWorkersCore(),
-                config.getAsynchronousWorkersMax(), config.getAsynchronousWorkerIdleLifetimeSecs(),
-                TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(
-                        config.getRevalidationQueueSize())));
-    }
-
-    /**
-     * Create AsynchronousValidator which will make revalidation requests using
-     * the supplied {@link CachingHttpAsyncClient} and {@link ExecutorService}.
-     *
-     * @param cachingClient
-     *            used to execute asynchronous requests
-     * @param executor
-     *            used to manage a thread pool of revalidation workers
-     */
-    AsynchronousAsyncValidator(final CachingHttpAsyncClient cachingClient, final ExecutorService executor) {
-        this.cachingAsyncClient = cachingClient;
-        this.executor = executor;
-        this.queued = new HashSet<String>();
-        this.cacheKeyGenerator = new CacheKeyGenerator();
-    }
-
-    /**
-     * Schedules an asynchronous revalidation
-     */
-    public synchronized void revalidateCacheEntry(final HttpHost target, final HttpRequestWrapper request,
-            final HttpCacheContext clientContext, final HttpCacheEntry entry) {
-        // getVariantURI will fall back on getURI if no variants exist
-        final String uri = this.cacheKeyGenerator.getVariantURI(target, request, entry);
-
-        if (!this.queued.contains(uri)) {
-            final AsynchronousAsyncValidationRequest asyncRevalidationRequest = new AsynchronousAsyncValidationRequest(
-                    this, this.cachingAsyncClient, target, request, clientContext, entry, uri);
-
-            try {
-                this.executor.execute(asyncRevalidationRequest);
-                this.queued.add(uri);
-            } catch (final RejectedExecutionException ree) {
-                this.log.debug("Revalidation for [" + uri + "] not scheduled: " + ree);
-            }
-        }
-    }
-
-    /**
-     * Removes an identifier from the internal list of revalidation jobs in
-     * progress. This is meant to be called by
-     * {@link AsynchronousValidationRequest#run()} once the revalidation is
-     * complete, using the identifier passed in during constructions.
-     */
-    synchronized void markComplete(final String identifier) {
-        this.queued.remove(identifier);
-    }
-
-    Set<String> getScheduledIdentifiers() {
-        return Collections.unmodifiableSet(this.queued);
-    }
-
-    ExecutorService getExecutor() {
-        return this.executor;
-    }
-
-}
diff --git a/httpasyncclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpAsyncClient.java b/httpasyncclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpAsyncClient.java
deleted file mode 100644
index 576c0b8..0000000
--- a/httpasyncclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpAsyncClient.java
+++ /dev/null
@@ -1,1012 +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.http.impl.client.cache;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Future;
-import java.util.concurrent.atomic.AtomicLong;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.Header;
-import org.apache.http.HeaderElement;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpMessage;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.HttpVersion;
-import org.apache.http.ProtocolException;
-import org.apache.http.ProtocolVersion;
-import org.apache.http.RequestLine;
-import org.apache.http.annotation.ThreadSafe;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.cache.CacheResponseStatus;
-import org.apache.http.client.cache.HeaderConstants;
-import org.apache.http.client.cache.HttpCacheContext;
-import org.apache.http.client.cache.HttpCacheEntry;
-import org.apache.http.client.cache.HttpCacheStorage;
-import org.apache.http.client.cache.ResourceFactory;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpRequestWrapper;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.client.utils.DateUtils;
-import org.apache.http.concurrent.BasicFuture;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-import org.apache.http.message.BasicHttpResponse;
-import org.apache.http.nio.client.HttpAsyncClient;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.nio.reactor.IOReactorException;
-import org.apache.http.protocol.HTTP;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.protocol.HttpCoreContext;
-import org.apache.http.util.Args;
-import org.apache.http.util.EntityUtils;
-import org.apache.http.util.VersionInfo;
-
-@ThreadSafe // So long as the responseCache implementation is threadsafe
-public class CachingHttpAsyncClient implements HttpAsyncClient {
-
-    private final static boolean SUPPORTS_RANGE_AND_CONTENT_RANGE_HEADERS = false;
-
-    private final AtomicLong cacheHits = new AtomicLong();
-    private final AtomicLong cacheMisses = new AtomicLong();
-    private final AtomicLong cacheUpdates = new AtomicLong();
-
-    private final Map<ProtocolVersion, String> viaHeaders = new HashMap<ProtocolVersion, String>(4);
-
-    private final HttpAsyncClient backend;
-    private final HttpCache responseCache;
-    private final CacheValidityPolicy validityPolicy;
-    private final ResponseCachingPolicy responseCachingPolicy;
-    private final CachedHttpResponseGenerator responseGenerator;
-    private final CacheableRequestPolicy cacheableRequestPolicy;
-    private final CachedResponseSuitabilityChecker suitabilityChecker;
-
-    private final ConditionalRequestBuilder conditionalRequestBuilder;
-
-    private final long maxObjectSizeBytes;
-    private final boolean sharedCache;
-
-    private final ResponseProtocolCompliance responseCompliance;
-    private final RequestProtocolCompliance requestCompliance;
-
-    private final AsynchronousAsyncValidator asynchAsyncRevalidator;
-
-    private final Log log = LogFactory.getLog(getClass());
-
-    CachingHttpAsyncClient(
-            final HttpAsyncClient client,
-            final HttpCache cache,
-            final CacheConfig config) {
-        super();
-        Args.notNull(client, "HttpClient");
-        Args.notNull(cache, "HttpCache");
-        Args.notNull(config, "CacheConfig");
-        this.maxObjectSizeBytes = config.getMaxObjectSize();
-        this.sharedCache = config.isSharedCache();
-        this.backend = client;
-        this.responseCache = cache;
-        this.validityPolicy = new CacheValidityPolicy();
-        this.responseCachingPolicy = new ResponseCachingPolicy(this.maxObjectSizeBytes, this.sharedCache, false, config.is303CachingEnabled());
-        this.responseGenerator = new CachedHttpResponseGenerator(this.validityPolicy);
-        this.cacheableRequestPolicy = new CacheableRequestPolicy();
-        this.suitabilityChecker = new CachedResponseSuitabilityChecker(this.validityPolicy, config);
-        this.conditionalRequestBuilder = new ConditionalRequestBuilder();
-
-        this.responseCompliance = new ResponseProtocolCompliance();
-        this.requestCompliance = new RequestProtocolCompliance(config.isWeakETagOnPutDeleteAllowed());
-
-        this.asynchAsyncRevalidator = makeAsynchronousValidator(config);
-    }
-
-    public CachingHttpAsyncClient() throws IOReactorException {
-        this(HttpAsyncClients.createDefault(),
-                new BasicHttpCache(),
-                CacheConfig.DEFAULT);
-    }
-
-    public CachingHttpAsyncClient(final CacheConfig config) throws IOReactorException {
-        this(HttpAsyncClients.createDefault(),
-                new BasicHttpCache(config),
-                config);
-    }
-
-    public CachingHttpAsyncClient(final HttpAsyncClient client) {
-        this(client,
-                new BasicHttpCache(),
-                CacheConfig.DEFAULT);
-    }
-
-    public CachingHttpAsyncClient(final HttpAsyncClient client, final CacheConfig config) {
-        this(client,
-                new BasicHttpCache(config),
-                config);
-    }
-
-    public CachingHttpAsyncClient(
-            final HttpAsyncClient client,
-            final ResourceFactory resourceFactory,
-            final HttpCacheStorage storage,
-            final CacheConfig config) {
-        this(client,
-                new BasicHttpCache(resourceFactory, storage, config),
-                config);
-    }
-
-    public CachingHttpAsyncClient(
-            final HttpAsyncClient client,
-            final HttpCacheStorage storage,
-            final CacheConfig config) {
-        this(client,
-                new BasicHttpCache(new HeapResourceFactory(), storage, config),
-                config);
-    }
-
-    CachingHttpAsyncClient(
-            final HttpAsyncClient backend,
-            final CacheValidityPolicy validityPolicy,
-            final ResponseCachingPolicy responseCachingPolicy,
-            final HttpCache responseCache,
-            final CachedHttpResponseGenerator responseGenerator,
-            final CacheableRequestPolicy cacheableRequestPolicy,
-            final CachedResponseSuitabilityChecker suitabilityChecker,
-            final ConditionalRequestBuilder conditionalRequestBuilder,
-            final ResponseProtocolCompliance responseCompliance,
-            final RequestProtocolCompliance requestCompliance) {
-        final CacheConfig config = CacheConfig.DEFAULT;
-        this.maxObjectSizeBytes = config.getMaxObjectSize();
-        this.sharedCache = config.isSharedCache();
-        this.backend = backend;
-        this.validityPolicy = validityPolicy;
-        this.responseCachingPolicy = responseCachingPolicy;
-        this.responseCache = responseCache;
-        this.responseGenerator = responseGenerator;
-        this.cacheableRequestPolicy = cacheableRequestPolicy;
-        this.suitabilityChecker = suitabilityChecker;
-        this.conditionalRequestBuilder = conditionalRequestBuilder;
-        this.responseCompliance = responseCompliance;
-        this.requestCompliance = requestCompliance;
-        this.asynchAsyncRevalidator = makeAsynchronousValidator(config);
-    }
-
-    private AsynchronousAsyncValidator makeAsynchronousValidator(
-            final CacheConfig config) {
-        if (config.getAsynchronousWorkersMax() > 0) {
-            return new AsynchronousAsyncValidator(this, config);
-        }
-        return null;
-    }
-
-    /**
-     * Reports the number of times that the cache successfully responded
-     * to an {@link HttpRequest} without contacting the origin server.
-     * @return the number of cache hits
-     */
-    public long getCacheHits() {
-        return this.cacheHits.get();
-    }
-
-    /**
-     * Reports the number of times that the cache contacted the origin
-     * server because it had no appropriate response cached.
-     * @return the number of cache misses
-     */
-    public long getCacheMisses() {
-        return this.cacheMisses.get();
-    }
-
-    /**
-     * Reports the number of times that the cache was able to satisfy
-     * a response by revalidating an existing but stale cache entry.
-     * @return the number of cache revalidations
-     */
-    public long getCacheUpdates() {
-        return this.cacheUpdates.get();
-    }
-
-    @Override
-    public Future<HttpResponse> execute(
-            final HttpHost target,
-            final HttpRequest request,
-            final FutureCallback<HttpResponse> callback) {
-        return execute(target, request, null, callback);
-    }
-
-    @Override
-    public <T> Future<T> execute(
-            final HttpAsyncRequestProducer requestProducer,
-            final HttpAsyncResponseConsumer<T> responseConsumer,
-            final FutureCallback<T> callback) {
-        return execute(requestProducer, responseConsumer, null, callback);
-    }
-
-    @Override
-    public <T> Future<T> execute(
-            final HttpAsyncRequestProducer requestProducer,
-            final HttpAsyncResponseConsumer<T> responseConsumer,
-            final HttpContext context,
-            final FutureCallback<T> callback) {
-        this.log.warn("CachingHttpAsyncClient does not support caching for streaming HTTP exchanges");
-        return this.backend.execute(requestProducer, responseConsumer, context, callback);
-    }
-
-    @Override
-    public Future<HttpResponse> execute(
-            final HttpUriRequest request,
-            final FutureCallback<HttpResponse> callback) {
-        return execute(request, null, callback);
-    }
-
-    @Override
-    public Future<HttpResponse> execute(
-            final HttpUriRequest request,
-            final HttpContext context,
-            final FutureCallback<HttpResponse> callback) {
-        final URI uri = request.getURI();
-        final HttpHost httpHost = new HttpHost(uri.getHost(), uri.getPort(), uri.getScheme());
-        return execute(httpHost, request, context, callback);
-    }
-
-    @Override
-    public Future<HttpResponse> execute(
-            final HttpHost target,
-            final HttpRequest originalRequest,
-            final HttpContext context,
-            final FutureCallback<HttpResponse> futureCallback) {
-        final BasicFuture<HttpResponse> future = new BasicFuture<HttpResponse>(futureCallback);
-        final HttpRequestWrapper request = HttpRequestWrapper.wrap(originalRequest);
-        final HttpCacheContext clientContext = HttpCacheContext.adapt(context);
-        // default response context
-        setResponseStatus(clientContext, CacheResponseStatus.CACHE_MISS);
-
-        final String via = generateViaHeader(request);
-
-        if (clientRequestsOurOptions(request)) {
-            setResponseStatus(clientContext, CacheResponseStatus.CACHE_MODULE_RESPONSE);
-            future.completed(new OptionsHttp11Response());
-            return future;
-        }
-
-        final HttpResponse fatalErrorResponse = getFatallyNoncompliantResponse(
-                request, clientContext);
-        if (fatalErrorResponse != null) {
-            future.completed(fatalErrorResponse);
-            return future;
-        }
-
-        try {
-            this.requestCompliance.makeRequestCompliant(request);
-        } catch (final ClientProtocolException e) {
-            future.failed(e);
-            return future;
-        }
-        request.addHeader(HeaderConstants.VIA,via);
-
-        flushEntriesInvalidatedByRequest(target, request);
-
-        if (!this.cacheableRequestPolicy.isServableFromCache(request)) {
-            log.debug("Request is not servable from cache");
-            callBackend(future, target, request, clientContext);
-            return future;
-        }
-
-        final HttpCacheEntry entry = satisfyFromCache(target, request);
-        if (entry == null) {
-            log.debug("Cache miss");
-            handleCacheMiss(future, target, request, clientContext);
-        } else {
-            try {
-                handleCacheHit(future, target, request, clientContext, entry);
-            } catch (final IOException e) {
-                future.failed(e);
-            }
-        }
-        return future;
-    }
-
-    private void handleCacheHit(
-            final BasicFuture<HttpResponse> future,
-            final HttpHost target,
-            final HttpRequestWrapper request,
-            final HttpCacheContext clientContext,
-            final HttpCacheEntry entry) throws IOException {
-        recordCacheHit(target, request);
-        final HttpResponse out;
-        final Date now = getCurrentDate();
-        if (this.suitabilityChecker.canCachedResponseBeUsed(target, request, entry, now)) {
-            log.debug("Cache hit");
-            out = generateCachedResponse(request, clientContext, entry, now);
-        } else if (!mayCallBackend(request)) {
-            log.debug("Cache entry not suitable but only-if-cached requested");
-            out = generateGatewayTimeout(clientContext);
-        } else if (validityPolicy.isRevalidatable(entry)
-                && !(entry.getStatusCode() == HttpStatus.SC_NOT_MODIFIED
-                && !suitabilityChecker.isConditional(request))) {
-            log.debug("Revalidating cache entry");
-            revalidateCacheEntry(future, target, request, clientContext, entry, now);
-            return;
-        } else {
-            log.debug("Cache entry not usable; calling backend");
-            callBackend(future, target, request, clientContext);
-            return;
-        }
-        clientContext.setAttribute(HttpClientContext.HTTP_ROUTE, new HttpRoute(target));
-        clientContext.setAttribute(HttpCoreContext.HTTP_TARGET_HOST, target);
-        clientContext.setAttribute(HttpCoreContext.HTTP_REQUEST, request);
-        clientContext.setAttribute(HttpCoreContext.HTTP_RESPONSE, out);
-        clientContext.setAttribute(HttpCoreContext.HTTP_REQ_SENT, Boolean.TRUE);
-        future.completed(out);
-    }
-
-    private void revalidateCacheEntry(
-            final BasicFuture<HttpResponse> future,
-            final HttpHost target,
-            final HttpRequestWrapper request,
-            final HttpCacheContext clientContext,
-            final HttpCacheEntry entry,
-            final Date now) throws ClientProtocolException {
-
-        try {
-            if (this.asynchAsyncRevalidator != null
-                && !staleResponseNotAllowed(request, entry, now)
-                && this.validityPolicy.mayReturnStaleWhileRevalidating(entry, now)) {
-                this.log.debug("Serving stale with asynchronous revalidation");
-                final HttpResponse resp = this.responseGenerator.generateResponse(request, entry);
-                resp.addHeader(HeaderConstants.WARNING, "110 localhost \"Response is stale\"");
-
-                this.asynchAsyncRevalidator.revalidateCacheEntry(target, request, clientContext, entry);
-
-                future.completed(resp);
-                return;
-            }
-
-            final ChainedFutureCallback<HttpResponse> chainedFutureCallback = new ChainedFutureCallback<HttpResponse>(future) {
-
-                @Override
-                public void failed(final Exception ex) {
-                    if(ex instanceof IOException) {
-                        super.completed(handleRevalidationFailure(request, clientContext, entry, now));
-                    } else {
-                        super.failed(ex);
-                    }
-                }
-
-            };
-
-            final BasicFuture<HttpResponse> compositeFuture = new BasicFuture<HttpResponse>(chainedFutureCallback);
-            revalidateCacheEntry(compositeFuture, target, request, clientContext, entry);
-        } catch (final ProtocolException e) {
-            throw new ClientProtocolException(e);
-        }
-    }
-
-    private void handleCacheMiss(
-            final BasicFuture<HttpResponse> future,
-            final HttpHost target,
-            final HttpRequestWrapper request,
-            final HttpCacheContext clientContext) {
-        recordCacheMiss(target, request);
-
-        if (!mayCallBackend(request)) {
-            future.completed(new BasicHttpResponse(HttpVersion.HTTP_1_1, HttpStatus.SC_GATEWAY_TIMEOUT, "Gateway Timeout"));
-            return;
-        }
-
-        final Map<String, Variant> variants = getExistingCacheVariants(target, request);
-        if (variants != null && variants.size() > 0) {
-            negotiateResponseFromVariants(future, target, request, clientContext, variants);
-            return;
-        }
-
-        callBackend(future, target, request, clientContext);
-    }
-
-    private HttpCacheEntry satisfyFromCache(
-            final HttpHost target,
-            final HttpRequest request) {
-        HttpCacheEntry entry = null;
-        try {
-            entry = this.responseCache.getCacheEntry(target, request);
-        } catch (final IOException ioe) {
-            this.log.warn("Unable to retrieve entries from cache", ioe);
-        }
-        return entry;
-    }
-
-    private HttpResponse getFatallyNoncompliantResponse(
-            final HttpRequest request,
-            final HttpCacheContext clientContext) {
-        HttpResponse fatalErrorResponse = null;
-        final List<RequestProtocolError> fatalError = this.requestCompliance.requestIsFatallyNonCompliant(request);
-
-        for (final RequestProtocolError error : fatalError) {
-            setResponseStatus(clientContext, CacheResponseStatus.CACHE_MODULE_RESPONSE);
-            fatalErrorResponse = this.requestCompliance.getErrorForRequest(error);
-        }
-        return fatalErrorResponse;
-    }
-
-    private Map<String, Variant> getExistingCacheVariants(
-            final HttpHost target,
-            final HttpRequest request) {
-        Map<String,Variant> variants = null;
-        try {
-            variants = this.responseCache.getVariantCacheEntriesWithEtags(target, request);
-        } catch (final IOException ioe) {
-            this.log.warn("Unable to retrieve variant entries from cache", ioe);
-        }
-        return variants;
-    }
-
-    private void recordCacheMiss(final HttpHost target, final HttpRequest request) {
-        this.cacheMisses.getAndIncrement();
-        if (this.log.isDebugEnabled()) {
-            final RequestLine rl = request.getRequestLine();
-            this.log.debug("Cache miss [host: " + target + "; uri: " + rl.getUri() + "]");
-        }
-    }
-
-    private void recordCacheHit(final HttpHost target, final HttpRequest request) {
-        this.cacheHits.getAndIncrement();
-        if (this.log.isDebugEnabled()) {
-            final RequestLine rl = request.getRequestLine();
-            this.log.debug("Cache hit [host: " + target + "; uri: " + rl.getUri() + "]");
-        }
-    }
-
-    private void recordCacheUpdate(final HttpCacheContext clientContext) {
-        this.cacheUpdates.getAndIncrement();
-        setResponseStatus(clientContext, CacheResponseStatus.VALIDATED);
-    }
-
-    private void flushEntriesInvalidatedByRequest(final HttpHost target,
-            final HttpRequest request) {
-        try {
-            this.responseCache.flushInvalidatedCacheEntriesFor(target, request);
-        } catch (final IOException ioe) {
-            this.log.warn("Unable to flush invalidated entries from cache", ioe);
-        }
-    }
-
-    private HttpResponse generateCachedResponse(
-            final HttpRequestWrapper request,
-            final HttpCacheContext clientContext,
-            final HttpCacheEntry entry,
-            final Date now) {
-        final HttpResponse cachedResponse;
-        if (request.containsHeader(HeaderConstants.IF_NONE_MATCH)
-                || request.containsHeader(HeaderConstants.IF_MODIFIED_SINCE)) {
-            cachedResponse = this.responseGenerator.generateNotModifiedResponse(entry);
-        } else {
-            cachedResponse = this.responseGenerator.generateResponse(request, entry);
-        }
-        setResponseStatus(clientContext, CacheResponseStatus.CACHE_HIT);
-        if (this.validityPolicy.getStalenessSecs(entry, now) > 0L) {
-            cachedResponse.addHeader("Warning","110 localhost \"Response is stale\"");
-        }
-        return cachedResponse;
-    }
-
-    private HttpResponse handleRevalidationFailure(
-            final HttpRequestWrapper request,
-            final HttpCacheContext clientContext,
-            final HttpCacheEntry entry,
-            final Date now) {
-        if (staleResponseNotAllowed(request, entry, now)) {
-            return generateGatewayTimeout(clientContext);
-        }
-        return unvalidatedCacheHit(clientContext, request, entry);
-    }
-
-    private HttpResponse generateGatewayTimeout(final HttpCacheContext clientContext) {
-        setResponseStatus(clientContext, CacheResponseStatus.CACHE_MODULE_RESPONSE);
-        return new BasicHttpResponse(HttpVersion.HTTP_1_1,
-                HttpStatus.SC_GATEWAY_TIMEOUT, "Gateway Timeout");
-    }
-
-    private HttpResponse unvalidatedCacheHit(
-            final HttpCacheContext clientContext,
-            final HttpRequestWrapper request,
-            final HttpCacheEntry entry) {
-        final HttpResponse cachedResponse = this.responseGenerator.generateResponse(request, entry);
-        setResponseStatus(clientContext, CacheResponseStatus.CACHE_HIT);
-        cachedResponse.addHeader(HeaderConstants.WARNING, "111 localhost \"Revalidation failed\"");
-        return cachedResponse;
-    }
-
-    private boolean staleResponseNotAllowed(
-            final HttpRequest request,
-            final HttpCacheEntry entry,
-            final Date now) {
-        return this.validityPolicy.mustRevalidate(entry)
-            || (isSharedCache() && this.validityPolicy.proxyRevalidate(entry))
-            || explicitFreshnessRequest(request, entry, now);
-    }
-
-    private boolean mayCallBackend(final HttpRequest request) {
-        for (final Header h: request.getHeaders(HeaderConstants.CACHE_CONTROL)) {
-            for (final HeaderElement elt : h.getElements()) {
-                if ("only-if-cached".equals(elt.getName())) {
-                    this.log.debug("Request marked only-if-cached");
-                    return false;
-                }
-            }
-        }
-        return true;
-    }
-
-    private boolean explicitFreshnessRequest(
-            final HttpRequest request,
-            final HttpCacheEntry entry,
-            final Date now) {
-        for(final Header h : request.getHeaders(HeaderConstants.CACHE_CONTROL)) {
-            for(final HeaderElement elt : h.getElements()) {
-                if (HeaderConstants.CACHE_CONTROL_MAX_STALE.equals(elt.getName())) {
-                    try {
-                        final int maxstale = Integer.parseInt(elt.getValue());
-                        final long age = this.validityPolicy.getCurrentAgeSecs(entry, now);
-                        final long lifetime = this.validityPolicy.getFreshnessLifetimeSecs(entry);
-                        if (age - lifetime > maxstale) {
-                            return true;
-                        }
-                    } catch (final NumberFormatException nfe) {
-                        return true;
-                    }
-                } else if (HeaderConstants.CACHE_CONTROL_MIN_FRESH.equals(elt.getName())
-                            || HeaderConstants.CACHE_CONTROL_MAX_AGE.equals(elt.getName())) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    private String generateViaHeader(final HttpMessage msg) {
-
-        final ProtocolVersion pv = msg.getProtocolVersion();
-        final String existingEntry = viaHeaders.get(pv);
-        if (existingEntry != null) {
-            return existingEntry;
-        }
-
-        final VersionInfo vi = VersionInfo.loadVersionInfo("org.apache.http.client", getClass().getClassLoader());
-        final String release = (vi != null) ? vi.getRelease() : VersionInfo.UNAVAILABLE;
-
-        final String value;
-        if ("http".equalsIgnoreCase(pv.getProtocol())) {
-            value = String.format("%d.%d localhost (Apache-HttpClient/%s (cache))", pv.getMajor(), pv.getMinor(),
-                    release);
-        } else {
-            value = String.format("%s/%d.%d localhost (Apache-HttpClient/%s (cache))", pv.getProtocol(), pv.getMajor(),
-                    pv.getMinor(), release);
-        }
-        viaHeaders.put(pv, value);
-
-        return value;
-    }
-
-    private void setResponseStatus(final HttpCacheContext clientContext, final CacheResponseStatus value) {
-        if (clientContext != null) {
-            clientContext.setAttribute(HttpCacheContext.CACHE_RESPONSE_STATUS, value);
-        }
-    }
-
-    /**
-     * Reports whether this {@code CachingHttpClient} implementation
-     * supports byte-range requests as specified by the {@code Range}
-     * and {@code Content-Range} headers.
-     * @return {@code true} if byte-range requests are supported
-     */
-    public boolean supportsRangeAndContentRangeHeaders() {
-        return SUPPORTS_RANGE_AND_CONTENT_RANGE_HEADERS;
-    }
-
-    /**
-     * Reports whether this {@code CachingHttpClient} is configured as
-     * a shared (public) or non-shared (private) cache. See {@link
-     * CacheConfig#setSharedCache(boolean)}.
-     * @return {@code true} if we are behaving as a shared (public)
-     *   cache
-     */
-    public boolean isSharedCache() {
-        return this.sharedCache;
-    }
-
-    Date getCurrentDate() {
-        return new Date();
-    }
-
-    boolean clientRequestsOurOptions(final HttpRequest request) {
-        final RequestLine line = request.getRequestLine();
-
-        if (!HeaderConstants.OPTIONS_METHOD.equals(line.getMethod())) {
-            return false;
-        }
-
-        if (!"*".equals(line.getUri())) {
-            return false;
-        }
-        return "0".equals(request.getFirstHeader(HeaderConstants.MAX_FORWARDS).getValue());
-    }
-
-    void callBackend(
-            final BasicFuture<HttpResponse> future,
-            final HttpHost target,
-            final HttpRequestWrapper request,
-            final HttpCacheContext clientContext) {
-        final Date requestDate = getCurrentDate();
-        this.log.trace("Calling the backend");
-
-        final ChainedFutureCallback<HttpResponse> chainedFutureCallback = new ChainedFutureCallback<HttpResponse>(future) {
-
-            @Override
-            public void completed(final HttpResponse httpResponse) {
-                httpResponse.addHeader(HeaderConstants.VIA, generateViaHeader(httpResponse));
-                try {
-                    final CloseableHttpResponse backendResponse = handleBackendResponse(
-                            target, request, requestDate, getCurrentDate(),
-                            Proxies.enhanceResponse(httpResponse));
-                    super.completed(backendResponse);
-                } catch (final IOException e) {
-                    super.failed(e);
-                }
-
-            }
-
-        };
-        this.backend.execute(target, request, clientContext, chainedFutureCallback);
-    }
-
-    private boolean revalidationResponseIsTooOld(
-            final HttpResponse backendResponse,
-            final HttpCacheEntry cacheEntry) {
-        final Header entryDateHeader = cacheEntry.getFirstHeader(HTTP.DATE_HEADER);
-        final Header responseDateHeader = backendResponse.getFirstHeader(HTTP.DATE_HEADER);
-        if (entryDateHeader != null && responseDateHeader != null) {
-            final Date entryDate = DateUtils.parseDate(entryDateHeader.getValue());
-            final Date respDate = DateUtils.parseDate(responseDateHeader.getValue());
-            if (respDate != null && respDate.before(entryDate)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    void negotiateResponseFromVariants(
-            final BasicFuture<HttpResponse> future,
-            final HttpHost target,
-            final HttpRequestWrapper request,
-            final HttpCacheContext clientContext,
-            final Map<String, Variant> variants) {
-        final HttpRequest conditionalRequest = this.conditionalRequestBuilder.buildConditionalRequestFromVariants(request, variants);
-
-        final Date requestDate = getCurrentDate();
-
-        final ChainedFutureCallback<HttpResponse> chainedFutureCallback = new ChainedFutureCallback<HttpResponse>(future) {
-
-            @Override
-            public void completed(final HttpResponse httpResponse) {
-                final Date responseDate = getCurrentDate();
-
-                httpResponse.addHeader(HeaderConstants.VIA, generateViaHeader(httpResponse));
-
-                if (httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_NOT_MODIFIED) {
-                    try {
-                        future.completed(handleBackendResponse(
-                                target, request, requestDate, responseDate,
-                                Proxies.enhanceResponse(httpResponse)));
-                        return;
-                    } catch (final IOException e) {
-                        future.failed(e);
-                        return;
-                    }
-                }
-
-                final Header resultEtagHeader = httpResponse.getFirstHeader(HeaderConstants.ETAG);
-                if (resultEtagHeader == null) {
-                    CachingHttpAsyncClient.this.log.warn("304 response did not contain ETag");
-                    callBackend(future, target, request, clientContext);
-                    return;
-                }
-
-                final String resultEtag = resultEtagHeader.getValue();
-                final Variant matchingVariant = variants.get(resultEtag);
-                if (matchingVariant == null) {
-                    CachingHttpAsyncClient.this.log.debug("304 response did not contain ETag matching one sent in If-None-Match");
-                    callBackend(future, target, request, clientContext);
-                }
-
-                final HttpCacheEntry matchedEntry = matchingVariant.getEntry();
-
-                if (revalidationResponseIsTooOld(httpResponse, matchedEntry)) {
-                    EntityUtils.consumeQuietly(httpResponse.getEntity());
-                    retryRequestUnconditionally(future, target, request, clientContext, matchedEntry);
-                    return;
-                }
-
-                recordCacheUpdate(clientContext);
-
-                final HttpCacheEntry responseEntry = getUpdatedVariantEntry(target,
-                        conditionalRequest, requestDate, responseDate, httpResponse,
-                        matchingVariant, matchedEntry);
-
-                final HttpResponse resp = CachingHttpAsyncClient.this.responseGenerator.generateResponse(request, responseEntry);
-                tryToUpdateVariantMap(target, request, matchingVariant);
-
-                if (shouldSendNotModifiedResponse(request, responseEntry)) {
-                    future.completed(CachingHttpAsyncClient.this.responseGenerator.generateNotModifiedResponse(responseEntry));
-                    return;
-                }
-
-                future.completed(resp);
-            }
-
-        };
-
-        this.backend.execute(target, conditionalRequest, clientContext, chainedFutureCallback);
-    }
-
-    private void retryRequestUnconditionally(
-            final BasicFuture<HttpResponse> future,
-            final HttpHost target,
-            final HttpRequestWrapper request,
-            final HttpCacheContext clientContext,
-            final HttpCacheEntry matchedEntry) {
-        final HttpRequestWrapper unconditional = this.conditionalRequestBuilder
-            .buildUnconditionalRequest(request, matchedEntry);
-        callBackend(future, target, unconditional, clientContext);
-    }
-
-    private HttpCacheEntry getUpdatedVariantEntry(
-            final HttpHost target,
-            final HttpRequest conditionalRequest,
-            final Date requestDate,
-            final Date responseDate,
-            final HttpResponse backendResponse,
-            final Variant matchingVariant,
-            final HttpCacheEntry matchedEntry) {
-        HttpCacheEntry responseEntry = matchedEntry;
-        try {
-            responseEntry = this.responseCache.updateVariantCacheEntry(target, conditionalRequest,
-                    matchedEntry, backendResponse, requestDate, responseDate, matchingVariant.getCacheKey());
-        } catch (final IOException ioe) {
-            this.log.warn("Could not update cache entry", ioe);
-        }
-        return responseEntry;
-    }
-
-    private void tryToUpdateVariantMap(
-            final HttpHost target,
-            final HttpRequest request,
-            final Variant matchingVariant) {
-        try {
-            this.responseCache.reuseVariantEntryFor(target, request, matchingVariant);
-        } catch (final IOException ioe) {
-            this.log.warn("Could not update cache entry to reuse variant", ioe);
-        }
-    }
-
-    private boolean shouldSendNotModifiedResponse(
-            final HttpRequest request,
-            final HttpCacheEntry responseEntry) {
-        return (this.suitabilityChecker.isConditional(request)
-                && this.suitabilityChecker.allConditionalsMatch(request, responseEntry, new Date()));
-    }
-
-    void revalidateCacheEntry(
-            final BasicFuture<HttpResponse> future,
-            final HttpHost target,
-            final HttpRequestWrapper request,
-            final HttpCacheContext clientContext,
-            final HttpCacheEntry cacheEntry) throws ProtocolException {
-
-        final HttpRequestWrapper conditionalRequest = this.conditionalRequestBuilder.buildConditionalRequest(request, cacheEntry);
-        final Date requestDate = getCurrentDate();
-
-        final ChainedFutureCallback<HttpResponse> chainedFutureCallback = new ChainedFutureCallback<HttpResponse>(future) {
-
-            @Override
-            public void completed(final HttpResponse httpResponse) {
-                final Date responseDate = getCurrentDate();
-
-                if (revalidationResponseIsTooOld(httpResponse, cacheEntry)) {
-                    final HttpRequest unconditional = CachingHttpAsyncClient.this.conditionalRequestBuilder.buildUnconditionalRequest(request, cacheEntry);
-                    final Date innerRequestDate = getCurrentDate();
-
-                    final ChainedFutureCallback<HttpResponse> chainedFutureCallback2 = new ChainedFutureCallback<HttpResponse>(future) {
-
-                        @Override
-                        public void completed(final HttpResponse innerHttpResponse) {
-                            final Date innerResponseDate = getCurrentDate();
-                            revalidateCacheEntryCompleted(future,
-                                    target, request, clientContext, cacheEntry,
-                                    conditionalRequest, innerRequestDate,
-                                    innerHttpResponse, innerResponseDate);
-                        }
-
-                    };
-                    CachingHttpAsyncClient.this.backend.execute(
-                            target, unconditional, clientContext, chainedFutureCallback2);
-                }
-
-                revalidateCacheEntryCompleted(future,
-                        target, request, clientContext, cacheEntry,
-                        conditionalRequest, requestDate,
-                        httpResponse, responseDate);
-            }
-
-        };
-
-        this.backend.execute(target, conditionalRequest, clientContext, chainedFutureCallback);
-    }
-
-    private void revalidateCacheEntryCompleted(
-            final BasicFuture<HttpResponse> future,
-            final HttpHost target,
-            final HttpRequestWrapper request,
-            final HttpCacheContext clientContext,
-            final HttpCacheEntry cacheEntry,
-            final HttpRequestWrapper conditionalRequest,
-            final Date requestDate,
-            final HttpResponse httpResponse,
-            final Date responseDate) {
-
-        httpResponse.addHeader(HeaderConstants.VIA, generateViaHeader(httpResponse));
-
-        final int statusCode = httpResponse.getStatusLine().getStatusCode();
-        if (statusCode == HttpStatus.SC_NOT_MODIFIED || statusCode == HttpStatus.SC_OK) {
-            recordCacheUpdate(clientContext);
-        }
-
-        if (statusCode == HttpStatus.SC_NOT_MODIFIED) {
-            final HttpCacheEntry updatedEntry;
-            try {
-                updatedEntry = CachingHttpAsyncClient.this.responseCache.updateCacheEntry(target, request, cacheEntry,
-                        httpResponse, requestDate, responseDate);
-            } catch (final IOException e) {
-                future.failed(e);
-                return;
-            }
-            if (CachingHttpAsyncClient.this.suitabilityChecker.isConditional(request)
-                    && CachingHttpAsyncClient.this.suitabilityChecker.allConditionalsMatch(request, updatedEntry, new Date())) {
-                future.completed(CachingHttpAsyncClient.this.responseGenerator.generateNotModifiedResponse(updatedEntry));
-                return;
-            }
-            future.completed(CachingHttpAsyncClient.this.responseGenerator.generateResponse(request, updatedEntry));
-            return;
-        }
-
-        if (staleIfErrorAppliesTo(statusCode)
-            && !staleResponseNotAllowed(request, cacheEntry, getCurrentDate())
-            && CachingHttpAsyncClient.this.validityPolicy.mayReturnStaleIfError(request, cacheEntry, responseDate)) {
-            final HttpResponse cachedResponse = CachingHttpAsyncClient.this.responseGenerator.generateResponse(request, cacheEntry);
-            cachedResponse.addHeader(HeaderConstants.WARNING, "110 localhost \"Response is stale\"");
-            future.completed(cachedResponse);
-            return;
-        }
-
-        try {
-            final CloseableHttpResponse backendResponse = handleBackendResponse(
-                    target, conditionalRequest, requestDate, responseDate,
-                    Proxies.enhanceResponse(httpResponse));
-            future.completed(backendResponse);
-        } catch (final IOException e) {
-            future.failed(e);
-        }
-    }
-
-    private boolean staleIfErrorAppliesTo(final int statusCode) {
-        return statusCode == HttpStatus.SC_INTERNAL_SERVER_ERROR
-                || statusCode == HttpStatus.SC_BAD_GATEWAY
-                || statusCode == HttpStatus.SC_SERVICE_UNAVAILABLE
-                || statusCode == HttpStatus.SC_GATEWAY_TIMEOUT;
-    }
-
-    CloseableHttpResponse handleBackendResponse(
-            final HttpHost target,
-            final HttpRequestWrapper request,
-            final Date requestDate,
-            final Date responseDate,
-            final CloseableHttpResponse backendResponse) throws IOException {
-
-        this.log.debug("Handling Backend response");
-        this.responseCompliance.ensureProtocolCompliance(request, backendResponse);
-
-        final boolean cacheable = this.responseCachingPolicy.isResponseCacheable(request, backendResponse);
-        this.responseCache.flushInvalidatedCacheEntriesFor(target, request, backendResponse);
-        if (cacheable &&
-            !alreadyHaveNewerCacheEntry(target, request, backendResponse)) {
-            storeRequestIfModifiedSinceFor304Response(request, backendResponse);
-            return this.responseCache.cacheAndReturnResponse(target, request, backendResponse, requestDate,
-                    responseDate);
-        }
-        if (!cacheable) {
-            try {
-                this.responseCache.flushCacheEntriesFor(target, request);
-            } catch (final IOException ioe) {
-                this.log.warn("Unable to flush invalid cache entries", ioe);
-            }
-        }
-        return backendResponse;
-    }
-
-    /**
-     * For 304 Not modified responses, adds a "Last-Modified" header with the
-     * value of the "If-Modified-Since" header passed in the request. This
-     * header is required to be able to reuse match the cache entry for
-     * subsequent requests but as defined in http specifications it is not
-     * included in 304 responses by backend servers. This header will not be
-     * included in the resulting response.
-     */
-    private void storeRequestIfModifiedSinceFor304Response(
-            final HttpRequest request,
-            final HttpResponse backendResponse) {
-        if (backendResponse.getStatusLine().getStatusCode() == HttpStatus.SC_NOT_MODIFIED) {
-            final Header h = request.getFirstHeader("If-Modified-Since");
-            if (h != null) {
-                backendResponse.addHeader("Last-Modified", h.getValue());
-            }
-        }
-    }
-
-    private boolean alreadyHaveNewerCacheEntry(
-            final HttpHost target,
-            final HttpRequest request,
-            final HttpResponse backendResponse) {
-        HttpCacheEntry existing = null;
-        try {
-            existing = this.responseCache.getCacheEntry(target, request);
-        } catch (final IOException ioe) {
-            // nop
-        }
-        if (existing == null) {
-            return false;
-        }
-        final Header entryDateHeader = existing.getFirstHeader(HTTP.DATE_HEADER);
-        if (entryDateHeader == null) {
-            return false;
-        }
-        final Header responseDateHeader = backendResponse.getFirstHeader(HTTP.DATE_HEADER);
-        if (responseDateHeader == null) {
-            return false;
-        }
-        final Date entryDate = DateUtils.parseDate(entryDateHeader.getValue());
-        final Date responseDate = DateUtils.parseDate(responseDateHeader.getValue());
-        return responseDate != null && responseDate.before(entryDate);
-    }
-
-}
diff --git a/httpasyncclient-cache/src/main/java/org/apache/http/impl/client/cache/ChainedFutureCallback.java b/httpasyncclient-cache/src/main/java/org/apache/http/impl/client/cache/ChainedFutureCallback.java
deleted file mode 100644
index b813b11..0000000
--- a/httpasyncclient-cache/src/main/java/org/apache/http/impl/client/cache/ChainedFutureCallback.java
+++ /dev/null
@@ -1,55 +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.http.impl.client.cache;
-
-import org.apache.http.concurrent.BasicFuture;
-import org.apache.http.concurrent.FutureCallback;
-
-class ChainedFutureCallback<T> implements FutureCallback<T> {
-
-    private final BasicFuture<T> wrapped;
-
-    public ChainedFutureCallback(final BasicFuture<T> delegate) {
-        this.wrapped = delegate;
-    }
-
-    @Override
-    public void completed(final T result) {
-        this.wrapped.completed(result);
-    }
-
-    @Override
-    public void failed(final Exception ex) {
-        this.wrapped.failed(ex);
-    }
-
-    @Override
-    public void cancelled() {
-        this.wrapped.cancel();
-    }
-
-}
diff --git a/httpasyncclient-cache/src/main/java/org/apache/http/impl/client/cache/package-info.java b/httpasyncclient-cache/src/main/java/org/apache/http/impl/client/cache/package-info.java
deleted file mode 100644
index 91931ad..0000000
--- a/httpasyncclient-cache/src/main/java/org/apache/http/impl/client/cache/package-info.java
+++ /dev/null
@@ -1,31 +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/>.
- *
- */
-
-/**
- * HTTP/1.1 client-side caching.
- */
-package org.apache.http.impl.client.cache;
diff --git a/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/CachingHttpAsyncClientExecChain.java b/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/CachingHttpAsyncClientExecChain.java
deleted file mode 100644
index 23000f4..0000000
--- a/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/CachingHttpAsyncClientExecChain.java
+++ /dev/null
@@ -1,135 +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.http.impl.client.cache;
-
-import java.io.IOException;
-import java.lang.reflect.UndeclaredThrowableException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-
-import org.apache.http.HttpException;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpExecutionAware;
-import org.apache.http.client.methods.HttpRequestWrapper;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.impl.execchain.ClientExecChain;
-
-public class CachingHttpAsyncClientExecChain implements ClientExecChain {
-
-    private final CachingHttpAsyncClient client;
-
-    public CachingHttpAsyncClientExecChain(final ClientExecChain backend) {
-        this(backend, new BasicHttpCache(), CacheConfig.DEFAULT);
-    }
-
-    public CachingHttpAsyncClientExecChain(
-            final ClientExecChain backend,
-            final HttpCache cache,
-            final CacheConfig config) {
-        this.client = new CachingHttpAsyncClient(
-                new ClientExecChainAsyncClient(backend), cache, config);
-    }
-
-    CachingHttpAsyncClientExecChain(
-            final ClientExecChain backend, final HttpCache responseCache,
-            final CacheValidityPolicy validityPolicy,
-            final ResponseCachingPolicy responseCachingPolicy,
-            final CachedHttpResponseGenerator responseGenerator,
-            final CacheableRequestPolicy cacheableRequestPolicy,
-            final CachedResponseSuitabilityChecker suitabilityChecker,
-            final ConditionalRequestBuilder conditionalRequestBuilder,
-            final ResponseProtocolCompliance responseCompliance,
-            final RequestProtocolCompliance requestCompliance) {
-        this.client = new CachingHttpAsyncClient(
-                new ClientExecChainAsyncClient(backend), validityPolicy,
-                responseCachingPolicy, responseCache, responseGenerator,
-                cacheableRequestPolicy, suitabilityChecker,
-                conditionalRequestBuilder, responseCompliance,
-                requestCompliance);
-    }
-
-    public boolean supportsRangeAndContentRangeHeaders() {
-        return client.supportsRangeAndContentRangeHeaders();
-    }
-
-    public CloseableHttpResponse execute(
-            final HttpRoute route,
-            final HttpRequestWrapper request) throws IOException, HttpException {
-        return execute(route, request, HttpClientContext.create(), null);
-    }
-
-    public CloseableHttpResponse execute(
-            final HttpRoute route,
-            final HttpRequestWrapper request,
-            final HttpClientContext context) throws IOException, HttpException {
-        return execute(route, request, context, null);
-    }
-
-    @Override
-    public CloseableHttpResponse execute(
-            final HttpRoute route,
-            final HttpRequestWrapper request,
-            final HttpClientContext context,
-            final HttpExecutionAware execAware) throws IOException, HttpException {
-        try {
-            final Future<HttpResponse> future = client.execute(route.getTargetHost(), request, context, null);
-            return Proxies.enhanceResponse(future.get());
-        } catch (final InterruptedException e) {
-            Thread.currentThread().interrupt();
-            return null;
-        } catch (final ExecutionException e) {
-            try {
-                throw e.getCause();
-            } catch (final IOException ex) {
-                throw ex;
-            } catch (final HttpException ex) {
-                throw ex;
-            } catch (final RuntimeException ex) {
-                throw ex;
-            } catch (final Error ex) {
-                throw ex;
-            } catch (final Throwable ex) {
-                throw new UndeclaredThrowableException(ex);
-            }
-        }
-    }
-
-    public long getCacheHits() {
-        return client.getCacheHits();
-    }
-
-    public long getCacheMisses() {
-        return client.getCacheMisses();
-    }
-
-    public long getCacheUpdates() {
-        return client.getCacheUpdates();
-    }
-
-}
diff --git a/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/ClientExecChainAsyncClient.java b/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/ClientExecChainAsyncClient.java
deleted file mode 100644
index 5e6d451..0000000
--- a/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/ClientExecChainAsyncClient.java
+++ /dev/null
@@ -1,122 +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.http.impl.client.cache;
-
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpRequestWrapper;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.concurrent.BasicFuture;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.impl.execchain.ClientExecChain;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.nio.conn.ClientAsyncConnectionManager;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.nio.reactor.IOReactorStatus;
-import org.apache.http.params.HttpParams;
-import org.apache.http.protocol.HttpContext;
-
-import java.io.IOException;
-import java.util.concurrent.Future;
-
-public class ClientExecChainAsyncClient extends CloseableHttpAsyncClient {
-
-    private final ClientExecChain backend;
-
-    public ClientExecChainAsyncClient(final ClientExecChain backend) {
-        super();
-        this.backend = backend;
-    }
-
-    @Override
-    public void start() {
-        // no-op
-    }
-
-    @Override
-    public boolean isRunning() {
-        return true;
-    }
-
-    public void shutdown() throws InterruptedException {
-        // no-op
-    }
-
-    public IOReactorStatus getStatus() {
-        return null;
-    }
-
-    @SuppressWarnings("deprecation")
-    public ClientAsyncConnectionManager getConnectionManager() {
-        return null;
-    }
-
-    @SuppressWarnings("deprecation")
-    public HttpParams getParams() {
-        return null;
-    }
-
-    @Override
-    public void close() throws IOException {
-        // no-op
-    }
-
-    @Override
-    public <T> Future<T> execute(
-            final HttpAsyncRequestProducer requestProducer,
-            final HttpAsyncResponseConsumer<T> responseConsumer,
-            final HttpContext context,
-            final FutureCallback<T> callback) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Future<HttpResponse> execute(
-            final HttpHost target,
-            final HttpRequest request,
-            final HttpContext context,
-            final FutureCallback<HttpResponse> callback) {
-        final BasicFuture<HttpResponse> future = new BasicFuture<HttpResponse>(
-                callback);
-        try {
-            final HttpResponse result = backend.execute(new HttpRoute(target),
-                    HttpRequestWrapper.wrap(request),
-                    HttpClientContext.adapt(context), null);
-            future.completed(result);
-        } catch (final IOException e) {
-            future.failed(e);
-        } catch (final HttpException e) {
-            future.failed(e);
-        }
-        return future;
-    }
-
-}
diff --git a/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/TestAsyncProtocolAllowedBehavior.java b/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/TestAsyncProtocolAllowedBehavior.java
deleted file mode 100644
index dcba732..0000000
--- a/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/TestAsyncProtocolAllowedBehavior.java
+++ /dev/null
@@ -1,52 +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.http.impl.client.cache;
-
-import org.apache.http.impl.execchain.ClientExecChain;
-
-/**
- * This class tests behavior that is allowed (MAY) by the HTTP/1.1 protocol specification and for
- * which we have implemented the behavior in the caching HTTP client.
- */
-public class TestAsyncProtocolAllowedBehavior extends TestProtocolAllowedBehavior {
-
-    @Override
-    protected ClientExecChain createCachingExecChain(
-            final ClientExecChain backend,
-            final HttpCache cache,
-            final CacheConfig config) {
-        return new CachingHttpAsyncClientExecChain(backend, cache, config);
-    }
-
-    @Override
-    protected boolean supportsRangeAndContentRangeHeaders(final ClientExecChain impl) {
-        return impl instanceof CachingHttpAsyncClientExecChain
-                && ((CachingHttpAsyncClientExecChain) impl)
-                .supportsRangeAndContentRangeHeaders();
-    }
-
-}
diff --git a/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/TestAsyncProtocolDeviations.java b/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/TestAsyncProtocolDeviations.java
deleted file mode 100644
index 72f22d7..0000000
--- a/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/TestAsyncProtocolDeviations.java
+++ /dev/null
@@ -1,52 +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.http.impl.client.cache;
-
-import org.apache.http.impl.execchain.ClientExecChain;
-
-/**
- * We are a conditionally-compliant HTTP/1.1 client with a cache. However, a lot of the rules for
- * proxies apply to us, as far as proper operation of the requests that pass through us. Generally
- * speaking, we want to make sure that any response returned from our HttpClient.execute() methods
- * is conditionally compliant with the rules for an HTTP/1.1 server, and that any requests we pass
- * downstream to the backend HttpClient are are conditionally compliant with the rules for an
- * HTTP/1.1 client.
- * <p>
- * There are some cases where strictly behaving as a compliant caching proxy would result in strange
- * behavior, since we're attached as part of a client and are expected to be a drop-in replacement.
- * The test cases captured here document the places where we differ from the HTTP RFC.
- */
-public class TestAsyncProtocolDeviations extends TestProtocolDeviations {
-
-    @Override
-    protected ClientExecChain createCachingExecChain(
-            final ClientExecChain backend,
-            final HttpCache cache,
-            final CacheConfig config) {
-        return new CachingHttpAsyncClientExecChain(backend, cache, config);
-    }
-}
diff --git a/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/TestAsyncProtocolRequirements.java b/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/TestAsyncProtocolRequirements.java
deleted file mode 100644
index fc814df..0000000
--- a/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/TestAsyncProtocolRequirements.java
+++ /dev/null
@@ -1,55 +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.http.impl.client.cache;
-
-import org.apache.http.impl.execchain.ClientExecChain;
-
-/**
- * We are a conditionally-compliant HTTP/1.1 client with a cache. However, a lot of the rules for
- * proxies apply to us, as far as proper operation of the requests that pass through us. Generally
- * speaking, we want to make sure that any response returned from our HttpClient.execute() methods
- * is conditionally compliant with the rules for an HTTP/1.1 server, and that any requests we pass
- * downstream to the backend HttpClient are are conditionally compliant with the rules for an
- * HTTP/1.1 client.
- */
-public class TestAsyncProtocolRequirements extends TestProtocolRequirements {
-
-    @Override
-    protected ClientExecChain createCachingExecChain(
-            final ClientExecChain backend,
-            final HttpCache cache,
-            final CacheConfig config) {
-        return new CachingHttpAsyncClientExecChain(backend, cache, config);
-    }
-
-    @Override
-    protected boolean supportsRangeAndContentRangeHeaders(final ClientExecChain impl) {
-        return impl instanceof CachingHttpAsyncClientExecChain
-                && ((CachingHttpAsyncClientExecChain) impl)
-                .supportsRangeAndContentRangeHeaders();
-    }
-}
diff --git a/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpAsyncClient.java b/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpAsyncClient.java
deleted file mode 100644
index fda6696..0000000
--- a/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpAsyncClient.java
+++ /dev/null
@@ -1,69 +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.http.impl.client.cache;
-
-import org.apache.http.impl.execchain.ClientExecChain;
-import org.junit.Ignore;
-import org.junit.Test;
-
-public class TestCachingHttpAsyncClient extends TestCachingExecChain {
-
-    @Override
-    public ClientExecChain createCachingExecChain(
-            final ClientExecChain backend,
-            final HttpCache responseCache,
-            final CacheValidityPolicy validityPolicy,
-            final ResponseCachingPolicy responseCachingPolicy,
-            final CachedHttpResponseGenerator responseGenerator,
-            final CacheableRequestPolicy cacheableRequestPolicy,
-            final CachedResponseSuitabilityChecker suitabilityChecker,
-            final ConditionalRequestBuilder conditionalRequestBuilder,
-            final ResponseProtocolCompliance responseCompliance,
-            final RequestProtocolCompliance requestCompliance,
-            final CacheConfig config,
-            final AsynchronousValidator asynchRevalidator) {
-        return new CachingHttpAsyncClientExecChain(backend, responseCache, validityPolicy,
-                responseCachingPolicy, responseGenerator,
-                cacheableRequestPolicy, suitabilityChecker,
-                conditionalRequestBuilder, responseCompliance,
-                requestCompliance);
-    }
-
-    @Override
-    public ClientExecChain createCachingExecChain(
-            final ClientExecChain backend,
-            final HttpCache cache,
-            final CacheConfig config) {
-        return new CachingHttpAsyncClientExecChain(backend, cache, config);
-    }
-
-    @Override @Test @Ignore // TODO: virtual host support is presently broken
-    public void testUsesVirtualHostForCacheKey() throws Exception {
-        super.testUsesVirtualHostForCacheKey();
-    }
-
-}
diff --git a/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/TestHttpAsyncCacheJiraNumber1147.java b/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/TestHttpAsyncCacheJiraNumber1147.java
deleted file mode 100644
index 98c3ec5..0000000
--- a/httpasyncclient-cache/src/test/java/org/apache/http/impl/client/cache/TestHttpAsyncCacheJiraNumber1147.java
+++ /dev/null
@@ -1,41 +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.http.impl.client.cache;
-
-import org.apache.http.impl.execchain.ClientExecChain;
-
-public class TestHttpAsyncCacheJiraNumber1147 extends TestHttpCacheJiraNumber1147 {
-
-    @Override
-    protected ClientExecChain createCachingExecChain(
-            final ClientExecChain backend,
-            final BasicHttpCache cache,
-            final CacheConfig config) {
-        return new CachingHttpAsyncClientExecChain(backend, cache, config);
-    }
-
-}
diff --git a/httpasyncclient-cache/src/test/resources/commons-logging.properties b/httpasyncclient-cache/src/test/resources/commons-logging.properties
deleted file mode 100644
index 2fa1b3b..0000000
--- a/httpasyncclient-cache/src/test/resources/commons-logging.properties
+++ /dev/null
@@ -1,26 +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/>.
-
-# Disable logging for unit tests
-org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog
diff --git a/httpasyncclient-osgi/pom.xml b/httpasyncclient-osgi/pom.xml
deleted file mode 100644
index 6ec73b4..0000000
--- a/httpasyncclient-osgi/pom.xml
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   ====================================================================
-   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 />.
- --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.httpcomponents</groupId>
-    <artifactId>httpcomponents-asyncclient</artifactId>
-    <version>4.2-alpha1-SNAPSHOT</version>
-  </parent>
-  <artifactId>httpasyncclient-osgi</artifactId>
-  <name>Apache HttpAsyncClient OSGi bundle</name>
-  <description>
-   Apache HttpComponents AsyncClient (OSGi bundle)
-  </description>
-  <url>http://hc.apache.org/httpcomponents-asyncclient</url>
-  <packaging>bundle</packaging>
-
-  <properties>
-    <httpcore.osgi.import.version>"[4.4.0, 4.5.0)"</httpcore.osgi.import.version>
-    <httpclient.osgi.import.version>"[4.4.0, 4.5.0)"</httpclient.osgi.import.version>
-    <commons-logging.osgi.import.version>"[1.1.0, 1.3.0)"</commons-logging.osgi.import.version>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpasyncclient</artifactId>
-      <version>${project.version}</version>
-      <scope>compile</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-bundle-plugin</artifactId>
-        <extensions>true</extensions>
-        <configuration>
-          <instructions>
-            <Bundle-Name>Apache ${project.name}</Bundle-Name>
-            <Bundle-SymbolicName>${project.groupId}.httpasyncclient</Bundle-SymbolicName>
-            <_exportcontents>
-            org.apache.http.nio.client.*;version=${project.version},
-            org.apache.http.nio.conn.*;version=${project.version},
-            org.apache.http.impl.nio.client.*;version=${project.version},
-            org.apache.http.impl.nio.conn.*;version=${project.version}
-            </_exportcontents>
-            <Embed-Dependency>*;scope=compile|runtime;inline=true</Embed-Dependency>
-            <Import-Package>
-            javax.crypto,
-            javax.crypto.spec,
-            javax.net.ssl,
-            javax.security.auth.x500,
-            org.ietf.jgss,
-            org.apache.commons.logging;version=${commons-logging.osgi.import.version},
-            org.apache.http;version=${httpcore.osgi.import.version},
-            org.apache.http.entity;version=${httpcore.osgi.import.version},
-            org.apache.http.concurrent;version=${httpcore.osgi.import.version},
-            org.apache.http.config;version=${httpcore.osgi.import.version},
-            org.apache.http.io;version=${httpcore.osgi.import.version},
-            org.apache.http.message;version=${httpcore.osgi.import.version},
-            org.apache.http.params;version=${httpcore.osgi.import.version},
-            org.apache.http.pool;version=${httpcore.osgi.import.version},
-            org.apache.http.protocol;version=${httpcore.osgi.import.version},
-            org.apache.http.util;version=${httpcore.osgi.import.version},
-            org.apache.http.impl;version=${httpcore.osgi.import.version},
-            org.apache.http.nio;version=${httpcore.osgi.import.version},
-            org.apache.http.nio.entity;version=${httpcore.osgi.import.version},
-            org.apache.http.nio.params;version=${httpcore.osgi.import.version},
-            org.apache.http.nio.pool;version=${httpcore.osgi.import.version},
-            org.apache.http.nio.protocol;version=${httpcore.osgi.import.version},
-            org.apache.http.nio.reactor;version=${httpcore.osgi.import.version},
-            org.apache.http.nio.reactor.ssl;version=${httpcore.osgi.import.version},
-            org.apache.http.nio.util;version=${httpcore.osgi.import.version},
-            org.apache.http.impl.nio.codecs;version=${httpcore.osgi.import.version},
-            org.apache.http.impl.nio;version=${httpcore.osgi.import.version},
-            org.apache.http.impl.nio.reactor;version=${httpcore.osgi.import.version},
-            org.apache.http.auth;version=${httpclient.osgi.import.version},
-            org.apache.http.cookie;version=${httpclient.osgi.import.version},
-            org.apache.http.conn;version=${httpclient.osgi.import.version},
-            org.apache.http.conn.params;version=${httpclient.osgi.import.version},
-            org.apache.http.conn.routing;version=${httpclient.osgi.import.version},
-            org.apache.http.conn.ssl;version=${httpclient.osgi.import.version},
-            org.apache.http.conn.util;version=${httpclient.osgi.import.version},
-            org.apache.http.client;version=${httpclient.osgi.import.version},
-            org.apache.http.client.config;version=${httpcore.osgi.import.version},
-            org.apache.http.client.methods;version=${httpclient.osgi.import.version},
-            org.apache.http.client.params;version=${httpclient.osgi.import.version},
-            org.apache.http.client.protocol;version=${httpclient.osgi.import.version},
-            org.apache.http.client.utils;version=${httpclient.osgi.import.version},
-            org.apache.http.impl.auth;version=${httpclient.osgi.import.version},
-            org.apache.http.impl.cookie;version=${httpclient.osgi.import.version},
-            org.apache.http.impl.conn;version=${httpclient.osgi.import.version},
-            org.apache.http.impl.client;version=${httpclient.osgi.import.version},
-            org.apache.http.impl.execchain;version=${httpclient.osgi.import.version},
-            org.apache.http.ssl;version=${httpcore.osgi.import.version},
-            *
-            </Import-Package>
-            <Include-Resource />
-            <!-- Stop the JAVA_1_n_HOME variables from being treated as headers by Bnd -->
-            <_removeheaders>JAVA_1_3_HOME,JAVA_1_4_HOME</_removeheaders>
-          </instructions>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>clirr-maven-plugin</artifactId>
-        <configuration>
-          <skip>true</skip>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>verify</phase>
-            <goals>
-              <goal>check</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <excludes>
-            <exclude>.externalToolBuilders/**</exclude>			
-            <exclude>.pmd</exclude>
-            <exclude>maven-eclipse.xml</exclude>
-          </excludes>
-        </configuration>
-      </plugin>	
-    </plugins>
-    <finalName>org.apache.httpcomponents.httpasyncclient_${project.version}</finalName>
-  </build>
-
-  <reporting>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>clirr-maven-plugin</artifactId>
-        <version>${hc.clirr.version}</version>
-        <configuration>
-          <skip>true</skip>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-project-info-reports-plugin</artifactId>
-        <version>${hc.project-info.version}</version>
-        <inherited>false</inherited>
-        <reportSets>
-          <reportSet>
-            <reports>
-              <report>dependencies</report>
-              <report>dependency-info</report>
-              <report>summary</report>
-            </reports>
-          </reportSet>
-        </reportSets>
-      </plugin>
-
-    </plugins>
-  </reporting>
-
-</project>
diff --git a/httpasyncclient/pom.xml b/httpasyncclient/pom.xml
deleted file mode 100644
index deaf219..0000000
--- a/httpasyncclient/pom.xml
+++ /dev/null
@@ -1,181 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   ====================================================================
-   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 />.
- --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.httpcomponents</groupId>
-    <artifactId>httpcomponents-asyncclient</artifactId>
-    <version>4.2-alpha1-SNAPSHOT</version>
-  </parent>
-  <artifactId>httpasyncclient</artifactId>
-  <name>Apache HttpAsyncClient</name>
-  <description>
-   Apache HttpComponents AsyncClient
-  </description>
-  <url>http://hc.apache.org/httpcomponents-asyncclient</url>
-  <packaging>jar</packaging>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpcore</artifactId>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpcore-nio</artifactId>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.httpcomponents</groupId>
-      <artifactId>httpclient</artifactId>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-logging</groupId>
-      <artifactId>commons-logging</artifactId>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <resources>
-      <resource>
-        <directory>src/main/resources</directory>
-        <filtering>true</filtering>
-        <includes>
-            <include>**/*.properties</include>
-        </includes>
-      </resource>
-    </resources>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>verify</phase>
-            <goals>
-              <goal>check</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <excludes>
-            <exclude>.externalToolBuilders/**</exclude>			
-            <exclude>maven-eclipse.xml</exclude>
-          </excludes>
-        </configuration>
-      </plugin>	
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>build-helper-maven-plugin</artifactId>
-        <version>1.8</version>
-        <executions>
-          <execution>
-          <id>add-source</id>
-          <phase>generate-sources</phase>
-          <goals>
-            <goal>add-source</goal>
-          </goals>
-          <configuration>
-            <sources>
-              <source>src/main/java-deprecated</source>
-            </sources>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-
-  <reporting>
-    <plugins>
-
-      <plugin>
-        <artifactId>maven-javadoc-plugin</artifactId>
-        <version>${hc.javadoc.version}</version>
-        <configuration>
-          <source>${maven.compiler.source}</source>
-          <links>
-            <link>http://download.oracle.com/javase/1.5.0/docs/api/</link>
-            <link>http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/</link>
-            <link>http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/</link>
-          </links>
-        </configuration>
-        <reportSets>
-          <reportSet>
-            <reports>
-              <report>javadoc</report>
-            </reports>
-          </reportSet>
-        </reportSets>
-      </plugin>
-
-      <plugin>
-        <artifactId>maven-project-info-reports-plugin</artifactId>
-        <version>${hc.project-info.version}</version>
-        <inherited>false</inherited>
-        <reportSets>
-          <reportSet>
-            <reports>
-              <report>dependencies</report>
-              <report>dependency-info</report>
-              <report>summary</report>
-            </reports>
-          </reportSet>
-        </reportSets>
-      </plugin>
-
-      <plugin>
-        <artifactId>maven-jxr-plugin</artifactId>
-        <version>${hc.jxr.version}</version>
-      </plugin>
-
-      <plugin>
-        <artifactId>maven-surefire-report-plugin</artifactId>
-        <version>${hc.surefire-report.version}</version>
-      </plugin>
-
-    </plugins>
-  </reporting>
-
-</project>
diff --git a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientAuthentication.java b/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientAuthentication.java
deleted file mode 100644
index f2d82c8..0000000
--- a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientAuthentication.java
+++ /dev/null
@@ -1,66 +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.http.examples.nio.client;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-
-import java.util.concurrent.Future;
-
-/**
- * A simple example that uses HttpClient to execute an HTTP request against
- * a target site that requires user authentication.
- */
-public class AsyncClientAuthentication {
-
-    public static void main(String[] args) throws Exception {
-        CredentialsProvider credsProvider = new BasicCredentialsProvider();
-        credsProvider.setCredentials(
-                new AuthScope("localhost", 443),
-                new UsernamePasswordCredentials("username", "password"));
-        CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
-                .setDefaultCredentialsProvider(credsProvider)
-                .build();
-        try {
-            HttpGet httpget = new HttpGet("http://localhost/");
-
-            System.out.println("Executing request " + httpget.getRequestLine());
-            Future<HttpResponse> future = httpclient.execute(httpget, null);
-            HttpResponse response = future.get();
-            System.out.println("Response: " + response.getStatusLine());
-            System.out.println("Shutting down");
-        } finally {
-            httpclient.close();
-        }
-    }
-}
diff --git a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientConfiguration.java b/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientConfiguration.java
deleted file mode 100644
index 15f8d34..0000000
--- a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientConfiguration.java
+++ /dev/null
@@ -1,277 +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.http.examples.nio.client;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.nio.charset.CodingErrorAction;
-import java.util.Arrays;
-import java.util.concurrent.Future;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLContext;
-
-import org.apache.http.Consts;
-import org.apache.http.Header;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.ParseException;
-import org.apache.http.client.CookieStore;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.config.AuthSchemes;
-import org.apache.http.client.config.CookieSpecs;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.config.ConnectionConfig;
-import org.apache.http.config.MessageConstraints;
-import org.apache.http.config.Registry;
-import org.apache.http.config.RegistryBuilder;
-import org.apache.http.conn.DnsResolver;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.conn.ssl.DefaultHostnameVerifier;
-import org.apache.http.conn.ssl.SSLContexts;
-import org.apache.http.impl.DefaultHttpResponseFactory;
-import org.apache.http.impl.client.BasicCookieStore;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.apache.http.impl.conn.SystemDefaultDnsResolver;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-import org.apache.http.impl.nio.codecs.DefaultHttpRequestWriterFactory;
-import org.apache.http.impl.nio.codecs.DefaultHttpResponseParser;
-import org.apache.http.impl.nio.codecs.DefaultHttpResponseParserFactory;
-import org.apache.http.impl.nio.conn.ManagedNHttpClientConnectionFactory;
-import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager;
-import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
-import org.apache.http.impl.nio.reactor.IOReactorConfig;
-import org.apache.http.message.BasicHeader;
-import org.apache.http.message.BasicLineParser;
-import org.apache.http.message.LineParser;
-import org.apache.http.nio.NHttpMessageParser;
-import org.apache.http.nio.NHttpMessageParserFactory;
-import org.apache.http.nio.NHttpMessageWriterFactory;
-import org.apache.http.nio.conn.ManagedNHttpClientConnection;
-import org.apache.http.nio.conn.NHttpConnectionFactory;
-import org.apache.http.nio.conn.NoopIOSessionStrategy;
-import org.apache.http.nio.conn.SchemeIOSessionStrategy;
-import org.apache.http.nio.conn.ssl.SSLIOSessionStrategy;
-import org.apache.http.nio.reactor.ConnectingIOReactor;
-import org.apache.http.nio.reactor.SessionInputBuffer;
-import org.apache.http.nio.util.HeapByteBufferAllocator;
-import org.apache.http.util.CharArrayBuffer;
-
-/**
- * This example demonstrates how to customize and configure the most common aspects
- * of HTTP request execution and connection management.
- */
-public class AsyncClientConfiguration {
-
-    public final static void main(String[] args) throws Exception {
-
-        // Use custom message parser / writer to customize the way HTTP
-        // messages are parsed from and written out to the data stream.
-        NHttpMessageParserFactory<HttpResponse> responseParserFactory = new DefaultHttpResponseParserFactory() {
-
-            @Override
-            public NHttpMessageParser<HttpResponse> create(
-                    final SessionInputBuffer buffer,
-                    final MessageConstraints constraints) {
-                LineParser lineParser = new BasicLineParser() {
-
-                    @Override
-                    public Header parseHeader(final CharArrayBuffer buffer) {
-                        try {
-                            return super.parseHeader(buffer);
-                        } catch (ParseException ex) {
-                            return new BasicHeader(buffer.toString(), null);
-                        }
-                    }
-
-                };
-                return new DefaultHttpResponseParser(
-                        buffer, lineParser, DefaultHttpResponseFactory.INSTANCE, constraints);
-            }
-
-        };
-        NHttpMessageWriterFactory<HttpRequest> requestWriterFactory = new DefaultHttpRequestWriterFactory();
-
-        // Use a custom connection factory to customize the process of
-        // initialization of outgoing HTTP connections. Beside standard connection
-        // configuration parameters HTTP connection factory can define message
-        // parser / writer routines to be employed by individual connections.
-        NHttpConnectionFactory<ManagedNHttpClientConnection> connFactory = new ManagedNHttpClientConnectionFactory(
-                requestWriterFactory, responseParserFactory, HeapByteBufferAllocator.INSTANCE);
-
-        // Client HTTP connection objects when fully initialized can be bound to
-        // an arbitrary network socket. The process of network socket initialization,
-        // its connection to a remote address and binding to a local one is controlled
-        // by a connection socket factory.
-
-        // SSL context for secure connections can be created either based on
-        // system or application specific properties.
-        SSLContext sslcontext = SSLContexts.createSystemDefault();
-        // Use custom hostname verifier to customize SSL hostname verification.
-        HostnameVerifier hostnameVerifier = new DefaultHostnameVerifier();
-
-        // Create a registry of custom connection session strategies for supported
-        // protocol schemes.
-        Registry<SchemeIOSessionStrategy> sessionStrategyRegistry = RegistryBuilder.<SchemeIOSessionStrategy>create()
-            .register("http", NoopIOSessionStrategy.INSTANCE)
-            .register("https", new SSLIOSessionStrategy(sslcontext, hostnameVerifier))
-            .build();
-
-        // Use custom DNS resolver to override the system DNS resolution.
-        DnsResolver dnsResolver = new SystemDefaultDnsResolver() {
-
-            @Override
-            public InetAddress[] resolve(final String host) throws UnknownHostException {
-                if (host.equalsIgnoreCase("myhost")) {
-                    return new InetAddress[] { InetAddress.getByAddress(new byte[] {127, 0, 0, 1}) };
-                } else {
-                    return super.resolve(host);
-                }
-            }
-
-        };
-
-        // Create I/O reactor configuration
-        IOReactorConfig ioReactorConfig = IOReactorConfig.custom()
-                .setIoThreadCount(Runtime.getRuntime().availableProcessors())
-                .setConnectTimeout(30000)
-                .setSoTimeout(30000)
-                .build();
-
-        // Create a custom I/O reactort
-        ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(ioReactorConfig);
-
-        // Create a connection manager with custom configuration.
-        PoolingNHttpClientConnectionManager connManager = new PoolingNHttpClientConnectionManager(
-                ioReactor, connFactory, sessionStrategyRegistry, dnsResolver);
-
-        // Create message constraints
-        MessageConstraints messageConstraints = MessageConstraints.custom()
-            .setMaxHeaderCount(200)
-            .setMaxLineLength(2000)
-            .build();
-        // Create connection configuration
-        ConnectionConfig connectionConfig = ConnectionConfig.custom()
-            .setMalformedInputAction(CodingErrorAction.IGNORE)
-            .setUnmappableInputAction(CodingErrorAction.IGNORE)
-            .setCharset(Consts.UTF_8)
-            .setMessageConstraints(messageConstraints)
-            .build();
-        // Configure the connection manager to use connection configuration either
-        // by default or for a specific host.
-        connManager.setDefaultConnectionConfig(connectionConfig);
-        connManager.setConnectionConfig(new HttpHost("somehost", 80), ConnectionConfig.DEFAULT);
-
-        // Configure total max or per route limits for persistent connections
-        // that can be kept in the pool or leased by the connection manager.
-        connManager.setMaxTotal(100);
-        connManager.setDefaultMaxPerRoute(10);
-        connManager.setMaxPerRoute(new HttpRoute(new HttpHost("somehost", 80)), 20);
-
-        // Use custom cookie store if necessary.
-        CookieStore cookieStore = new BasicCookieStore();
-        // Use custom credentials provider if necessary.
-        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
-        // Create global request configuration
-        RequestConfig defaultRequestConfig = RequestConfig.custom()
-            .setCookieSpec(CookieSpecs.DEFAULT)
-            .setExpectContinueEnabled(true)
-            .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.DIGEST))
-            .setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC))
-            .build();
-
-        // Create an HttpClient with the given custom dependencies and configuration.
-        CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
-            .setConnectionManager(connManager)
-            .setDefaultCookieStore(cookieStore)
-            .setDefaultCredentialsProvider(credentialsProvider)
-            .setProxy(new HttpHost("myproxy", 8080))
-            .setDefaultRequestConfig(defaultRequestConfig)
-            .build();
-
-        try {
-            HttpGet httpget = new HttpGet("http://localhost/");
-            // Request configuration can be overridden at the request level.
-            // They will take precedence over the one set at the client level.
-            RequestConfig requestConfig = RequestConfig.copy(defaultRequestConfig)
-                .setSocketTimeout(5000)
-                .setConnectTimeout(5000)
-                .setConnectionRequestTimeout(5000)
-                .setProxy(new HttpHost("myotherproxy", 8080))
-                .build();
-            httpget.setConfig(requestConfig);
-
-            // Execution context can be customized locally.
-            HttpClientContext localContext = HttpClientContext.create();
-            // Contextual attributes set the local context level will take
-            // precedence over those set at the client level.
-            localContext.setCookieStore(cookieStore);
-            localContext.setCredentialsProvider(credentialsProvider);
-
-            System.out.println("Executing request " + httpget.getRequestLine());
-
-            httpclient.start();
-
-            // Pass local context as a parameter
-            Future<HttpResponse> future = httpclient.execute(httpget, localContext, null);
-
-            // Please note that it may be unsafe to access HttpContext instance
-            // while the request is still being executed
-
-            HttpResponse response = future.get();
-            System.out.println("Response: " + response.getStatusLine());
-
-            // Once the request has been executed the local context can
-            // be used to examine updated state and various objects affected
-            // by the request execution.
-
-            // Last executed request
-            localContext.getRequest();
-            // Execution route
-            localContext.getHttpRoute();
-            // Target auth state
-            localContext.getTargetAuthState();
-            // Proxy auth state
-            localContext.getTargetAuthState();
-            // Cookie origin
-            localContext.getCookieOrigin();
-            // Cookie spec used
-            localContext.getCookieSpec();
-            // User security token
-            localContext.getUserToken();
-        } finally {
-            httpclient.close();
-        }
-    }
-
-}
-
diff --git a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientCustomContext.java b/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientCustomContext.java
deleted file mode 100644
index 0e9e36a..0000000
--- a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientCustomContext.java
+++ /dev/null
@@ -1,83 +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.http.examples.nio.client;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.CookieStore;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.cookie.Cookie;
-import org.apache.http.impl.client.BasicCookieStore;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-
-import java.util.List;
-import java.util.concurrent.Future;
-
-/**
- * This example demonstrates the use of a local HTTP context populated with
- * custom attributes.
- */
-public class AsyncClientCustomContext {
-
-    public final static void main(String[] args) throws Exception {
-        CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
-        try {
-            // Create a local instance of cookie store
-            CookieStore cookieStore = new BasicCookieStore();
-
-            // Create local HTTP context
-            HttpClientContext localContext = HttpClientContext.create();
-            // Bind custom cookie store to the local context
-            localContext.setCookieStore(cookieStore);
-
-            HttpGet httpget = new HttpGet("http://localhost/");
-            System.out.println("Executing request " + httpget.getRequestLine());
-
-            httpclient.start();
-
-            // Pass local context as a parameter
-            Future<HttpResponse> future = httpclient.execute(httpget, localContext, null);
-
-            // Please note that it may be unsafe to access HttpContext instance
-            // while the request is still being executed
-
-            HttpResponse response = future.get();
-            System.out.println("Response: " + response.getStatusLine());
-            List<Cookie> cookies = cookieStore.getCookies();
-            for (int i = 0; i < cookies.size(); i++) {
-                System.out.println("Local cookie: " + cookies.get(i));
-            }
-            System.out.println("Shutting down");
-        } finally {
-            httpclient.close();
-        }
-    }
-
-}
-
diff --git a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientCustomSSL.java b/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientCustomSSL.java
deleted file mode 100644
index 200a330..0000000
--- a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientCustomSSL.java
+++ /dev/null
@@ -1,84 +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.http.examples.nio.client;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.security.KeyStore;
-import java.util.concurrent.Future;
-
-import javax.net.ssl.SSLContext;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-import org.apache.http.nio.conn.ssl.SSLIOSessionStrategy;
-import org.apache.http.ssl.SSLContexts;
-
-/**
- * This example demonstrates how to create secure connections with a custom SSL
- * context.
- */
-public class AsyncClientCustomSSL {
-
-    public final static void main(String[] args) throws Exception {
-        KeyStore trustStore  = KeyStore.getInstance(KeyStore.getDefaultType());
-        FileInputStream instream = new FileInputStream(new File("my.keystore"));
-        try {
-            trustStore.load(instream, "nopassword".toCharArray());
-        } finally {
-            instream.close();
-        }
-        // Trust own CA and all self-signed certs
-        SSLContext sslcontext = SSLContexts.custom()
-                .loadTrustMaterial(trustStore, new TrustSelfSignedStrategy())
-                .build();
-        // Allow TLSv1 protocol only
-        SSLIOSessionStrategy sslSessionStrategy = new SSLIOSessionStrategy(
-                sslcontext,
-                new String[] { "TLSv1" },
-                null,
-                SSLIOSessionStrategy.getDefaultHostnameVerifier());
-        CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
-                .setSSLStrategy(sslSessionStrategy)
-                .build();
-        try {
-            httpclient.start();
-            HttpGet request = new HttpGet("https://issues.apache.org/");
-            Future<HttpResponse> future = httpclient.execute(request, null);
-            HttpResponse response = future.get();
-            System.out.println("Response: " + response.getStatusLine());
-            System.out.println("Shutting down");
-        } finally {
-            httpclient.close();
-        }
-        System.out.println("Done");
-    }
-
-}
diff --git a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientEvictExpiredConnections.java b/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientEvictExpiredConnections.java
deleted file mode 100644
index 95adf13..0000000
--- a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientEvictExpiredConnections.java
+++ /dev/null
@@ -1,145 +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.http.examples.nio.client;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager;
-import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
-import org.apache.http.nio.conn.NHttpClientConnectionManager;
-import org.apache.http.nio.reactor.ConnectingIOReactor;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Example demonstrating how to evict expired and idle connections
- * from the connection pool.
- */
-public class AsyncClientEvictExpiredConnections {
-
-    public static void main(String[] args) throws Exception {
-        ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor();
-        PoolingNHttpClientConnectionManager cm = new PoolingNHttpClientConnectionManager(ioReactor);
-        cm.setMaxTotal(100);
-        CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
-                .setConnectionManager(cm)
-                .build();
-        try {
-            httpclient.start();
-
-            // create an array of URIs to perform GETs on
-            String[] urisToGet = {
-                "http://hc.apache.org/",
-                "http://hc.apache.org/httpcomponents-core-ga/",
-                "http://hc.apache.org/httpcomponents-client-ga/",
-            };
-
-            IdleConnectionEvictor connEvictor = new IdleConnectionEvictor(cm);
-            connEvictor.start();
-
-            final CountDownLatch latch = new CountDownLatch(urisToGet.length);
-            for (final String uri: urisToGet) {
-                final HttpGet httpget = new HttpGet(uri);
-                httpclient.execute(httpget, new FutureCallback<HttpResponse>() {
-
-                    @Override
-                    public void completed(final HttpResponse response) {
-                        latch.countDown();
-                        System.out.println(httpget.getRequestLine() + "->" + response.getStatusLine());
-                    }
-
-                    @Override
-                    public void failed(final Exception ex) {
-                        latch.countDown();
-                        System.out.println(httpget.getRequestLine() + "->" + ex);
-                    }
-
-                    @Override
-                    public void cancelled() {
-                        latch.countDown();
-                        System.out.println(httpget.getRequestLine() + " cancelled");
-                    }
-
-                });
-            }
-            latch.await();
-
-            // Sleep 10 sec and let the connection evictor do its job
-            Thread.sleep(20000);
-
-            // Shut down the evictor thread
-            connEvictor.shutdown();
-            connEvictor.join();
-
-        } finally {
-            httpclient.close();
-        }
-    }
-
-    public static class IdleConnectionEvictor extends Thread {
-
-        private final NHttpClientConnectionManager connMgr;
-
-        private volatile boolean shutdown;
-
-        public IdleConnectionEvictor(NHttpClientConnectionManager connMgr) {
-            super();
-            this.connMgr = connMgr;
-        }
-
-        @Override
-        public void run() {
-            try {
-                while (!shutdown) {
-                    synchronized (this) {
-                        wait(5000);
-                        // Close expired connections
-                        connMgr.closeExpiredConnections();
-                        // Optionally, close connections
-                        // that have been idle longer than 5 sec
-                        connMgr.closeIdleConnections(5, TimeUnit.SECONDS);
-                    }
-                }
-            } catch (InterruptedException ex) {
-                // terminate
-            }
-        }
-
-        public void shutdown() {
-            shutdown = true;
-            synchronized (this) {
-                notifyAll();
-            }
-        }
-
-    }
-
-}
diff --git a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientExecuteProxy.java b/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientExecuteProxy.java
deleted file mode 100644
index b525e91..0000000
--- a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientExecuteProxy.java
+++ /dev/null
@@ -1,64 +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.http.examples.nio.client;
-
-import java.util.concurrent.Future;
-
-import org.apache.http.HttpHost;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-
-/**
- * This example demonstrates a basic asynchronous HTTP request / response exchange
- * via an HTTP proxy.
- */
-public class AsyncClientExecuteProxy {
-
-    public static void main(String[] args)throws Exception {
-        CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
-        try {
-            httpclient.start();
-            HttpHost proxy = new HttpHost("someproxy", 8080);
-            RequestConfig config = RequestConfig.custom()
-                    .setProxy(proxy)
-                    .build();
-            HttpGet request = new HttpGet("https://issues.apache.org/");
-            request.setConfig(config);
-            Future<HttpResponse> future = httpclient.execute(request, null);
-            HttpResponse response = future.get();
-            System.out.println("Response: " + response.getStatusLine());
-            System.out.println("Shutting down");
-        } finally {
-            httpclient.close();
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchange.java b/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchange.java
deleted file mode 100644
index ded5d79..0000000
--- a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchange.java
+++ /dev/null
@@ -1,57 +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.http.examples.nio.client;
-
-import java.util.concurrent.Future;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-
-/**
- * This example demonstrates a basic asynchronous HTTP request / response exchange.
- * Response content is buffered in memory for simplicity.
- */
-public class AsyncClientHttpExchange {
-
-    public static void main(final String[] args) throws Exception {
-        CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
-        try {
-            httpclient.start();
-            HttpGet request = new HttpGet("http://www.apache.org/");
-            Future<HttpResponse> future = httpclient.execute(request, null);
-            HttpResponse response = future.get();
-            System.out.println("Response: " + response.getStatusLine());
-            System.out.println("Shutting down");
-        } finally {
-            httpclient.close();
-        }
-        System.out.println("Done");
-    }
-
-}
diff --git a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchangeFutureCallback.java b/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchangeFutureCallback.java
deleted file mode 100644
index 2693608..0000000
--- a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchangeFutureCallback.java
+++ /dev/null
@@ -1,90 +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.http.examples.nio.client;
-
-import java.util.concurrent.CountDownLatch;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-
-/**
- * This example demonstrates a fully asynchronous execution of multiple HTTP exchanges
- * where the result of an individual operation is reported using a callback interface.
- */
-public class AsyncClientHttpExchangeFutureCallback {
-
-    public static void main(final String[] args) throws Exception {
-        RequestConfig requestConfig = RequestConfig.custom()
-            .setSocketTimeout(3000)
-            .setConnectTimeout(3000).build();
-        CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
-            .setDefaultRequestConfig(requestConfig)
-            .build();
-        try {
-            httpclient.start();
-            final HttpGet[] requests = new HttpGet[] {
-                    new HttpGet("http://www.apache.org/"),
-                    new HttpGet("https://www.verisign.com/"),
-                    new HttpGet("http://www.google.com/")
-            };
-            final CountDownLatch latch = new CountDownLatch(requests.length);
-            for (final HttpGet request: requests) {
-                httpclient.execute(request, new FutureCallback<HttpResponse>() {
-
-                    @Override
-                    public void completed(final HttpResponse response) {
-                        latch.countDown();
-                        System.out.println(request.getRequestLine() + "->" + response.getStatusLine());
-                    }
-
-                    @Override
-                    public void failed(final Exception ex) {
-                        latch.countDown();
-                        System.out.println(request.getRequestLine() + "->" + ex);
-                    }
-
-                    @Override
-                    public void cancelled() {
-                        latch.countDown();
-                        System.out.println(request.getRequestLine() + " cancelled");
-                    }
-
-                });
-            }
-            latch.await();
-            System.out.println("Shutting down");
-        } finally {
-            httpclient.close();
-        }
-        System.out.println("Done");
-    }
-
-}
diff --git a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchangeStreaming.java b/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchangeStreaming.java
deleted file mode 100644
index 6173f81..0000000
--- a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientHttpExchangeStreaming.java
+++ /dev/null
@@ -1,91 +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.http.examples.nio.client;
-
-import java.io.IOException;
-import java.nio.CharBuffer;
-import java.util.concurrent.Future;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.client.methods.AsyncCharConsumer;
-import org.apache.http.nio.client.methods.HttpAsyncMethods;
-import org.apache.http.protocol.HttpContext;
-
-/**
- * This example demonstrates an asynchronous HTTP request / response exchange with
- * a full content streaming.
- */
-public class AsyncClientHttpExchangeStreaming {
-
-    public static void main(final String[] args) throws Exception {
-        CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
-        try {
-            httpclient.start();
-            Future<Boolean> future = httpclient.execute(
-                    HttpAsyncMethods.createGet("http://localhost:8080/"),
-                    new MyResponseConsumer(), null);
-            Boolean result = future.get();
-            if (result != null && result.booleanValue()) {
-                System.out.println("Request successfully executed");
-            } else {
-                System.out.println("Request failed");
-            }
-            System.out.println("Shutting down");
-        } finally {
-            httpclient.close();
-        }
-        System.out.println("Done");
-    }
-
-    static class MyResponseConsumer extends AsyncCharConsumer<Boolean> {
-
-        @Override
-        protected void onResponseReceived(final HttpResponse response) {
-        }
-
-        @Override
-        protected void onCharReceived(final CharBuffer buf, final IOControl ioctrl) throws IOException {
-            while (buf.hasRemaining()) {
-                System.out.print(buf.get());
-            }
-        }
-
-        @Override
-        protected void releaseResources() {
-        }
-
-        @Override
-        protected Boolean buildResult(final HttpContext context) {
-            return Boolean.TRUE;
-        }
-
-    }
-
-}
diff --git a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientPipelined.java b/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientPipelined.java
deleted file mode 100644
index def5f45..0000000
--- a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientPipelined.java
+++ /dev/null
@@ -1,71 +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.http.examples.nio.client;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.concurrent.Future;
-
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.nio.client.CloseableHttpPipeliningClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-
-/**
- * This example demonstrates a pipelinfed execution of multiple HTTP request / response exchanges
- * Response content is buffered in memory for simplicity.
- */
-public class AsyncClientPipelined {
-
-    public static void main(final String[] args) throws Exception {
-        CloseableHttpPipeliningClient httpclient = HttpAsyncClients.createPipelining();
-        try {
-            httpclient.start();
-
-            HttpHost targetHost = new HttpHost("localhost", 8080);
-            HttpGet[] resquests = {
-                    new HttpGet("/docs/index.html"),
-                    new HttpGet("/docs/introduction.html"),
-                    new HttpGet("/docs/setup.html"),
-                    new HttpGet("/docs/config/index.html")
-            };
-
-            Future<List<HttpResponse>> future = httpclient.execute(targetHost,
-                    Arrays.<HttpRequest>asList(resquests), null);
-            List<HttpResponse> responses = future.get();
-            System.out.println(responses);
-
-            System.out.println("Shutting down");
-        } finally {
-            httpclient.close();
-        }
-        System.out.println("Done");
-    }
-
-}
diff --git a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientPipelinedStreaming.java b/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientPipelinedStreaming.java
deleted file mode 100644
index 087bf47..0000000
--- a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientPipelinedStreaming.java
+++ /dev/null
@@ -1,136 +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.http.examples.nio.client;
-
-import java.io.IOException;
-import java.nio.CharBuffer;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Future;
-
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.nio.client.CloseableHttpPipeliningClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.client.methods.AsyncCharConsumer;
-import org.apache.http.nio.protocol.BasicAsyncRequestProducer;
-import org.apache.http.protocol.HttpContext;
-
-/**
- * This example demonstrates a pipelinfed execution of multiple HTTP request / response exchanges
- * with a full content streaming.
- */
-public class AsyncClientPipelinedStreaming {
-
-    public static void main(final String[] args) throws Exception {
-        CloseableHttpPipeliningClient httpclient = HttpAsyncClients.createPipelining();
-        try {
-            httpclient.start();
-
-            HttpHost targetHost = new HttpHost("localhost", 8080);
-            HttpGet[] resquests = {
-                    new HttpGet("/docs/index.html"),
-                    new HttpGet("/docs/introduction.html"),
-                    new HttpGet("/docs/setup.html"),
-                    new HttpGet("/docs/config/index.html")
-            };
-
-            List<MyRequestProducer> requestProducers = new ArrayList<MyRequestProducer>();
-            List<MyResponseConsumer> responseConsumers = new ArrayList<MyResponseConsumer>();
-            for (HttpGet request: resquests) {
-                requestProducers.add(new MyRequestProducer(targetHost, request));
-                responseConsumers.add(new MyResponseConsumer(request));
-            }
-
-            Future<List<Boolean>> future = httpclient.execute(
-                    targetHost, requestProducers, responseConsumers, null);
-            future.get();
-            System.out.println("Shutting down");
-        } finally {
-            httpclient.close();
-        }
-        System.out.println("Done");
-    }
-
-    static class MyRequestProducer extends BasicAsyncRequestProducer {
-
-        private final HttpRequest request;
-
-        MyRequestProducer(final HttpHost target, final HttpRequest request) {
-            super(target, request);
-            this.request = request;
-        }
-
-        @Override
-        public void requestCompleted(final HttpContext context) {
-            super.requestCompleted(context);
-            System.out.println();
-            System.out.println("Request sent: " + this.request.getRequestLine());
-            System.out.println("=================================================");
-        }
-    }
-
-    static class MyResponseConsumer extends AsyncCharConsumer<Boolean> {
-
-        private final HttpRequest request;
-
-        MyResponseConsumer(final HttpRequest request) {
-            this.request = request;
-        }
-
-        @Override
-        protected void onResponseReceived(final HttpResponse response) {
-            System.out.println();
-            System.out.println("Response received: " + response.getStatusLine() + " -> " + this.request.getRequestLine());
-            System.out.println("=================================================");
-        }
-
-        @Override
-        protected void onCharReceived(final CharBuffer buf, final IOControl ioctrl) throws IOException {
-            while (buf.hasRemaining()) {
-                System.out.print(buf.get());
-            }
-        }
-
-        @Override
-        protected void releaseResources() {
-        }
-
-        @Override
-        protected Boolean buildResult(final HttpContext context) {
-            System.out.println();
-            System.out.println("=================================================");
-            System.out.println();
-            return Boolean.TRUE;
-        }
-
-    }
-
-}
diff --git a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java b/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java
deleted file mode 100644
index d0d3ae9..0000000
--- a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/AsyncClientProxyAuthentication.java
+++ /dev/null
@@ -1,74 +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.http.examples.nio.client;
-
-import org.apache.http.HttpHost;
-import org.apache.http.HttpResponse;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-
-import java.util.concurrent.Future;
-
-/**
- * This example demonstrates a basic asynchronous HTTP request / response exchange
- * over a secure connection tunneled through an authenticating proxy.
- */
-public class AsyncClientProxyAuthentication {
-
-    public static void main(String[] args)throws Exception {
-        CredentialsProvider credsProvider = new BasicCredentialsProvider();
-        credsProvider.setCredentials(
-                new AuthScope("someproxy", 8080),
-                new UsernamePasswordCredentials("username", "password"));
-        CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
-                .setDefaultCredentialsProvider(credsProvider)
-                .build();
-        try {
-            httpclient.start();
-            HttpHost proxy = new HttpHost("someproxy", 8080);
-            RequestConfig config = RequestConfig.custom()
-                    .setProxy(proxy)
-                    .build();
-            HttpGet httpget = new HttpGet("https://issues.apache.org/");
-            httpget.setConfig(config);
-            Future<HttpResponse> future = httpclient.execute(httpget, null);
-            HttpResponse response = future.get();
-            System.out.println("Response: " + response.getStatusLine());
-            System.out.println("Shutting down");
-        } finally {
-            httpclient.close();
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/QuickStart.java b/httpasyncclient/src/examples/org/apache/http/examples/nio/client/QuickStart.java
deleted file mode 100644
index 73a8771..0000000
--- a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/QuickStart.java
+++ /dev/null
@@ -1,143 +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.http.examples.nio.client;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.client.methods.AsyncCharConsumer;
-import org.apache.http.nio.client.methods.HttpAsyncMethods;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.protocol.HttpContext;
-
-import java.io.IOException;
-import java.nio.CharBuffer;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.Future;
-
-public class QuickStart {
-
-    public static void main(String[] args) throws Exception {
-        CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
-        try {
-            // Start the client
-            httpclient.start();
-
-            // Execute request
-            final HttpGet request1 = new HttpGet("http://www.apache.org/");
-            Future<HttpResponse> future = httpclient.execute(request1, null);
-            // and wait until response is received
-            HttpResponse response1 = future.get();
-            System.out.println(request1.getRequestLine() + "->" + response1.getStatusLine());
-
-            // One most likely would want to use a callback for operation result
-            final CountDownLatch latch1 = new CountDownLatch(1);
-            final HttpGet request2 = new HttpGet("http://www.apache.org/");
-            httpclient.execute(request2, new FutureCallback<HttpResponse>() {
-
-                @Override
-                public void completed(final HttpResponse response2) {
-                    latch1.countDown();
-                    System.out.println(request2.getRequestLine() + "->" + response2.getStatusLine());
-                }
-
-                @Override
-                public void failed(final Exception ex) {
-                    latch1.countDown();
-                    System.out.println(request2.getRequestLine() + "->" + ex);
-                }
-
-                @Override
-                public void cancelled() {
-                    latch1.countDown();
-                    System.out.println(request2.getRequestLine() + " cancelled");
-                }
-
-            });
-            latch1.await();
-
-            // In real world one most likely would want also want to stream
-            // request and response body content
-            final CountDownLatch latch2 = new CountDownLatch(1);
-            final HttpGet request3 = new HttpGet("http://www.apache.org/");
-            HttpAsyncRequestProducer producer3 = HttpAsyncMethods.create(request3);
-            AsyncCharConsumer<HttpResponse> consumer3 = new AsyncCharConsumer<HttpResponse>() {
-
-                HttpResponse response;
-
-                @Override
-                protected void onResponseReceived(final HttpResponse response) {
-                    this.response = response;
-                }
-
-                @Override
-                protected void onCharReceived(final CharBuffer buf, final IOControl ioctrl) throws IOException {
-                    // Do something useful
-                }
-
-                @Override
-                protected void releaseResources() {
-                }
-
-                @Override
-                protected HttpResponse buildResult(final HttpContext context) {
-                    return this.response;
-                }
-
-            };
-            httpclient.execute(producer3, consumer3, new FutureCallback<HttpResponse>() {
-
-                @Override
-                public void completed(final HttpResponse response3) {
-                    latch2.countDown();
-                    System.out.println(request2.getRequestLine() + "->" + response3.getStatusLine());
-                }
-
-                @Override
-                public void failed(final Exception ex) {
-                    latch2.countDown();
-                    System.out.println(request2.getRequestLine() + "->" + ex);
-                }
-
-                @Override
-                public void cancelled() {
-                    latch2.countDown();
-                    System.out.println(request2.getRequestLine() + " cancelled");
-                }
-
-            });
-            latch2.await();
-
-        } finally {
-            httpclient.close();
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/ZeroCopyHttpExchange.java b/httpasyncclient/src/examples/org/apache/http/examples/nio/client/ZeroCopyHttpExchange.java
deleted file mode 100644
index 045805e..0000000
--- a/httpasyncclient/src/examples/org/apache/http/examples/nio/client/ZeroCopyHttpExchange.java
+++ /dev/null
@@ -1,79 +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.http.examples.nio.client;
-
-import java.io.File;
-import java.util.concurrent.Future;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.entity.ContentType;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-import org.apache.http.nio.client.methods.ZeroCopyConsumer;
-import org.apache.http.nio.client.methods.ZeroCopyPost;
-
-/**
- * This example demonstrates how HttpAsyncClient can be used to upload or download files
- * without creating an intermediate content buffer in memory (zero copy file transfer).
- */
-public class ZeroCopyHttpExchange {
-
-    public static void main(final String[] args) throws Exception {
-        CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
-        try {
-            httpclient.start();
-            File upload = new File(args[0]);
-            File download = new File(args[1]);
-            ZeroCopyPost httpost = new ZeroCopyPost("http://localhost:8080/", upload,
-                    ContentType.create("text/plain"));
-            ZeroCopyConsumer<File> consumer = new ZeroCopyConsumer<File>(download) {
-
-                @Override
-                protected File process(
-                        final HttpResponse response,
-                        final File file,
-                        final ContentType contentType) throws Exception {
-                    if (response.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
-                        throw new ClientProtocolException("Upload failed: " + response.getStatusLine());
-                    }
-                    return file;
-                }
-
-            };
-            Future<File> future = httpclient.execute(httpost, consumer, null);
-            File result = future.get();
-            System.out.println("Response file length: " + result.length());
-            System.out.println("Shutting down");
-        } finally {
-            httpclient.close();
-        }
-        System.out.println("Done");
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/AbstractHttpAsyncClient.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/AbstractHttpAsyncClient.java
deleted file mode 100644
index 78aee8b..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/AbstractHttpAsyncClient.java
+++ /dev/null
@@ -1,611 +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.http.impl.nio.client;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.Queue;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.Future;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.ConnectionReuseStrategy;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpRequestInterceptor;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpResponseInterceptor;
-import org.apache.http.auth.AuthSchemeRegistry;
-import org.apache.http.client.AuthenticationStrategy;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.CookieStore;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.RedirectStrategy;
-import org.apache.http.client.UserTokenHandler;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.client.params.AuthPolicy;
-import org.apache.http.client.params.CookiePolicy;
-import org.apache.http.client.protocol.ClientContext;
-import org.apache.http.client.utils.URIUtils;
-import org.apache.http.concurrent.BasicFuture;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.conn.ConnectionKeepAliveStrategy;
-import org.apache.http.conn.routing.HttpRoutePlanner;
-import org.apache.http.cookie.CookieSpecRegistry;
-import org.apache.http.impl.DefaultConnectionReuseStrategy;
-import org.apache.http.impl.auth.BasicSchemeFactory;
-import org.apache.http.impl.auth.DigestSchemeFactory;
-import org.apache.http.impl.auth.KerberosSchemeFactory;
-import org.apache.http.impl.auth.NTLMSchemeFactory;
-import org.apache.http.impl.auth.SPNegoSchemeFactory;
-import org.apache.http.impl.client.BasicCookieStore;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
-import org.apache.http.impl.client.DefaultRedirectStrategy;
-import org.apache.http.impl.client.DefaultUserTokenHandler;
-import org.apache.http.impl.client.ProxyAuthenticationStrategy;
-import org.apache.http.impl.client.TargetAuthenticationStrategy;
-import org.apache.http.impl.cookie.BestMatchSpecFactory;
-import org.apache.http.impl.cookie.BrowserCompatSpecFactory;
-import org.apache.http.impl.cookie.IgnoreSpecFactory;
-import org.apache.http.impl.cookie.NetscapeDraftSpecFactory;
-import org.apache.http.impl.cookie.RFC2109SpecFactory;
-import org.apache.http.impl.cookie.RFC2965SpecFactory;
-import org.apache.http.impl.nio.DefaultHttpClientIODispatch;
-import org.apache.http.impl.nio.conn.DefaultHttpAsyncRoutePlanner;
-import org.apache.http.impl.nio.conn.PoolingClientAsyncConnectionManager;
-import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
-import org.apache.http.impl.nio.reactor.IOReactorConfig;
-import org.apache.http.nio.client.HttpAsyncClient;
-import org.apache.http.nio.client.methods.HttpAsyncMethods;
-import org.apache.http.nio.conn.ClientAsyncConnectionManager;
-import org.apache.http.nio.protocol.HttpAsyncRequestExecutionHandler;
-import org.apache.http.nio.protocol.HttpAsyncRequestExecutor;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.nio.reactor.IOEventDispatch;
-import org.apache.http.nio.reactor.IOReactorException;
-import org.apache.http.nio.reactor.IOReactorStatus;
-import org.apache.http.params.HttpParams;
-import org.apache.http.protocol.BasicHttpContext;
-import org.apache.http.protocol.BasicHttpProcessor;
-import org.apache.http.protocol.DefaultedHttpContext;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.protocol.HttpProcessor;
-import org.apache.http.protocol.ImmutableHttpProcessor;
-
-@Deprecated
-public abstract class AbstractHttpAsyncClient implements HttpAsyncClient {
-
-    private final Log log = LogFactory.getLog(getClass());
-    private final ClientAsyncConnectionManager connmgr;
-    private final Queue<HttpAsyncRequestExecutionHandler<?>> queue;
-
-    private Thread reactorThread;
-    private BasicHttpProcessor mutableProcessor;
-    private ImmutableHttpProcessor protocolProcessor;
-    private ConnectionReuseStrategy reuseStrategy;
-    private ConnectionKeepAliveStrategy keepAliveStrategy;
-    private RedirectStrategy redirectStrategy;
-    private CookieSpecRegistry supportedCookieSpecs;
-    private CookieStore cookieStore;
-    private AuthSchemeRegistry supportedAuthSchemes;
-    private AuthenticationStrategy targetAuthStrategy;
-    private AuthenticationStrategy proxyAuthStrategy;
-    private CredentialsProvider credsProvider;
-    private HttpRoutePlanner routePlanner;
-    private UserTokenHandler userTokenHandler;
-    private HttpParams params;
-
-    private volatile boolean terminated;
-
-    protected AbstractHttpAsyncClient(final ClientAsyncConnectionManager connmgr) {
-        super();
-        this.connmgr = connmgr;
-        this.queue = new ConcurrentLinkedQueue<HttpAsyncRequestExecutionHandler<?>>();
-    }
-
-    protected AbstractHttpAsyncClient(final IOReactorConfig config) throws IOReactorException {
-        super();
-        final DefaultConnectingIOReactor defaultioreactor = new DefaultConnectingIOReactor(config);
-        defaultioreactor.setExceptionHandler(new InternalIOReactorExceptionHandler(this.log));
-        this.connmgr = new PoolingClientAsyncConnectionManager(defaultioreactor);
-        this.queue = new ConcurrentLinkedQueue<HttpAsyncRequestExecutionHandler<?>>();
-    }
-
-    protected abstract HttpParams createHttpParams();
-
-    protected abstract BasicHttpProcessor createHttpProcessor();
-
-    protected HttpContext createHttpContext() {
-        final HttpContext context = new BasicHttpContext();
-        context.setAttribute(
-                ClientContext.SCHEME_REGISTRY,
-                getConnectionManager().getSchemeRegistry());
-        context.setAttribute(
-                ClientContext.AUTHSCHEME_REGISTRY,
-                getAuthSchemes());
-        context.setAttribute(
-                ClientContext.COOKIESPEC_REGISTRY,
-                getCookieSpecs());
-        context.setAttribute(
-                ClientContext.COOKIE_STORE,
-                getCookieStore());
-        context.setAttribute(
-                ClientContext.CREDS_PROVIDER,
-                getCredentialsProvider());
-        return context;
-    }
-
-    protected ConnectionReuseStrategy createConnectionReuseStrategy() {
-        return new DefaultConnectionReuseStrategy();
-    }
-
-    protected ConnectionKeepAliveStrategy createConnectionKeepAliveStrategy() {
-        return new DefaultConnectionKeepAliveStrategy();
-    }
-
-    protected AuthSchemeRegistry createAuthSchemeRegistry() {
-        final AuthSchemeRegistry registry = new AuthSchemeRegistry();
-        registry.register(
-                AuthPolicy.BASIC,
-                new BasicSchemeFactory());
-        registry.register(
-                AuthPolicy.DIGEST,
-                new DigestSchemeFactory());
-        registry.register(
-                AuthPolicy.NTLM,
-                new NTLMSchemeFactory());
-        registry.register(
-                AuthPolicy.SPNEGO,
-                new SPNegoSchemeFactory());
-        registry.register(
-                AuthPolicy.KERBEROS,
-                new KerberosSchemeFactory());
-        return registry;
-    }
-
-    protected CookieSpecRegistry createCookieSpecRegistry() {
-        final CookieSpecRegistry registry = new CookieSpecRegistry();
-        registry.register(
-                CookiePolicy.BEST_MATCH,
-                new BestMatchSpecFactory());
-        registry.register(
-                CookiePolicy.BROWSER_COMPATIBILITY,
-                new BrowserCompatSpecFactory());
-        registry.register(
-                CookiePolicy.NETSCAPE,
-                new NetscapeDraftSpecFactory());
-        registry.register(
-                CookiePolicy.RFC_2109,
-                new RFC2109SpecFactory());
-        registry.register(
-                CookiePolicy.RFC_2965,
-                new RFC2965SpecFactory());
-        registry.register(
-                CookiePolicy.IGNORE_COOKIES,
-                new IgnoreSpecFactory());
-        return registry;
-    }
-
-    protected AuthenticationStrategy createTargetAuthenticationStrategy() {
-        return new TargetAuthenticationStrategy();
-    }
-
-    protected AuthenticationStrategy createProxyAuthenticationStrategy() {
-        return new ProxyAuthenticationStrategy();
-    }
-
-    protected CookieStore createCookieStore() {
-        return new BasicCookieStore();
-    }
-
-    protected CredentialsProvider createCredentialsProvider() {
-        return new BasicCredentialsProvider();
-    }
-
-    protected HttpRoutePlanner createHttpRoutePlanner() {
-        return new DefaultHttpAsyncRoutePlanner(getConnectionManager().getSchemeRegistry());
-    }
-
-    protected UserTokenHandler createUserTokenHandler() {
-        return new DefaultUserTokenHandler();
-    }
-
-    public synchronized final HttpParams getParams() {
-        if (this.params == null) {
-            this.params = createHttpParams();
-        }
-        return this.params;
-    }
-
-    public synchronized void setParams(final HttpParams params) {
-        this.params = params;
-    }
-
-    public synchronized ClientAsyncConnectionManager getConnectionManager() {
-        return this.connmgr;
-    }
-
-    public synchronized final ConnectionReuseStrategy getConnectionReuseStrategy() {
-        if (this.reuseStrategy == null) {
-            this.reuseStrategy = createConnectionReuseStrategy();
-        }
-        return this.reuseStrategy;
-    }
-
-    public synchronized void setReuseStrategy(final ConnectionReuseStrategy reuseStrategy) {
-        this.reuseStrategy = reuseStrategy;
-    }
-
-    public synchronized final ConnectionKeepAliveStrategy getConnectionKeepAliveStrategy() {
-        if (this.keepAliveStrategy == null) {
-            this.keepAliveStrategy = createConnectionKeepAliveStrategy();
-        }
-        return this.keepAliveStrategy;
-    }
-
-    public synchronized void setKeepAliveStrategy(final ConnectionKeepAliveStrategy keepAliveStrategy) {
-        this.keepAliveStrategy = keepAliveStrategy;
-    }
-
-    public synchronized final RedirectStrategy getRedirectStrategy() {
-        if (this.redirectStrategy == null) {
-            this.redirectStrategy = new DefaultRedirectStrategy();
-        }
-        return this.redirectStrategy;
-    }
-
-    public synchronized void setRedirectStrategy(final RedirectStrategy redirectStrategy) {
-        this.redirectStrategy = redirectStrategy;
-    }
-
-    public synchronized final AuthSchemeRegistry getAuthSchemes() {
-        if (this.supportedAuthSchemes == null) {
-            this.supportedAuthSchemes = createAuthSchemeRegistry();
-        }
-        return this.supportedAuthSchemes;
-    }
-
-    public synchronized void setAuthSchemes(final AuthSchemeRegistry authSchemeRegistry) {
-        this.supportedAuthSchemes = authSchemeRegistry;
-    }
-
-    public synchronized final CookieSpecRegistry getCookieSpecs() {
-        if (this.supportedCookieSpecs == null) {
-            this.supportedCookieSpecs = createCookieSpecRegistry();
-        }
-        return this.supportedCookieSpecs;
-    }
-
-    public synchronized void setCookieSpecs(final CookieSpecRegistry cookieSpecRegistry) {
-        this.supportedCookieSpecs = cookieSpecRegistry;
-    }
-
-    public synchronized final AuthenticationStrategy getTargetAuthenticationStrategy() {
-        if (this.targetAuthStrategy == null) {
-            this.targetAuthStrategy = createTargetAuthenticationStrategy();
-        }
-        return this.targetAuthStrategy;
-    }
-
-    public synchronized void setTargetAuthenticationStrategy(
-            final AuthenticationStrategy targetAuthStrategy) {
-        this.targetAuthStrategy = targetAuthStrategy;
-    }
-
-    public synchronized final AuthenticationStrategy getProxyAuthenticationStrategy() {
-        if (this.proxyAuthStrategy == null) {
-            this.proxyAuthStrategy = createProxyAuthenticationStrategy();
-        }
-        return this.proxyAuthStrategy;
-    }
-
-    public synchronized void setProxyAuthenticationStrategy(
-            final AuthenticationStrategy proxyAuthStrategy) {
-        this.proxyAuthStrategy = proxyAuthStrategy;
-    }
-
-    public synchronized final CookieStore getCookieStore() {
-        if (this.cookieStore == null) {
-            this.cookieStore = createCookieStore();
-        }
-        return this.cookieStore;
-    }
-
-    public synchronized void setCookieStore(final CookieStore cookieStore) {
-        this.cookieStore = cookieStore;
-    }
-
-    public synchronized final CredentialsProvider getCredentialsProvider() {
-        if (this.credsProvider == null) {
-            this.credsProvider = createCredentialsProvider();
-        }
-        return this.credsProvider;
-    }
-
-    public synchronized void setCredentialsProvider(final CredentialsProvider credsProvider) {
-        this.credsProvider = credsProvider;
-    }
-
-    public synchronized final HttpRoutePlanner getRoutePlanner() {
-        if (this.routePlanner == null) {
-            this.routePlanner = createHttpRoutePlanner();
-        }
-        return this.routePlanner;
-    }
-
-    public synchronized void setRoutePlanner(final HttpRoutePlanner routePlanner) {
-        this.routePlanner = routePlanner;
-    }
-
-    public synchronized final UserTokenHandler getUserTokenHandler() {
-        if (this.userTokenHandler == null) {
-            this.userTokenHandler = createUserTokenHandler();
-        }
-        return this.userTokenHandler;
-    }
-
-
-    public synchronized void setUserTokenHandler(final UserTokenHandler userTokenHandler) {
-        this.userTokenHandler = userTokenHandler;
-    }
-
-    protected synchronized final BasicHttpProcessor getHttpProcessor() {
-        if (this.mutableProcessor == null) {
-            this.mutableProcessor = createHttpProcessor();
-        }
-        return this.mutableProcessor;
-    }
-
-    private synchronized final HttpProcessor getProtocolProcessor() {
-        if (this.protocolProcessor == null) {
-            // Get mutable HTTP processor
-            final BasicHttpProcessor proc = getHttpProcessor();
-            // and upgrade an immutable copy of it
-            final int reqc = proc.getRequestInterceptorCount();
-            final HttpRequestInterceptor[] reqinterceptors = new HttpRequestInterceptor[reqc];
-            for (int i = 0; i < reqc; i++) {
-                reqinterceptors[i] = proc.getRequestInterceptor(i);
-            }
-            final int resc = proc.getResponseInterceptorCount();
-            final HttpResponseInterceptor[] resinterceptors = new HttpResponseInterceptor[resc];
-            for (int i = 0; i < resc; i++) {
-                resinterceptors[i] = proc.getResponseInterceptor(i);
-            }
-            this.protocolProcessor = new ImmutableHttpProcessor(reqinterceptors, resinterceptors);
-        }
-        return this.protocolProcessor;
-    }
-
-    public synchronized int getResponseInterceptorCount() {
-        return getHttpProcessor().getResponseInterceptorCount();
-    }
-
-    public synchronized HttpResponseInterceptor getResponseInterceptor(final int index) {
-        return getHttpProcessor().getResponseInterceptor(index);
-    }
-
-    public synchronized HttpRequestInterceptor getRequestInterceptor(final int index) {
-        return getHttpProcessor().getRequestInterceptor(index);
-    }
-
-    public synchronized int getRequestInterceptorCount() {
-        return getHttpProcessor().getRequestInterceptorCount();
-    }
-
-    public synchronized void addResponseInterceptor(final HttpResponseInterceptor itcp) {
-        getHttpProcessor().addInterceptor(itcp);
-        this.protocolProcessor = null;
-    }
-
-    public synchronized void addResponseInterceptor(final HttpResponseInterceptor itcp, final int index) {
-        getHttpProcessor().addInterceptor(itcp, index);
-        this.protocolProcessor = null;
-    }
-
-    public synchronized void clearResponseInterceptors() {
-        getHttpProcessor().clearResponseInterceptors();
-        this.protocolProcessor = null;
-    }
-
-    public synchronized void removeResponseInterceptorByClass(final Class<? extends HttpResponseInterceptor> clazz) {
-        getHttpProcessor().removeResponseInterceptorByClass(clazz);
-        this.protocolProcessor = null;
-    }
-
-    public synchronized void addRequestInterceptor(final HttpRequestInterceptor itcp) {
-        getHttpProcessor().addInterceptor(itcp);
-        this.protocolProcessor = null;
-    }
-
-    public synchronized void addRequestInterceptor(final HttpRequestInterceptor itcp, final int index) {
-        getHttpProcessor().addInterceptor(itcp, index);
-        this.protocolProcessor = null;
-    }
-
-    public synchronized void clearRequestInterceptors() {
-        getHttpProcessor().clearRequestInterceptors();
-        this.protocolProcessor = null;
-    }
-
-    public synchronized void removeRequestInterceptorByClass(final Class<? extends HttpRequestInterceptor> clazz) {
-        getHttpProcessor().removeRequestInterceptorByClass(clazz);
-        this.protocolProcessor = null;
-    }
-
-    private void doExecute() {
-        final InternalRequestExecutor handler = new InternalRequestExecutor(this.log, new HttpAsyncRequestExecutor());
-        try {
-            final IOEventDispatch ioEventDispatch = new DefaultHttpClientIODispatch(handler, getParams());
-            this.connmgr.execute(ioEventDispatch);
-        } catch (final Exception ex) {
-            this.log.error("I/O reactor terminated abnormally", ex);
-        } finally {
-            this.terminated = true;
-            while (!this.queue.isEmpty()) {
-                final HttpAsyncRequestExecutionHandler<?> exchangeHandler = this.queue.remove();
-                exchangeHandler.cancel();
-            }
-        }
-    }
-
-    public IOReactorStatus getStatus() {
-        return this.connmgr.getStatus();
-    }
-
-    public synchronized void start() {
-        this.reactorThread = new Thread() {
-
-            @Override
-            public void run() {
-                doExecute();
-            }
-
-        };
-        this.reactorThread.start();
-    }
-
-    public void shutdown() throws InterruptedException {
-        try {
-            this.connmgr.shutdown(5000);
-        } catch (final IOException ex) {
-            this.log.error("I/O error shutting down", ex);
-        }
-        if (this.reactorThread != null) {
-            this.reactorThread.join();
-        }
-    }
-
-    @Override
-    public <T> Future<T> execute(
-            final HttpAsyncRequestProducer requestProducer,
-            final HttpAsyncResponseConsumer<T> responseConsumer,
-            final HttpContext context,
-            final FutureCallback<T> callback) {
-        if (this.terminated) {
-            throw new IllegalStateException("Client has been shut down");
-        }
-        final BasicFuture<T> future = new BasicFuture<T>(callback);
-        final ResultCallback<T> resultCallback = new DefaultResultCallback<T>(future, this.queue);
-        DefaultAsyncRequestDirector<T> httpexchange;
-        synchronized (this) {
-            final HttpContext defaultContext = createHttpContext();
-            HttpContext execContext;
-            if (context == null) {
-                execContext = defaultContext;
-            } else {
-                execContext = new DefaultedHttpContext(context, defaultContext);
-            }
-            httpexchange = new DefaultAsyncRequestDirector<T>(
-                    this.log,
-                    requestProducer,
-                    responseConsumer,
-                    execContext,
-                    resultCallback,
-                    this.connmgr,
-                    getProtocolProcessor(),
-                    getRoutePlanner(),
-                    getConnectionReuseStrategy(),
-                    getConnectionKeepAliveStrategy(),
-                    getRedirectStrategy(),
-                    getTargetAuthenticationStrategy(),
-                    getProxyAuthenticationStrategy(),
-                    getUserTokenHandler(),
-                    getParams());
-        }
-        this.queue.add(httpexchange);
-        httpexchange.start();
-        return future;
-    }
-
-    @Override
-    public <T> Future<T> execute(
-            final HttpAsyncRequestProducer requestProducer,
-            final HttpAsyncResponseConsumer<T> responseConsumer,
-            final FutureCallback<T> callback) {
-        return execute(requestProducer, responseConsumer, new BasicHttpContext(), callback);
-    }
-
-    @Override
-    public Future<HttpResponse> execute(
-            final HttpHost target, final HttpRequest request, final HttpContext context,
-            final FutureCallback<HttpResponse> callback) {
-        return execute(
-                HttpAsyncMethods.create(target, request),
-                HttpAsyncMethods.createConsumer(),
-                context, callback);
-    }
-
-    @Override
-    public Future<HttpResponse> execute(
-            final HttpHost target, final HttpRequest request,
-            final FutureCallback<HttpResponse> callback) {
-        return execute(target, request, new BasicHttpContext(), callback);
-    }
-
-    @Override
-    public Future<HttpResponse> execute(
-            final HttpUriRequest request,
-            final FutureCallback<HttpResponse> callback) {
-        return execute(request, new BasicHttpContext(), callback);
-    }
-
-    @Override
-    public Future<HttpResponse> execute(
-            final HttpUriRequest request,
-            final HttpContext context,
-            final FutureCallback<HttpResponse> callback) {
-        HttpHost target;
-        try {
-            target = determineTarget(request);
-        } catch (final ClientProtocolException ex) {
-            final BasicFuture<HttpResponse> future = new BasicFuture<HttpResponse>(callback);
-            future.failed(ex);
-            return future;
-        }
-        return execute(target, request, context, callback);
-    }
-
-    private HttpHost determineTarget(final HttpUriRequest request) throws ClientProtocolException {
-        // A null target may be acceptable if there is a default target.
-        // Otherwise, the null target is detected in the director.
-        HttpHost target = null;
-
-        final URI requestURI = request.getURI();
-        if (requestURI.isAbsolute()) {
-            target = URIUtils.extractHost(requestURI);
-            if (target == null) {
-                throw new ClientProtocolException(
-                        "URI does not specify a valid host name: " + requestURI);
-            }
-        }
-        return target;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java
deleted file mode 100644
index c153bd4..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java
+++ /dev/null
@@ -1,893 +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.http.impl.nio.client;
-
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.nio.ByteBuffer;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicLong;
-
-import org.apache.commons.logging.Log;
-import org.apache.http.ConnectionClosedException;
-import org.apache.http.ConnectionReuseStrategy;
-import org.apache.http.HttpEntityEnclosingRequest;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.ProtocolException;
-import org.apache.http.ProtocolVersion;
-import org.apache.http.auth.AuthProtocolState;
-import org.apache.http.auth.AuthScheme;
-import org.apache.http.auth.AuthState;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.AuthenticationStrategy;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.NonRepeatableRequestException;
-import org.apache.http.client.RedirectException;
-import org.apache.http.client.RedirectStrategy;
-import org.apache.http.client.UserTokenHandler;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.AbortableHttpRequest;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.client.params.ClientPNames;
-import org.apache.http.client.params.HttpClientParams;
-import org.apache.http.client.protocol.ClientContext;
-import org.apache.http.client.utils.URIUtils;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.conn.ConnectionKeepAliveStrategy;
-import org.apache.http.conn.ConnectionReleaseTrigger;
-import org.apache.http.conn.routing.BasicRouteDirector;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.conn.routing.HttpRouteDirector;
-import org.apache.http.conn.routing.HttpRoutePlanner;
-import org.apache.http.impl.auth.BasicScheme;
-import org.apache.http.impl.client.ClientParamsStack;
-import org.apache.http.impl.client.EntityEnclosingRequestWrapper;
-import org.apache.http.impl.client.HttpAuthenticator;
-import org.apache.http.impl.client.RequestWrapper;
-import org.apache.http.impl.client.RoutedRequest;
-import org.apache.http.message.BasicHttpRequest;
-import org.apache.http.nio.ContentDecoder;
-import org.apache.http.nio.ContentEncoder;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.conn.ClientAsyncConnectionManager;
-import org.apache.http.nio.conn.ManagedClientAsyncConnection;
-import org.apache.http.nio.conn.scheme.AsyncScheme;
-import org.apache.http.nio.conn.scheme.AsyncSchemeRegistry;
-import org.apache.http.nio.protocol.HttpAsyncRequestExecutionHandler;
-import org.apache.http.nio.protocol.HttpAsyncRequestExecutor;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.params.HttpConnectionParams;
-import org.apache.http.params.HttpParams;
-import org.apache.http.params.HttpProtocolParams;
-import org.apache.http.protocol.ExecutionContext;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.protocol.HttpProcessor;
-
-@Deprecated
-class DefaultAsyncRequestDirector<T> implements HttpAsyncRequestExecutionHandler<T> {
-
-    private static final AtomicLong COUNTER = new AtomicLong(1);
-
-    private final Log log;
-
-    private final HttpAsyncRequestProducer requestProducer;
-    private final HttpAsyncResponseConsumer<T> responseConsumer;
-    private final HttpContext localContext;
-    private final ResultCallback<T> resultCallback;
-    private final ClientAsyncConnectionManager connmgr;
-    private final HttpProcessor httppocessor;
-    private final HttpRoutePlanner routePlanner;
-    private final HttpRouteDirector routeDirector;
-    private final ConnectionReuseStrategy reuseStrategy;
-    private final ConnectionKeepAliveStrategy keepaliveStrategy;
-    private final RedirectStrategy redirectStrategy;
-    private final AuthenticationStrategy targetAuthStrategy;
-    private final AuthenticationStrategy proxyAuthStrategy;
-    private final UserTokenHandler userTokenHandler;
-    private final AuthState targetAuthState;
-    private final AuthState proxyAuthState;
-    private final HttpAuthenticator authenticator;
-    private final HttpParams clientParams;
-    private final long id;
-
-    private volatile boolean closed;
-    private volatile InternalFutureCallback connRequestCallback;
-    private volatile ManagedClientAsyncConnection managedConn;
-
-    private RoutedRequest mainRequest;
-    private RoutedRequest followup;
-    private HttpResponse finalResponse;
-
-    private ClientParamsStack params;
-    private RequestWrapper currentRequest;
-    private HttpResponse currentResponse;
-    private boolean routeEstablished;
-    private int redirectCount;
-    private ByteBuffer tmpbuf;
-    private boolean requestContentProduced;
-    private boolean requestSent;
-    private int execCount;
-
-    public DefaultAsyncRequestDirector(
-            final Log log,
-            final HttpAsyncRequestProducer requestProducer,
-            final HttpAsyncResponseConsumer<T> responseConsumer,
-            final HttpContext localContext,
-            final ResultCallback<T> callback,
-            final ClientAsyncConnectionManager connmgr,
-            final HttpProcessor httppocessor,
-            final HttpRoutePlanner routePlanner,
-            final ConnectionReuseStrategy reuseStrategy,
-            final ConnectionKeepAliveStrategy keepaliveStrategy,
-            final RedirectStrategy redirectStrategy,
-            final AuthenticationStrategy targetAuthStrategy,
-            final AuthenticationStrategy proxyAuthStrategy,
-            final UserTokenHandler userTokenHandler,
-            final HttpParams clientParams) {
-        super();
-        this.log = log;
-        this.requestProducer = requestProducer;
-        this.responseConsumer = responseConsumer;
-        this.localContext = localContext;
-        this.resultCallback = callback;
-        this.connmgr = connmgr;
-        this.httppocessor = httppocessor;
-        this.routePlanner = routePlanner;
-        this.reuseStrategy = reuseStrategy;
-        this.keepaliveStrategy = keepaliveStrategy;
-        this.redirectStrategy = redirectStrategy;
-        this.routeDirector = new BasicRouteDirector();
-        this.targetAuthStrategy = targetAuthStrategy;
-        this.proxyAuthStrategy = proxyAuthStrategy;
-        this.userTokenHandler = userTokenHandler;
-        this.targetAuthState = new AuthState();
-        this.proxyAuthState = new AuthState();
-        this.authenticator     = new HttpAuthenticator(log);
-        this.clientParams = clientParams;
-        this.id = COUNTER.getAndIncrement();
-    }
-
-    @Override
-    public void close() {
-        if (this.closed) {
-            return;
-        }
-        this.closed = true;
-        final ManagedClientAsyncConnection localConn = this.managedConn;
-        if (localConn != null) {
-            if (this.log.isDebugEnabled()) {
-                this.log.debug("[exchange: " + this.id + "] aborting connection " + localConn);
-            }
-            try {
-                localConn.abortConnection();
-            } catch (final IOException ioex) {
-                this.log.debug("I/O error releasing connection", ioex);
-            }
-        }
-        try {
-            this.requestProducer.close();
-        } catch (final IOException ex) {
-            this.log.debug("I/O error closing request producer", ex);
-        }
-        try {
-            this.responseConsumer.close();
-        } catch (final IOException ex) {
-            this.log.debug("I/O error closing response consumer", ex);
-        }
-    }
-
-    public synchronized void start() {
-        try {
-            if (this.log.isDebugEnabled()) {
-                this.log.debug("[exchange: " + this.id + "] start execution");
-            }
-            this.localContext.setAttribute(ClientContext.TARGET_AUTH_STATE, this.targetAuthState);
-            this.localContext.setAttribute(ClientContext.PROXY_AUTH_STATE, this.proxyAuthState);
-
-            final HttpHost target = this.requestProducer.getTarget();
-            final HttpRequest request = this.requestProducer.generateRequest();
-            if (request instanceof AbortableHttpRequest) {
-                ((AbortableHttpRequest) request).setReleaseTrigger(new ConnectionReleaseTrigger() {
-
-                    @Override
-                    public void releaseConnection() throws IOException {
-                    }
-
-                    @Override
-                    public void abortConnection() throws IOException {
-                        cancel();
-                    }
-
-                });
-            }
-            this.params = new ClientParamsStack(null, this.clientParams, request.getParams(), null);
-            final RequestWrapper wrapper = wrapRequest(request);
-            wrapper.setParams(this.params);
-            final HttpRoute route = determineRoute(target, wrapper, this.localContext);
-            this.mainRequest = new RoutedRequest(wrapper, route);
-            final RequestConfig config = ParamConfig.getRequestConfig(params);
-            this.localContext.setAttribute(ClientContext.REQUEST_CONFIG, config);
-            this.requestContentProduced = false;
-            requestConnection();
-        } catch (final Exception ex) {
-            failed(ex);
-        }
-    }
-
-    @Override
-    public HttpHost getTarget() {
-        return this.requestProducer.getTarget();
-    }
-
-    @Override
-    public synchronized HttpRequest generateRequest() throws IOException, HttpException {
-        final HttpRoute route = this.mainRequest.getRoute();
-        if (!this.routeEstablished) {
-            int step;
-            do {
-                final HttpRoute fact = this.managedConn.getRoute();
-                step = this.routeDirector.nextStep(route, fact);
-                switch (step) {
-                case HttpRouteDirector.CONNECT_TARGET:
-                case HttpRouteDirector.CONNECT_PROXY:
-                    break;
-                case HttpRouteDirector.TUNNEL_TARGET:
-                    if (this.log.isDebugEnabled()) {
-                        this.log.debug("[exchange: " + this.id + "] Tunnel required");
-                    }
-                    final HttpRequest connect = createConnectRequest(route);
-                    this.currentRequest = wrapRequest(connect);
-                    this.currentRequest.setParams(this.params);
-                    break;
-                case HttpRouteDirector.TUNNEL_PROXY:
-                    throw new HttpException("Proxy chains are not supported");
-                case HttpRouteDirector.LAYER_PROTOCOL:
-                    managedConn.layerProtocol(this.localContext, this.params);
-                    break;
-                case HttpRouteDirector.UNREACHABLE:
-                    throw new HttpException("Unable to establish route: " +
-                            "planned = " + route + "; current = " + fact);
-                case HttpRouteDirector.COMPLETE:
-                    this.routeEstablished = true;
-                    break;
-                default:
-                    throw new IllegalStateException("Unknown step indicator "
-                            + step + " from RouteDirector.");
-                }
-            } while (step > HttpRouteDirector.COMPLETE && this.currentRequest == null);
-        }
-
-        HttpHost target = (HttpHost) this.params.getParameter(ClientPNames.VIRTUAL_HOST);
-        if (target == null) {
-            target = route.getTargetHost();
-        }
-        final HttpHost proxy = route.getProxyHost();
-        this.localContext.setAttribute(ExecutionContext.HTTP_TARGET_HOST, target);
-        this.localContext.setAttribute(ExecutionContext.HTTP_PROXY_HOST, proxy);
-        this.localContext.setAttribute(ExecutionContext.HTTP_CONNECTION, this.managedConn);
-        this.localContext.setAttribute(ClientContext.ROUTE, route);
-
-        if (this.currentRequest == null) {
-            this.currentRequest = this.mainRequest.getRequest();
-
-            final String userinfo = this.currentRequest.getURI().getUserInfo();
-            if (userinfo != null) {
-                this.targetAuthState.update(
-                        new BasicScheme(), new UsernamePasswordCredentials(userinfo));
-            }
-
-            // Re-write request URI if needed
-            rewriteRequestURI(this.currentRequest, route);
-        }
-        // Reset headers on the request wrapper
-        this.currentRequest.resetHeaders();
-
-        this.currentRequest.incrementExecCount();
-        if (this.currentRequest.getExecCount() > 1
-                && !this.requestProducer.isRepeatable()
-                && this.requestContentProduced) {
-            throw new NonRepeatableRequestException("Cannot retry request " +
-                "with a non-repeatable request entity.");
-        }
-        this.execCount++;
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + this.id + "] Attempt " + this.execCount + " to execute request");
-        }
-        return this.currentRequest;
-    }
-
-    @Override
-    public synchronized void produceContent(
-            final ContentEncoder encoder, final IOControl ioctrl) throws IOException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + this.id + "] produce content");
-        }
-        this.requestContentProduced = true;
-        this.requestProducer.produceContent(encoder, ioctrl);
-        if (encoder.isCompleted()) {
-            this.requestProducer.resetRequest();
-        }
-    }
-
-    @Override
-    public void requestCompleted(final HttpContext context) {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + this.id + "] Request completed");
-        }
-        this.requestSent = true;
-        this.requestProducer.requestCompleted(context);
-    }
-
-    @Override
-    public boolean isRepeatable() {
-        return this.requestProducer.isRepeatable();
-    }
-
-    @Override
-    public void resetRequest() throws IOException {
-        this.requestSent = false;
-        this.requestProducer.resetRequest();
-    }
-
-    @Override
-    public synchronized void responseReceived(
-            final HttpResponse response) throws IOException, HttpException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + this.id + "] Response received " + response.getStatusLine());
-        }
-        this.currentResponse = response;
-        this.currentResponse.setParams(this.params);
-
-        final int status = this.currentResponse.getStatusLine().getStatusCode();
-
-        if (!this.routeEstablished) {
-            final String method = this.currentRequest.getMethod();
-            if (method.equalsIgnoreCase("CONNECT") && status == HttpStatus.SC_OK) {
-                this.managedConn.tunnelTarget(this.params);
-            } else {
-                this.followup = handleConnectResponse();
-                if (this.followup == null) {
-                    this.finalResponse = response;
-                }
-            }
-        } else {
-            this.followup = handleResponse();
-            if (this.followup == null) {
-                this.finalResponse = response;
-            }
-
-            Object userToken = this.localContext.getAttribute(ClientContext.USER_TOKEN);
-            if (managedConn != null) {
-                if (userToken == null) {
-                    userToken = userTokenHandler.getUserToken(this.localContext);
-                    this.localContext.setAttribute(ClientContext.USER_TOKEN, userToken);
-                }
-                if (userToken != null) {
-                    managedConn.setState(userToken);
-                }
-            }
-        }
-        if (this.finalResponse != null) {
-            this.responseConsumer.responseReceived(response);
-        }
-    }
-
-    @Override
-    public synchronized void consumeContent(
-            final ContentDecoder decoder, final IOControl ioctrl) throws IOException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + this.id + "] Consume content");
-        }
-        if (this.finalResponse != null) {
-            this.responseConsumer.consumeContent(decoder, ioctrl);
-        } else {
-            if (this.tmpbuf == null) {
-                this.tmpbuf = ByteBuffer.allocate(2048);
-            }
-            this.tmpbuf.clear();
-            decoder.read(this.tmpbuf);
-        }
-    }
-
-    private void releaseConnection() {
-        if (this.managedConn != null) {
-            if (this.log.isDebugEnabled()) {
-                this.log.debug("[exchange: " + this.id + "] releasing connection " + this.managedConn);
-            }
-            try {
-                this.managedConn.getContext().removeAttribute(HttpAsyncRequestExecutor.HTTP_HANDLER);
-                this.managedConn.releaseConnection();
-            } catch (final IOException ioex) {
-                this.log.debug("I/O error releasing connection", ioex);
-            }
-            this.managedConn = null;
-        }
-    }
-
-    @Override
-    public synchronized void failed(final Exception ex) {
-        try {
-            if (!this.requestSent) {
-                this.requestProducer.failed(ex);
-            }
-            this.responseConsumer.failed(ex);
-        } finally {
-            try {
-                this.resultCallback.failed(ex, this);
-            } finally {
-                close();
-            }
-        }
-    }
-
-    @Override
-    public synchronized void responseCompleted(final HttpContext context) {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + this.id + "] Response fully read");
-        }
-        try {
-            if (this.resultCallback.isDone()) {
-                return;
-            }
-            if (this.managedConn.isOpen()) {
-                final long duration = this.keepaliveStrategy.getKeepAliveDuration(
-                        this.currentResponse, this.localContext);
-                if (this.log.isDebugEnabled()) {
-                    final String s;
-                    if (duration > 0) {
-                        s = "for " + duration + " " + TimeUnit.MILLISECONDS;
-                    } else {
-                        s = "indefinitely";
-                    }
-                    this.log.debug("[exchange: " + this.id + "] Connection can be kept alive " + s);
-                }
-                this.managedConn.setIdleDuration(duration, TimeUnit.MILLISECONDS);
-            } else {
-                if (this.log.isDebugEnabled()) {
-                    this.log.debug("[exchange: " + this.id + "] Connection cannot be kept alive");
-                }
-                this.managedConn.unmarkReusable();
-                if (this.proxyAuthState.getState() == AuthProtocolState.SUCCESS
-                        && this.proxyAuthState.getAuthScheme() != null
-                        && this.proxyAuthState.getAuthScheme().isConnectionBased()) {
-                    if (this.log.isDebugEnabled()) {
-                        this.log.debug("[exchange: " + this.id + "] Resetting proxy auth state");
-                    }
-                    this.proxyAuthState.reset();
-                }
-                if (this.targetAuthState.getState() == AuthProtocolState.SUCCESS
-                        && this.targetAuthState.getAuthScheme() != null
-                        && this.targetAuthState.getAuthScheme().isConnectionBased()) {
-                    if (this.log.isDebugEnabled()) {
-                        this.log.debug("[exchange: " + this.id + "] Resetting target auth state");
-                    }
-                    this.targetAuthState.reset();
-                }
-            }
-
-            if (this.finalResponse != null) {
-                this.responseConsumer.responseCompleted(this.localContext);
-                if (this.log.isDebugEnabled()) {
-                    this.log.debug("[exchange: " + this.id + "] Response processed");
-                }
-                releaseConnection();
-                final T result = this.responseConsumer.getResult();
-                final Exception ex = this.responseConsumer.getException();
-                if (ex == null) {
-                    this.resultCallback.completed(result, this);
-                } else {
-                    this.resultCallback.failed(ex, this);
-                }
-            } else {
-                if (this.followup != null) {
-                    final HttpRoute actualRoute = this.mainRequest.getRoute();
-                    final HttpRoute newRoute = this.followup.getRoute();
-                    if (!actualRoute.equals(newRoute)) {
-                        releaseConnection();
-                    }
-                    this.mainRequest = this.followup;
-                }
-                if (this.managedConn != null && !this.managedConn.isOpen()) {
-                    releaseConnection();
-                }
-                if (this.managedConn != null) {
-                    this.managedConn.requestOutput();
-                } else {
-                    requestConnection();
-                }
-            }
-            this.followup = null;
-            this.currentRequest = null;
-            this.currentResponse = null;
-        } catch (final RuntimeException runex) {
-            failed(runex);
-            throw runex;
-        }
-    }
-
-    @Override
-    public synchronized boolean cancel() {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + this.id + "] Cancelled");
-        }
-        try {
-            final boolean cancelled = this.responseConsumer.cancel();
-
-            final T result = this.responseConsumer.getResult();
-            final Exception ex = this.responseConsumer.getException();
-            if (ex != null) {
-                this.resultCallback.failed(ex, this);
-            } else if (result != null) {
-                this.resultCallback.completed(result, this);
-            } else {
-                this.resultCallback.cancelled(this);
-            }
-            return cancelled;
-        } catch (final RuntimeException runex) {
-            this.resultCallback.failed(runex, this);
-            throw runex;
-        } finally {
-            close();
-        }
-    }
-
-    @Override
-    public boolean isDone() {
-        return this.resultCallback.isDone();
-    }
-
-    @Override
-    public T getResult() {
-        return this.responseConsumer.getResult();
-    }
-
-    @Override
-    public Exception getException() {
-        return this.responseConsumer.getException();
-    }
-
-    private synchronized void connectionRequestCompleted(final ManagedClientAsyncConnection conn) {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + this.id + "] Connection allocated: " + conn);
-        }
-        this.connRequestCallback = null;
-        try {
-            this.managedConn = conn;
-            if (this.closed) {
-                conn.releaseConnection();
-                return;
-            }
-            final HttpRoute route = this.mainRequest.getRoute();
-            if (!conn.isOpen()) {
-                conn.open(route, this.localContext, this.params);
-            }
-            conn.getContext().setAttribute(HttpAsyncRequestExecutor.HTTP_HANDLER, this);
-            conn.requestOutput();
-            this.routeEstablished = route.equals(conn.getRoute());
-            if (!conn.isOpen()) {
-                throw new ConnectionClosedException("Connection closed");
-            }
-        } catch (final IOException ex) {
-            failed(ex);
-        } catch (final RuntimeException runex) {
-            failed(runex);
-            throw runex;
-        }
-    }
-
-    private synchronized void connectionRequestFailed(final Exception ex) {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + this.id + "] connection request failed");
-        }
-        this.connRequestCallback = null;
-        try {
-            this.resultCallback.failed(ex, this);
-        } finally {
-            close();
-        }
-    }
-
-    private synchronized void connectionRequestCancelled() {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + this.id + "] Connection request cancelled");
-        }
-        this.connRequestCallback = null;
-        try {
-            this.resultCallback.cancelled(this);
-        } finally {
-            close();
-        }
-    }
-
-    class InternalFutureCallback implements FutureCallback<ManagedClientAsyncConnection> {
-
-        @Override
-        public void completed(final ManagedClientAsyncConnection session) {
-            connectionRequestCompleted(session);
-        }
-
-        @Override
-        public void failed(final Exception ex) {
-            connectionRequestFailed(ex);
-        }
-
-        @Override
-        public void cancelled() {
-            connectionRequestCancelled();
-        }
-
-    }
-
-    private void requestConnection() {
-        final HttpRoute route = this.mainRequest.getRoute();
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + this.id + "] Request connection for " + route);
-        }
-        final long connectTimeout = HttpConnectionParams.getConnectionTimeout(this.params);
-        final Object userToken = this.localContext.getAttribute(ClientContext.USER_TOKEN);
-        this.connRequestCallback = new InternalFutureCallback();
-        this.connmgr.leaseConnection(
-                route, userToken,
-                connectTimeout, TimeUnit.MILLISECONDS,
-                this.connRequestCallback);
-    }
-
-    public synchronized void endOfStream() {
-        if (this.managedConn != null) {
-            if (this.log.isDebugEnabled()) {
-                this.log.debug("[exchange: " + this.id + "] Unexpected end of data stream");
-            }
-            releaseConnection();
-            if (this.connRequestCallback == null) {
-                requestConnection();
-            }
-        }
-    }
-
-    protected HttpRoute determineRoute(
-            final HttpHost target,
-            final HttpRequest request,
-            final HttpContext context) throws HttpException {
-        final HttpHost t = target != null ? target :
-                (HttpHost) request.getParams().getParameter(ClientPNames.DEFAULT_HOST);
-        if (t == null) {
-            throw new IllegalStateException("Target host could not be resolved");
-        }
-        return this.routePlanner.determineRoute(t, request, context);
-    }
-
-    private RequestWrapper wrapRequest(final HttpRequest request) throws ProtocolException {
-        if (request instanceof HttpEntityEnclosingRequest) {
-            return new EntityEnclosingRequestWrapper((HttpEntityEnclosingRequest) request);
-        }
-        return new RequestWrapper(request);
-    }
-
-    protected void rewriteRequestURI(
-            final RequestWrapper request, final HttpRoute route) throws ProtocolException {
-        try {
-            URI uri = request.getURI();
-            if (route.getProxyHost() != null && !route.isTunnelled()) {
-                // Make sure the request URI is absolute
-                if (!uri.isAbsolute()) {
-                    final HttpHost target = route.getTargetHost();
-                    uri = URIUtils.rewriteURI(uri, target);
-                    request.setURI(uri);
-                }
-            } else {
-                // Make sure the request URI is relative
-                if (uri.isAbsolute()) {
-                    uri = URIUtils.rewriteURI(uri, null);
-                    request.setURI(uri);
-                }
-            }
-        } catch (final URISyntaxException ex) {
-            throw new ProtocolException("Invalid URI: " + request.getRequestLine().getUri(), ex);
-        }
-    }
-
-    private AsyncSchemeRegistry getSchemeRegistry(final HttpContext context) {
-        AsyncSchemeRegistry reg = (AsyncSchemeRegistry) context.getAttribute(
-                ClientContext.SCHEME_REGISTRY);
-        if (reg == null) {
-            reg = this.connmgr.getSchemeRegistry();
-        }
-        return reg;
-    }
-
-    private HttpRequest createConnectRequest(final HttpRoute route) {
-        // see RFC 2817, section 5.2 and
-        // INTERNET-DRAFT: Tunneling TCP based protocols through
-        // Web proxy servers
-        final HttpHost target = route.getTargetHost();
-        final String host = target.getHostName();
-        int port = target.getPort();
-        if (port < 0) {
-            final AsyncSchemeRegistry registry = getSchemeRegistry(this.localContext);
-            final AsyncScheme scheme = registry.getScheme(target.getSchemeName());
-            port = scheme.getDefaultPort();
-        }
-        final StringBuilder buffer = new StringBuilder(host.length() + 6);
-        buffer.append(host);
-        buffer.append(':');
-        buffer.append(Integer.toString(port));
-        final ProtocolVersion ver = HttpProtocolParams.getVersion(this.params);
-        final HttpRequest req = new BasicHttpRequest("CONNECT", buffer.toString(), ver);
-        return req;
-    }
-
-    private RoutedRequest handleResponse() throws HttpException {
-        RoutedRequest followup = null;
-        if (HttpClientParams.isAuthenticating(this.params)) {
-            final CredentialsProvider credsProvider = (CredentialsProvider) this.localContext.getAttribute(
-                    ClientContext.CREDS_PROVIDER);
-            if (credsProvider != null) {
-                followup = handleTargetChallenge(credsProvider);
-                if (followup != null) {
-                    return followup;
-                }
-                followup = handleProxyChallenge(credsProvider);
-                if (followup != null) {
-                    return followup;
-                }
-            }
-        }
-        if (HttpClientParams.isRedirecting(this.params)) {
-            followup = handleRedirect();
-            if (followup != null) {
-                return followup;
-            }
-        }
-        return null;
-    }
-
-    private RoutedRequest handleConnectResponse() throws HttpException {
-        RoutedRequest followup = null;
-        if (HttpClientParams.isAuthenticating(this.params)) {
-            final CredentialsProvider credsProvider = (CredentialsProvider) this.localContext.getAttribute(
-                    ClientContext.CREDS_PROVIDER);
-            if (credsProvider != null) {
-                followup = handleProxyChallenge(credsProvider);
-                if (followup != null) {
-                    return followup;
-                }
-            }
-        }
-        return null;
-    }
-
-    private RoutedRequest handleRedirect() throws HttpException {
-        if (this.redirectStrategy.isRedirected(
-                this.currentRequest, this.currentResponse, this.localContext)) {
-
-            final HttpRoute route = this.mainRequest.getRoute();
-            final RequestWrapper request = this.mainRequest.getRequest();
-
-            final int maxRedirects = this.params.getIntParameter(ClientPNames.MAX_REDIRECTS, 100);
-            if (this.redirectCount >= maxRedirects) {
-                throw new RedirectException("Maximum redirects ("
-                        + maxRedirects + ") exceeded");
-            }
-            this.redirectCount++;
-
-            final HttpUriRequest redirect = this.redirectStrategy.getRedirect(
-                    this.currentRequest, this.currentResponse, this.localContext);
-            final HttpRequest orig = request.getOriginal();
-            redirect.setHeaders(orig.getAllHeaders());
-
-            final URI uri = redirect.getURI();
-            if (uri.getHost() == null) {
-                throw new ProtocolException("Redirect URI does not specify a valid host name: " + uri);
-            }
-            final HttpHost newTarget = new HttpHost(uri.getHost(), uri.getPort(), uri.getScheme());
-
-            // Reset auth states if redirecting to another host
-            if (!route.getTargetHost().equals(newTarget)) {
-                if (this.log.isDebugEnabled()) {
-                    this.log.debug("[exchange: " + this.id + "] Resetting target auth state");
-                }
-                this.targetAuthState.reset();
-                final AuthScheme authScheme = this.proxyAuthState.getAuthScheme();
-                if (authScheme != null && authScheme.isConnectionBased()) {
-                    if (this.log.isDebugEnabled()) {
-                        this.log.debug("[exchange: " + this.id + "] Resetting proxy auth state");
-                    }
-                    this.proxyAuthState.reset();
-                }
-            }
-
-            final RequestWrapper newRequest = wrapRequest(redirect);
-            newRequest.setParams(this.params);
-
-            final HttpRoute newRoute = determineRoute(newTarget, newRequest, this.localContext);
-
-            if (this.log.isDebugEnabled()) {
-                this.log.debug("[exchange: " + this.id + "] Redirecting to '" + uri + "' via " + newRoute);
-            }
-            return new RoutedRequest(newRequest, newRoute);
-        }
-        return null;
-    }
-
-    private RoutedRequest handleTargetChallenge(
-            final CredentialsProvider credsProvider) throws HttpException {
-        final HttpRoute route = this.mainRequest.getRoute();
-        HttpHost target = (HttpHost) this.localContext.getAttribute(
-                ExecutionContext.HTTP_TARGET_HOST);
-        if (target == null) {
-            target = route.getTargetHost();
-        }
-        if (this.authenticator.isAuthenticationRequested(target, this.currentResponse,
-                this.targetAuthStrategy, this.targetAuthState, this.localContext)) {
-            if (this.authenticator.authenticate(target, this.currentResponse,
-                    this.targetAuthStrategy, this.targetAuthState, this.localContext)) {
-                // Re-try the same request via the same route
-                return this.mainRequest;
-            }
-            return null;
-        }
-        return null;
-    }
-
-    private RoutedRequest handleProxyChallenge(
-            final CredentialsProvider credsProvider) throws HttpException {
-        final HttpRoute route = this.mainRequest.getRoute();
-        final HttpHost proxy = route.getProxyHost();
-        if (this.authenticator.isAuthenticationRequested(proxy, this.currentResponse,
-                this.proxyAuthStrategy, this.proxyAuthState, this.localContext)) {
-            if (this.authenticator.authenticate(proxy, this.currentResponse,
-                    this.proxyAuthStrategy, this.proxyAuthState, this.localContext)) {
-                // Re-try the same request via the same route
-                return this.mainRequest;
-            }
-            return null;
-        }
-        return null;
-    }
-
-    @Override
-    public HttpContext getContext() {
-        return this.localContext;
-    }
-
-    @Override
-    public HttpProcessor getHttpProcessor() {
-        return this.httppocessor;
-    }
-
-    @Override
-    public ConnectionReuseStrategy getConnectionReuseStrategy() {
-        return this.reuseStrategy;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/DefaultHttpAsyncClient.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/DefaultHttpAsyncClient.java
deleted file mode 100644
index 3c9763a..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/DefaultHttpAsyncClient.java
+++ /dev/null
@@ -1,105 +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.http.impl.nio.client;
-
-import org.apache.http.HttpVersion;
-import org.apache.http.client.protocol.RequestAddCookies;
-import org.apache.http.client.protocol.RequestAuthCache;
-import org.apache.http.client.protocol.RequestClientConnControl;
-import org.apache.http.client.protocol.RequestDefaultHeaders;
-import org.apache.http.client.protocol.RequestProxyAuthentication;
-import org.apache.http.client.protocol.RequestTargetAuthentication;
-import org.apache.http.client.protocol.ResponseProcessCookies;
-import org.apache.http.impl.nio.reactor.IOReactorConfig;
-import org.apache.http.nio.conn.ClientAsyncConnectionManager;
-import org.apache.http.nio.reactor.IOReactorException;
-import org.apache.http.params.HttpConnectionParams;
-import org.apache.http.params.HttpParams;
-import org.apache.http.params.HttpProtocolParams;
-import org.apache.http.params.SyncBasicHttpParams;
-import org.apache.http.protocol.BasicHttpProcessor;
-import org.apache.http.protocol.HTTP;
-import org.apache.http.protocol.RequestContent;
-import org.apache.http.protocol.RequestExpectContinue;
-import org.apache.http.protocol.RequestTargetHost;
-import org.apache.http.protocol.RequestUserAgent;
-import org.apache.http.util.VersionInfo;
-
-@Deprecated
-public class DefaultHttpAsyncClient extends AbstractHttpAsyncClient {
-
-    public DefaultHttpAsyncClient(final ClientAsyncConnectionManager connmgr) {
-        super(connmgr);
-    }
-
-    public DefaultHttpAsyncClient(final IOReactorConfig config) throws IOReactorException {
-        super(config);
-    }
-
-    public DefaultHttpAsyncClient() throws IOReactorException {
-        super(new IOReactorConfig());
-    }
-
-    @Override
-    protected HttpParams createHttpParams() {
-        final HttpParams params = new SyncBasicHttpParams();
-        setDefaultHttpParams(params);
-        return params;
-    }
-
-    public static void setDefaultHttpParams(final HttpParams params) {
-        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
-        HttpProtocolParams.setContentCharset(params, HTTP.DEF_CONTENT_CHARSET.name());
-        HttpConnectionParams.setTcpNoDelay(params, true);
-        HttpConnectionParams.setSocketBufferSize(params, 8192);
-        HttpProtocolParams.setUserAgent(params, VersionInfo.getUserAgent(
-                "Apache-HttpAsyncClient",
-                "org.apache.http.nio.client", DefaultHttpAsyncClient.class));
-    }
-
-    @Override
-    protected BasicHttpProcessor createHttpProcessor() {
-        final BasicHttpProcessor httpproc = new BasicHttpProcessor();
-        httpproc.addInterceptor(new RequestDefaultHeaders());
-        // Required protocol interceptors
-        httpproc.addInterceptor(new RequestContent());
-        httpproc.addInterceptor(new RequestTargetHost());
-        // Recommended protocol interceptors
-        httpproc.addInterceptor(new RequestClientConnControl());
-        httpproc.addInterceptor(new RequestUserAgent());
-        httpproc.addInterceptor(new RequestExpectContinue());
-        // HTTP state management interceptors
-        httpproc.addInterceptor(new RequestAddCookies());
-        httpproc.addInterceptor(new ResponseProcessCookies());
-        // HTTP authentication interceptors
-        httpproc.addInterceptor(new RequestAuthCache());
-        httpproc.addInterceptor(new RequestTargetAuthentication());
-        httpproc.addInterceptor(new RequestProxyAuthentication());
-        return httpproc;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/DefaultResultCallback.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/DefaultResultCallback.java
deleted file mode 100644
index ecf0acf..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/DefaultResultCallback.java
+++ /dev/null
@@ -1,70 +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.http.impl.nio.client;
-
-import java.util.Queue;
-
-import org.apache.http.concurrent.BasicFuture;
-import org.apache.http.nio.protocol.HttpAsyncRequestExecutionHandler;
-
-@Deprecated
-class DefaultResultCallback<T> implements ResultCallback<T> {
-
-    private final BasicFuture<T> future;
-    private final Queue<HttpAsyncRequestExecutionHandler<?>> queue;
-
-    DefaultResultCallback(
-            final BasicFuture<T> future, final Queue<HttpAsyncRequestExecutionHandler<?>> queue) {
-        super();
-        this.future = future;
-        this.queue = queue;
-    }
-
-    @Override
-    public void completed(final T result, final HttpAsyncRequestExecutionHandler<T> handler) {
-        this.future.completed(result);
-        this.queue.remove(handler);
-    }
-
-    @Override
-    public void failed(final Exception ex, final HttpAsyncRequestExecutionHandler<T> handler) {
-        this.future.failed(ex);
-        this.queue.remove(handler);
-    }
-
-    @Override
-    public void cancelled(final HttpAsyncRequestExecutionHandler<T> handler) {
-        this.future.cancel(true);
-        this.queue.remove(handler);
-    }
-
-    @Override
-    public boolean isDone() {
-        return this.future.isDone();
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/ParamConfig.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/ParamConfig.java
deleted file mode 100644
index 9239c3c..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/ParamConfig.java
+++ /dev/null
@@ -1,69 +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.http.impl.nio.client;
-
-import java.util.Collection;
-
-import org.apache.http.auth.params.AuthPNames;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.params.ClientPNames;
-import org.apache.http.client.params.HttpClientParams;
-import org.apache.http.conn.params.ConnRouteParams;
-import org.apache.http.params.HttpConnectionParams;
-import org.apache.http.params.HttpParams;
-import org.apache.http.params.HttpProtocolParams;
-
-@Deprecated
-final class ParamConfig {
-
-    private ParamConfig() {
-    }
-
-    @SuppressWarnings("unchecked")
-    public static RequestConfig getRequestConfig(final HttpParams params) {
-        return RequestConfig.custom()
-                .setAuthenticationEnabled(HttpClientParams.isAuthenticating(params))
-                .setCircularRedirectsAllowed(params.getBooleanParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, false))
-                .setConnectionRequestTimeout((int) HttpClientParams.getConnectionManagerTimeout(params))
-                .setConnectTimeout(HttpConnectionParams.getConnectionTimeout(params))
-                .setCookieSpec(HttpClientParams.getCookiePolicy(params))
-                .setProxy(ConnRouteParams.getDefaultProxy(params))
-                .setExpectContinueEnabled(HttpProtocolParams.useExpectContinue(params))
-                .setLocalAddress(ConnRouteParams.getLocalAddress(params))
-                .setMaxRedirects(params.getIntParameter(ClientPNames.MAX_REDIRECTS, 50))
-                .setProxyPreferredAuthSchemes((Collection<String>) params.getParameter(
-                        AuthPNames.PROXY_AUTH_PREF))
-                .setTargetPreferredAuthSchemes((Collection<String>) params.getParameter(
-                        AuthPNames.TARGET_AUTH_PREF))
-                .setRedirectsEnabled(HttpClientParams.isRedirecting(params))
-                .setRelativeRedirectsAllowed(!params.getBooleanParameter(ClientPNames.REJECT_RELATIVE_REDIRECT, false))
-                .setSocketTimeout(HttpConnectionParams.getSoTimeout(params))
-                .setStaleConnectionCheckEnabled(HttpConnectionParams.isStaleCheckingEnabled(params))
-                .build();
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/ResultCallback.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/ResultCallback.java
deleted file mode 100644
index f53e97c..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/client/ResultCallback.java
+++ /dev/null
@@ -1,42 +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.http.impl.nio.client;
-
-import org.apache.http.nio.protocol.HttpAsyncRequestExecutionHandler;
-
-@Deprecated
-interface ResultCallback<T> {
-
-    void completed(T result, HttpAsyncRequestExecutionHandler<T> handler);
-
-    void failed(Exception ex, HttpAsyncRequestExecutionHandler<T> handler);
-
-    void cancelled(HttpAsyncRequestExecutionHandler<T> handler);
-
-    boolean isDone();
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/AsyncSchemeRegistryFactory.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/AsyncSchemeRegistryFactory.java
deleted file mode 100644
index 16d86d1..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/AsyncSchemeRegistryFactory.java
+++ /dev/null
@@ -1,48 +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.http.impl.nio.conn;
-
-import org.apache.http.annotation.ThreadSafe;
-import org.apache.http.nio.conn.scheme.AsyncScheme;
-import org.apache.http.nio.conn.scheme.AsyncSchemeRegistry;
-import org.apache.http.nio.conn.ssl.SSLLayeringStrategy;
-
-@Deprecated
-@ThreadSafe
-public final class AsyncSchemeRegistryFactory {
-
-    public static AsyncSchemeRegistry createDefault() {
-        final AsyncSchemeRegistry registry = new AsyncSchemeRegistry();
-        registry.register(
-                new AsyncScheme("http", 80, null));
-        registry.register(
-                new AsyncScheme("https", 443, SSLLayeringStrategy.getDefaultStrategy()));
-        return registry;
-    }
-
-}
-
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/DefaultClientAsyncConnection.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/DefaultClientAsyncConnection.java
deleted file mode 100644
index 6dae8d9..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/DefaultClientAsyncConnection.java
+++ /dev/null
@@ -1,132 +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.http.impl.nio.conn;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.Header;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpResponseFactory;
-import org.apache.http.impl.nio.DefaultNHttpClientConnection;
-import org.apache.http.nio.conn.ClientAsyncConnection;
-import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.nio.util.ByteBufferAllocator;
-import org.apache.http.params.HttpParams;
-
-@Deprecated
-public class DefaultClientAsyncConnection
-                    extends DefaultNHttpClientConnection implements ClientAsyncConnection {
-
-    private final Log headerlog = LogFactory.getLog("org.apache.http.headers");
-    private final Log wirelog   = LogFactory.getLog("org.apache.http.wire");
-    private final Log log;
-
-    private final String id;
-    private IOSession original;
-
-    public DefaultClientAsyncConnection(
-            final String id,
-            final IOSession iosession,
-            final HttpResponseFactory responseFactory,
-            final ByteBufferAllocator allocator,
-            final HttpParams params) {
-        super(iosession, responseFactory, allocator, params);
-        this.id = id;
-        this.original = iosession;
-        this.log = LogFactory.getLog(iosession.getClass());
-        if (this.log.isDebugEnabled() || this.wirelog.isDebugEnabled()) {
-            bind(new LoggingIOSession(iosession, this.id, this.log, this.wirelog));
-        }
-    }
-
-    @Override
-    public void upgrade(final IOSession iosession) {
-        this.original = iosession;
-        if (this.log.isDebugEnabled() || this.wirelog.isDebugEnabled()) {
-            this.log.debug(this.id + " Upgrade session " + iosession);
-            bind(new LoggingIOSession(iosession, this.id, this.headerlog, this.wirelog));
-        } else {
-            bind(iosession);
-        }
-    }
-
-    @Override
-    public IOSession getIOSession() {
-        return this.original;
-    }
-
-    public String getId() {
-        return this.id;
-    }
-
-    @Override
-    protected void onResponseReceived(final HttpResponse response) {
-        if (response != null && this.headerlog.isDebugEnabled()) {
-            this.headerlog.debug(this.id + " << " + response.getStatusLine().toString());
-            final Header[] headers = response.getAllHeaders();
-            for (final Header header : headers) {
-                this.headerlog.debug(this.id + " << " + header.toString());
-            }
-        }
-    }
-
-    @Override
-    protected void onRequestSubmitted(final HttpRequest request) {
-        if (request != null && this.headerlog.isDebugEnabled()) {
-            this.headerlog.debug(this.id + " >> " + request.getRequestLine().toString());
-            final Header[] headers = request.getAllHeaders();
-            for (final Header header : headers) {
-                this.headerlog.debug(this.id + " >> " + header.toString());
-            }
-        }
-    }
-
-    @Override
-    public String toString() {
-        final StringBuilder buf = new StringBuilder();
-        buf.append(this.id);
-        buf.append(" [");
-        switch (this.status) {
-        case ACTIVE:
-            buf.append("ACTIVE");
-            if (this.inbuf.hasData()) {
-                buf.append("(").append(this.inbuf.length()).append(")");
-            }
-            break;
-        case CLOSING:
-            buf.append("CLOSING");
-            break;
-        case CLOSED:
-            buf.append("CLOSED");
-            break;
-        }
-        buf.append("]");
-        return buf.toString();
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/DefaultClientAsyncConnectionFactory.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/DefaultClientAsyncConnectionFactory.java
deleted file mode 100644
index 3c19cab..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/DefaultClientAsyncConnectionFactory.java
+++ /dev/null
@@ -1,143 +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.http.impl.nio.conn;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CodingErrorAction;
-import java.util.concurrent.atomic.AtomicLong;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpResponseFactory;
-import org.apache.http.config.ConnectionConfig;
-import org.apache.http.impl.DefaultHttpResponseFactory;
-import org.apache.http.impl.nio.codecs.DefaultHttpResponseParserFactory;
-import org.apache.http.message.BasicLineParser;
-import org.apache.http.nio.NHttpMessageParserFactory;
-import org.apache.http.nio.conn.ClientAsyncConnection;
-import org.apache.http.nio.conn.ClientAsyncConnectionFactory;
-import org.apache.http.nio.conn.ManagedNHttpClientConnection;
-import org.apache.http.nio.conn.NHttpConnectionFactory;
-import org.apache.http.nio.reactor.IOEventDispatch;
-import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.nio.util.ByteBufferAllocator;
-import org.apache.http.nio.util.HeapByteBufferAllocator;
-import org.apache.http.params.HttpParams;
-
-@Deprecated
-public class DefaultClientAsyncConnectionFactory
-    implements ClientAsyncConnectionFactory, NHttpConnectionFactory<ManagedNHttpClientConnection> {
-
-    private final Log headerlog = LogFactory.getLog("org.apache.http.headers");
-    private final Log wirelog = LogFactory.getLog("org.apache.http.wire");
-    private final Log log = LogFactory.getLog(ManagedNHttpClientConnectionImpl.class);
-
-    public static final DefaultClientAsyncConnectionFactory INSTANCE = new DefaultClientAsyncConnectionFactory(null, null);
-
-    private static AtomicLong COUNTER = new AtomicLong();
-
-    private final HttpResponseFactory responseFactory;
-    private final NHttpMessageParserFactory<HttpResponse> responseParserFactory;
-    private final ByteBufferAllocator allocator;
-
-    public DefaultClientAsyncConnectionFactory(
-            final NHttpMessageParserFactory<HttpResponse> responseParserFactory,
-            final ByteBufferAllocator allocator) {
-        super();
-        this.responseFactory = createHttpResponseFactory();
-        this.responseParserFactory = responseParserFactory != null ? responseParserFactory :
-            DefaultHttpResponseParserFactory.INSTANCE;
-        this.allocator = allocator != null ? allocator : HeapByteBufferAllocator.INSTANCE;
-    }
-
-    public DefaultClientAsyncConnectionFactory() {
-        super();
-        this.responseFactory = createHttpResponseFactory();
-        this.responseParserFactory = new DefaultHttpResponseParserFactory(
-            BasicLineParser.INSTANCE, this.responseFactory);
-        this.allocator = createByteBufferAllocator();
-    }
-
-    @Override
-    @Deprecated
-    public ClientAsyncConnection create(
-            final String id,
-            final IOSession iosession,
-            final HttpParams params) {
-        return new DefaultClientAsyncConnection(
-                id, iosession, this.responseFactory, this.allocator, params);
-    }
-
-    @Deprecated
-    protected ByteBufferAllocator createByteBufferAllocator() {
-        return HeapByteBufferAllocator.INSTANCE;
-    }
-
-    @Deprecated
-    protected HttpResponseFactory createHttpResponseFactory() {
-        return DefaultHttpResponseFactory.INSTANCE;
-    }
-
-    @Override
-    public ManagedNHttpClientConnection create(
-            final IOSession iosession, final ConnectionConfig config) {
-        final String id = "http-outgoing-" + Long.toString(COUNTER.getAndIncrement());
-        CharsetDecoder chardecoder = null;
-        CharsetEncoder charencoder = null;
-        final Charset charset = config.getCharset();
-        final CodingErrorAction malformedInputAction = config.getMalformedInputAction() != null ?
-                config.getMalformedInputAction() : CodingErrorAction.REPORT;
-        final CodingErrorAction unmappableInputAction = config.getUnmappableInputAction() != null ?
-                config.getUnmappableInputAction() : CodingErrorAction.REPORT;
-        if (charset != null) {
-            chardecoder = charset.newDecoder();
-            chardecoder.onMalformedInput(malformedInputAction);
-            chardecoder.onUnmappableCharacter(unmappableInputAction);
-            charencoder = charset.newEncoder();
-            charencoder.onMalformedInput(malformedInputAction);
-            charencoder.onUnmappableCharacter(unmappableInputAction);
-        }
-        final ManagedNHttpClientConnection conn = new ManagedNHttpClientConnectionImpl(
-                id,
-                this.log,
-                this.headerlog,
-                this.wirelog,
-                iosession,
-                config.getBufferSize(),
-                config.getFragmentSizeHint(),
-                this.allocator,
-                chardecoder, charencoder, config.getMessageConstraints(),
-                null, null, null,
-                this.responseParserFactory);
-        iosession.setAttribute(IOEventDispatch.CONNECTION_KEY, conn);
-        return conn;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/DefaultHttpAsyncRoutePlanner.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/DefaultHttpAsyncRoutePlanner.java
deleted file mode 100644
index d2bd306..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/DefaultHttpAsyncRoutePlanner.java
+++ /dev/null
@@ -1,97 +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.http.impl.nio.conn;
-
-import java.net.InetAddress;
-
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.client.protocol.ClientContext;
-import org.apache.http.conn.params.ConnRouteParams;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.conn.routing.HttpRoutePlanner;
-import org.apache.http.nio.conn.scheme.AsyncScheme;
-import org.apache.http.nio.conn.scheme.AsyncSchemeRegistry;
-import org.apache.http.nio.conn.scheme.LayeringStrategy;
-import org.apache.http.protocol.HttpContext;
-
-@Deprecated
-public class DefaultHttpAsyncRoutePlanner implements HttpRoutePlanner {
-
-    private final AsyncSchemeRegistry schemeRegistry;
-
-    public DefaultHttpAsyncRoutePlanner(final AsyncSchemeRegistry schemeRegistry) {
-        super();
-        this.schemeRegistry = schemeRegistry;
-    }
-
-    private AsyncSchemeRegistry getSchemeRegistry(final HttpContext context) {
-        AsyncSchemeRegistry reg = (AsyncSchemeRegistry) context.getAttribute(
-                ClientContext.SCHEME_REGISTRY);
-        if (reg == null) {
-            reg = this.schemeRegistry;
-        }
-        return reg;
-    }
-
-    @Override
-    public HttpRoute determineRoute(
-            final HttpHost target,
-            final HttpRequest request,
-            final HttpContext context) throws HttpException {
-        if (request == null) {
-            throw new IllegalStateException("Request may not be null");
-        }
-        HttpRoute route = ConnRouteParams.getForcedRoute(request.getParams());
-        if (route != null) {
-            return route;
-        }
-        if (target == null) {
-            throw new IllegalStateException("Target host may be null");
-        }
-        final InetAddress local = ConnRouteParams.getLocalAddress(request.getParams());
-        final HttpHost proxy = ConnRouteParams.getDefaultProxy(request.getParams());
-        AsyncScheme scheme;
-        try {
-            final AsyncSchemeRegistry registry = getSchemeRegistry(context);
-            scheme = registry.getScheme(target);
-        } catch (final IllegalStateException ex) {
-            throw new HttpException(ex.getMessage());
-        }
-        final LayeringStrategy layeringStrategy = scheme.getLayeringStrategy();
-        final boolean secure = layeringStrategy != null && layeringStrategy.isSecure();
-        if (proxy == null) {
-            route = new HttpRoute(target, local, secure);
-        } else {
-            route = new HttpRoute(target, local, proxy, secure);
-        }
-        return route;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/HttpNIOConnPool.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/HttpNIOConnPool.java
deleted file mode 100644
index 385edca..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/HttpNIOConnPool.java
+++ /dev/null
@@ -1,91 +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.http.impl.nio.conn;
-
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicLong;
-
-import org.apache.commons.logging.Log;
-import org.apache.http.HttpHost;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.nio.conn.scheme.AsyncScheme;
-import org.apache.http.nio.conn.scheme.AsyncSchemeRegistry;
-import org.apache.http.nio.pool.AbstractNIOConnPool;
-import org.apache.http.nio.reactor.ConnectingIOReactor;
-import org.apache.http.nio.reactor.IOSession;
-
-@Deprecated
-class HttpNIOConnPool extends AbstractNIOConnPool<HttpRoute, IOSession, HttpPoolEntry> {
-
-    private static final AtomicLong COUNTER = new AtomicLong(1);
-
-    private final Log log;
-    private final AsyncSchemeRegistry schemeRegistry;
-    private final long connTimeToLive;
-    private final TimeUnit tunit;
-
-    HttpNIOConnPool(
-            final Log log,
-            final ConnectingIOReactor ioreactor,
-            final AsyncSchemeRegistry schemeRegistry,
-            final long connTimeToLive, final TimeUnit tunit) {
-        super(ioreactor, new HttpNIOConnPoolFactory(), 2, 20);
-        this.log = log;
-        this.schemeRegistry = schemeRegistry;
-        this.connTimeToLive = connTimeToLive;
-        this.tunit = tunit;
-    }
-
-    @Override
-    protected SocketAddress resolveLocalAddress(final HttpRoute route) {
-        return new InetSocketAddress(route.getLocalAddress(), 0);
-    }
-
-    @Override
-    protected SocketAddress resolveRemoteAddress(final HttpRoute route) {
-        HttpHost firsthop = route.getProxyHost();
-        if (firsthop == null) {
-            firsthop = route.getTargetHost();
-        }
-        final String hostname = firsthop.getHostName();
-        int port = firsthop.getPort();
-        if (port < 0) {
-            final AsyncScheme scheme = this.schemeRegistry.getScheme(firsthop);
-            port = scheme.resolvePort(port);
-        }
-        return new InetSocketAddress(hostname, port);
-    }
-
-    @Override
-    protected HttpPoolEntry createEntry(final HttpRoute route, final IOSession session) {
-        final String id = Long.toString(COUNTER.getAndIncrement());
-        return new HttpPoolEntry(this.log, id, route, session, this.connTimeToLive, this.tunit);
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/HttpNIOConnPoolFactory.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/HttpNIOConnPoolFactory.java
deleted file mode 100644
index 9ef747d..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/HttpNIOConnPoolFactory.java
+++ /dev/null
@@ -1,43 +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.http.impl.nio.conn;
-
-import java.io.IOException;
-
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.nio.pool.NIOConnFactory;
-import org.apache.http.nio.reactor.IOSession;
-
-@Deprecated
-class HttpNIOConnPoolFactory implements NIOConnFactory<HttpRoute, IOSession> {
-
-    @Override
-    public IOSession create(final HttpRoute route, final IOSession session) throws IOException {
-        return session;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/HttpPoolEntry.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/HttpPoolEntry.java
deleted file mode 100644
index bacf08d..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/HttpPoolEntry.java
+++ /dev/null
@@ -1,97 +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.http.impl.nio.conn;
-
-import java.io.IOException;
-import java.util.Date;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.logging.Log;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.conn.routing.RouteTracker;
-import org.apache.http.nio.conn.ClientAsyncConnection;
-import org.apache.http.nio.reactor.IOEventDispatch;
-import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.pool.PoolEntry;
-
-@Deprecated
-class HttpPoolEntry extends PoolEntry<HttpRoute, IOSession> {
-
-    private final Log log;
-    private final RouteTracker tracker;
-
-    HttpPoolEntry(final Log log, final String id, final HttpRoute route, final IOSession session,
-            final long timeToLive, final TimeUnit tunit) {
-        super(id, route, session, timeToLive, tunit);
-        this.log = log;
-        this.tracker = new RouteTracker(route);
-    }
-
-    @Override
-    public boolean isExpired(final long now) {
-        final boolean expired = super.isExpired(now);
-        if (expired && this.log.isDebugEnabled()) {
-            this.log.debug("Connection " + this + " expired @ " + new Date(getExpiry()));
-        }
-        return expired;
-    }
-
-    public ClientAsyncConnection getOperatedClientConnection() {
-        final IOSession session = getConnection();
-        return (ClientAsyncConnection) session.getAttribute(IOEventDispatch.CONNECTION_KEY);
-    }
-
-    @Override
-    public void close() {
-        try {
-            getOperatedClientConnection().shutdown();
-        } catch (final IOException ex) {
-            if (this.log.isDebugEnabled()) {
-                this.log.debug("I/O error shutting down connection", ex);
-            }
-        }
-    }
-
-    @Override
-    public boolean isClosed() {
-        final IOSession session = getConnection();
-        return session.isClosed();
-    }
-
-    HttpRoute getPlannedRoute() {
-        return super.getRoute();
-    }
-
-    RouteTracker getTracker() {
-        return this.tracker;
-    }
-
-    HttpRoute getEffectiveRoute() {
-        return this.tracker.toRoute();
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/ManagedClientAsyncConnectionImpl.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/ManagedClientAsyncConnectionImpl.java
deleted file mode 100644
index 621b3fc..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/ManagedClientAsyncConnectionImpl.java
+++ /dev/null
@@ -1,452 +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.http.impl.nio.conn;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.util.concurrent.TimeUnit;
-
-import javax.net.ssl.SSLSession;
-
-import org.apache.http.HttpConnectionMetrics;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.protocol.ClientContext;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.conn.routing.RouteTracker;
-import org.apache.http.impl.conn.ConnectionShutdownException;
-import org.apache.http.nio.conn.ClientAsyncConnection;
-import org.apache.http.nio.conn.ClientAsyncConnectionFactory;
-import org.apache.http.nio.conn.ClientAsyncConnectionManager;
-import org.apache.http.nio.conn.ManagedClientAsyncConnection;
-import org.apache.http.nio.conn.scheme.AsyncScheme;
-import org.apache.http.nio.conn.scheme.AsyncSchemeRegistry;
-import org.apache.http.nio.conn.scheme.LayeringStrategy;
-import org.apache.http.nio.reactor.IOEventDispatch;
-import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.nio.reactor.ssl.SSLIOSession;
-import org.apache.http.params.HttpParams;
-import org.apache.http.protocol.HttpContext;
-
-@Deprecated
-class ManagedClientAsyncConnectionImpl implements ManagedClientAsyncConnection {
-
-    private final ClientAsyncConnectionManager manager;
-    private final ClientAsyncConnectionFactory connFactory;
-    private volatile HttpPoolEntry poolEntry;
-    private volatile boolean reusable;
-    private volatile long duration;
-
-    ManagedClientAsyncConnectionImpl(
-            final ClientAsyncConnectionManager manager,
-            final ClientAsyncConnectionFactory connFactory,
-            final HttpPoolEntry poolEntry) {
-        super();
-        this.manager = manager;
-        this.connFactory = connFactory;
-        this.poolEntry = poolEntry;
-        this.reusable = true;
-        this.duration = Long.MAX_VALUE;
-    }
-
-    HttpPoolEntry getPoolEntry() {
-        return this.poolEntry;
-    }
-
-    HttpPoolEntry detach() {
-        final HttpPoolEntry local = this.poolEntry;
-        this.poolEntry = null;
-        return local;
-    }
-
-    public ClientAsyncConnectionManager getManager() {
-        return this.manager;
-    }
-
-    private ClientAsyncConnection getConnection() {
-        final HttpPoolEntry local = this.poolEntry;
-        if (local == null) {
-            return null;
-        }
-        final IOSession session = local.getConnection();
-        return (ClientAsyncConnection) session.getAttribute(IOEventDispatch.CONNECTION_KEY);
-    }
-
-    private ClientAsyncConnection ensureConnection() {
-        final HttpPoolEntry local = this.poolEntry;
-        if (local == null) {
-            throw new ConnectionShutdownException();
-        }
-        final IOSession session = local.getConnection();
-        return (ClientAsyncConnection) session.getAttribute(IOEventDispatch.CONNECTION_KEY);
-    }
-
-    private HttpPoolEntry ensurePoolEntry() {
-        final HttpPoolEntry local = this.poolEntry;
-        if (local == null) {
-            throw new ConnectionShutdownException();
-        }
-        return local;
-    }
-
-    @Override
-    public void close() throws IOException {
-        final ClientAsyncConnection conn = getConnection();
-        if (conn != null) {
-            conn.close();
-        }
-    }
-
-    @Override
-    public void shutdown() throws IOException {
-        final ClientAsyncConnection conn = getConnection();
-        if (conn != null) {
-            conn.shutdown();
-        }
-    }
-
-    @Override
-    public boolean isOpen() {
-        final ClientAsyncConnection conn = getConnection();
-        if (conn != null) {
-            return conn.isOpen();
-        }
-        return false;
-    }
-
-    @Override
-    public boolean isStale() {
-        return isOpen();
-    }
-
-    @Override
-    public void setSocketTimeout(final int timeout) {
-        final ClientAsyncConnection conn = ensureConnection();
-        conn.setSocketTimeout(timeout);
-    }
-
-    @Override
-    public int getSocketTimeout() {
-        final ClientAsyncConnection conn = ensureConnection();
-        return conn.getSocketTimeout();
-    }
-
-    @Override
-    public HttpConnectionMetrics getMetrics() {
-        final ClientAsyncConnection conn = ensureConnection();
-        return conn.getMetrics();
-    }
-
-    @Override
-    public InetAddress getLocalAddress() {
-        final ClientAsyncConnection conn = ensureConnection();
-        return conn.getLocalAddress();
-    }
-
-    @Override
-    public int getLocalPort() {
-        final ClientAsyncConnection conn = ensureConnection();
-        return conn.getLocalPort();
-    }
-
-    @Override
-    public InetAddress getRemoteAddress() {
-        final ClientAsyncConnection conn = ensureConnection();
-        return conn.getRemoteAddress();
-    }
-
-    @Override
-    public int getRemotePort() {
-        final ClientAsyncConnection conn = ensureConnection();
-        return conn.getRemotePort();
-    }
-
-    @Override
-    public int getStatus() {
-        final ClientAsyncConnection conn = ensureConnection();
-        return conn.getStatus();
-    }
-
-    @Override
-    public HttpRequest getHttpRequest() {
-        final ClientAsyncConnection conn = ensureConnection();
-        return conn.getHttpRequest();
-    }
-
-    @Override
-    public HttpResponse getHttpResponse() {
-        final ClientAsyncConnection conn = ensureConnection();
-        return conn.getHttpResponse();
-    }
-
-    @Override
-    public HttpContext getContext() {
-        final ClientAsyncConnection conn = ensureConnection();
-        return conn.getContext();
-    }
-
-    @Override
-    public void requestInput() {
-        final ClientAsyncConnection conn = ensureConnection();
-        conn.requestInput();
-    }
-
-    @Override
-    public void suspendInput() {
-        final ClientAsyncConnection conn = ensureConnection();
-        conn.suspendInput();
-    }
-
-    @Override
-    public void requestOutput() {
-        final ClientAsyncConnection conn = ensureConnection();
-        conn.requestOutput();
-    }
-
-    @Override
-    public void suspendOutput() {
-        final ClientAsyncConnection conn = ensureConnection();
-        conn.suspendOutput();
-    }
-
-    @Override
-    public void submitRequest(final HttpRequest request) throws IOException, HttpException {
-        final ClientAsyncConnection conn = ensureConnection();
-        conn.submitRequest(request);
-    }
-
-    @Override
-    public boolean isRequestSubmitted() {
-        final ClientAsyncConnection conn = ensureConnection();
-        return conn.isRequestSubmitted();
-    }
-
-    @Override
-    public void resetOutput() {
-        final ClientAsyncConnection conn = ensureConnection();
-        conn.resetOutput();
-    }
-
-    @Override
-    public void resetInput() {
-        final ClientAsyncConnection conn = ensureConnection();
-        conn.resetInput();
-    }
-
-    @Override
-    public boolean isSecure() {
-        final ClientAsyncConnection conn = ensureConnection();
-        return conn.getIOSession() instanceof SSLIOSession;
-    }
-
-    @Override
-    public HttpRoute getRoute() {
-        final HttpPoolEntry entry = ensurePoolEntry();
-        return entry.getEffectiveRoute();
-    }
-
-    @Override
-    public SSLSession getSSLSession() {
-        final ClientAsyncConnection conn = ensureConnection();
-        final IOSession iosession = conn.getIOSession();
-        if (iosession instanceof SSLIOSession) {
-            return ((SSLIOSession) iosession).getSSLSession();
-        }
-        return null;
-    }
-
-    @Override
-    public Object getState() {
-        final HttpPoolEntry entry = ensurePoolEntry();
-        return entry.getState();
-    }
-
-    @Override
-    public void setState(final Object state) {
-        final HttpPoolEntry entry = ensurePoolEntry();
-        entry.setState(state);
-    }
-
-    @Override
-    public void markReusable() {
-        this.reusable = true;
-    }
-
-    @Override
-    public void unmarkReusable() {
-        this.reusable = false;
-    }
-
-    @Override
-    public boolean isMarkedReusable() {
-        return this.reusable;
-    }
-
-    @Override
-    public void setIdleDuration(final long duration, final TimeUnit unit) {
-        if(duration > 0) {
-            this.duration = unit.toMillis(duration);
-        } else {
-            this.duration = -1;
-        }
-    }
-
-    private AsyncSchemeRegistry getSchemeRegistry(final HttpContext context) {
-        AsyncSchemeRegistry reg = (AsyncSchemeRegistry) context.getAttribute(
-                ClientContext.SCHEME_REGISTRY);
-        if (reg == null) {
-            reg = this.manager.getSchemeRegistry();
-        }
-        return reg;
-    }
-
-    @Override
-    public synchronized void open(
-            final HttpRoute route,
-            final HttpContext context,
-            final HttpParams params) throws IOException {
-        final HttpPoolEntry entry = ensurePoolEntry();
-        final RouteTracker tracker = entry.getTracker();
-        if (tracker.isConnected()) {
-            throw new IllegalStateException("Connection already open");
-        }
-
-        final HttpHost target = route.getTargetHost();
-        final HttpHost proxy = route.getProxyHost();
-        IOSession iosession = entry.getConnection();
-
-        if (proxy == null) {
-            final AsyncScheme scheme = getSchemeRegistry(context).getScheme(target);
-            final LayeringStrategy layeringStrategy = scheme.getLayeringStrategy();
-            if (layeringStrategy != null) {
-                iosession = layeringStrategy.layer(iosession);
-            }
-        }
-
-        final ClientAsyncConnection conn = this.connFactory.create(
-                "http-outgoing-" + entry.getId(),
-                iosession,
-                params);
-        iosession.setAttribute(IOEventDispatch.CONNECTION_KEY, conn);
-
-        if (proxy == null) {
-            tracker.connectTarget(conn.getIOSession() instanceof SSLIOSession);
-        } else {
-            tracker.connectProxy(proxy, false);
-        }
-    }
-
-    @Override
-    public synchronized void tunnelProxy(
-            final HttpHost next, final HttpParams params) throws IOException {
-        final HttpPoolEntry entry = ensurePoolEntry();
-        final RouteTracker tracker = entry.getTracker();
-        if (!tracker.isConnected()) {
-            throw new IllegalStateException("Connection not open");
-        }
-        tracker.tunnelProxy(next, false);
-    }
-
-    @Override
-    public synchronized void tunnelTarget(
-            final HttpParams params) throws IOException {
-        final HttpPoolEntry entry = ensurePoolEntry();
-        final RouteTracker tracker = entry.getTracker();
-        if (!tracker.isConnected()) {
-            throw new IllegalStateException("Connection not open");
-        }
-        if (tracker.isTunnelled()) {
-            throw new IllegalStateException("Connection is already tunnelled");
-        }
-        tracker.tunnelTarget(false);
-    }
-
-    @Override
-    public synchronized void layerProtocol(
-            final HttpContext context, final HttpParams params) throws IOException {
-        final HttpPoolEntry entry = ensurePoolEntry();
-        final RouteTracker tracker = entry.getTracker();
-        if (!tracker.isConnected()) {
-            throw new IllegalStateException("Connection not open");
-        }
-        if (!tracker.isTunnelled()) {
-            throw new IllegalStateException("Protocol layering without a tunnel not supported");
-        }
-        if (tracker.isLayered()) {
-            throw new IllegalStateException("Multiple protocol layering not supported");
-        }
-        final HttpHost target = tracker.getTargetHost();
-        final AsyncScheme scheme = getSchemeRegistry(context).getScheme(target);
-        final LayeringStrategy layeringStrategy = scheme.getLayeringStrategy();
-        if (layeringStrategy == null) {
-            throw new IllegalStateException(scheme.getName() +
-                    " scheme does not provider support for protocol layering");
-        }
-        final IOSession iosession = entry.getConnection();
-        final ClientAsyncConnection conn = (ClientAsyncConnection) iosession.getAttribute(
-                IOEventDispatch.CONNECTION_KEY);
-        conn.upgrade((SSLIOSession) layeringStrategy.layer(iosession));
-        tracker.layerProtocol(layeringStrategy.isSecure());
-    }
-
-    @Override
-    public synchronized void releaseConnection() {
-        if (this.poolEntry == null) {
-            return;
-        }
-        this.manager.releaseConnection(this, this.duration, TimeUnit.MILLISECONDS);
-        this.poolEntry = null;
-    }
-
-    @Override
-    public synchronized void abortConnection() {
-        if (this.poolEntry == null) {
-            return;
-        }
-        this.reusable = false;
-        final IOSession iosession = this.poolEntry.getConnection();
-        final ClientAsyncConnection conn = (ClientAsyncConnection) iosession.getAttribute(
-                IOEventDispatch.CONNECTION_KEY);
-        try {
-            conn.shutdown();
-        } catch (final IOException ignore) {
-        }
-        this.manager.releaseConnection(this, this.duration, TimeUnit.MILLISECONDS);
-        this.poolEntry = null;
-    }
-
-    @Override
-    public synchronized String toString() {
-        if (this.poolEntry != null) {
-            return this.poolEntry.toString();
-        }
-        return "released";
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/PoolingClientAsyncConnectionManager.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/PoolingClientAsyncConnectionManager.java
deleted file mode 100644
index 582243e..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/impl/nio/conn/PoolingClientAsyncConnectionManager.java
+++ /dev/null
@@ -1,328 +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.http.impl.nio.conn;
-
-import java.io.IOException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.concurrent.BasicFuture;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.nio.conn.ClientAsyncConnectionFactory;
-import org.apache.http.nio.conn.ClientAsyncConnectionManager;
-import org.apache.http.nio.conn.ManagedClientAsyncConnection;
-import org.apache.http.nio.conn.scheme.AsyncSchemeRegistry;
-import org.apache.http.nio.reactor.ConnectingIOReactor;
-import org.apache.http.nio.reactor.IOEventDispatch;
-import org.apache.http.nio.reactor.IOReactorException;
-import org.apache.http.nio.reactor.IOReactorStatus;
-import org.apache.http.pool.ConnPoolControl;
-import org.apache.http.pool.PoolStats;
-import org.apache.http.util.Args;
-
-@Deprecated
-public class PoolingClientAsyncConnectionManager
-                              implements ClientAsyncConnectionManager, ConnPoolControl<HttpRoute> {
-
-    private final Log log = LogFactory.getLog(getClass());
-
-    private final ConnectingIOReactor ioreactor;
-    private final HttpNIOConnPool pool;
-    private final AsyncSchemeRegistry schemeRegistry;
-    private final ClientAsyncConnectionFactory connFactory;
-
-    public PoolingClientAsyncConnectionManager(
-            final ConnectingIOReactor ioreactor,
-            final AsyncSchemeRegistry schemeRegistry,
-            final long timeToLive, final TimeUnit tunit) {
-        super();
-        Args.notNull(ioreactor, "I/O reactor");
-        Args.notNull(schemeRegistry, "Scheme registory");
-        Args.notNull(tunit, "Time unit");
-        this.ioreactor = ioreactor;
-        this.pool = new HttpNIOConnPool(this.log, ioreactor, schemeRegistry, timeToLive, tunit);
-        this.schemeRegistry = schemeRegistry;
-        this.connFactory = createClientAsyncConnectionFactory();
-    }
-
-    public PoolingClientAsyncConnectionManager(
-            final ConnectingIOReactor ioreactor,
-            final AsyncSchemeRegistry schemeRegistry) throws IOReactorException {
-        this(ioreactor, schemeRegistry, -1, TimeUnit.MILLISECONDS);
-    }
-
-    public PoolingClientAsyncConnectionManager(
-            final ConnectingIOReactor ioreactor) throws IOReactorException {
-        this(ioreactor, AsyncSchemeRegistryFactory.createDefault());
-    }
-
-    @Override
-    protected void finalize() throws Throwable {
-        try {
-            shutdown();
-        } finally {
-            super.finalize();
-        }
-    }
-
-    protected ClientAsyncConnectionFactory createClientAsyncConnectionFactory() {
-        return new DefaultClientAsyncConnectionFactory();
-    }
-
-    @Override
-    public AsyncSchemeRegistry getSchemeRegistry() {
-        return this.schemeRegistry;
-    }
-
-    @Override
-    public void execute(final IOEventDispatch eventDispatch) throws IOException {
-        this.ioreactor.execute(eventDispatch);
-    }
-
-    @Override
-    public IOReactorStatus getStatus() {
-        return this.ioreactor.getStatus();
-    }
-
-    @Override
-    public void shutdown(final long waitMs) throws IOException {
-        this.log.debug("Connection manager is shutting down");
-        this.pool.shutdown(waitMs);
-        this.log.debug("Connection manager shut down");
-    }
-
-    @Override
-    public void shutdown() throws IOException {
-        this.log.debug("Connection manager is shutting down");
-        this.pool.shutdown(2000);
-        this.log.debug("Connection manager shut down");
-    }
-
-    private String format(final HttpRoute route, final Object state) {
-        final StringBuilder buf = new StringBuilder();
-        buf.append("[route: ").append(route).append("]");
-        if (state != null) {
-            buf.append("[state: ").append(state).append("]");
-        }
-        return buf.toString();
-    }
-
-    private String formatStats(final HttpRoute route) {
-        final StringBuilder buf = new StringBuilder();
-        final PoolStats totals = this.pool.getTotalStats();
-        final PoolStats stats = this.pool.getStats(route);
-        buf.append("[total kept alive: ").append(totals.getAvailable()).append("; ");
-        buf.append("route allocated: ").append(stats.getLeased() + stats.getAvailable());
-        buf.append(" of ").append(stats.getMax()).append("; ");
-        buf.append("total allocated: ").append(totals.getLeased() + totals.getAvailable());
-        buf.append(" of ").append(totals.getMax()).append("]");
-        return buf.toString();
-    }
-
-    private String format(final HttpPoolEntry entry) {
-        final StringBuilder buf = new StringBuilder();
-        buf.append("[id: ").append(entry.getId()).append("]");
-        buf.append("[route: ").append(entry.getRoute()).append("]");
-        final Object state = entry.getState();
-        if (state != null) {
-            buf.append("[state: ").append(state).append("]");
-        }
-        return buf.toString();
-    }
-
-    @Override
-    public Future<ManagedClientAsyncConnection> leaseConnection(
-            final HttpRoute route,
-            final Object state,
-            final long connectTimeout,
-            final TimeUnit tunit,
-            final FutureCallback<ManagedClientAsyncConnection> callback) {
-        Args.notNull(route, "HTTP route");
-        Args.notNull(tunit, "Time unit");
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("Connection request: " + format(route, state) + formatStats(route));
-        }
-        final BasicFuture<ManagedClientAsyncConnection> future = new BasicFuture<ManagedClientAsyncConnection>(
-                callback);
-        this.pool.lease(route, state, connectTimeout, tunit, new InternalPoolEntryCallback(future));
-        return future;
-    }
-
-    @Override
-    public void releaseConnection(
-            final ManagedClientAsyncConnection conn,
-            final long keepalive,
-            final TimeUnit tunit) {
-        Args.notNull(conn, "HTTP connection");
-        if (!(conn instanceof ManagedClientAsyncConnectionImpl)) {
-            throw new IllegalArgumentException("Connection class mismatch, " +
-                 "connection not obtained from this manager");
-        }
-        Args.notNull(tunit, "Time unit");
-        final ManagedClientAsyncConnectionImpl managedConn = (ManagedClientAsyncConnectionImpl) conn;
-        final ClientAsyncConnectionManager manager = managedConn.getManager();
-        if (manager != null && manager != this) {
-            throw new IllegalArgumentException("Connection not obtained from this manager");
-        }
-        if (this.pool.isShutdown()) {
-            return;
-        }
-
-        synchronized (managedConn) {
-            final HttpPoolEntry entry = managedConn.getPoolEntry();
-            if (entry == null) {
-                return;
-            }
-            try {
-                if (managedConn.isOpen() && !managedConn.isMarkedReusable()) {
-                    try {
-                        managedConn.shutdown();
-                    } catch (final IOException iox) {
-                        if (this.log.isDebugEnabled()) {
-                            this.log.debug("I/O exception shutting down released connection", iox);
-                        }
-                    }
-                }
-                if (managedConn.isOpen()) {
-                    entry.updateExpiry(keepalive, tunit != null ? tunit : TimeUnit.MILLISECONDS);
-                    if (this.log.isDebugEnabled()) {
-                        String s;
-                        if (keepalive > 0) {
-                            s = "for " + keepalive + " " + tunit;
-                        } else {
-                            s = "indefinitely";
-                        }
-                        this.log.debug("Connection " + format(entry) + " can be kept alive " + s);
-                    }
-                    // Do not time out pooled connection
-                    managedConn.setSocketTimeout(0);
-                }
-            } finally {
-                this.pool.release(managedConn.detach(), managedConn.isMarkedReusable());
-            }
-            if (this.log.isDebugEnabled()) {
-                this.log.debug("Connection released: " + format(entry) + formatStats(entry.getRoute()));
-            }
-        }
-    }
-
-    @Override
-    public PoolStats getTotalStats() {
-        return this.pool.getTotalStats();
-    }
-
-    @Override
-    public PoolStats getStats(final HttpRoute route) {
-        return this.pool.getStats(route);
-    }
-
-    @Override
-    public void setMaxTotal(final int max) {
-        this.pool.setMaxTotal(max);
-    }
-
-    @Override
-    public void setDefaultMaxPerRoute(final int max) {
-        this.pool.setDefaultMaxPerRoute(max);
-    }
-
-    @Override
-    public void setMaxPerRoute(final HttpRoute route, final int max) {
-        this.pool.setMaxPerRoute(route, max);
-    }
-
-    @Override
-    public int getMaxTotal() {
-        return this.pool.getMaxTotal();
-    }
-
-    @Override
-    public int getDefaultMaxPerRoute() {
-        return this.pool.getDefaultMaxPerRoute();
-    }
-
-    @Override
-    public int getMaxPerRoute(final HttpRoute route) {
-        return this.pool.getMaxPerRoute(route);
-    }
-
-    public void closeIdleConnections(final long idleTimeout, final TimeUnit tunit) {
-        if (log.isDebugEnabled()) {
-            log.debug("Closing connections idle longer than " + idleTimeout + " " + tunit);
-        }
-        this.pool.closeIdle(idleTimeout, tunit);
-    }
-
-    public void closeExpiredConnections() {
-        log.debug("Closing expired connections");
-        this.pool.closeExpired();
-    }
-
-    class InternalPoolEntryCallback implements FutureCallback<HttpPoolEntry> {
-
-        private final BasicFuture<ManagedClientAsyncConnection> future;
-
-        public InternalPoolEntryCallback(
-                final BasicFuture<ManagedClientAsyncConnection> future) {
-            super();
-            this.future = future;
-        }
-
-        @Override
-        public void completed(final HttpPoolEntry entry) {
-            if (log.isDebugEnabled()) {
-                log.debug("Connection leased: " + format(entry) + formatStats(entry.getRoute()));
-            }
-            final ManagedClientAsyncConnection conn = new ManagedClientAsyncConnectionImpl(
-                    PoolingClientAsyncConnectionManager.this,
-                    PoolingClientAsyncConnectionManager.this.connFactory,
-                    entry);
-            if (!this.future.completed(conn)) {
-                pool.release(entry, true);
-            }
-        }
-
-        @Override
-        public void failed(final Exception ex) {
-            if (log.isDebugEnabled()) {
-                log.debug("Connection request failed", ex);
-            }
-            this.future.failed(ex);
-        }
-
-        @Override
-        public void cancelled() {
-            log.debug("Connection request cancelled");
-            this.future.cancel(true);
-        }
-
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ClientAsyncConnection.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ClientAsyncConnection.java
deleted file mode 100644
index b47cbda..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ClientAsyncConnection.java
+++ /dev/null
@@ -1,40 +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.http.nio.conn;
-
-import org.apache.http.HttpInetConnection;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.nio.reactor.IOSession;
-
-@Deprecated
-public interface ClientAsyncConnection extends NHttpClientConnection, HttpInetConnection {
-
-    void upgrade(IOSession iosession);
-
-    IOSession getIOSession();
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ClientAsyncConnectionFactory.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ClientAsyncConnectionFactory.java
deleted file mode 100644
index a0b4422..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ClientAsyncConnectionFactory.java
+++ /dev/null
@@ -1,37 +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.http.nio.conn;
-
-import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.params.HttpParams;
-
-@Deprecated
-public interface ClientAsyncConnectionFactory {
-
-    ClientAsyncConnection create(String id, IOSession iosession, HttpParams params);
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ClientAsyncConnectionManager.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ClientAsyncConnectionManager.java
deleted file mode 100644
index ccde65f..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ClientAsyncConnectionManager.java
+++ /dev/null
@@ -1,50 +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.http.nio.conn;
-
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.nio.conn.scheme.AsyncSchemeRegistry;
-import org.apache.http.nio.reactor.IOReactor;
-
-@Deprecated
-public interface ClientAsyncConnectionManager extends IOReactor {
-
-    AsyncSchemeRegistry getSchemeRegistry();
-
-    Future<ManagedClientAsyncConnection> leaseConnection(
-            HttpRoute route, Object state,
-            long connectTimeout, TimeUnit timeUnit,
-            FutureCallback<ManagedClientAsyncConnection> callback);
-
-    void releaseConnection(ManagedClientAsyncConnection session,
-            long validDuration, TimeUnit timeUnit);
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ManagedClientAsyncConnection.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ManagedClientAsyncConnection.java
deleted file mode 100644
index b40042d..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ManagedClientAsyncConnection.java
+++ /dev/null
@@ -1,64 +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.http.nio.conn;
-
-import java.io.IOException;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.http.HttpHost;
-import org.apache.http.conn.ConnectionReleaseTrigger;
-import org.apache.http.conn.HttpRoutedConnection;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.params.HttpParams;
-import org.apache.http.protocol.HttpContext;
-
-@Deprecated
-public interface ManagedClientAsyncConnection
-    extends HttpRoutedConnection, NHttpClientConnection, ConnectionReleaseTrigger {
-
-    Object getState();
-
-    void setState(Object state);
-
-    void markReusable();
-
-    void unmarkReusable();
-
-    boolean isMarkedReusable();
-
-    void open(HttpRoute route, HttpContext context, HttpParams params) throws IOException;
-
-    void tunnelTarget(HttpParams params) throws IOException;
-
-    void tunnelProxy(HttpHost next, HttpParams params) throws IOException;
-
-    void layerProtocol(HttpContext context, HttpParams params) throws IOException;
-
-    void setIdleDuration(long duration, TimeUnit tunit);
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/AsyncScheme.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/AsyncScheme.java
deleted file mode 100644
index e9ebbe1..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/AsyncScheme.java
+++ /dev/null
@@ -1,115 +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.http.nio.conn.scheme;
-
-import java.util.Locale;
-
-import org.apache.http.util.Args;
-import org.apache.http.util.LangUtils;
-
-@Deprecated
-public final class AsyncScheme {
-
-    /** The name of this scheme, in lowercase. (e.g. http, https) */
-    private final String name;
-
-    /** The layering strategy for this scheme, if applicable */
-    private final LayeringStrategy strategy;
-
-    /** The default port for this scheme */
-    private final int defaultPort;
-
-    /** A string representation, for {@link #toString toString}. */
-    private String stringRep;
-    /*
-     *  This is used to cache the result of the toString() method
-     *  Since the method always generates the same value, there's no
-     *  need to synchronize, and it does not affect immutability.
-    */
-
-    public AsyncScheme(final String name, final int port, final LayeringStrategy strategy) {
-        Args.notNull(name, "Scheme name");
-        if ((port <= 0) || (port > 0xffff)) {
-            throw new IllegalArgumentException("Port is invalid: " + port);
-        }
-        this.name = name.toLowerCase(Locale.ROOT);
-        this.strategy = strategy;
-        this.defaultPort = port;
-    }
-
-    public final int getDefaultPort() {
-        return defaultPort;
-    }
-
-    public final LayeringStrategy getLayeringStrategy() {
-        return this.strategy;
-    }
-
-    public final String getName() {
-        return name;
-    }
-
-    public final int resolvePort(final int port) {
-        return port <= 0 ? defaultPort : port;
-    }
-
-    @Override
-    public final String toString() {
-        if (stringRep == null) {
-            final StringBuilder buffer = new StringBuilder();
-            buffer.append(this.name);
-            buffer.append(':');
-            buffer.append(Integer.toString(this.defaultPort));
-            stringRep = buffer.toString();
-        }
-        return stringRep;
-    }
-
-    @Override
-    public final boolean equals(final Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj instanceof AsyncScheme) {
-            final AsyncScheme that = (AsyncScheme) obj;
-            return this.name.equals(that.name)
-                && this.defaultPort == that.defaultPort
-                && this.strategy.equals(that.strategy);
-        }
-        return false;
-    }
-
-    @Override
-    public int hashCode() {
-        int hash = LangUtils.HASH_SEED;
-        hash = LangUtils.hashCode(hash, this.defaultPort);
-        hash = LangUtils.hashCode(hash, this.name);
-        hash = LangUtils.hashCode(hash, this.strategy);
-        return hash;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/AsyncSchemeRegistry.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/AsyncSchemeRegistry.java
deleted file mode 100644
index 9f2062e..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/AsyncSchemeRegistry.java
+++ /dev/null
@@ -1,173 +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.http.nio.conn.scheme;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.apache.http.HttpHost;
-
-/**
- * A set of supported protocol {@link AsyncScheme}s.
- * Schemes are identified by lowercase names.
- *
- */
-@Deprecated
-public final class AsyncSchemeRegistry {
-
-    /** The available schemes in this registry. */
-    private final Map<String, AsyncScheme> registeredSchemes;
-
-    /**
-     * Creates a new, empty scheme registry.
-     */
-    public AsyncSchemeRegistry() {
-        super();
-        registeredSchemes = new ConcurrentHashMap<String, AsyncScheme>();
-    }
-
-    /**
-     * Obtains a scheme by name.
-     *
-     * @param name      the name of the scheme to look up (in lowercase)
-     *
-     * @return  the scheme, never {@code null}
-     *
-     * @throws IllegalStateException
-     *          if the scheme with the given name is not registered
-     */
-    public final AsyncScheme getScheme(final String name) {
-        final AsyncScheme found = get(name);
-        if (found == null) {
-            throw new IllegalStateException
-                ("Scheme '"+name+"' not registered.");
-        }
-        return found;
-    }
-
-    /**
-     * Obtains the scheme for a host.
-     * Convenience method for {@code getScheme(host.getSchemeName())}
-     *
-     * @param host      the host for which to obtain the scheme
-     *
-     * @return  the scheme for the given host, never {@code null}
-     *
-     * @throws IllegalStateException
-     *          if a scheme with the respective name is not registered
-     */
-    public final AsyncScheme getScheme(final HttpHost host) {
-        if (host == null) {
-            throw new IllegalArgumentException("Host must not be null.");
-        }
-        return getScheme(host.getSchemeName());
-    }
-
-    /**
-     * Obtains a scheme by name, if registered.
-     *
-     * @param name      the name of the scheme to look up (in lowercase)
-     *
-     * @return  the scheme, or
-     *          {@code null} if there is none by this name
-     */
-    public final AsyncScheme get(final String name) {
-        if (name == null) {
-            throw new IllegalArgumentException("Name must not be null.");
-        }
-
-        // leave it to the caller to use the correct name - all lowercase
-        //name = name.toLowerCase(Locale.ENGLISH);
-        final AsyncScheme found = registeredSchemes.get(name);
-        return found;
-    }
-
-    /**
-     * Registers a scheme.
-     * The scheme can later be retrieved by its name
-     * using {@link #getScheme(String) getScheme} or {@link #get get}.
-     *
-     * @param sch       the scheme to register
-     *
-     * @return  the scheme previously registered with that name, or
-     *          {@code null} if none was registered
-     */
-    public final AsyncScheme register(final AsyncScheme sch) {
-        if (sch == null) {
-            throw new IllegalArgumentException("Scheme must not be null.");
-        }
-
-        final AsyncScheme old = registeredSchemes.put(sch.getName(), sch);
-        return old;
-    }
-
-    /**
-     * Unregisters a scheme.
-     *
-     * @param name      the name of the scheme to unregister (in lowercase)
-     *
-     * @return  the unregistered scheme, or
-     *          {@code null} if there was none
-     */
-    public final AsyncScheme unregister(final String name) {
-        if (name == null) {
-            throw new IllegalArgumentException("Name must not be null.");
-        }
-
-        // leave it to the caller to use the correct name - all lowercase
-        //name = name.toLowerCase(Locale.ENGLISH);
-        final AsyncScheme gone = registeredSchemes.remove(name);
-        return gone;
-    }
-
-    /**
-     * Obtains the names of the registered schemes.
-     *
-     * @return  List containing registered scheme names.
-     */
-    public final List<String> getSchemeNames() {
-        return new ArrayList<String>(registeredSchemes.keySet());
-    }
-
-    /**
-     * Populates the internal collection of registered {@link AsyncScheme protocol schemes}
-     * with the content of the map passed as a parameter.
-     *
-     * @param map protocol schemes
-     */
-    public void setItems(final Map<String, AsyncScheme> map) {
-        if (map == null) {
-            return;
-        }
-        registeredSchemes.clear();
-        registeredSchemes.putAll(map);
-    }
-
-}
-
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/LayeringStrategy.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/LayeringStrategy.java
deleted file mode 100644
index c794acf..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/LayeringStrategy.java
+++ /dev/null
@@ -1,38 +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.http.nio.conn.scheme;
-
-import org.apache.http.nio.reactor.IOSession;
-
-@Deprecated
-public interface LayeringStrategy {
-
-    boolean isSecure();
-
-    IOSession layer(IOSession iosession);
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/package-info.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/package-info.java
deleted file mode 100644
index 7284593..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/scheme/package-info.java
+++ /dev/null
@@ -1,31 +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/>.
- *
- */
-
-/**
- * Deprecated
- */
-package org.apache.http.nio.conn.scheme;
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ssl/SSLLayeringStrategy.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ssl/SSLLayeringStrategy.java
deleted file mode 100644
index e1c852d..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ssl/SSLLayeringStrategy.java
+++ /dev/null
@@ -1,225 +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.http.nio.conn.ssl;
-
-import java.net.InetSocketAddress;
-import java.security.KeyManagementException;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.Certificate;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.KeyManager;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLEngine;
-import javax.net.ssl.SSLException;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.TrustManagerFactory;
-import javax.net.ssl.X509TrustManager;
-
-import org.apache.http.conn.ssl.BrowserCompatHostnameVerifier;
-import org.apache.http.conn.ssl.SSLContexts;
-import org.apache.http.conn.ssl.TrustStrategy;
-import org.apache.http.conn.ssl.X509HostnameVerifier;
-import org.apache.http.nio.conn.scheme.LayeringStrategy;
-import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.nio.reactor.ssl.SSLIOSession;
-import org.apache.http.nio.reactor.ssl.SSLMode;
-import org.apache.http.nio.reactor.ssl.SSLSetupHandler;
-
-@Deprecated
-public class SSLLayeringStrategy implements LayeringStrategy {
-
-    public static final String TLS   = "TLS";
-    public static final String SSL   = "SSL";
-    public static final String SSLV2 = "SSLv2";
-
-    public static SSLLayeringStrategy getDefaultStrategy() {
-        return new SSLLayeringStrategy(SSLContexts.createDefault());
-    }
-
-    public static SSLLayeringStrategy getSystemDefaultStrategy() {
-        return new SSLLayeringStrategy(SSLContexts.createSystemDefault());
-    }
-
-    private final SSLContext sslContext;
-    private final X509HostnameVerifier hostnameVerifier;
-
-    private static SSLContext createSSLContext(
-            final String algorithm,
-            final KeyStore keystore,
-            final String keystorePassword,
-            final KeyStore truststore,
-            final SecureRandom random,
-            final TrustStrategy trustStrategy)
-                throws NoSuchAlgorithmException, KeyStoreException, UnrecoverableKeyException, KeyManagementException {
-        final String algo = algorithm != null ? algorithm : TLS;
-        final KeyManagerFactory kmfactory = KeyManagerFactory.getInstance(
-                KeyManagerFactory.getDefaultAlgorithm());
-        kmfactory.init(keystore, keystorePassword != null ? keystorePassword.toCharArray(): null);
-        final KeyManager[] keymanagers =  kmfactory.getKeyManagers();
-        final TrustManagerFactory tmfactory = TrustManagerFactory.getInstance(
-                TrustManagerFactory.getDefaultAlgorithm());
-        tmfactory.init(truststore);
-        final TrustManager[] trustmanagers = tmfactory.getTrustManagers();
-        if (trustmanagers != null && trustStrategy != null) {
-            for (int i = 0; i < trustmanagers.length; i++) {
-                final TrustManager tm = trustmanagers[i];
-                if (tm instanceof X509TrustManager) {
-                    trustmanagers[i] = new TrustManagerDecorator(
-                            (X509TrustManager) tm, trustStrategy);
-                }
-            }
-        }
-        final SSLContext sslcontext = SSLContext.getInstance(algo);
-        sslcontext.init(keymanagers, trustmanagers, random);
-        return sslcontext;
-    }
-
-    public SSLLayeringStrategy(
-            final String algorithm,
-            final KeyStore keystore,
-            final String keystorePassword,
-            final KeyStore truststore,
-            final SecureRandom random,
-            final X509HostnameVerifier hostnameVerifier)
-                throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
-        this(createSSLContext(
-                algorithm, keystore, keystorePassword, truststore, random, null),
-                hostnameVerifier);
-    }
-
-    public SSLLayeringStrategy(
-            final String algorithm,
-            final KeyStore keystore,
-            final String keystorePassword,
-            final KeyStore truststore,
-            final SecureRandom random,
-            final TrustStrategy trustStrategy,
-            final X509HostnameVerifier hostnameVerifier)
-                throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
-        this(createSSLContext(
-                algorithm, keystore, keystorePassword, truststore, random, trustStrategy),
-                hostnameVerifier);
-    }
-
-    public SSLLayeringStrategy(
-            final KeyStore keystore,
-            final String keystorePassword,
-            final KeyStore truststore)
-                throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
-        this(TLS, keystore, keystorePassword, truststore, null, null, new BrowserCompatHostnameVerifier());
-    }
-
-    public SSLLayeringStrategy(
-            final KeyStore keystore,
-            final String keystorePassword)
-                throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException{
-        this(TLS, keystore, keystorePassword, null, null, null, new BrowserCompatHostnameVerifier());
-    }
-
-    public SSLLayeringStrategy(
-            final KeyStore truststore)
-                throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
-        this(TLS, null, null, truststore, null, null, new BrowserCompatHostnameVerifier());
-    }
-
-    public SSLLayeringStrategy(
-            final TrustStrategy trustStrategy,
-            final X509HostnameVerifier hostnameVerifier)
-                throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
-        this(TLS, null, null, null, null, trustStrategy, hostnameVerifier);
-    }
-
-    public SSLLayeringStrategy(
-            final TrustStrategy trustStrategy)
-                throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
-        this(TLS, null, null, null, null, trustStrategy, new BrowserCompatHostnameVerifier());
-    }
-
-    public SSLLayeringStrategy(
-            final SSLContext sslContext, final X509HostnameVerifier hostnameVerifier) {
-        super();
-        this.sslContext = sslContext;
-        this.hostnameVerifier = hostnameVerifier;
-    }
-
-    public SSLLayeringStrategy(final SSLContext sslContext) {
-        this(sslContext, new BrowserCompatHostnameVerifier());
-    }
-
-    @Override
-    public boolean isSecure() {
-        return true;
-    }
-
-    @Override
-    public SSLIOSession layer(final IOSession iosession) {
-        final SSLIOSession ssliosession = new SSLIOSession(
-            iosession,
-            SSLMode.CLIENT,
-            this.sslContext,
-            new SSLSetupHandler() {
-
-                @Override
-                public void initalize(
-                        final SSLEngine sslengine) throws SSLException {
-                    initializeEngine(sslengine);
-                }
-
-                @Override
-                public void verify(
-                        final IOSession iosession,
-                        final SSLSession sslsession) throws SSLException {
-                    verifySession(iosession, sslsession);
-                }
-
-        });
-        iosession.setAttribute(SSLIOSession.SESSION_KEY, ssliosession);
-        return ssliosession;
-    }
-
-    protected void initializeEngine(final SSLEngine engine) {
-    }
-
-    protected void verifySession(
-            final IOSession iosession,
-            final SSLSession sslsession) throws SSLException {
-        final InetSocketAddress address = (InetSocketAddress) iosession.getRemoteAddress();
-
-        final Certificate[] certs = sslsession.getPeerCertificates();
-        final X509Certificate x509 = (X509Certificate) certs[0];
-        this.hostnameVerifier.verify(address.getHostName(), x509);
-    }
-
-}
diff --git a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ssl/TrustManagerDecorator.java b/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ssl/TrustManagerDecorator.java
deleted file mode 100644
index af50d99..0000000
--- a/httpasyncclient/src/main/java-deprecated/org/apache/http/nio/conn/ssl/TrustManagerDecorator.java
+++ /dev/null
@@ -1,67 +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.http.nio.conn.ssl;
-
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.X509TrustManager;
-
-import org.apache.http.conn.ssl.TrustStrategy;
-
-@Deprecated
-class TrustManagerDecorator implements X509TrustManager {
-
-    private final X509TrustManager trustManager;
-    private final TrustStrategy trustStrategy;
-
-    TrustManagerDecorator(final X509TrustManager trustManager, final TrustStrategy trustStrategy) {
-        super();
-        this.trustManager = trustManager;
-        this.trustStrategy = trustStrategy;
-    }
-
-    @Override
-    public void checkClientTrusted(
-            final X509Certificate[] chain, final String authType) throws CertificateException {
-        this.trustManager.checkClientTrusted(chain, authType);
-    }
-
-    @Override
-    public void checkServerTrusted(
-            final X509Certificate[] chain, final String authType) throws CertificateException {
-        if (!this.trustStrategy.isTrusted(chain, authType)) {
-            this.trustManager.checkServerTrusted(chain, authType);
-        }
-    }
-
-    @Override
-    public X509Certificate[] getAcceptedIssuers() {
-        return this.trustManager.getAcceptedIssuers();
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/AbstractClientExchangeHandler.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/AbstractClientExchangeHandler.java
deleted file mode 100644
index 8eaa3cc..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/AbstractClientExchangeHandler.java
+++ /dev/null
@@ -1,439 +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.http.impl.nio.client;
-
-import java.io.IOException;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.apache.commons.logging.Log;
-import org.apache.http.ConnectionClosedException;
-import org.apache.http.ConnectionReuseStrategy;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.HttpRequestWrapper;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.concurrent.BasicFuture;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.conn.ConnectionKeepAliveStrategy;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.conn.routing.RouteTracker;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.nio.conn.NHttpClientConnectionManager;
-import org.apache.http.nio.protocol.HttpAsyncClientExchangeHandler;
-import org.apache.http.nio.protocol.HttpAsyncRequestExecutor;
-import org.apache.http.util.Asserts;
-
-/**
- * Abstract {@link org.apache.http.nio.protocol.HttpAsyncClientExchangeHandler} class
- * that implements connection management aspects shared by all HTTP exchange handlers.
- * <p>
- * Instances of this class are expected to be accessed by one thread at a time only.
- * The {@link #cancel()} method can be called concurrently by multiple threads.
- */
-abstract class AbstractClientExchangeHandler<T> implements HttpAsyncClientExchangeHandler {
-
-    private static final AtomicLong COUNTER = new AtomicLong(1);
-
-    protected final Log log;
-
-    private final long id;
-    private final HttpClientContext localContext;
-    private final BasicFuture<T> resultFuture;
-    private final NHttpClientConnectionManager connmgr;
-    private final ConnectionReuseStrategy connReuseStrategy;
-    private final ConnectionKeepAliveStrategy keepaliveStrategy;
-    private final AtomicReference<NHttpClientConnection> managedConnRef;
-    private final AtomicReference<HttpRoute> routeRef;
-    private final AtomicReference<RouteTracker> routeTrackerRef;
-    private final AtomicBoolean routeEstablished;
-    private final AtomicReference<Long> validDurationRef;
-    private final AtomicReference<HttpRequestWrapper> requestRef;
-    private final AtomicReference<HttpResponse> responseRef;
-    private final AtomicBoolean completed;
-    private final AtomicBoolean closed;
-
-    AbstractClientExchangeHandler(
-            final Log log,
-            final HttpClientContext localContext,
-            final BasicFuture<T> resultFuture,
-            final NHttpClientConnectionManager connmgr,
-            final ConnectionReuseStrategy connReuseStrategy,
-            final ConnectionKeepAliveStrategy keepaliveStrategy) {
-        super();
-        this.log = log;
-        this.id = COUNTER.getAndIncrement();
-        this.localContext = localContext;
-        this.resultFuture = resultFuture;
-        this.connmgr = connmgr;
-        this.connReuseStrategy = connReuseStrategy;
-        this.keepaliveStrategy = keepaliveStrategy;
-        this.managedConnRef = new AtomicReference<NHttpClientConnection>(null);
-        this.routeRef = new AtomicReference<HttpRoute>(null);
-        this.routeTrackerRef = new AtomicReference<RouteTracker>(null);
-        this.routeEstablished = new AtomicBoolean(false);
-        this.validDurationRef = new AtomicReference<Long>(null);
-        this.requestRef = new AtomicReference<HttpRequestWrapper>(null);
-        this.responseRef = new AtomicReference<HttpResponse>(null);
-        this.completed = new AtomicBoolean(false);
-        this.closed = new AtomicBoolean(false);
-    }
-
-    final long getId() {
-        return this.id;
-    }
-
-    final boolean isCompleted() {
-        return this.completed.get();
-    }
-
-    final void markCompleted() {
-        this.completed.set(true);
-    }
-
-    final void markConnectionNonReusable() {
-        this.validDurationRef.set(null);
-    }
-
-    final boolean isRouteEstablished() {
-        return this.routeEstablished.get();
-    }
-
-    final HttpRoute getRoute() {
-        return this.routeRef.get();
-    }
-
-    final void setRoute(final HttpRoute route) {
-        this.routeRef.set(route);
-    }
-
-    final HttpRequestWrapper getCurrentRequest() {
-        return this.requestRef.get();
-    }
-
-    final void setCurrentRequest(final HttpRequestWrapper request) {
-        this.requestRef.set(request);
-    }
-
-    final HttpResponse getCurrentResponse() {
-        return this.responseRef.get();
-    }
-
-    final void setCurrentResponse(final HttpResponse response) {
-        this.responseRef.set(response);
-    }
-
-    final HttpRoute getActualRoute() {
-        final RouteTracker routeTracker = this.routeTrackerRef.get();
-        return routeTracker != null ? routeTracker.toRoute() : null;
-    }
-
-    final void verifytRoute() {
-        if (!this.routeEstablished.get() && this.routeTrackerRef.get() == null) {
-            final NHttpClientConnection managedConn = this.managedConnRef.get();
-            Asserts.check(managedConn != null, "Inconsistent state: managed connection is null");
-            final boolean routeComplete = this.connmgr.isRouteComplete(managedConn);
-            this.routeEstablished.set(routeComplete);
-            if (!routeComplete) {
-                this.log.debug("Start connection routing");
-                final HttpRoute route = this.routeRef.get();
-                this.routeTrackerRef.set(new RouteTracker(route));
-            } else {
-                this.log.debug("Connection route already established");
-            }
-        }
-    }
-
-    final void onRouteToTarget() throws IOException {
-        final NHttpClientConnection managedConn = this.managedConnRef.get();
-        Asserts.check(managedConn != null, "Inconsistent state: managed connection is null");
-        final HttpRoute route = this.routeRef.get();
-        Asserts.check(route != null, "Inconsistent state: HTTP route is null");
-        final RouteTracker routeTracker = this.routeTrackerRef.get();
-        Asserts.check(routeTracker != null, "Inconsistent state: HTTP route tracker");
-        this.connmgr.startRoute(managedConn, route, this.localContext);
-        routeTracker.connectTarget(route.isSecure());
-    }
-
-    final void onRouteToProxy() throws IOException {
-        final NHttpClientConnection managedConn = this.managedConnRef.get();
-        Asserts.check(managedConn != null, "Inconsistent state: managed connection is null");
-        final HttpRoute route = this.routeRef.get();
-        Asserts.check(route != null, "Inconsistent state: HTTP route is null");
-        final RouteTracker routeTracker = this.routeTrackerRef.get();
-        Asserts.check(routeTracker != null, "Inconsistent state: HTTP route tracker");
-        this.connmgr.startRoute(managedConn, route, this.localContext);
-        final HttpHost proxy  = route.getProxyHost();
-        routeTracker.connectProxy(proxy, false);
-    }
-
-    final void onRouteUpgrade() throws IOException {
-        final NHttpClientConnection managedConn = this.managedConnRef.get();
-        Asserts.check(managedConn != null, "Inconsistent state: managed connection is null");
-        final HttpRoute route = this.routeRef.get();
-        Asserts.check(route != null, "Inconsistent state: HTTP route is null");
-        final RouteTracker routeTracker = this.routeTrackerRef.get();
-        Asserts.check(routeTracker != null, "Inconsistent state: HTTP route tracker");
-        this.connmgr.upgrade(managedConn, route, this.localContext);
-        routeTracker.layerProtocol(route.isSecure());
-    }
-
-    final void onRouteTunnelToTarget() {
-        final RouteTracker routeTracker = this.routeTrackerRef.get();
-        Asserts.check(routeTracker != null, "Inconsistent state: HTTP route tracker");
-        routeTracker.tunnelTarget(false);
-    }
-
-    final void onRouteComplete() {
-        final NHttpClientConnection managedConn = this.managedConnRef.get();
-        Asserts.check(managedConn != null, "Inconsistent state: managed connection is null");
-        final HttpRoute route = this.routeRef.get();
-        Asserts.check(route != null, "Inconsistent state: HTTP route is null");
-        this.connmgr.routeComplete(managedConn, route, this.localContext);
-        this.routeEstablished.set(true);
-        this.routeTrackerRef.set(null);
-    }
-
-    final NHttpClientConnection getConnection() {
-        return this.managedConnRef.get();
-    }
-
-    final void releaseConnection() {
-        final NHttpClientConnection localConn = this.managedConnRef.getAndSet(null);
-        if (localConn != null) {
-            if (this.log.isDebugEnabled()) {
-                this.log.debug("[exchange: " + this.id + "] releasing connection");
-            }
-            localConn.getContext().removeAttribute(HttpAsyncRequestExecutor.HTTP_HANDLER);
-            final Long validDuration = this.validDurationRef.get();
-            if (validDuration != null) {
-                final Object userToken = this.localContext.getUserToken();
-                this.connmgr.releaseConnection(localConn, userToken, validDuration, TimeUnit.MILLISECONDS);
-            } else {
-                try {
-                    localConn.close();
-                    if (this.log.isDebugEnabled()) {
-                        this.log.debug("[exchange: " + this.id + "] connection discarded");
-                    }
-                } catch (final IOException ex) {
-                    if (this.log.isDebugEnabled()) {
-                        this.log.debug(ex.getMessage(), ex);
-                    }
-                } finally {
-                    this.connmgr.releaseConnection(localConn, null, 0, TimeUnit.MILLISECONDS);
-                }
-            }
-        }
-    }
-
-    final void discardConnection() {
-        final NHttpClientConnection localConn = this.managedConnRef.getAndSet(null);
-        if (localConn != null) {
-            try {
-                localConn.shutdown();
-                if (this.log.isDebugEnabled()) {
-                    this.log.debug("[exchange: " + this.id + "] connection aborted");
-                }
-            } catch (final IOException ex) {
-                if (this.log.isDebugEnabled()) {
-                    this.log.debug(ex.getMessage(), ex);
-                }
-            } finally {
-                this.connmgr.releaseConnection(localConn, null, 0, TimeUnit.MILLISECONDS);
-            }
-        }
-    }
-
-    final boolean manageConnectionPersistence() {
-        final HttpResponse response = this.responseRef.get();
-        Asserts.check(response != null, "Inconsistent state: HTTP response");
-        final NHttpClientConnection managedConn = this.managedConnRef.get();
-        Asserts.check(managedConn != null, "Inconsistent state: managed connection is null");
-        final boolean keepAlive = managedConn.isOpen() &&
-                this.connReuseStrategy.keepAlive(response, this.localContext);
-        if (keepAlive) {
-            final long validDuration = this.keepaliveStrategy.getKeepAliveDuration(
-                    response, this.localContext);
-            if (this.log.isDebugEnabled()) {
-                final String s;
-                if (validDuration > 0) {
-                    s = "for " + validDuration + " " + TimeUnit.MILLISECONDS;
-                } else {
-                    s = "indefinitely";
-                }
-                this.log.debug("[exchange: " + this.id + "] Connection can be kept alive " + s);
-            }
-            this.validDurationRef.set(validDuration);
-        } else {
-            if (this.log.isDebugEnabled()) {
-                this.log.debug("[exchange: " + this.id + "] Connection cannot be kept alive");
-            }
-            this.validDurationRef.set(null);
-        }
-        return keepAlive;
-    }
-
-    private void connectionAllocated(final NHttpClientConnection managedConn) {
-        try {
-            if (this.log.isDebugEnabled()) {
-                this.log.debug("[exchange: " + this.id + "] Connection allocated: " + managedConn);
-            }
-            this.managedConnRef.set(managedConn);
-
-            if (this.closed.get()) {
-                discardConnection();
-                return;
-            }
-
-            managedConn.getContext().setAttribute(HttpAsyncRequestExecutor.HTTP_HANDLER, this);
-            managedConn.requestOutput();
-            if (managedConn.isStale()) {
-                failed(new ConnectionClosedException("Connection closed"));
-            }
-        } catch (final RuntimeException runex) {
-            failed(runex);
-            throw runex;
-        }
-    }
-
-    private void connectionRequestFailed(final Exception ex) {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + this.id + "] connection request failed");
-        }
-        failed(ex);
-    }
-
-    private void connectionRequestCancelled() {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + this.id + "] Connection request cancelled");
-        }
-        try {
-            this.resultFuture.cancel();
-        } finally {
-            close();
-        }
-    }
-
-    final void requestConnection() {
-        final HttpRoute route = this.routeRef.get();
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + this.id + "] Request connection for " + route);
-        }
-
-        discardConnection();
-
-        this.validDurationRef.set(null);
-        this.routeTrackerRef.set(null);
-        this.routeEstablished.set(false);
-
-        final Object userToken = this.localContext.getUserToken();
-        final RequestConfig config = this.localContext.getRequestConfig();
-        this.connmgr.requestConnection(
-                route,
-                userToken,
-                config.getConnectTimeout(),
-                config.getConnectionRequestTimeout(),
-                TimeUnit.MILLISECONDS,
-                new FutureCallback<NHttpClientConnection>() {
-
-                    @Override
-                    public void completed(final NHttpClientConnection managedConn) {
-                        connectionAllocated(managedConn);
-                    }
-
-                    @Override
-                    public void failed(final Exception ex) {
-                        connectionRequestFailed(ex);
-                    }
-
-                    @Override
-                    public void cancelled() {
-                        connectionRequestCancelled();
-                    }
-
-                });
-    }
-
-    abstract void releaseResources();
-
-    abstract void executionFailed(final Exception ex);
-
-    abstract boolean executionCancelled();
-
-    @Override
-    public final void close() {
-        if (this.closed.compareAndSet(false, true)) {
-            discardConnection();
-            releaseResources();
-        }
-    }
-
-    @Override
-    public final boolean isDone() {
-        return this.completed.get();
-    }
-
-    @Override
-    public final void failed(final Exception ex) {
-        if (this.closed.compareAndSet(false, true)) {
-            try {
-                try {
-                    executionFailed(ex);
-                } finally {
-                    discardConnection();
-                    releaseResources();
-                }
-            } finally {
-                this.resultFuture.failed(ex);
-            }
-        }
-    }
-
-    @Override
-    public final boolean cancel() {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + this.id + "] Cancelled");
-        }
-        if (this.closed.compareAndSet(false, true)) {
-            try {
-                try {
-                    return executionCancelled();
-                } finally {
-                    discardConnection();
-                    releaseResources();
-                }
-            } finally {
-                this.resultFuture.cancel();
-            }
-        }
-        return false;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/CloseableHttpAsyncClient.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/CloseableHttpAsyncClient.java
deleted file mode 100644
index 33f7f5a..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/CloseableHttpAsyncClient.java
+++ /dev/null
@@ -1,127 +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.http.impl.nio.client;
-
-import java.io.Closeable;
-import java.net.URI;
-import java.util.concurrent.Future;
-
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.annotation.ThreadSafe;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.client.utils.URIUtils;
-import org.apache.http.concurrent.BasicFuture;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.nio.client.HttpAsyncClient;
-import org.apache.http.nio.client.methods.HttpAsyncMethods;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.util.Args;
-
-/**
- * Base implementation of {@link HttpAsyncClient} that also implements {@link Closeable}.
- *
- * @since 4.0
- */
-@ThreadSafe
-public abstract class CloseableHttpAsyncClient implements HttpAsyncClient, Closeable {
-
-    public abstract boolean isRunning();
-
-    public abstract void start();
-
-    @Override
-    public <T> Future<T> execute(
-            final HttpAsyncRequestProducer requestProducer,
-            final HttpAsyncResponseConsumer<T> responseConsumer,
-            final FutureCallback<T> callback) {
-        return execute(requestProducer, responseConsumer, HttpClientContext.create(), callback);
-    }
-
-    @Override
-    public Future<HttpResponse> execute(
-            final HttpHost target, final HttpRequest request, final HttpContext context,
-            final FutureCallback<HttpResponse> callback) {
-        return execute(
-                HttpAsyncMethods.create(target, request),
-                HttpAsyncMethods.createConsumer(),
-                context, callback);
-    }
-
-    @Override
-    public Future<HttpResponse> execute(
-            final HttpHost target, final HttpRequest request,
-            final FutureCallback<HttpResponse> callback) {
-        return execute(target, request, HttpClientContext.create(), callback);
-    }
-
-    @Override
-    public Future<HttpResponse> execute(
-            final HttpUriRequest request,
-            final FutureCallback<HttpResponse> callback) {
-        return execute(request, HttpClientContext.create(), callback);
-    }
-
-    @Override
-    public Future<HttpResponse> execute(
-            final HttpUriRequest request,
-            final HttpContext context,
-            final FutureCallback<HttpResponse> callback) {
-        final HttpHost target;
-        try {
-            target = determineTarget(request);
-        } catch (final ClientProtocolException ex) {
-            final BasicFuture<HttpResponse> future = new BasicFuture<HttpResponse>(callback);
-            future.failed(ex);
-            return future;
-        }
-        return execute(target, request, context, callback);
-    }
-
-    private HttpHost determineTarget(final HttpUriRequest request) throws ClientProtocolException {
-        Args.notNull(request, "HTTP request");
-        // A null target may be acceptable if there is a default target.
-        // Otherwise, the null target is detected in the director.
-        HttpHost target = null;
-
-        final URI requestURI = request.getURI();
-        if (requestURI.isAbsolute()) {
-            target = URIUtils.extractHost(requestURI);
-            if (target == null) {
-                throw new ClientProtocolException(
-                        "URI does not specify a valid host name: " + requestURI);
-            }
-        }
-        return target;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/CloseableHttpAsyncClientBase.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/CloseableHttpAsyncClientBase.java
deleted file mode 100644
index 5c12ce3..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/CloseableHttpAsyncClientBase.java
+++ /dev/null
@@ -1,117 +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.http.impl.nio.client;
-
-import java.io.IOException;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.nio.NHttpClientEventHandler;
-import org.apache.http.nio.conn.NHttpClientConnectionManager;
-import org.apache.http.nio.reactor.IOEventDispatch;
-import org.apache.http.util.Asserts;
-
-abstract class CloseableHttpAsyncClientBase extends CloseableHttpPipeliningClient {
-
-    private final Log log = LogFactory.getLog(getClass());
-
-    static enum Status {INACTIVE, ACTIVE, STOPPED}
-
-    private final NHttpClientConnectionManager connmgr;
-    private final Thread reactorThread;
-
-    private final AtomicReference<Status> status;
-
-    public CloseableHttpAsyncClientBase(
-            final NHttpClientConnectionManager connmgr,
-            final ThreadFactory threadFactory,
-            final NHttpClientEventHandler handler) {
-        super();
-        this.connmgr = connmgr;
-        if (threadFactory != null && handler != null) {
-            this.reactorThread = threadFactory.newThread(new Runnable() {
-
-                @Override
-                public void run() {
-                    try {
-                        final IOEventDispatch ioEventDispatch = new InternalIODispatch(handler);
-                        connmgr.execute(ioEventDispatch);
-                    } catch (final Exception ex) {
-                        log.error("I/O reactor terminated abnormally", ex);
-                    } finally {
-                        status.set(Status.STOPPED);
-                    }
-                }
-
-            });
-        } else {
-            this.reactorThread = null;
-        }
-        this.status = new AtomicReference<Status>(Status.INACTIVE);
-    }
-
-    @Override
-    public void start() {
-        if (this.status.compareAndSet(Status.INACTIVE, Status.ACTIVE)) {
-            if (this.reactorThread != null) {
-                this.reactorThread.start();
-            }
-        }
-    }
-
-    protected void ensureRunning() {
-        final Status currentStatus = this.status.get();
-        Asserts.check(currentStatus == Status.ACTIVE, "Request cannot be executed; " +
-                "I/O reactor status: %s", currentStatus);
-    }
-
-    @Override
-    public void close() {
-        if (this.status.compareAndSet(Status.ACTIVE, Status.STOPPED)) {
-            if (this.reactorThread != null) {
-                try {
-                    this.connmgr.shutdown();
-                } catch (final IOException ex) {
-                    this.log.error("I/O error shutting down connection manager", ex);
-                }
-                try {
-                    this.reactorThread.join();
-                } catch (final InterruptedException ex) {
-                    Thread.currentThread().interrupt();
-                }
-            }
-        }
-    }
-
-    @Override
-    public boolean isRunning() {
-        return this.status.get() == Status.ACTIVE;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/CloseableHttpPipeliningClient.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/CloseableHttpPipeliningClient.java
deleted file mode 100644
index 71890de..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/CloseableHttpPipeliningClient.java
+++ /dev/null
@@ -1,92 +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.http.impl.nio.client;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Future;
-
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.annotation.ThreadSafe;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.nio.client.HttpPipeliningClient;
-import org.apache.http.nio.client.methods.HttpAsyncMethods;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.util.Args;
-
-/**
- * Base implementation of {@link org.apache.http.nio.client.HttpPipeliningClient} that also
- * implements {@link java.io.Closeable}.
- *
- * @since 4.1
- */
-@ThreadSafe
-public abstract class CloseableHttpPipeliningClient
-        extends CloseableHttpAsyncClient implements HttpPipeliningClient {
-
-    @Override
-    public <T> Future<List<T>> execute(
-            final HttpHost target,
-            final List<? extends HttpAsyncRequestProducer> requestProducers,
-            final List<? extends HttpAsyncResponseConsumer<T>> responseConsumers,
-            final FutureCallback<List<T>> callback) {
-        return execute(target, requestProducers, responseConsumers, HttpClientContext.create(), callback);
-    }
-
-    @Override
-    public Future<List<HttpResponse>> execute(
-            final HttpHost target,
-            final List<HttpRequest> requests,
-            final FutureCallback<List<HttpResponse>> callback) {
-        return execute(target, requests, HttpClientContext.create(), callback);
-    }
-
-    @Override
-    public Future<List<HttpResponse>> execute(
-            final HttpHost target,
-            final List<HttpRequest> requests,
-            final HttpContext context,
-            final FutureCallback<List<HttpResponse>> callback) {
-        Args.notEmpty(requests, "HTTP request list");
-        final List<HttpAsyncRequestProducer> requestProducers = new ArrayList<HttpAsyncRequestProducer>(
-                requests.size());
-        final List<HttpAsyncResponseConsumer<HttpResponse>> responseConsumers = new ArrayList<HttpAsyncResponseConsumer<HttpResponse>>(
-                requests.size());
-        for (int i = 0; i < requests.size(); i++) {
-            final HttpRequest request = requests.get(i);
-            requestProducers.add(HttpAsyncMethods.create(target, request));
-            responseConsumers.add(HttpAsyncMethods.createConsumer());
-        }
-        return execute(target, requestProducers, responseConsumers, context, callback);
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncUserTokenHandler.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncUserTokenHandler.java
deleted file mode 100644
index f599fdd..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncUserTokenHandler.java
+++ /dev/null
@@ -1,103 +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.http.impl.nio.client;
-
-import org.apache.http.HttpConnection;
-import org.apache.http.annotation.Immutable;
-import org.apache.http.auth.AuthScheme;
-import org.apache.http.auth.AuthState;
-import org.apache.http.auth.Credentials;
-import org.apache.http.client.UserTokenHandler;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.nio.conn.ManagedNHttpClientConnection;
-import org.apache.http.protocol.HttpContext;
-
-import javax.net.ssl.SSLSession;
-import java.security.Principal;
-
-/**
- * Default implementation of {@link org.apache.http.client.UserTokenHandler}
- * for asynchrounous HTTP client communication. This class will use
- * an instance of {@link java.security.Principal} as a state object for
- * non-blocking HTTP connections, if it can be obtained from the given
- * execution context. This helps ensure persistent connections created with
- * a particular user identity within a particular security context can be
- * reused by the same user only.
- * <p>
- * This implementation will use the user principle of connection based
- * authentication schemes such as NTLM or that of the SSL session with
- * the client authentication turned on. If both are unavailable,
- * {@code null} token will be returned.
- *
- * @since 4.0
- */
-@Immutable
-public class DefaultAsyncUserTokenHandler implements UserTokenHandler {
-
-    public static final DefaultAsyncUserTokenHandler INSTANCE = new DefaultAsyncUserTokenHandler();
-
-    @Override
-    public Object getUserToken(final HttpContext context) {
-
-        final HttpClientContext clientContext = HttpClientContext.adapt(context);
-
-        Principal userPrincipal = null;
-
-        final AuthState targetAuthState = clientContext.getTargetAuthState();
-        if (targetAuthState != null) {
-            userPrincipal = getAuthPrincipal(targetAuthState);
-            if (userPrincipal == null) {
-                final AuthState proxyAuthState = clientContext.getProxyAuthState();
-                userPrincipal = getAuthPrincipal(proxyAuthState);
-            }
-        }
-
-        if (userPrincipal == null) {
-            final HttpConnection conn = clientContext.getConnection();
-            if (conn.isOpen() && conn instanceof ManagedNHttpClientConnection) {
-                final SSLSession sslsession = ((ManagedNHttpClientConnection) conn).getSSLSession();
-                if (sslsession != null) {
-                    userPrincipal = sslsession.getLocalPrincipal();
-                }
-            }
-        }
-
-        return userPrincipal;
-    }
-
-    private static Principal getAuthPrincipal(final AuthState authState) {
-        final AuthScheme scheme = authState.getAuthScheme();
-        if (scheme != null && scheme.isComplete() && scheme.isConnectionBased()) {
-            final Credentials creds = authState.getCredentials();
-            if (creds != null) {
-                return creds.getUserPrincipal();
-            }
-        }
-        return null;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultClientExchangeHandlerImpl.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultClientExchangeHandlerImpl.java
deleted file mode 100644
index 07aff6d..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/DefaultClientExchangeHandlerImpl.java
+++ /dev/null
@@ -1,211 +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.http.impl.nio.client;
-
-import java.io.IOException;
-
-import org.apache.commons.logging.Log;
-import org.apache.http.ConnectionReuseStrategy;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpExecutionAware;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.concurrent.BasicFuture;
-import org.apache.http.conn.ConnectionKeepAliveStrategy;
-import org.apache.http.nio.ContentDecoder;
-import org.apache.http.nio.ContentEncoder;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.nio.conn.NHttpClientConnectionManager;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-
-/**
- * Default implementation of {@link org.apache.http.nio.protocol.HttpAsyncClientExchangeHandler}.
- * <p>
- * Instances of this class are expected to be accessed by one thread at a time only.
- * The {@link #cancel()} method can be called concurrently by multiple threads.
- */
-class DefaultClientExchangeHandlerImpl<T> extends AbstractClientExchangeHandler {
-
-    private final HttpAsyncRequestProducer requestProducer;
-    private final HttpAsyncResponseConsumer<T> responseConsumer;
-    private final BasicFuture<T> resultFuture;
-    private final InternalClientExec exec;
-    private final InternalState state;
-
-    public DefaultClientExchangeHandlerImpl(
-            final Log log,
-            final HttpAsyncRequestProducer requestProducer,
-            final HttpAsyncResponseConsumer<T> responseConsumer,
-            final HttpClientContext localContext,
-            final BasicFuture<T> resultFuture,
-            final NHttpClientConnectionManager connmgr,
-            final ConnectionReuseStrategy connReuseStrategy,
-            final ConnectionKeepAliveStrategy keepaliveStrategy,
-            final InternalClientExec exec) {
-        super(log, localContext, resultFuture, connmgr, connReuseStrategy, keepaliveStrategy);
-        this.requestProducer = requestProducer;
-        this.responseConsumer = responseConsumer;
-        this.resultFuture = resultFuture;
-        this.exec = exec;
-        this.state = new InternalState(getId(), requestProducer, responseConsumer, localContext);
-    }
-
-    @Override
-    void releaseResources() {
-        try {
-            this.requestProducer.close();
-        } catch (final IOException ex) {
-            this.log.debug("I/O error closing request producer", ex);
-        }
-        try {
-            this.responseConsumer.close();
-        } catch (final IOException ex) {
-            this.log.debug("I/O error closing response consumer", ex);
-        }
-    }
-
-    @Override
-    void executionFailed(final Exception ex) {
-        this.requestProducer.failed(ex);
-        this.responseConsumer.failed(ex);
-    }
-
-    @Override
-    boolean executionCancelled() {
-        final boolean cancelled = this.responseConsumer.cancel();
-
-        final T result = this.responseConsumer.getResult();
-        final Exception ex = this.responseConsumer.getException();
-        if (ex != null) {
-            this.resultFuture.failed(ex);
-        } else if (result != null) {
-            this.resultFuture.completed(result);
-        } else {
-            this.resultFuture.cancel();
-        }
-        return cancelled;
-    }
-
-    public void start() throws HttpException, IOException {
-        final HttpHost target = this.requestProducer.getTarget();
-        final HttpRequest original = this.requestProducer.generateRequest();
-
-        if (original instanceof HttpExecutionAware) {
-            ((HttpExecutionAware) original).setCancellable(this);
-        }
-        this.exec.prepare(target, original, this.state, this);
-        requestConnection();
-    }
-
-    @Override
-    public HttpRequest generateRequest() throws IOException, HttpException {
-        return this.exec.generateRequest(this.state, this);
-    }
-
-    @Override
-    public void produceContent(
-            final ContentEncoder encoder, final IOControl ioctrl) throws IOException {
-        this.exec.produceContent(this.state, encoder, ioctrl);
-    }
-
-    @Override
-    public void requestCompleted() {
-        this.exec.requestCompleted(this.state, this);
-    }
-
-    @Override
-    public void responseReceived(
-            final HttpResponse response) throws IOException, HttpException {
-        this.exec.responseReceived(response, this.state, this);
-    }
-
-    @Override
-    public void consumeContent(
-            final ContentDecoder decoder, final IOControl ioctrl) throws IOException {
-        this.exec.consumeContent(this.state, decoder, ioctrl);
-        if (!decoder.isCompleted() && this.responseConsumer.isDone()) {
-            markConnectionNonReusable();
-            try {
-                markCompleted();
-                releaseConnection();
-                this.resultFuture.cancel();
-            } finally {
-                close();
-            }
-        }
-    }
-
-    @Override
-    public void responseCompleted() throws IOException, HttpException {
-        this.exec.responseCompleted(this.state, this);
-
-        if (this.state.getFinalResponse() != null || this.resultFuture.isDone()) {
-            try {
-                markCompleted();
-                releaseConnection();
-                final T result = this.responseConsumer.getResult();
-                final Exception ex = this.responseConsumer.getException();
-                if (ex == null) {
-                    this.resultFuture.completed(result);
-                } else {
-                    this.resultFuture.failed(ex);
-                }
-            } finally {
-                close();
-            }
-        } else {
-            NHttpClientConnection localConn = getConnection();
-            if (localConn != null && !localConn.isOpen()) {
-                releaseConnection();
-                localConn = null;
-            }
-            if (localConn != null) {
-                localConn.requestOutput();
-            } else {
-                requestConnection();
-            }
-        }
-    }
-
-    @Override
-    public void inputTerminated() {
-        if (!isCompleted()) {
-            requestConnection();
-        } else {
-            close();
-        }
-    }
-
-    public void abortConnection() {
-        discardConnection();
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/HttpAsyncClientBuilder.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/HttpAsyncClientBuilder.java
deleted file mode 100644
index c6980a4..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/HttpAsyncClientBuilder.java
+++ /dev/null
@@ -1,898 +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.http.impl.nio.client;
-
-import java.net.ProxySelector;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLContext;
-
-import org.apache.http.ConnectionReuseStrategy;
-import org.apache.http.Header;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequestInterceptor;
-import org.apache.http.HttpResponseInterceptor;
-import org.apache.http.annotation.NotThreadSafe;
-import org.apache.http.auth.AuthSchemeProvider;
-import org.apache.http.client.AuthenticationStrategy;
-import org.apache.http.client.CookieStore;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.RedirectStrategy;
-import org.apache.http.client.UserTokenHandler;
-import org.apache.http.client.config.AuthSchemes;
-import org.apache.http.client.config.CookieSpecs;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.protocol.RequestAddCookies;
-import org.apache.http.client.protocol.RequestAuthCache;
-import org.apache.http.client.protocol.RequestClientConnControl;
-import org.apache.http.client.protocol.RequestDefaultHeaders;
-import org.apache.http.client.protocol.RequestExpectContinue;
-import org.apache.http.client.protocol.ResponseProcessCookies;
-import org.apache.http.config.ConnectionConfig;
-import org.apache.http.config.Lookup;
-import org.apache.http.config.RegistryBuilder;
-import org.apache.http.conn.ConnectionKeepAliveStrategy;
-import org.apache.http.conn.DnsResolver;
-import org.apache.http.conn.SchemePortResolver;
-import org.apache.http.conn.routing.HttpRoutePlanner;
-import org.apache.http.conn.ssl.DefaultHostnameVerifier;
-import org.apache.http.conn.ssl.X509HostnameVerifier;
-import org.apache.http.conn.util.PublicSuffixMatcher;
-import org.apache.http.conn.util.PublicSuffixMatcherLoader;
-import org.apache.http.cookie.CookieSpecProvider;
-import org.apache.http.impl.DefaultConnectionReuseStrategy;
-import org.apache.http.impl.NoConnectionReuseStrategy;
-import org.apache.http.impl.auth.BasicSchemeFactory;
-import org.apache.http.impl.auth.DigestSchemeFactory;
-import org.apache.http.impl.auth.KerberosSchemeFactory;
-import org.apache.http.impl.auth.NTLMSchemeFactory;
-import org.apache.http.impl.auth.SPNegoSchemeFactory;
-import org.apache.http.impl.client.BasicCookieStore;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
-import org.apache.http.impl.client.DefaultRedirectStrategy;
-import org.apache.http.impl.client.NoopUserTokenHandler;
-import org.apache.http.impl.client.ProxyAuthenticationStrategy;
-import org.apache.http.impl.client.TargetAuthenticationStrategy;
-import org.apache.http.impl.conn.DefaultProxyRoutePlanner;
-import org.apache.http.impl.conn.DefaultRoutePlanner;
-import org.apache.http.impl.conn.DefaultSchemePortResolver;
-import org.apache.http.impl.conn.SystemDefaultRoutePlanner;
-import org.apache.http.impl.cookie.DefaultCookieSpecProvider;
-import org.apache.http.impl.cookie.IgnoreSpecProvider;
-import org.apache.http.impl.cookie.NetscapeDraftSpecProvider;
-import org.apache.http.impl.cookie.RFC6265CookieSpecProvider;
-import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager;
-import org.apache.http.impl.nio.reactor.IOReactorConfig;
-import org.apache.http.nio.NHttpClientEventHandler;
-import org.apache.http.nio.conn.NHttpClientConnectionManager;
-import org.apache.http.nio.conn.NoopIOSessionStrategy;
-import org.apache.http.nio.conn.SchemeIOSessionStrategy;
-import org.apache.http.nio.conn.ssl.SSLIOSessionStrategy;
-import org.apache.http.nio.protocol.HttpAsyncRequestExecutor;
-import org.apache.http.nio.reactor.ConnectingIOReactor;
-import org.apache.http.protocol.HttpProcessor;
-import org.apache.http.protocol.HttpProcessorBuilder;
-import org.apache.http.protocol.RequestContent;
-import org.apache.http.protocol.RequestTargetHost;
-import org.apache.http.protocol.RequestUserAgent;
-import org.apache.http.ssl.SSLContexts;
-import org.apache.http.util.TextUtils;
-import org.apache.http.util.VersionInfo;
-
-/**
- * Builder for {@link CloseableHttpAsyncClient} instances.
- * <p>
- * When a particular component is not explicitly this class will
- * use its default implementation. System properties will be taken
- * into account when configuring the default implementations when
- * {@link #useSystemProperties()} method is called prior to calling
- * {@link #build()}.
- * <ul>
- *  <li>ssl.TrustManagerFactory.algorithm</li>
- *  <li>javax.net.ssl.trustStoreType</li>
- *  <li>javax.net.ssl.trustStore</li>
- *  <li>javax.net.ssl.trustStoreProvider</li>
- *  <li>javax.net.ssl.trustStorePassword</li>
- *  <li>ssl.KeyManagerFactory.algorithm</li>
- *  <li>javax.net.ssl.keyStoreType</li>
- *  <li>javax.net.ssl.keyStore</li>
- *  <li>javax.net.ssl.keyStoreProvider</li>
- *  <li>javax.net.ssl.keyStorePassword</li>
- *  <li>https.protocols</li>
- *  <li>https.cipherSuites</li>
- *  <li>http.proxyHost</li>
- *  <li>http.proxyPort</li>
- *  <li>http.keepAlive</li>
- *  <li>http.maxConnections</li>
- *  <li>http.agent</li>
- * </ul>
- * <p>
- * Please note that some settings used by this class can be mutually
- * exclusive and may not apply when building {@link CloseableHttpAsyncClient}
- * instances.
- *
- * @since 4.0
- */
-@NotThreadSafe
-public class HttpAsyncClientBuilder {
-
-    private NHttpClientConnectionManager connManager;
-    private boolean connManagerShared;
-    private SchemePortResolver schemePortResolver;
-    private SchemeIOSessionStrategy sslStrategy;
-    private HostnameVerifier hostnameVerifier;
-    private SSLContext sslcontext;
-    private ConnectionReuseStrategy reuseStrategy;
-    private ConnectionKeepAliveStrategy keepAliveStrategy;
-    private AuthenticationStrategy targetAuthStrategy;
-    private AuthenticationStrategy proxyAuthStrategy;
-    private UserTokenHandler userTokenHandler;
-    private HttpProcessor httpprocessor;
-    private DnsResolver dnsResolver;
-
-    private LinkedList<HttpRequestInterceptor> requestFirst;
-    private LinkedList<HttpRequestInterceptor> requestLast;
-    private LinkedList<HttpResponseInterceptor> responseFirst;
-    private LinkedList<HttpResponseInterceptor> responseLast;
-
-    private HttpRoutePlanner routePlanner;
-    private RedirectStrategy redirectStrategy;
-    private Lookup<AuthSchemeProvider> authSchemeRegistry;
-    private Lookup<CookieSpecProvider> cookieSpecRegistry;
-    private CookieStore cookieStore;
-    private CredentialsProvider credentialsProvider;
-    private String userAgent;
-    private HttpHost proxy;
-    private Collection<? extends Header> defaultHeaders;
-    private IOReactorConfig defaultIOReactorConfig;
-    private ConnectionConfig defaultConnectionConfig;
-    private RequestConfig defaultRequestConfig;
-
-    private ThreadFactory threadFactory;
-    private NHttpClientEventHandler eventHandler;
-
-    private PublicSuffixMatcher publicSuffixMatcher;
-
-    private boolean systemProperties;
-    private boolean cookieManagementDisabled;
-    private boolean authCachingDisabled;
-    private boolean connectionStateDisabled;
-
-    private int maxConnTotal = 0;
-    private int maxConnPerRoute = 0;
-
-    public static HttpAsyncClientBuilder create() {
-        return new HttpAsyncClientBuilder();
-    }
-
-    protected HttpAsyncClientBuilder() {
-        super();
-    }
-
-    /**
-     * Assigns file containing public suffix matcher. Instances of this class can be created
-     * with {@link org.apache.http.conn.util.PublicSuffixMatcherLoader}.
-     *
-     * @see org.apache.http.conn.util.PublicSuffixMatcher
-     * @see org.apache.http.conn.util.PublicSuffixMatcherLoader
-     *
-     *   @since 4.1
-     */
-    public final HttpAsyncClientBuilder setPublicSuffixMatcher(final PublicSuffixMatcher publicSuffixMatcher) {
-        this.publicSuffixMatcher = publicSuffixMatcher;
-        return this;
-    }
-
-    /**
-     * Assigns {@link NHttpClientConnectionManager} instance.
-     */
-    public final HttpAsyncClientBuilder setConnectionManager(
-            final NHttpClientConnectionManager connManager) {
-        this.connManager = connManager;
-        return this;
-    }
-
-    /**
-     * Defines the connection manager is to be shared by multiple
-     * client instances.
-     * <p>
-     * If the connection manager is shared its life-cycle is expected
-     * to be managed by the caller and it will not be shut down
-     * if the client is closed.
-     *
-     * @param shared defines whether or not the connection manager can be shared
-     *  by multiple clients.
-     *
-     * @since 4.1
-     */
-    public final HttpAsyncClientBuilder setConnectionManagerShared(
-            final boolean shared) {
-        this.connManagerShared = shared;
-        return this;
-    }
-
-    /**
-     * Assigns {@link SchemePortResolver} instance.
-     */
-    public final HttpAsyncClientBuilder setSchemePortResolver(
-            final SchemePortResolver schemePortResolver) {
-        this.schemePortResolver = schemePortResolver;
-        return this;
-    }
-
-    /**
-     * Assigns maximum total connection value.
-     * <p>
-     * Please note this value can be overridden by the {@link #setConnectionManager(
-     *   org.apache.http.nio.conn.NHttpClientConnectionManager)} method.
-     */
-    public final HttpAsyncClientBuilder setMaxConnTotal(final int maxConnTotal) {
-        this.maxConnTotal = maxConnTotal;
-        return this;
-    }
-
-    /**
-     * Assigns maximum connection per route value.
-     * <p>
-     * Please note this value can be overridden by the {@link #setConnectionManager(
-     *   org.apache.http.nio.conn.NHttpClientConnectionManager)} method.
-     */
-    public final HttpAsyncClientBuilder setMaxConnPerRoute(final int maxConnPerRoute) {
-        this.maxConnPerRoute = maxConnPerRoute;
-        return this;
-    }
-
-    /**
-     * Assigns {@link ConnectionReuseStrategy} instance.
-     */
-    public final HttpAsyncClientBuilder setConnectionReuseStrategy(
-            final ConnectionReuseStrategy reuseStrategy) {
-        this.reuseStrategy = reuseStrategy;
-        return this;
-    }
-
-    /**
-     * Assigns {@link ConnectionKeepAliveStrategy} instance.
-     */
-    public final HttpAsyncClientBuilder setKeepAliveStrategy(
-            final ConnectionKeepAliveStrategy keepAliveStrategy) {
-        this.keepAliveStrategy = keepAliveStrategy;
-        return this;
-    }
-
-    /**
-     * Assigns {@link UserTokenHandler} instance.
-     * <p>
-     * Please note this value can be overridden by the {@link #disableConnectionState()}
-     * method.
-     */
-    public final HttpAsyncClientBuilder setUserTokenHandler(final UserTokenHandler userTokenHandler) {
-        this.userTokenHandler = userTokenHandler;
-        return this;
-    }
-
-    /**
-     * Assigns {@link AuthenticationStrategy} instance for proxy
-     * authentication.
-     */
-    public final HttpAsyncClientBuilder setTargetAuthenticationStrategy(
-            final AuthenticationStrategy targetAuthStrategy) {
-        this.targetAuthStrategy = targetAuthStrategy;
-        return this;
-    }
-
-    /**
-     * Assigns {@link AuthenticationStrategy} instance for target
-     * host authentication.
-     */
-    public final HttpAsyncClientBuilder setProxyAuthenticationStrategy(
-            final AuthenticationStrategy proxyAuthStrategy) {
-        this.proxyAuthStrategy = proxyAuthStrategy;
-        return this;
-    }
-
-    /**
-     * Assigns {@link HttpProcessor} instance.
-     */
-    public final HttpAsyncClientBuilder setHttpProcessor(final HttpProcessor httpprocessor) {
-        this.httpprocessor = httpprocessor;
-        return this;
-    }
-
-    /**
-     * Assigns {@link DnsResolver} instance.
-     * <p>
-     * Please note this value can be overridden by the {@link #setConnectionManager(
-     *   org.apache.http.nio.conn.NHttpClientConnectionManager)} method.
-     */
-    public final HttpAsyncClientBuilder setDnsResolver(final DnsResolver dnsResolver){
-        this.dnsResolver = dnsResolver;
-        return this;
-    }
-
-    /**
-     * Adds this protocol interceptor to the head of the protocol processing list.
-     * <p>
-     * Please note this value can be overridden by the {@link #setHttpProcessor(
-     * org.apache.http.protocol.HttpProcessor)} method.
-     */
-    public final HttpAsyncClientBuilder addInterceptorFirst(final HttpResponseInterceptor itcp) {
-        if (itcp == null) {
-            return this;
-        }
-        if (responseFirst == null) {
-            responseFirst = new LinkedList<HttpResponseInterceptor>();
-        }
-        responseFirst.addFirst(itcp);
-        return this;
-    }
-
-    /**
-     * Adds this protocol interceptor to the tail of the protocol processing list.
-     * <p>
-     * Please note this value can be overridden by the {@link #setHttpProcessor(
-     * org.apache.http.protocol.HttpProcessor)} method.
-     */
-    public final HttpAsyncClientBuilder addInterceptorLast(final HttpResponseInterceptor itcp) {
-        if (itcp == null) {
-            return this;
-        }
-        if (responseLast == null) {
-            responseLast = new LinkedList<HttpResponseInterceptor>();
-        }
-        responseLast.addLast(itcp);
-        return this;
-    }
-
-    /**
-     * Adds this protocol interceptor to the head of the protocol processing list.
-     * <p>
-     * Please note this value can be overridden by the {@link #setHttpProcessor(
-     * org.apache.http.protocol.HttpProcessor)} method.
-     */
-    public final HttpAsyncClientBuilder addInterceptorFirst(final HttpRequestInterceptor itcp) {
-        if (itcp == null) {
-            return this;
-        }
-        if (requestFirst == null) {
-            requestFirst = new LinkedList<HttpRequestInterceptor>();
-        }
-        requestFirst.addFirst(itcp);
-        return this;
-    }
-
-    /**
-     * Adds this protocol interceptor to the tail of the protocol processing list.
-     * <p>
-     * Please note this value can be overridden by the {@link #setHttpProcessor(
-     * org.apache.http.protocol.HttpProcessor)} method.
-     */
-    public final HttpAsyncClientBuilder addInterceptorLast(final HttpRequestInterceptor itcp) {
-        if (itcp == null) {
-            return this;
-        }
-        if (requestLast == null) {
-            requestLast = new LinkedList<HttpRequestInterceptor>();
-        }
-        requestLast.addLast(itcp);
-        return this;
-    }
-
-    /**
-     * Assigns {@link HttpRoutePlanner} instance.
-     */
-    public final HttpAsyncClientBuilder setRoutePlanner(final HttpRoutePlanner routePlanner) {
-        this.routePlanner = routePlanner;
-        return this;
-    }
-
-    /**
-     * Assigns {@link RedirectStrategy} instance.
-     */
-    public final HttpAsyncClientBuilder setRedirectStrategy(final RedirectStrategy redirectStrategy) {
-        this.redirectStrategy = redirectStrategy;
-        return this;
-    }
-
-    /**
-     * Assigns default {@link CookieStore} instance which will be used for
-     * request execution if not explicitly set in the client execution context.
-     */
-    public final HttpAsyncClientBuilder setDefaultCookieStore(final CookieStore cookieStore) {
-        this.cookieStore = cookieStore;
-        return this;
-    }
-
-    /**
-     * Assigns default {@link CredentialsProvider} instance which will be used
-     * for request execution if not explicitly set in the client execution
-     * context.
-     */
-    public final HttpAsyncClientBuilder setDefaultCredentialsProvider(
-            final CredentialsProvider credentialsProvider) {
-        this.credentialsProvider = credentialsProvider;
-        return this;
-    }
-
-
-    /**
-     * Assigns default {@link org.apache.http.auth.AuthScheme} registry which will
-     * be used for request execution if not explicitly set in the client execution
-     * context.
-     */
-    public final HttpAsyncClientBuilder setDefaultAuthSchemeRegistry(
-            final Lookup<AuthSchemeProvider> authSchemeRegistry) {
-        this.authSchemeRegistry = authSchemeRegistry;
-        return this;
-    }
-
-    /**
-     * Assigns default {@link org.apache.http.cookie.CookieSpec} registry which will
-     * be used for request execution if not explicitly set in the client execution
-     * context.
-     */
-    public final HttpAsyncClientBuilder setDefaultCookieSpecRegistry(
-            final Lookup<CookieSpecProvider> cookieSpecRegistry) {
-        this.cookieSpecRegistry = cookieSpecRegistry;
-        return this;
-    }
-
-    /**
-     * Assigns {@code User-Agent} value.
-     * <p>
-     * Please note this value can be overridden by the {@link #setHttpProcessor(
-     * org.apache.http.protocol.HttpProcessor)} method.
-     */
-    public final HttpAsyncClientBuilder setUserAgent(final String userAgent) {
-        this.userAgent = userAgent;
-        return this;
-    }
-
-    /**
-     * Assigns default proxy value.
-     * <p>
-     * Please note this value can be overridden by the {@link #setRoutePlanner(
-     *   org.apache.http.conn.routing.HttpRoutePlanner)} method.
-     */
-    public final HttpAsyncClientBuilder setProxy(final HttpHost proxy) {
-        this.proxy = proxy;
-        return this;
-    }
-
-    /**
-     * Assigns {@link SchemeIOSessionStrategy} instance.
-     * <p>
-     * Please note this value can be overridden by the {@link #setConnectionManager(
-     *   org.apache.http.nio.conn.NHttpClientConnectionManager)} method.
-     */
-    public final HttpAsyncClientBuilder setSSLStrategy(final SchemeIOSessionStrategy strategy) {
-        this.sslStrategy = strategy;
-        return this;
-    }
-
-    /**
-     * Assigns {@link SSLContext} instance.
-     * <p>
-     * Please note this value can be overridden by the {@link #setConnectionManager(
-     *   org.apache.http.nio.conn.NHttpClientConnectionManager)} and the {@link #setSSLStrategy(
-     *   org.apache.http.nio.conn.SchemeIOSessionStrategy)} methods.
-     */
-    public final HttpAsyncClientBuilder setSSLContext(final SSLContext sslcontext) {
-        this.sslcontext = sslcontext;
-        return this;
-    }
-
-    /**
-     * Assigns {@link X509HostnameVerifier} instance.
-     * <p>
-     * Please note this value can be overridden by the {@link #setConnectionManager(
-     *   org.apache.http.nio.conn.NHttpClientConnectionManager)} and the {@link #setSSLStrategy(
-     *   org.apache.http.nio.conn.SchemeIOSessionStrategy)} methods.
-     *
-     * @deprecated (4.1) use {@link #setSSLHostnameVerifier(javax.net.ssl.HostnameVerifier)}
-     */
-    @Deprecated
-    public final HttpAsyncClientBuilder setHostnameVerifier(final X509HostnameVerifier hostnameVerifier) {
-        this.hostnameVerifier = hostnameVerifier;
-        return this;
-    }
-
-    /**
-     * Assigns {@link javax.net.ssl.HostnameVerifier} instance.
-     * <p>
-     * Please note this value can be overridden by the {@link #setConnectionManager(
-     *   org.apache.http.nio.conn.NHttpClientConnectionManager)} and the {@link #setSSLStrategy(
-     *   org.apache.http.nio.conn.SchemeIOSessionStrategy)} methods.
-     *
-     * @since 4.1
-     */
-    public final HttpAsyncClientBuilder setSSLHostnameVerifier(final HostnameVerifier hostnameVerifier) {
-        this.hostnameVerifier = hostnameVerifier;
-        return this;
-    }
-
-    /**
-     * Assigns default request header values.
-     * <p>
-     * Please note this value can be overridden by the {@link #setHttpProcessor(
-     * org.apache.http.protocol.HttpProcessor)} method.
-     */
-    public final HttpAsyncClientBuilder setDefaultHeaders(final Collection<? extends Header> defaultHeaders) {
-        this.defaultHeaders = defaultHeaders;
-        return this;
-    }
-
-    /**
-     * Assigns default {@link IOReactorConfig}.
-     * <p>
-     * Please note this value can be overridden by the {@link #setConnectionManager(
-     *   org.apache.http.nio.conn.NHttpClientConnectionManager)} method.
-     */
-    public final HttpAsyncClientBuilder setDefaultIOReactorConfig(final IOReactorConfig config) {
-        this.defaultIOReactorConfig = config;
-        return this;
-    }
-
-    /**
-     * Assigns default {@link ConnectionConfig}.
-     * <p>
-     * Please note this value can be overridden by the {@link #setConnectionManager(
-     *   org.apache.http.nio.conn.NHttpClientConnectionManager)} method.
-     */
-    public final HttpAsyncClientBuilder setDefaultConnectionConfig(final ConnectionConfig config) {
-        this.defaultConnectionConfig = config;
-        return this;
-    }
-
-    /**
-     * Assigns default {@link RequestConfig} instance which will be used
-     * for request execution if not explicitly set in the client execution
-     * context.
-     */
-    public final HttpAsyncClientBuilder setDefaultRequestConfig(final RequestConfig config) {
-        this.defaultRequestConfig = config;
-        return this;
-    }
-
-    /**
-     * Assigns {@link ThreadFactory} instance.
-     */
-    public final HttpAsyncClientBuilder setThreadFactory(final ThreadFactory threadFactory) {
-        this.threadFactory = threadFactory;
-        return this;
-    }
-
-    /**
-     * Assigns {@link NHttpClientEventHandler} instance.
-     *
-     * @since 4.1
-     */
-    public final HttpAsyncClientBuilder setEventHandler(final NHttpClientEventHandler eventHandler) {
-        this.eventHandler = eventHandler;
-        return this;
-    }
-
-    /**
-     * Disables connection state tracking.
-     */
-    public final HttpAsyncClientBuilder disableConnectionState() {
-        connectionStateDisabled = true;
-        return this;
-    }
-
-    /**
-     * Disables state (cookie) management.
-     * <p>
-     * Please note this value can be overridden by the {@link #setHttpProcessor(
-     * org.apache.http.protocol.HttpProcessor)} method.
-     */
-    public final HttpAsyncClientBuilder disableCookieManagement() {
-        cookieManagementDisabled = true;
-        return this;
-    }
-
-    /**
-     * Disables authentication scheme caching.
-     * <p>
-     * Please note this value can be overridden by the {@link #setHttpProcessor(
-     * org.apache.http.protocol.HttpProcessor)} method.
-     */
-    public final HttpAsyncClientBuilder disableAuthCaching() {
-        authCachingDisabled = true;
-        return this;
-    }
-
-    /**
-     * Use system properties when creating and configuring default
-     * implementations.
-     */
-    public final HttpAsyncClientBuilder useSystemProperties() {
-        systemProperties = true;
-        return this;
-    }
-
-    private static String[] split(final String s) {
-        if (TextUtils.isBlank(s)) {
-            return null;
-        }
-        return s.split(" *, *");
-    }
-
-    public CloseableHttpAsyncClient build() {
-
-        PublicSuffixMatcher publicSuffixMatcher = this.publicSuffixMatcher;
-        if (publicSuffixMatcher == null) {
-            publicSuffixMatcher = PublicSuffixMatcherLoader.getDefault();
-        }
-
-        NHttpClientConnectionManager connManager = this.connManager;
-        if (connManager == null) {
-            SchemeIOSessionStrategy sslStrategy = this.sslStrategy;
-            if (sslStrategy == null) {
-                SSLContext sslcontext = this.sslcontext;
-                if (sslcontext == null) {
-                    if (systemProperties) {
-                        sslcontext = SSLContexts.createSystemDefault();
-                    } else {
-                        sslcontext = SSLContexts.createDefault();
-                    }
-                }
-                final String[] supportedProtocols = systemProperties ? split(
-                        System.getProperty("https.protocols")) : null;
-                final String[] supportedCipherSuites = systemProperties ? split(
-                        System.getProperty("https.cipherSuites")) : null;
-                HostnameVerifier hostnameVerifier = this.hostnameVerifier;
-                if (hostnameVerifier == null) {
-                    hostnameVerifier = new DefaultHostnameVerifier(publicSuffixMatcher);
-                }
-                sslStrategy = new SSLIOSessionStrategy(
-                        sslcontext, supportedProtocols, supportedCipherSuites, hostnameVerifier);
-            }
-            final ConnectingIOReactor ioreactor = IOReactorUtils.create(
-                defaultIOReactorConfig != null ? defaultIOReactorConfig : IOReactorConfig.DEFAULT);
-            final PoolingNHttpClientConnectionManager poolingmgr = new PoolingNHttpClientConnectionManager(
-                    ioreactor,
-                    null,
-                    RegistryBuilder.<SchemeIOSessionStrategy>create()
-                        .register("http", NoopIOSessionStrategy.INSTANCE)
-                        .register("https", sslStrategy)
-                        .build(),
-                    this.dnsResolver);
-            if (defaultConnectionConfig != null) {
-                poolingmgr.setDefaultConnectionConfig(defaultConnectionConfig);
-            }
-            if (systemProperties) {
-                String s = System.getProperty("http.keepAlive", "true");
-                if ("true".equalsIgnoreCase(s)) {
-                    s = System.getProperty("http.maxConnections", "5");
-                    final int max = Integer.parseInt(s);
-                    poolingmgr.setDefaultMaxPerRoute(max);
-                    poolingmgr.setMaxTotal(2 * max);
-                }
-            } else {
-                if (maxConnTotal > 0) {
-                    poolingmgr.setMaxTotal(maxConnTotal);
-                }
-                if (maxConnPerRoute > 0) {
-                    poolingmgr.setDefaultMaxPerRoute(maxConnPerRoute);
-                }
-            }
-            connManager = poolingmgr;
-        }
-        ConnectionReuseStrategy reuseStrategy = this.reuseStrategy;
-        if (reuseStrategy == null) {
-            if (systemProperties) {
-                final String s = System.getProperty("http.keepAlive", "true");
-                if ("true".equalsIgnoreCase(s)) {
-                    reuseStrategy = DefaultConnectionReuseStrategy.INSTANCE;
-                } else {
-                    reuseStrategy = NoConnectionReuseStrategy.INSTANCE;
-                }
-            } else {
-                reuseStrategy = DefaultConnectionReuseStrategy.INSTANCE;
-            }
-        }
-        ConnectionKeepAliveStrategy keepAliveStrategy = this.keepAliveStrategy;
-        if (keepAliveStrategy == null) {
-            keepAliveStrategy = DefaultConnectionKeepAliveStrategy.INSTANCE;
-        }
-        AuthenticationStrategy targetAuthStrategy = this.targetAuthStrategy;
-        if (targetAuthStrategy == null) {
-            targetAuthStrategy = TargetAuthenticationStrategy.INSTANCE;
-        }
-        AuthenticationStrategy proxyAuthStrategy = this.proxyAuthStrategy;
-        if (proxyAuthStrategy == null) {
-            proxyAuthStrategy = ProxyAuthenticationStrategy.INSTANCE;
-        }
-        UserTokenHandler userTokenHandler = this.userTokenHandler;
-        if (userTokenHandler == null) {
-            if (!connectionStateDisabled) {
-                userTokenHandler = DefaultAsyncUserTokenHandler.INSTANCE;
-            } else {
-                userTokenHandler = NoopUserTokenHandler.INSTANCE;
-            }
-        }
-        SchemePortResolver schemePortResolver = this.schemePortResolver;
-        if (schemePortResolver == null) {
-            schemePortResolver = DefaultSchemePortResolver.INSTANCE;
-        }
-
-        HttpProcessor httpprocessor = this.httpprocessor;
-        if (httpprocessor == null) {
-
-            String userAgent = this.userAgent;
-            if (userAgent == null) {
-                if (systemProperties) {
-                    userAgent = System.getProperty("http.agent");
-                }
-                if (userAgent == null) {
-                    userAgent = VersionInfo.getUserAgent(
-                            "Apache-HttpAsyncClient",
-                            "org.apache.http.nio.client", getClass());
-                }
-            }
-
-            final HttpProcessorBuilder b = HttpProcessorBuilder.create();
-            if (requestFirst != null) {
-                for (final HttpRequestInterceptor i: requestFirst) {
-                    b.addFirst(i);
-                }
-            }
-            if (responseFirst != null) {
-                for (final HttpResponseInterceptor i: responseFirst) {
-                    b.addFirst(i);
-                }
-            }
-            b.addAll(
-                    new RequestDefaultHeaders(defaultHeaders),
-                    new RequestContent(),
-                    new RequestTargetHost(),
-                    new RequestClientConnControl(),
-                    new RequestUserAgent(userAgent),
-                    new RequestExpectContinue());
-            if (!cookieManagementDisabled) {
-                b.add(new RequestAddCookies());
-            }
-            if (!authCachingDisabled) {
-                b.add(new RequestAuthCache());
-            }
-            if (!cookieManagementDisabled) {
-                b.add(new ResponseProcessCookies());
-            }
-            if (requestLast != null) {
-                for (final HttpRequestInterceptor i: requestLast) {
-                    b.addLast(i);
-                }
-            }
-            if (responseLast != null) {
-                for (final HttpResponseInterceptor i: responseLast) {
-                    b.addLast(i);
-                }
-            }
-            httpprocessor = b.build();
-        }
-        // Add redirect executor, if not disabled
-        HttpRoutePlanner routePlanner = this.routePlanner;
-        if (routePlanner == null) {
-            if (proxy != null) {
-                routePlanner = new DefaultProxyRoutePlanner(proxy, schemePortResolver);
-            } else if (systemProperties) {
-                routePlanner = new SystemDefaultRoutePlanner(
-                        schemePortResolver, ProxySelector.getDefault());
-            } else {
-                routePlanner = new DefaultRoutePlanner(schemePortResolver);
-            }
-        }
-        Lookup<AuthSchemeProvider> authSchemeRegistry = this.authSchemeRegistry;
-        if (authSchemeRegistry == null) {
-            authSchemeRegistry = RegistryBuilder.<AuthSchemeProvider>create()
-                .register(AuthSchemes.BASIC, new BasicSchemeFactory())
-                .register(AuthSchemes.DIGEST, new DigestSchemeFactory())
-                .register(AuthSchemes.NTLM, new NTLMSchemeFactory())
-                .register(AuthSchemes.SPNEGO, new SPNegoSchemeFactory())
-                .register(AuthSchemes.KERBEROS, new KerberosSchemeFactory())
-                .build();
-        }
-        Lookup<CookieSpecProvider> cookieSpecRegistry = this.cookieSpecRegistry;
-        if (cookieSpecRegistry == null) {
-            final CookieSpecProvider defaultProvider = new DefaultCookieSpecProvider(publicSuffixMatcher);
-            final CookieSpecProvider laxStandardProvider = new RFC6265CookieSpecProvider(
-                    RFC6265CookieSpecProvider.CompatibilityLevel.RELAXED, publicSuffixMatcher);
-            final CookieSpecProvider strictStandardProvider = new RFC6265CookieSpecProvider(
-                    RFC6265CookieSpecProvider.CompatibilityLevel.STRICT, publicSuffixMatcher);
-            cookieSpecRegistry = RegistryBuilder.<CookieSpecProvider>create()
-                    .register(CookieSpecs.DEFAULT, defaultProvider)
-                    .register("best-match", defaultProvider)
-                    .register("compatibility", defaultProvider)
-                    .register(CookieSpecs.STANDARD, laxStandardProvider)
-                    .register(CookieSpecs.STANDARD_STRICT, strictStandardProvider)
-                    .register(CookieSpecs.NETSCAPE, new NetscapeDraftSpecProvider())
-                    .register(CookieSpecs.IGNORE_COOKIES, new IgnoreSpecProvider())
-                    .build();
-        }
-
-        CookieStore defaultCookieStore = this.cookieStore;
-        if (defaultCookieStore == null) {
-            defaultCookieStore = new BasicCookieStore();
-        }
-
-        CredentialsProvider defaultCredentialsProvider = this.credentialsProvider;
-        if (defaultCredentialsProvider == null) {
-            defaultCredentialsProvider = new BasicCredentialsProvider();
-        }
-
-        RedirectStrategy redirectStrategy = this.redirectStrategy;
-        if (redirectStrategy == null) {
-            redirectStrategy = DefaultRedirectStrategy.INSTANCE;
-        }
-
-        RequestConfig defaultRequestConfig = this.defaultRequestConfig;
-        if (defaultRequestConfig == null) {
-            defaultRequestConfig = RequestConfig.DEFAULT;
-        }
-
-        final MainClientExec exec = new MainClientExec(
-            httpprocessor,
-            routePlanner,
-            redirectStrategy,
-            targetAuthStrategy,
-            proxyAuthStrategy,
-            userTokenHandler);
-
-        ThreadFactory threadFactory = null;
-        NHttpClientEventHandler eventHandler = null;
-        if (!this.connManagerShared) {
-            threadFactory = this.threadFactory;
-            if (threadFactory == null) {
-                threadFactory = Executors.defaultThreadFactory();
-            }
-            eventHandler = this.eventHandler;
-            if (eventHandler == null) {
-                eventHandler = new HttpAsyncRequestExecutor();
-            }
-        }
-        return new InternalHttpAsyncClient(
-            connManager,
-            reuseStrategy,
-            keepAliveStrategy,
-            threadFactory,
-            eventHandler,
-            exec,
-            cookieSpecRegistry,
-            authSchemeRegistry,
-            defaultCookieStore,
-            defaultCredentialsProvider,
-            defaultRequestConfig);
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/HttpAsyncClients.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/HttpAsyncClients.java
deleted file mode 100644
index da83c41..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/HttpAsyncClients.java
+++ /dev/null
@@ -1,177 +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.http.impl.nio.client;
-
-import org.apache.http.annotation.Immutable;
-import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager;
-import org.apache.http.nio.conn.NHttpClientConnectionManager;
-import org.apache.http.nio.reactor.ConnectingIOReactor;
-import org.apache.http.util.Args;
-
-/**
- * Factory methods for {@link org.apache.http.impl.nio.client.CloseableHttpAsyncClient} and
- * {@link org.apache.http.impl.nio.client.CloseableHttpPipeliningClient} instances.
- *
- * @since 4.0
- */
-@Immutable
-public class HttpAsyncClients {
-
-    private HttpAsyncClients() {
-        super();
-    }
-
-    /**
-     * Creates builder object for construction of custom
-     * {@link CloseableHttpAsyncClient} instances.
-     */
-    public static HttpAsyncClientBuilder custom() {
-        return HttpAsyncClientBuilder.create();
-    }
-
-    /**
-     * Creates {@link CloseableHttpAsyncClient} instance with default
-     * configuration.
-     */
-    public static CloseableHttpAsyncClient createDefault() {
-        return HttpAsyncClientBuilder.create().build();
-    }
-
-    /**
-     * Creates {@link CloseableHttpAsyncClient} instance with default
-     * configuration based on ssytem properties.
-     */
-    public static CloseableHttpAsyncClient createSystem() {
-        return HttpAsyncClientBuilder.create()
-                .useSystemProperties()
-                .build();
-    }
-
-    /**
-     * Creates {@link CloseableHttpAsyncClient} instance that supports esential HTTP protocol
-     * aspects only. This client does not support HTTP state management, authentication
-     * and automatic redirects.
-     */
-    public static CloseableHttpAsyncClient createMinimal() {
-        return MinimalHttpAsyncClientBuilder.create()
-                .disableCookieManagement()
-                .build();
-    }
-
-    /**
-     * Creates {@link CloseableHttpAsyncClient} instance that supports esential HTTP protocol
-     * aspects only. This client does not support HTTP state management, authentication
-     * and automatic redirects.
-     */
-    public static CloseableHttpAsyncClient createMinimal(final ConnectingIOReactor ioreactor) {
-        Args.notNull(ioreactor, "I/O reactor");
-        return createMinimal(new PoolingNHttpClientConnectionManager(ioreactor), false);
-    }
-
-    /**
-     * Creates {@link CloseableHttpAsyncClient} instance that supports esential HTTP protocol
-     * aspects only. This client does not support HTTP state management, authentication
-     * and automatic redirects.
-     */
-    public static CloseableHttpAsyncClient createMinimal(final NHttpClientConnectionManager connManager) {
-        return createMinimal(connManager, false);
-    }
-
-    /**
-     * Creates {@link CloseableHttpAsyncClient} instance that supports esential HTTP protocol
-     * aspects only. This client does not support HTTP state management, authentication
-     * and automatic redirects.
-     * <p>
-     * Please note that clients with a shared connection manager make no attempts to control
-     * its life cycle and dealocation of resources. It is a responibility of the caller to
-     * ensure that the shared connection manager is properly started and shut down when no
-     * longer needed.
-     *
-     * @since 4.1
-     */
-    public static CloseableHttpAsyncClient createMinimal(
-            final NHttpClientConnectionManager connManager, final boolean shared) {
-        Args.notNull(connManager, "Connection manager");
-        return MinimalHttpAsyncClientBuilder.create()
-                .setConnectionManager(connManager)
-                .setConnectionManagerShared(shared)
-                .disableCookieManagement()
-                .build();
-    }
-
-    /**
-     * Creates {@link CloseableHttpPipeliningClient} instance that supports pipelined request
-     * execution. This client does not support authentication and automatic redirects.
-     *
-     * @since 4.1
-     */
-    public static CloseableHttpPipeliningClient createPipelining() {
-        return MinimalHttpAsyncClientBuilder.create().build();
-    }
-
-    /**
-     * Creates {@link CloseableHttpPipeliningClient} instance that supports pipelined request
-     * execution. This client does not support authentication and automatic redirects.
-     *
-     * @since 4.1
-     */
-    public static CloseableHttpPipeliningClient createPipelining(final ConnectingIOReactor ioreactor) {
-        return createPipelining(new PoolingNHttpClientConnectionManager(ioreactor), false);
-    }
-
-    /**
-     * Creates {@link CloseableHttpPipeliningClient} instance that supports pipelined request
-     * execution. This client does not support authentication and automatic redirects.
-     *
-     * @since 4.1
-     */
-    public static CloseableHttpPipeliningClient createPipelining(final NHttpClientConnectionManager connManager) {
-        return createPipelining(connManager, false);
-    }
-
-    /**
-     * Creates {@link CloseableHttpPipeliningClient} instance that supports pipelined request
-     * execution. This client does not support authentication and automatic redirects.
-     * <p>
-     * Please note that clients with a shared connection manager make no attempts to control
-     * its life cycle and dealocation of resources. It is a responibility of the caller to
-     * ensure that the shared connection manager is properly started and shut down when no
-     * longer needed.
-     *
-     * @since 4.1
-     */
-    public static CloseableHttpPipeliningClient createPipelining(
-            final NHttpClientConnectionManager connManager, final boolean shared) {
-        Args.notNull(connManager, "Connection manager");
-        return MinimalHttpAsyncClientBuilder.create()
-                .setConnectionManager(connManager)
-                .setConnectionManagerShared(shared)
-                .build();
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/IOReactorUtils.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/IOReactorUtils.java
deleted file mode 100644
index aefa474..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/IOReactorUtils.java
+++ /dev/null
@@ -1,47 +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.http.impl.nio.client;
-
-import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
-import org.apache.http.impl.nio.reactor.IOReactorConfig;
-import org.apache.http.nio.reactor.ConnectingIOReactor;
-import org.apache.http.nio.reactor.IOReactorException;
-
-final class IOReactorUtils {
-
-    private IOReactorUtils() {
-    }
-
-    public static ConnectingIOReactor create(final IOReactorConfig config) {
-        try {
-            return new DefaultConnectingIOReactor(config);
-        } catch (final IOReactorException ex) {
-            throw new IllegalStateException(ex);
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalClientExec.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalClientExec.java
deleted file mode 100644
index 77db4e7..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalClientExec.java
+++ /dev/null
@@ -1,74 +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.http.impl.nio.client;
-
-import java.io.IOException;
-
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.nio.ContentDecoder;
-import org.apache.http.nio.ContentEncoder;
-import org.apache.http.nio.IOControl;
-
-interface InternalClientExec {
-
-    void prepare(
-            HttpHost target,
-            HttpRequest original,
-            InternalState state,
-            AbstractClientExchangeHandler<?> handler) throws IOException, HttpException;
-
-    HttpRequest generateRequest(
-            InternalState state,
-            AbstractClientExchangeHandler<?> handler) throws IOException, HttpException;
-
-    void produceContent(
-            InternalState state,
-            ContentEncoder encoder,
-            IOControl ioctrl) throws IOException;
-
-    void requestCompleted(
-            InternalState state,
-            AbstractClientExchangeHandler<?> handler);
-
-    void responseReceived(
-            HttpResponse response,
-            InternalState state,
-            AbstractClientExchangeHandler<?> handler) throws IOException, HttpException;
-
-    void consumeContent(
-            InternalState state,
-            ContentDecoder decoder,
-            IOControl ioctrl) throws IOException;
-
-    void responseCompleted(
-            InternalState state,
-            AbstractClientExchangeHandler<?> handler) throws IOException, HttpException;
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalHttpAsyncClient.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalHttpAsyncClient.java
deleted file mode 100644
index 930ac27..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalHttpAsyncClient.java
+++ /dev/null
@@ -1,158 +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.http.impl.nio.client;
-
-import java.util.List;
-import java.util.concurrent.Future;
-import java.util.concurrent.ThreadFactory;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.ConnectionReuseStrategy;
-import org.apache.http.HttpHost;
-import org.apache.http.auth.AuthSchemeProvider;
-import org.apache.http.auth.AuthState;
-import org.apache.http.client.CookieStore;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.concurrent.BasicFuture;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.config.Lookup;
-import org.apache.http.conn.ConnectionKeepAliveStrategy;
-import org.apache.http.cookie.CookieSpecProvider;
-import org.apache.http.nio.NHttpClientEventHandler;
-import org.apache.http.nio.conn.NHttpClientConnectionManager;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.protocol.BasicHttpContext;
-import org.apache.http.protocol.HttpContext;
-
-class InternalHttpAsyncClient extends CloseableHttpAsyncClientBase {
-
-    private final Log log = LogFactory.getLog(getClass());
-
-    private final NHttpClientConnectionManager connmgr;
-    private final ConnectionReuseStrategy connReuseStrategy;
-    private final ConnectionKeepAliveStrategy keepaliveStrategy;
-    private final InternalClientExec exec;
-    private final Lookup<CookieSpecProvider> cookieSpecRegistry;
-    private final Lookup<AuthSchemeProvider> authSchemeRegistry;
-    private final CookieStore cookieStore;
-    private final CredentialsProvider credentialsProvider;
-    private final RequestConfig defaultConfig;
-
-    public InternalHttpAsyncClient(
-            final NHttpClientConnectionManager connmgr,
-            final ConnectionReuseStrategy connReuseStrategy,
-            final ConnectionKeepAliveStrategy keepaliveStrategy,
-            final ThreadFactory threadFactory,
-            final NHttpClientEventHandler handler,
-            final InternalClientExec exec,
-            final Lookup<CookieSpecProvider> cookieSpecRegistry,
-            final Lookup<AuthSchemeProvider> authSchemeRegistry,
-            final CookieStore cookieStore,
-            final CredentialsProvider credentialsProvider,
-            final RequestConfig defaultConfig) {
-        super(connmgr, threadFactory, handler);
-        this.connmgr = connmgr;
-        this.connReuseStrategy = connReuseStrategy;
-        this.keepaliveStrategy = keepaliveStrategy;
-        this.exec = exec;
-        this.cookieSpecRegistry = cookieSpecRegistry;
-        this.authSchemeRegistry = authSchemeRegistry;
-        this.cookieStore = cookieStore;
-        this.credentialsProvider = credentialsProvider;
-        this.defaultConfig = defaultConfig;
-    }
-
-    private void setupContext(final HttpClientContext context) {
-        if (context.getAttribute(HttpClientContext.TARGET_AUTH_STATE) == null) {
-            context.setAttribute(HttpClientContext.TARGET_AUTH_STATE, new AuthState());
-        }
-        if (context.getAttribute(HttpClientContext.PROXY_AUTH_STATE) == null) {
-            context.setAttribute(HttpClientContext.PROXY_AUTH_STATE, new AuthState());
-        }
-        if (context.getAttribute(HttpClientContext.AUTHSCHEME_REGISTRY) == null) {
-            context.setAttribute(HttpClientContext.AUTHSCHEME_REGISTRY, this.authSchemeRegistry);
-        }
-        if (context.getAttribute(HttpClientContext.COOKIESPEC_REGISTRY) == null) {
-            context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, this.cookieSpecRegistry);
-        }
-        if (context.getAttribute(HttpClientContext.COOKIE_STORE) == null) {
-            context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
-        }
-        if (context.getAttribute(HttpClientContext.CREDS_PROVIDER) == null) {
-            context.setAttribute(HttpClientContext.CREDS_PROVIDER, this.credentialsProvider);
-        }
-        if (context.getAttribute(HttpClientContext.REQUEST_CONFIG) == null) {
-            context.setAttribute(HttpClientContext.REQUEST_CONFIG, this.defaultConfig);
-        }
-    }
-
-    @Override
-    public <T> Future<T> execute(
-            final HttpAsyncRequestProducer requestProducer,
-            final HttpAsyncResponseConsumer<T> responseConsumer,
-            final HttpContext context,
-            final FutureCallback<T> callback) {
-        ensureRunning();
-        final BasicFuture<T> future = new BasicFuture<T>(callback);
-        final HttpClientContext localcontext = HttpClientContext.adapt(
-            context != null ? context : new BasicHttpContext());
-        setupContext(localcontext);
-
-        @SuppressWarnings("resource")
-        final DefaultClientExchangeHandlerImpl<T> handler = new DefaultClientExchangeHandlerImpl<T>(
-            this.log,
-            requestProducer,
-            responseConsumer,
-            localcontext,
-            future,
-            this.connmgr,
-            this.connReuseStrategy,
-            this.keepaliveStrategy,
-            this.exec);
-        try {
-            handler.start();
-        } catch (final Exception ex) {
-            handler.failed(ex);
-        }
-        return future;
-    }
-
-    @Override
-    public <T> Future<List<T>> execute(
-            final HttpHost target,
-            final List<? extends HttpAsyncRequestProducer> requestProducers,
-            final List<? extends HttpAsyncResponseConsumer<T>> responseConsumers,
-            final HttpContext context,
-            final FutureCallback<List<T>> callback) {
-        throw new UnsupportedOperationException("Pipelining not supported");
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalIODispatch.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalIODispatch.java
deleted file mode 100644
index fa04c6b..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalIODispatch.java
+++ /dev/null
@@ -1,98 +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.http.impl.nio.client;
-
-import java.io.IOException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.impl.nio.DefaultNHttpClientConnection;
-import org.apache.http.impl.nio.reactor.AbstractIODispatch;
-import org.apache.http.nio.NHttpClientEventHandler;
-import org.apache.http.nio.reactor.IOSession;
-
-class InternalIODispatch extends AbstractIODispatch<DefaultNHttpClientConnection> {
-
-    private final Log log = LogFactory.getLog(InternalIODispatch.class);
-
-    private final NHttpClientEventHandler handler;
-
-    public InternalIODispatch(final NHttpClientEventHandler handler) {
-        super();
-        if (this.log.isDebugEnabled()) {
-            this.handler = new InternalRequestExecutor(this.log, handler);
-        } else {
-            this.handler = handler;
-        }
-    }
-
-    @Override
-    protected DefaultNHttpClientConnection createConnection(final IOSession session) {
-        throw new IllegalStateException("Connection must be created by connection manager");
-    }
-
-    @Override
-    protected void onConnected(final DefaultNHttpClientConnection conn) {
-        final Object attachment = conn.getContext().getAttribute(IOSession.ATTACHMENT_KEY);
-        try {
-            this.handler.connected(conn, attachment);
-        } catch (final Exception ex) {
-            this.handler.exception(conn, ex);
-        }
-    }
-
-    @Override
-    protected void onClosed(final DefaultNHttpClientConnection conn) {
-        this.handler.closed(conn);
-    }
-
-    @Override
-    protected void onException(final DefaultNHttpClientConnection conn, final IOException ex) {
-        this.handler.exception(conn, ex);
-    }
-
-    @Override
-    protected void onInputReady(final DefaultNHttpClientConnection conn) {
-        conn.consumeInput(this.handler);
-    }
-
-    @Override
-    protected void onOutputReady(final DefaultNHttpClientConnection conn) {
-        conn.produceOutput(this.handler);
-    }
-
-    @Override
-    protected void onTimeout(final DefaultNHttpClientConnection conn) {
-        try {
-            this.handler.timeout(conn);
-        } catch (final Exception ex) {
-            this.handler.exception(conn, ex);
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalIOReactorExceptionHandler.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalIOReactorExceptionHandler.java
deleted file mode 100644
index 1fc0634..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalIOReactorExceptionHandler.java
+++ /dev/null
@@ -1,55 +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.http.impl.nio.client;
-
-import java.io.IOException;
-
-import org.apache.commons.logging.Log;
-import org.apache.http.nio.reactor.IOReactorExceptionHandler;
-
-class InternalIOReactorExceptionHandler implements IOReactorExceptionHandler {
-
-    private final Log log;
-
-    InternalIOReactorExceptionHandler(final Log log) {
-        super();
-        this.log = log;
-    }
-
-    @Override
-    public boolean handle(final IOException ex) {
-        this.log.error("Fatal I/O error", ex);
-        return false;
-    }
-
-    @Override
-    public boolean handle(final RuntimeException ex) {
-        this.log.error("Fatal runtime error", ex);
-        return false;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalRequestExecutor.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalRequestExecutor.java
deleted file mode 100644
index fae3ab9..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalRequestExecutor.java
+++ /dev/null
@@ -1,135 +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.http.impl.nio.client;
-
-import java.io.IOException;
-
-import org.apache.commons.logging.Log;
-import org.apache.http.HttpException;
-import org.apache.http.nio.ContentDecoder;
-import org.apache.http.nio.ContentEncoder;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.nio.NHttpClientEventHandler;
-
-class InternalRequestExecutor implements NHttpClientEventHandler {
-
-    private final Log log;
-    private final NHttpClientEventHandler handler;
-
-    public InternalRequestExecutor(final Log log, final NHttpClientEventHandler handler) {
-        this.log = log;
-        this.handler = handler;
-    }
-
-    @Override
-    public void connected(
-            final NHttpClientConnection conn,
-            final Object attachment) throws IOException, HttpException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(conn + ": Connected");
-        }
-        this.handler.connected(conn, attachment);
-    }
-
-    @Override
-    public void closed(final NHttpClientConnection conn) {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(conn + ": Disconnected");
-        }
-        this.handler.closed(conn);
-    }
-
-    @Override
-    public void requestReady(
-            final NHttpClientConnection conn) throws IOException, HttpException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(conn + " Request ready");
-        }
-        this.handler.requestReady(conn);
-    }
-
-    @Override
-    public void inputReady(
-            final NHttpClientConnection conn,
-            final ContentDecoder decoder) throws IOException, HttpException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(conn + " Input ready");
-        }
-        this.handler.inputReady(conn, decoder);
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(conn + " " + decoder);
-        }
-    }
-
-    @Override
-    public void outputReady(
-            final NHttpClientConnection conn,
-            final ContentEncoder encoder) throws IOException, HttpException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(conn + " Output ready");
-        }
-        this.handler.outputReady(conn, encoder);
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(conn + " " + encoder);
-        }
-    }
-
-    @Override
-    public void responseReceived(
-            final NHttpClientConnection conn) throws HttpException, IOException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(conn + " Response received");
-        }
-        this.handler.responseReceived(conn);
-    }
-
-    @Override
-    public void timeout(final NHttpClientConnection conn) throws HttpException, IOException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(conn + " Timeout");
-        }
-        this.handler.timeout(conn);
-    }
-
-    @Override
-    public void exception(final NHttpClientConnection conn, final Exception ex) {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(conn + " Exception", ex);
-        }
-        this.handler.exception(conn, ex);
-    }
-
-    @Override
-    public void endOfInput(final NHttpClientConnection conn) throws IOException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(conn + " End of input");
-        }
-        this.handler.endOfInput(conn);
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalState.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalState.java
deleted file mode 100644
index 1c7c992..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/InternalState.java
+++ /dev/null
@@ -1,142 +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.http.impl.nio.client;
-
-import java.nio.ByteBuffer;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpRequestWrapper;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-
-class InternalState {
-
-    private final long id;
-    private final HttpAsyncRequestProducer requestProducer;
-    private final HttpAsyncResponseConsumer<?> responseConsumer;
-    private final HttpClientContext localContext;
-
-    private HttpRequestWrapper mainRequest;
-    private HttpResponse finalResponse;
-    private ByteBuffer tmpbuf;
-    private boolean requestContentProduced;
-    private int execCount;
-
-    private int redirectCount;
-    private HttpUriRequest redirect;
-
-    public InternalState(
-            final long id,
-            final HttpAsyncRequestProducer requestProducer,
-            final HttpAsyncResponseConsumer<?> responseConsumer,
-            final HttpClientContext localContext) {
-        super();
-        this.id = id;
-        this.requestProducer = requestProducer;
-        this.responseConsumer = responseConsumer;
-        this.localContext = localContext;
-    }
-
-    public long getId() {
-        return id;
-    }
-
-    public HttpAsyncRequestProducer getRequestProducer() {
-        return requestProducer;
-    }
-
-    public HttpAsyncResponseConsumer<?> getResponseConsumer() {
-        return responseConsumer;
-    }
-
-    public HttpClientContext getLocalContext() {
-        return localContext;
-    }
-
-    public HttpRequestWrapper getMainRequest() {
-        return mainRequest;
-    }
-
-    public void setMainRequest(final HttpRequestWrapper mainRequest) {
-        this.mainRequest = mainRequest;
-    }
-
-    public HttpResponse getFinalResponse() {
-        return finalResponse;
-    }
-
-    public void setFinalResponse(final HttpResponse finalResponse) {
-        this.finalResponse = finalResponse;
-    }
-
-    public ByteBuffer getTmpbuf() {
-        if (tmpbuf == null) {
-            tmpbuf = ByteBuffer.allocate(4 * 1024);
-        }
-        return tmpbuf;
-    }
-
-    public boolean isRequestContentProduced() {
-        return requestContentProduced;
-    }
-
-    public void setRequestContentProduced() {
-        this.requestContentProduced = true;
-    }
-
-    public int getExecCount() {
-        return execCount;
-    }
-
-    public void incrementExecCount() {
-        this.execCount++;
-    }
-
-    public int getRedirectCount() {
-        return redirectCount;
-    }
-
-    public void incrementRedirectCount() {
-        this.redirectCount++;
-    }
-
-    public HttpUriRequest getRedirect() {
-        return redirect;
-    }
-
-    public void setRedirect(final HttpUriRequest redirect) {
-        this.redirect = redirect;
-    }
-
-    @Override
-    public String toString() {
-        return Long.toString(id);
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MainClientExec.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MainClientExec.java
deleted file mode 100644
index c605f60..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MainClientExec.java
+++ /dev/null
@@ -1,644 +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.http.impl.nio.client;
-
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.nio.ByteBuffer;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.HttpVersion;
-import org.apache.http.ProtocolException;
-import org.apache.http.auth.AUTH;
-import org.apache.http.auth.AuthProtocolState;
-import org.apache.http.auth.AuthScheme;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.AuthState;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.AuthenticationStrategy;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.NonRepeatableRequestException;
-import org.apache.http.client.RedirectException;
-import org.apache.http.client.RedirectStrategy;
-import org.apache.http.client.UserTokenHandler;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.Configurable;
-import org.apache.http.client.methods.HttpRequestWrapper;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.client.protocol.RequestClientConnControl;
-import org.apache.http.client.utils.URIUtils;
-import org.apache.http.conn.routing.BasicRouteDirector;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.conn.routing.HttpRouteDirector;
-import org.apache.http.conn.routing.HttpRoutePlanner;
-import org.apache.http.impl.auth.HttpAuthenticator;
-import org.apache.http.message.BasicHttpRequest;
-import org.apache.http.nio.ContentDecoder;
-import org.apache.http.nio.ContentEncoder;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.protocol.HttpCoreContext;
-import org.apache.http.protocol.HttpProcessor;
-import org.apache.http.protocol.ImmutableHttpProcessor;
-import org.apache.http.protocol.RequestTargetHost;
-
-class MainClientExec implements InternalClientExec {
-
-    private final Log log = LogFactory.getLog(getClass());
-
-    private final HttpProcessor httpProcessor;
-    private final HttpProcessor proxyHttpProcessor;
-    private final HttpRoutePlanner routePlanner;
-    private final AuthenticationStrategy targetAuthStrategy;
-    private final AuthenticationStrategy proxyAuthStrategy;
-    private final UserTokenHandler userTokenHandler;
-    private final RedirectStrategy redirectStrategy;
-    private final HttpRouteDirector routeDirector;
-    private final HttpAuthenticator authenticator;
-
-    public MainClientExec(
-            final HttpProcessor httpProcessor,
-            final HttpRoutePlanner routePlanner,
-            final RedirectStrategy redirectStrategy,
-            final AuthenticationStrategy targetAuthStrategy,
-            final AuthenticationStrategy proxyAuthStrategy,
-            final UserTokenHandler userTokenHandler) {
-        super();
-        this.httpProcessor = httpProcessor;
-        this.proxyHttpProcessor = new ImmutableHttpProcessor(
-                new RequestTargetHost(), new RequestClientConnControl());
-        this.routePlanner = routePlanner;
-        this.redirectStrategy = redirectStrategy;
-        this.targetAuthStrategy = targetAuthStrategy;
-        this.proxyAuthStrategy = proxyAuthStrategy;
-        this.userTokenHandler = userTokenHandler;
-        this.routeDirector = new BasicRouteDirector();
-        this.authenticator = new HttpAuthenticator(log);
-    }
-
-    @Override
-    public void prepare(
-            final HttpHost target,
-            final HttpRequest original,
-            final InternalState state,
-            final AbstractClientExchangeHandler<?> handler) throws HttpException, IOException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + state.getId() + "] start execution");
-        }
-
-        final HttpClientContext localContext = state.getLocalContext();
-
-        if (original instanceof Configurable) {
-            final RequestConfig config = ((Configurable) original).getConfig();
-            if (config != null) {
-                localContext.setRequestConfig(config);
-            }
-        }
-
-        final List<URI> redirectLocations = localContext.getRedirectLocations();
-        if (redirectLocations != null) {
-            redirectLocations.clear();
-        }
-
-        final HttpRequestWrapper request = HttpRequestWrapper.wrap(original);
-        final HttpRoute route = this.routePlanner.determineRoute(target, request, localContext);
-
-        handler.setRoute(route);
-
-        state.setMainRequest(request);
-        handler.setCurrentRequest(request);
-
-        prepareRequest(state, handler);
-    }
-
-    @Override
-    public HttpRequest generateRequest(
-            final InternalState state,
-            final AbstractClientExchangeHandler<?> handler) throws IOException, HttpException {
-
-        final HttpRoute route = handler.getRoute();
-
-        handler.verifytRoute();
-
-        if (!handler.isRouteEstablished()) {
-            int step;
-            loop:
-            do {
-                final HttpRoute fact = handler.getActualRoute();
-                step = this.routeDirector.nextStep(route, fact);
-                switch (step) {
-                case HttpRouteDirector.CONNECT_TARGET:
-                    handler.onRouteToTarget();
-                    break;
-                case HttpRouteDirector.CONNECT_PROXY:
-                    handler.onRouteToProxy();
-                    break;
-                case HttpRouteDirector.TUNNEL_TARGET:
-                    if (this.log.isDebugEnabled()) {
-                        this.log.debug("[exchange: " + state.getId() + "] Tunnel required");
-                    }
-                    final HttpRequest connect = createConnectRequest(route, state);
-                    handler.setCurrentRequest(HttpRequestWrapper.wrap(connect));
-                    break loop;
-                case HttpRouteDirector.TUNNEL_PROXY:
-                    throw new HttpException("Proxy chains are not supported");
-                case HttpRouteDirector.LAYER_PROTOCOL:
-                    handler.onRouteUpgrade();
-                    break;
-                case HttpRouteDirector.UNREACHABLE:
-                    throw new HttpException("Unable to establish route: " +
-                            "planned = " + route + "; current = " + fact);
-                case HttpRouteDirector.COMPLETE:
-                    handler.onRouteComplete();
-                    this.log.debug("Connection route established");
-                    break;
-                default:
-                    throw new IllegalStateException("Unknown step indicator "
-                            + step + " from RouteDirector.");
-                }
-            } while (step > HttpRouteDirector.COMPLETE);
-        }
-
-        final HttpClientContext localContext = state.getLocalContext();
-        HttpRequestWrapper currentRequest = handler.getCurrentRequest();
-        if (currentRequest == null) {
-            currentRequest = state.getMainRequest();
-            handler.setCurrentRequest(currentRequest);
-        }
-
-        if (handler.isRouteEstablished()) {
-            state.incrementExecCount();
-            if (state.getExecCount() > 1) {
-                final HttpAsyncRequestProducer requestProducer = state.getRequestProducer();
-                if (!requestProducer.isRepeatable() && state.isRequestContentProduced()) {
-                    throw new NonRepeatableRequestException("Cannot retry request " +
-                            "with a non-repeatable request entity.");
-                }
-                requestProducer.resetRequest();
-            }
-            if (this.log.isDebugEnabled()) {
-                this.log.debug("[exchange: " + state.getId() + "] Attempt " + state.getExecCount() +
-                    " to execute request");
-            }
-
-            if (!currentRequest.containsHeader(AUTH.WWW_AUTH_RESP)) {
-                final AuthState targetAuthState = localContext.getTargetAuthState();
-                if (this.log.isDebugEnabled()) {
-                    this.log.debug("Target auth state: " + targetAuthState.getState());
-                }
-                this.authenticator.generateAuthResponse(currentRequest, targetAuthState, localContext);
-            }
-            if (!currentRequest.containsHeader(AUTH.PROXY_AUTH_RESP) && !route.isTunnelled()) {
-                final AuthState proxyAuthState = localContext.getProxyAuthState();
-                if (this.log.isDebugEnabled()) {
-                    this.log.debug("Proxy auth state: " + proxyAuthState.getState());
-                }
-                this.authenticator.generateAuthResponse(currentRequest, proxyAuthState, localContext);
-            }
-        } else {
-            if (!currentRequest.containsHeader(AUTH.PROXY_AUTH_RESP)) {
-                final AuthState proxyAuthState = localContext.getProxyAuthState();
-                if (this.log.isDebugEnabled()) {
-                    this.log.debug("Proxy auth state: " + proxyAuthState.getState());
-                }
-                this.authenticator.generateAuthResponse(currentRequest, proxyAuthState, localContext);
-            }
-        }
-
-        final NHttpClientConnection managedConn = handler.getConnection();
-        localContext.setAttribute(HttpCoreContext.HTTP_CONNECTION, managedConn);
-        final RequestConfig config = localContext.getRequestConfig();
-        if (config.getSocketTimeout() > 0) {
-            managedConn.setSocketTimeout(config.getSocketTimeout());
-        }
-        return currentRequest;
-    }
-
-    @Override
-    public void produceContent(
-            final InternalState state,
-            final ContentEncoder encoder,
-            final IOControl ioctrl) throws IOException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + state.getId() + "] produce content");
-        }
-        final HttpAsyncRequestProducer requestProducer = state.getRequestProducer();
-        state.setRequestContentProduced();
-        requestProducer.produceContent(encoder, ioctrl);
-        if (encoder.isCompleted()) {
-            requestProducer.resetRequest();
-        }
-    }
-
-    @Override
-    public void requestCompleted(
-            final InternalState state,
-            final AbstractClientExchangeHandler<?> handler) {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + state.getId() + "] Request completed");
-        }
-        final HttpClientContext localContext = state.getLocalContext();
-        final HttpAsyncRequestProducer requestProducer = state.getRequestProducer();
-        requestProducer.requestCompleted(localContext);
-    }
-
-    @Override
-    public void responseReceived(
-            final HttpResponse response,
-            final InternalState state,
-            final AbstractClientExchangeHandler<?> handler) throws IOException, HttpException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + state.getId() + "] Response received " + response.getStatusLine());
-        }
-        final HttpClientContext context = state.getLocalContext();
-        context.setAttribute(HttpCoreContext.HTTP_RESPONSE, response);
-        this.httpProcessor.process(response, context);
-
-        handler.setCurrentResponse(response);
-
-        if (!handler.isRouteEstablished()) {
-            final int status = response.getStatusLine().getStatusCode();
-            if (status < 200) {
-                throw new HttpException("Unexpected response to CONNECT request: " +
-                        response.getStatusLine());
-            }
-            if (status == HttpStatus.SC_OK) {
-                handler.onRouteTunnelToTarget();
-                handler.setCurrentRequest(null);
-            } else {
-                if (!handleConnectResponse(state, handler)) {
-                    state.setFinalResponse(response);
-                }
-            }
-        } else {
-            if (!handleResponse(state, handler)) {
-                state.setFinalResponse(response);
-            }
-        }
-        if (state.getFinalResponse() != null) {
-            final HttpAsyncResponseConsumer<?> responseConsumer = state.getResponseConsumer();
-            responseConsumer.responseReceived(response);
-        }
-    }
-
-    @Override
-    public void consumeContent(
-            final InternalState state,
-            final ContentDecoder decoder,
-            final IOControl ioctrl) throws IOException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + state.getId() + "] Consume content");
-        }
-        if (state.getFinalResponse() != null) {
-            final HttpAsyncResponseConsumer<?> responseConsumer = state.getResponseConsumer();
-            responseConsumer.consumeContent(decoder, ioctrl);
-        } else {
-            final ByteBuffer tmpbuf = state.getTmpbuf();
-            tmpbuf.clear();
-            decoder.read(tmpbuf);
-        }
-    }
-
-    @Override
-    public void responseCompleted(
-            final InternalState state,
-            final AbstractClientExchangeHandler<?> handler) throws IOException, HttpException {
-        final HttpClientContext localContext = state.getLocalContext();
-        final HttpResponse currentResponse = handler.getCurrentResponse();
-
-        if (!handler.isRouteEstablished()) {
-            final int status = currentResponse.getStatusLine().getStatusCode();
-            if (status == HttpStatus.SC_OK) {
-                handler.setCurrentResponse(null);
-                return;
-            }
-        }
-
-        final boolean keepAlive = handler.manageConnectionPersistence();
-        if (!keepAlive) {
-            handler.releaseConnection();
-            final AuthState proxyAuthState = localContext.getProxyAuthState();
-            if (proxyAuthState.getState() == AuthProtocolState.SUCCESS
-                    && proxyAuthState.getAuthScheme() != null
-                    && proxyAuthState.getAuthScheme().isConnectionBased()) {
-                if (this.log.isDebugEnabled()) {
-                    this.log.debug("[exchange: " + state.getId() + "] Resetting proxy auth state");
-                }
-                proxyAuthState.reset();
-            }
-            final AuthState targetAuthState = localContext.getTargetAuthState();
-            if (targetAuthState.getState() == AuthProtocolState.SUCCESS
-                    && targetAuthState.getAuthScheme() != null
-                    && targetAuthState.getAuthScheme().isConnectionBased()) {
-                if (this.log.isDebugEnabled()) {
-                    this.log.debug("[exchange: " + state.getId() + "] Resetting target auth state");
-                }
-                targetAuthState.reset();
-            }
-        }
-
-        Object userToken = localContext.getUserToken();
-        if (userToken == null) {
-            userToken = this.userTokenHandler.getUserToken(localContext);
-            localContext.setAttribute(HttpClientContext.USER_TOKEN, userToken);
-        }
-
-        if (state.getFinalResponse() != null) {
-            final HttpAsyncResponseConsumer<?> responseConsumer = state.getResponseConsumer();
-            responseConsumer.responseCompleted(localContext);
-            if (this.log.isDebugEnabled()) {
-                this.log.debug("[exchange: " + state.getId() + "] Response processed");
-            }
-            handler.releaseConnection();
-        } else {
-            if (state.getRedirect() != null) {
-                final HttpUriRequest redirect = state.getRedirect();
-                final URI uri = redirect.getURI();
-                if (this.log.isDebugEnabled()) {
-                    this.log.debug("[exchange: " + state.getId() + "] Redirecting to '" + uri + "'");
-                }
-                state.setRedirect(null);
-
-                final HttpHost newTarget = URIUtils.extractHost(uri);
-                if (newTarget == null) {
-                    throw new ProtocolException("Redirect URI does not specify a valid host name: " + uri);
-                }
-
-                // Reset auth states if redirecting to another host
-                final HttpRoute route = handler.getRoute();
-                if (!route.getTargetHost().equals(newTarget)) {
-                    final AuthState targetAuthState = localContext.getTargetAuthState();
-                    if (this.log.isDebugEnabled()) {
-                        this.log.debug("[exchange: " + state.getId() + "] Resetting target auth state");
-                    }
-                    targetAuthState.reset();
-                    final AuthState proxyAuthState = localContext.getProxyAuthState();
-                    final AuthScheme authScheme = proxyAuthState.getAuthScheme();
-                    if (authScheme != null && authScheme.isConnectionBased()) {
-                        if (this.log.isDebugEnabled()) {
-                            this.log.debug("[exchange: " + state.getId() + "] Resetting proxy auth state");
-                        }
-                        proxyAuthState.reset();
-                    }
-                }
-
-                if (!redirect.headerIterator().hasNext()) {
-                    final HttpRequest original = state.getMainRequest().getOriginal();
-                    redirect.setHeaders(original.getAllHeaders());
-                }
-
-                final HttpRequestWrapper newRequest = HttpRequestWrapper.wrap(redirect);
-                final HttpRoute newRoute = this.routePlanner.determineRoute(
-                    newTarget, newRequest, localContext);
-                if (!route.equals(newRoute)) {
-                    handler.releaseConnection();
-                }
-                handler.setRoute(newRoute);
-                handler.setCurrentRequest(newRequest);
-                state.setMainRequest(newRequest);
-                prepareRequest(state, handler);
-            }
-        }
-        handler.setCurrentResponse(null);
-    }
-
-    private void rewriteRequestURI(
-            final HttpRequestWrapper request,
-            final HttpRoute route) throws ProtocolException {
-        try {
-            URI uri = request.getURI();
-            if (uri != null) {
-                if (route.getProxyHost() != null && !route.isTunnelled()) {
-                    // Make sure the request URI is absolute
-                    if (!uri.isAbsolute()) {
-                        final HttpHost target = route.getTargetHost();
-                        uri = URIUtils.rewriteURI(uri, target, true);
-                    } else {
-                        uri = URIUtils.rewriteURI(uri);
-                    }
-                } else {
-                    // Make sure the request URI is relative
-                    if (uri.isAbsolute()) {
-                        uri = URIUtils.rewriteURI(uri, null, true);
-                    } else {
-                        uri = URIUtils.rewriteURI(uri);
-                    }
-                }
-                request.setURI(uri);
-            }
-        } catch (final URISyntaxException ex) {
-            throw new ProtocolException("Invalid URI: " +
-                    request.getRequestLine().getUri(), ex);
-        }
-    }
-
-    private void prepareRequest(
-            final InternalState state,
-            final AbstractClientExchangeHandler<?> handler) throws IOException, HttpException {
-        final HttpClientContext localContext = state.getLocalContext();
-        final HttpRequestWrapper currentRequest = handler.getCurrentRequest();
-        final HttpRoute route = handler.getRoute();
-
-        final HttpRequest original = currentRequest.getOriginal();
-        URI uri = null;
-        if (original instanceof HttpUriRequest) {
-            uri = ((HttpUriRequest) original).getURI();
-        } else {
-            final String uriString = original.getRequestLine().getUri();
-            try {
-                uri = URI.create(uriString);
-            } catch (final IllegalArgumentException ex) {
-                if (this.log.isDebugEnabled()) {
-                    this.log.debug("Unable to parse '" + uriString + "' as a valid URI; " +
-                        "request URI and Host header may be inconsistent", ex);
-                }
-            }
-
-        }
-        currentRequest.setURI(uri);
-
-        // Re-write request URI if needed
-        rewriteRequestURI(currentRequest, route);
-
-        HttpHost target = null;
-        if (uri != null && uri.isAbsolute() && uri.getHost() != null) {
-            target = new HttpHost(uri.getHost(), uri.getPort(), uri.getScheme());
-        }
-        if (target == null) {
-            target = route.getTargetHost();
-        }
-
-        // Get user info from the URI
-        if (uri != null) {
-            final String userinfo = uri.getUserInfo();
-            if (userinfo != null) {
-                final CredentialsProvider credsProvider = localContext.getCredentialsProvider();
-                credsProvider.setCredentials(
-                        new AuthScope(target),
-                        new UsernamePasswordCredentials(userinfo));
-            }
-        }
-
-        localContext.setAttribute(HttpCoreContext.HTTP_REQUEST, currentRequest);
-        localContext.setAttribute(HttpCoreContext.HTTP_TARGET_HOST, target);
-        localContext.setAttribute(HttpClientContext.HTTP_ROUTE, route);
-        this.httpProcessor.process(currentRequest, localContext);
-    }
-
-    private HttpRequest createConnectRequest(
-            final HttpRoute route, final InternalState state) throws IOException, HttpException {
-        // see RFC 2817, section 5.2 and
-        // INTERNET-DRAFT: Tunneling TCP based protocols through
-        // Web proxy servers
-        final HttpHost target = route.getTargetHost();
-        final String host = target.getHostName();
-        final int port = target.getPort();
-        final StringBuilder buffer = new StringBuilder(host.length() + 6);
-        buffer.append(host);
-        buffer.append(':');
-        buffer.append(Integer.toString(port));
-        final HttpRequest request = new BasicHttpRequest("CONNECT", buffer.toString(), HttpVersion.HTTP_1_1);
-        final HttpClientContext localContext = state.getLocalContext();
-        this.proxyHttpProcessor.process(request, localContext);
-        return request;
-    }
-
-    private boolean handleConnectResponse(
-            final InternalState state,
-            final AbstractClientExchangeHandler<?> handler) throws HttpException {
-        final HttpClientContext localContext = state.getLocalContext();
-        final RequestConfig config = localContext.getRequestConfig();
-        if (config.isAuthenticationEnabled()) {
-            final CredentialsProvider credsProvider = localContext.getCredentialsProvider();
-            if (credsProvider != null) {
-                final HttpRoute route = handler.getRoute();
-                final HttpHost proxy = route.getProxyHost();
-                final HttpResponse currentResponse = handler.getCurrentResponse();
-                final AuthState proxyAuthState = localContext.getProxyAuthState();
-                if (this.authenticator.isAuthenticationRequested(proxy, currentResponse,
-                        this.proxyAuthStrategy, proxyAuthState, localContext)) {
-                    return this.authenticator.handleAuthChallenge(proxy, currentResponse,
-                            this.proxyAuthStrategy, proxyAuthState, localContext);
-                }
-            }
-        }
-        return false;
-    }
-
-    private boolean handleResponse(
-            final InternalState state,
-            final AbstractClientExchangeHandler<?> handler) throws HttpException {
-        final HttpClientContext localContext = state.getLocalContext();
-        final RequestConfig config = localContext.getRequestConfig();
-        if (config.isAuthenticationEnabled()) {
-            if (needAuthentication(state, handler)) {
-                // discard previous auth headers
-                final HttpRequestWrapper currentRequest = handler.getCurrentRequest();
-                final HttpRequest original = currentRequest.getOriginal();
-                if (!original.containsHeader(AUTH.WWW_AUTH_RESP)) {
-                    currentRequest.removeHeaders(AUTH.WWW_AUTH_RESP);
-                }
-                if (!original.containsHeader(AUTH.PROXY_AUTH_RESP)) {
-                    currentRequest.removeHeaders(AUTH.PROXY_AUTH_RESP);
-                }
-                return true;
-            }
-        }
-        if (config.isRedirectsEnabled()) {
-            final HttpRequest currentRequest = handler.getCurrentRequest();
-            final HttpResponse currentResponse = handler.getCurrentResponse();
-            if (this.redirectStrategy.isRedirected(currentRequest, currentResponse, localContext)) {
-                final int maxRedirects = config.getMaxRedirects() >= 0 ? config.getMaxRedirects() : 100;
-                if (state.getRedirectCount() >= maxRedirects) {
-                    throw new RedirectException("Maximum redirects (" + maxRedirects + ") exceeded");
-                }
-                state.incrementRedirectCount();
-                final HttpUriRequest redirect = this.redirectStrategy.getRedirect(currentRequest, currentResponse,
-                    localContext);
-                state.setRedirect(redirect);
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private boolean needAuthentication(
-            final InternalState state,
-            final AbstractClientExchangeHandler<?> handler) throws HttpException {
-        final HttpClientContext localContext = state.getLocalContext();
-        final CredentialsProvider credsProvider = localContext.getCredentialsProvider();
-        if (credsProvider != null) {
-            final HttpRoute route = handler.getRoute();
-            final HttpResponse currentResponse = handler.getCurrentResponse();
-            HttpHost target = localContext.getTargetHost();
-            if (target == null) {
-                target = route.getTargetHost();
-            }
-            if (target.getPort() < 0) {
-                target = new HttpHost(
-                        target.getHostName(),
-                        route.getTargetHost().getPort(),
-                        target.getSchemeName());
-            }
-            final AuthState targetAuthState = localContext.getTargetAuthState();
-            final AuthState proxyAuthState = localContext.getProxyAuthState();
-
-            final boolean targetAuthRequested = this.authenticator.isAuthenticationRequested(
-                    target, currentResponse, this.targetAuthStrategy, targetAuthState, localContext);
-
-            HttpHost proxy = route.getProxyHost();
-            // if proxy is not set use target host instead
-            if (proxy == null) {
-                proxy = route.getTargetHost();
-            }
-            final boolean proxyAuthRequested = this.authenticator.isAuthenticationRequested(
-                    proxy, currentResponse, this.proxyAuthStrategy, proxyAuthState, localContext);
-
-            if (targetAuthRequested) {
-                return this.authenticator.handleAuthChallenge(target, currentResponse,
-                        this.targetAuthStrategy, targetAuthState, localContext);
-            }
-            if (proxyAuthRequested) {
-                return this.authenticator.handleAuthChallenge(proxy, currentResponse,
-                        this.proxyAuthStrategy, proxyAuthState, localContext);
-            }
-        }
-        return false;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalClientExchangeHandlerImpl.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalClientExchangeHandlerImpl.java
deleted file mode 100644
index 554a6ef..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalClientExchangeHandlerImpl.java
+++ /dev/null
@@ -1,256 +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.http.impl.nio.client;
-
-import java.io.IOException;
-
-import org.apache.commons.logging.Log;
-import org.apache.http.ConnectionReuseStrategy;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.Configurable;
-import org.apache.http.client.methods.HttpExecutionAware;
-import org.apache.http.client.methods.HttpRequestWrapper;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.concurrent.BasicFuture;
-import org.apache.http.conn.ConnectionKeepAliveStrategy;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.nio.ContentDecoder;
-import org.apache.http.nio.ContentEncoder;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.nio.conn.NHttpClientConnectionManager;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.protocol.HttpCoreContext;
-import org.apache.http.protocol.HttpProcessor;
-
-/**
- * Default implementation of {@link org.apache.http.nio.protocol.HttpAsyncClientExchangeHandler}.
- * <p>
- * Instances of this class are expected to be accessed by one thread at a time only.
- * The {@link #cancel()} method can be called concurrently by multiple threads.
- */
-class MinimalClientExchangeHandlerImpl<T> extends AbstractClientExchangeHandler {
-
-    private final HttpAsyncRequestProducer requestProducer;
-    private final HttpAsyncResponseConsumer<T> responseConsumer;
-    private final HttpClientContext localContext;
-    private final BasicFuture<T> resultFuture;
-    private final HttpProcessor httpProcessor;
-
-    public MinimalClientExchangeHandlerImpl(
-            final Log log,
-            final HttpAsyncRequestProducer requestProducer,
-            final HttpAsyncResponseConsumer<T> responseConsumer,
-            final HttpClientContext localContext,
-            final BasicFuture<T> resultFuture,
-            final NHttpClientConnectionManager connmgr,
-            final HttpProcessor httpProcessor,
-            final ConnectionReuseStrategy connReuseStrategy,
-            final ConnectionKeepAliveStrategy keepaliveStrategy) {
-        super(log, localContext, resultFuture, connmgr, connReuseStrategy, keepaliveStrategy);
-        this.requestProducer = requestProducer;
-        this.responseConsumer = responseConsumer;
-        this.localContext = localContext;
-        this.resultFuture = resultFuture;
-        this.httpProcessor = httpProcessor;
-    }
-
-    @Override
-    void releaseResources() {
-        try {
-            this.requestProducer.close();
-        } catch (final IOException ex) {
-            this.log.debug("I/O error closing request producer", ex);
-        }
-        try {
-            this.responseConsumer.close();
-        } catch (final IOException ex) {
-            this.log.debug("I/O error closing response consumer", ex);
-        }
-    }
-
-    @Override
-    void executionFailed(final Exception ex) {
-        this.requestProducer.failed(ex);
-        this.responseConsumer.failed(ex);
-    }
-
-    @Override
-    boolean executionCancelled() {
-        final boolean cancelled = this.responseConsumer.cancel();
-
-        final T result = this.responseConsumer.getResult();
-        final Exception ex = this.responseConsumer.getException();
-        if (ex != null) {
-            this.resultFuture.failed(ex);
-        } else if (result != null) {
-            this.resultFuture.completed(result);
-        } else {
-            this.resultFuture.cancel();
-        }
-        return cancelled;
-    }
-
-    public void start() throws HttpException, IOException {
-        final HttpHost target = this.requestProducer.getTarget();
-        final HttpRequest original = this.requestProducer.generateRequest();
-
-        if (original instanceof HttpExecutionAware) {
-            ((HttpExecutionAware) original).setCancellable(this);
-        }
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + getId() + "] start execution");
-        }
-
-        if (original instanceof Configurable) {
-            final RequestConfig config = ((Configurable) original).getConfig();
-            if (config != null) {
-                this.localContext.setRequestConfig(config);
-            }
-        }
-
-        final HttpRequestWrapper request = HttpRequestWrapper.wrap(original);
-        final HttpRoute route = new HttpRoute(target);
-        setCurrentRequest(request);
-        setRoute(route);
-
-        this.localContext.setAttribute(HttpCoreContext.HTTP_REQUEST, request);
-        this.localContext.setAttribute(HttpCoreContext.HTTP_TARGET_HOST, target);
-        this.localContext.setAttribute(HttpClientContext.HTTP_ROUTE, route);
-
-        this.httpProcessor.process(request, this.localContext);
-
-        requestConnection();
-    }
-
-    @Override
-    public HttpRequest generateRequest() throws IOException, HttpException {
-        verifytRoute();
-        if (!isRouteEstablished()) {
-            onRouteToTarget();
-            onRouteComplete();
-        }
-
-        final NHttpClientConnection localConn = getConnection();
-        this.localContext.setAttribute(HttpCoreContext.HTTP_CONNECTION, localConn);
-        final RequestConfig config = this.localContext.getRequestConfig();
-        if (config.getSocketTimeout() > 0) {
-            localConn.setSocketTimeout(config.getSocketTimeout());
-        }
-        return getCurrentRequest();
-    }
-
-    @Override
-    public void produceContent(
-            final ContentEncoder encoder, final IOControl ioctrl) throws IOException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + getId() + "] produce content");
-        }
-        this.requestProducer.produceContent(encoder, ioctrl);
-        if (encoder.isCompleted()) {
-            this.requestProducer.resetRequest();
-        }
-    }
-
-    @Override
-    public void requestCompleted() {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + getId() + "] Request completed");
-        }
-        this.requestProducer.requestCompleted(this.localContext);
-    }
-
-    @Override
-    public void responseReceived(
-            final HttpResponse response) throws IOException, HttpException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + getId() + "] Response received " + response.getStatusLine());
-        }
-        this.localContext.setAttribute(HttpCoreContext.HTTP_RESPONSE, response);
-        this.httpProcessor.process(response, this.localContext);
-
-        setCurrentResponse(response);
-
-        this.responseConsumer.responseReceived(response);
-    }
-
-    @Override
-    public void consumeContent(
-            final ContentDecoder decoder, final IOControl ioctrl) throws IOException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + getId() + "] Consume content");
-        }
-        this.responseConsumer.consumeContent(decoder, ioctrl);
-        if (!decoder.isCompleted() && this.responseConsumer.isDone()) {
-            markConnectionNonReusable();
-            try {
-                markCompleted();
-                releaseConnection();
-                this.resultFuture.cancel();
-            } finally {
-                close();
-            }
-        }
-    }
-
-    @Override
-    public void responseCompleted() throws IOException, HttpException {
-        manageConnectionPersistence();
-        this.responseConsumer.responseCompleted(this.localContext);
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + getId() + "] Response processed");
-        }
-        try {
-            markCompleted();
-            releaseConnection();
-            final T result = this.responseConsumer.getResult();
-            final Exception ex = this.responseConsumer.getException();
-            if (ex == null) {
-                this.resultFuture.completed(result);
-            } else {
-                this.resultFuture.failed(ex);
-            }
-        } finally {
-            close();
-        }
-    }
-
-    @Override
-    public void inputTerminated() {
-        close();
-    }
-
-    public void abortConnection() {
-        discardConnection();
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalHttpAsyncClient.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalHttpAsyncClient.java
deleted file mode 100644
index 4898eec..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalHttpAsyncClient.java
+++ /dev/null
@@ -1,148 +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.http.impl.nio.client;
-
-import java.util.List;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.concurrent.ThreadFactory;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.ConnectionReuseStrategy;
-import org.apache.http.HttpHost;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.concurrent.BasicFuture;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.conn.ConnectionKeepAliveStrategy;
-import org.apache.http.impl.DefaultConnectionReuseStrategy;
-import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
-import org.apache.http.nio.NHttpClientEventHandler;
-import org.apache.http.nio.conn.NHttpClientConnectionManager;
-import org.apache.http.nio.protocol.HttpAsyncRequestExecutor;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.protocol.BasicHttpContext;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.protocol.HttpProcessor;
-
-class MinimalHttpAsyncClient extends CloseableHttpAsyncClientBase {
-
-    private final Log log = LogFactory.getLog(getClass());
-
-    private final NHttpClientConnectionManager connmgr;
-    private final HttpProcessor httpProcessor;
-    private final ConnectionReuseStrategy connReuseStrategy;
-    private final ConnectionKeepAliveStrategy keepaliveStrategy;
-
-    public MinimalHttpAsyncClient(
-            final NHttpClientConnectionManager connmgr,
-            final ThreadFactory threadFactory,
-            final NHttpClientEventHandler eventHandler,
-            final HttpProcessor httpProcessor,
-            final ConnectionReuseStrategy connReuseStrategy,
-            final ConnectionKeepAliveStrategy keepaliveStrategy) {
-        super(connmgr, threadFactory, eventHandler);
-        this.connmgr = connmgr;
-        this.httpProcessor = httpProcessor;
-        this.connReuseStrategy = connReuseStrategy;
-        this.keepaliveStrategy = keepaliveStrategy;
-    }
-
-    public MinimalHttpAsyncClient(
-            final NHttpClientConnectionManager connmgr,
-            final HttpProcessor httpProcessor) {
-        this(connmgr,
-                Executors.defaultThreadFactory(),
-                new HttpAsyncRequestExecutor(),
-                httpProcessor,
-                DefaultConnectionReuseStrategy.INSTANCE,
-                DefaultConnectionKeepAliveStrategy.INSTANCE);
-    }
-
-    @Override
-    public <T> Future<T> execute(
-            final HttpAsyncRequestProducer requestProducer,
-            final HttpAsyncResponseConsumer<T> responseConsumer,
-            final HttpContext context,
-            final FutureCallback<T> callback) {
-        ensureRunning();
-        final BasicFuture<T> future = new BasicFuture<T>(callback);
-        final HttpClientContext localcontext = HttpClientContext.adapt(
-            context != null ? context : new BasicHttpContext());
-
-        @SuppressWarnings("resource")
-        final MinimalClientExchangeHandlerImpl<T> handler = new MinimalClientExchangeHandlerImpl<T>(
-            this.log,
-            requestProducer,
-            responseConsumer,
-            localcontext,
-            future,
-            this.connmgr,
-            this.httpProcessor,
-            this.connReuseStrategy,
-            this.keepaliveStrategy);
-        try {
-            handler.start();
-        } catch (final Exception ex) {
-            handler.failed(ex);
-        }
-        return future;
-    }
-
-    @Override
-    public <T> Future<List<T>> execute(
-            final HttpHost target,
-            final List<? extends HttpAsyncRequestProducer> requestProducers,
-            final List<? extends HttpAsyncResponseConsumer<T>> responseConsumers,
-            final HttpContext context,
-            final FutureCallback<List<T>> callback) {
-        ensureRunning();
-        final BasicFuture<List<T>> future = new BasicFuture<List<T>>(callback);
-        final HttpClientContext localcontext = HttpClientContext.adapt(
-                context != null ? context : new BasicHttpContext());
-        @SuppressWarnings("resource")
-        final PipeliningClientExchangeHandlerImpl<T> handler = new PipeliningClientExchangeHandlerImpl<T>(
-                this.log,
-                target,
-                requestProducers,
-                responseConsumers,
-                localcontext,
-                future,
-                this.connmgr,
-                this.httpProcessor,
-                this.connReuseStrategy,
-                this.keepaliveStrategy);
-        try {
-            handler.start();
-        } catch (final Exception ex) {
-            handler.failed(ex);
-        }
-        return future;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalHttpAsyncClientBuilder.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalHttpAsyncClientBuilder.java
deleted file mode 100644
index a865dc7..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/MinimalHttpAsyncClientBuilder.java
+++ /dev/null
@@ -1,166 +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.http.impl.nio.client;
-
-import java.util.concurrent.Executors;
-import java.util.concurrent.ThreadFactory;
-
-import org.apache.http.ConnectionReuseStrategy;
-import org.apache.http.annotation.NotThreadSafe;
-import org.apache.http.client.protocol.RequestAddCookies;
-import org.apache.http.client.protocol.RequestClientConnControl;
-import org.apache.http.client.protocol.ResponseProcessCookies;
-import org.apache.http.conn.ConnectionKeepAliveStrategy;
-import org.apache.http.impl.DefaultConnectionReuseStrategy;
-import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
-import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager;
-import org.apache.http.impl.nio.reactor.IOReactorConfig;
-import org.apache.http.nio.NHttpClientEventHandler;
-import org.apache.http.nio.conn.NHttpClientConnectionManager;
-import org.apache.http.nio.protocol.HttpAsyncRequestExecutor;
-import org.apache.http.protocol.HttpProcessor;
-import org.apache.http.protocol.HttpProcessorBuilder;
-import org.apache.http.protocol.RequestContent;
-import org.apache.http.protocol.RequestTargetHost;
-import org.apache.http.protocol.RequestUserAgent;
-import org.apache.http.util.VersionInfo;
-
-/**
- * Builder for {@link org.apache.http.impl.nio.client.MinimalHttpAsyncClient} instances.
- *
- * @since 4.1
- */
-@NotThreadSafe
-class MinimalHttpAsyncClientBuilder {
-
-    private NHttpClientConnectionManager connManager;
-    private boolean connManagerShared;
-    private ConnectionReuseStrategy reuseStrategy;
-    private ConnectionKeepAliveStrategy keepAliveStrategy;
-    private String userAgent;
-    private ThreadFactory threadFactory;
-    private boolean cookieManagementDisabled;
-
-    public static MinimalHttpAsyncClientBuilder create() {
-        return new MinimalHttpAsyncClientBuilder();
-    }
-
-    protected MinimalHttpAsyncClientBuilder() {
-        super();
-    }
-
-    public final MinimalHttpAsyncClientBuilder setConnectionManager(
-            final NHttpClientConnectionManager connManager) {
-        this.connManager = connManager;
-        return this;
-    }
-
-    public final MinimalHttpAsyncClientBuilder setConnectionManagerShared(
-            final boolean shared) {
-        this.connManagerShared = shared;
-        return this;
-    }
-
-    public final MinimalHttpAsyncClientBuilder setConnectionReuseStrategy(
-            final ConnectionReuseStrategy reuseStrategy) {
-        this.reuseStrategy = reuseStrategy;
-        return this;
-    }
-
-    public final MinimalHttpAsyncClientBuilder setKeepAliveStrategy(
-            final ConnectionKeepAliveStrategy keepAliveStrategy) {
-        this.keepAliveStrategy = keepAliveStrategy;
-        return this;
-    }
-
-    public final MinimalHttpAsyncClientBuilder setUserAgent(final String userAgent) {
-        this.userAgent = userAgent;
-        return this;
-    }
-
-    public final MinimalHttpAsyncClientBuilder setThreadFactory(final ThreadFactory threadFactory) {
-        this.threadFactory = threadFactory;
-        return this;
-    }
-
-    public final MinimalHttpAsyncClientBuilder disableCookieManagement() {
-        cookieManagementDisabled = true;
-        return this;
-    }
-
-    public MinimalHttpAsyncClient build() {
-
-        NHttpClientConnectionManager connManager = this.connManager;
-        if (connManager == null) {
-            connManager = new PoolingNHttpClientConnectionManager(
-                    IOReactorUtils.create(IOReactorConfig.DEFAULT));
-        }
-        ConnectionReuseStrategy reuseStrategy = this.reuseStrategy;
-        if (reuseStrategy == null) {
-            reuseStrategy = DefaultConnectionReuseStrategy.INSTANCE;
-        }
-        ConnectionKeepAliveStrategy keepAliveStrategy = this.keepAliveStrategy;
-        if (keepAliveStrategy == null) {
-            keepAliveStrategy = DefaultConnectionKeepAliveStrategy.INSTANCE;
-        }
-        String userAgent = this.userAgent;
-        if (userAgent == null) {
-            userAgent = VersionInfo.getUserAgent(
-                    "Apache-HttpAsyncClient", "org.apache.http.nio.client", getClass());
-        }
-        final HttpProcessorBuilder b = HttpProcessorBuilder.create();
-        b.addAll(
-                new RequestContent(),
-                new RequestTargetHost(),
-                new RequestClientConnControl(),
-                new RequestUserAgent(userAgent));
-        if (!cookieManagementDisabled) {
-            b.add(new RequestAddCookies());
-            b.add(new ResponseProcessCookies());
-        }
-        final HttpProcessor httpprocessor = b.build();
-
-        ThreadFactory threadFactory = null;
-        NHttpClientEventHandler eventHandler = null;
-        if (!this.connManagerShared) {
-            threadFactory = this.threadFactory;
-            if (threadFactory == null) {
-                threadFactory = Executors.defaultThreadFactory();
-            }
-            eventHandler = new HttpAsyncRequestExecutor();
-        }
-        return new MinimalHttpAsyncClient(
-            connManager,
-            threadFactory,
-            eventHandler,
-            httpprocessor,
-            reuseStrategy,
-            keepAliveStrategy);
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/PipeliningClientExchangeHandlerImpl.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/PipeliningClientExchangeHandlerImpl.java
deleted file mode 100644
index 19027ba..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/PipeliningClientExchangeHandlerImpl.java
+++ /dev/null
@@ -1,338 +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.http.impl.nio.client;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Queue;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.apache.commons.logging.Log;
-import org.apache.http.ConnectionClosedException;
-import org.apache.http.ConnectionReuseStrategy;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.HttpRequestWrapper;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.concurrent.BasicFuture;
-import org.apache.http.conn.ConnectionKeepAliveStrategy;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.nio.ContentDecoder;
-import org.apache.http.nio.ContentEncoder;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.nio.conn.NHttpClientConnectionManager;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.nio.protocol.Pipelined;
-import org.apache.http.protocol.HttpCoreContext;
-import org.apache.http.protocol.HttpProcessor;
-import org.apache.http.util.Args;
-import org.apache.http.util.Asserts;
-
-/**
- * {@link org.apache.http.nio.protocol.HttpAsyncClientExchangeHandler} implementation
- * that supports HTTP message pipelining.
- * <p>
- * Instances of this class are expected to be accessed by one thread at a time only.
- * The {@link #cancel()} method can be called concurrently by multiple threads.
- */
-@Pipelined
-class PipeliningClientExchangeHandlerImpl<T> extends AbstractClientExchangeHandler {
-
-    private final HttpHost target;
-    private final Queue<HttpAsyncRequestProducer> requestProducerQueue;
-    private final Queue<HttpAsyncResponseConsumer<T>> responseConsumerQueue;
-    private final Queue<HttpRequest> requestQueue;
-    private final Queue<T> resultQueue;
-    private final HttpClientContext localContext;
-    private final BasicFuture<List<T>> resultFuture;
-    private final HttpProcessor httpProcessor;
-    private final AtomicReference<HttpAsyncRequestProducer> requestProducerRef;
-    private final AtomicReference<HttpAsyncResponseConsumer<T>> responseConsumerRef;
-
-    public PipeliningClientExchangeHandlerImpl(
-            final Log log,
-            final HttpHost target,
-            final List<? extends HttpAsyncRequestProducer> requestProducers,
-            final List<? extends HttpAsyncResponseConsumer<T>> responseConsumers,
-            final HttpClientContext localContext,
-            final BasicFuture<List<T>> resultFuture,
-            final NHttpClientConnectionManager connmgr,
-            final HttpProcessor httpProcessor,
-            final ConnectionReuseStrategy connReuseStrategy,
-            final ConnectionKeepAliveStrategy keepaliveStrategy) {
-        super(log, localContext, resultFuture, connmgr, connReuseStrategy, keepaliveStrategy);
-        Args.notNull(target, "HTTP target");
-        Args.notEmpty(requestProducers, "Request producer list");
-        Args.notEmpty(responseConsumers, "Response consumer list");
-        Args.check(requestProducers.size() == responseConsumers.size(),
-                "Number of request producers does not match that of response consumers");
-        this.target = target;
-        this.requestProducerQueue = new ConcurrentLinkedQueue<HttpAsyncRequestProducer>(requestProducers);
-        this.responseConsumerQueue = new ConcurrentLinkedQueue<HttpAsyncResponseConsumer<T>>(responseConsumers);
-        this.requestQueue = new ConcurrentLinkedQueue<HttpRequest>();
-        this.resultQueue = new ConcurrentLinkedQueue<T>();
-        this.localContext = localContext;
-        this.resultFuture = resultFuture;
-        this.httpProcessor = httpProcessor;
-        this.requestProducerRef = new AtomicReference<HttpAsyncRequestProducer>(null);
-        this.responseConsumerRef = new AtomicReference<HttpAsyncResponseConsumer<T>>(null);
-    }
-
-    private void closeProducer(final HttpAsyncRequestProducer requestProducer) {
-        if (requestProducer != null) {
-            try {
-                requestProducer.close();
-            } catch (final IOException ex) {
-                this.log.debug("I/O error closing request producer", ex);
-            }
-        }
-    }
-
-    private void closeConsumer(final HttpAsyncResponseConsumer<?> responseConsumer) {
-        if (responseConsumer != null) {
-            try {
-                responseConsumer.close();
-            } catch (final IOException ex) {
-                this.log.debug("I/O error closing response consumer", ex);
-            }
-        }
-    }
-
-    @Override
-    void releaseResources() {
-        closeProducer(this.requestProducerRef.getAndSet(null));
-        closeConsumer(this.responseConsumerRef.getAndSet(null));
-        while (!this.requestProducerQueue.isEmpty()) {
-            closeProducer(this.requestProducerQueue.remove());
-        }
-        while (!this.responseConsumerQueue.isEmpty()) {
-            closeConsumer(this.responseConsumerQueue.remove());
-        }
-        this.requestQueue.clear();
-        this.resultQueue.clear();
-    }
-
-    @Override
-    void executionFailed(final Exception ex) {
-        final HttpAsyncRequestProducer requestProducer = this.requestProducerRef.get();
-        if (requestProducer != null) {
-            requestProducer.failed(ex);
-        }
-        final HttpAsyncResponseConsumer<T> responseConsumer = this.responseConsumerRef.get();
-        if (responseConsumer != null) {
-            responseConsumer.failed(ex);
-        }
-        for (final HttpAsyncResponseConsumer<T> cancellable: this.responseConsumerQueue) {
-            cancellable.cancel();
-        }
-    }
-
-    @Override
-    boolean executionCancelled() {
-        final HttpAsyncResponseConsumer<T> responseConsumer = this.responseConsumerRef.get();
-        final boolean cancelled = responseConsumer != null && responseConsumer.cancel();
-        this.resultFuture.cancel();
-        return cancelled;
-    }
-
-    public void start() throws HttpException, IOException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + getId() + "] start execution");
-        }
-
-        final HttpRoute route = new HttpRoute(this.target);
-        setRoute(route);
-
-        this.localContext.setAttribute(HttpCoreContext.HTTP_TARGET_HOST, this.target);
-        this.localContext.setAttribute(HttpClientContext.HTTP_ROUTE, route);
-
-        requestConnection();
-    }
-
-    @Override
-    public HttpRequest generateRequest() throws IOException, HttpException {
-        verifytRoute();
-        if (!isRouteEstablished()) {
-            onRouteToTarget();
-            onRouteComplete();
-        }
-        final NHttpClientConnection localConn = getConnection();
-        this.localContext.setAttribute(HttpCoreContext.HTTP_CONNECTION, localConn);
-
-        Asserts.check(this.requestProducerRef.get() == null, "Inconsistent state: currentRequest producer is not null");
-        final HttpAsyncRequestProducer requestProducer = this.requestProducerQueue.poll();
-        if (requestProducer == null) {
-            return null;
-        }
-        this.requestProducerRef.set(requestProducer);
-
-        final HttpRequest original = requestProducer.generateRequest();
-        final HttpRequestWrapper currentRequest = HttpRequestWrapper.wrap(original);
-        final RequestConfig config = this.localContext.getRequestConfig();
-        if (config.getSocketTimeout() > 0) {
-            localConn.setSocketTimeout(config.getSocketTimeout());
-        }
-
-        this.httpProcessor.process(currentRequest, this.localContext);
-
-        this.requestQueue.add(currentRequest);
-        setCurrentRequest(currentRequest);
-
-        return currentRequest;
-    }
-
-    @Override
-    public void produceContent(
-            final ContentEncoder encoder, final IOControl ioctrl) throws IOException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + getId() + "] produce content");
-        }
-        final HttpAsyncRequestProducer requestProducer = this.requestProducerRef.get();
-        Asserts.check(requestProducer != null, "Inconsistent state: request producer is null");
-        requestProducer.produceContent(encoder, ioctrl);
-        if (encoder.isCompleted()) {
-            requestProducer.resetRequest();
-        }
-    }
-
-    @Override
-    public void requestCompleted() {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + getId() + "] Request completed");
-        }
-        final HttpAsyncRequestProducer requestProducer = this.requestProducerRef.getAndSet(null);
-        Asserts.check(requestProducer != null, "Inconsistent state: request producer is null");
-        requestProducer.requestCompleted(this.localContext);
-        try {
-            requestProducer.close();
-        } catch (final IOException ioex) {
-            this.log.debug(ioex.getMessage(), ioex);
-        }
-    }
-
-    @Override
-    public void responseReceived(
-            final HttpResponse response) throws IOException, HttpException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + getId() + "] Response received " + response.getStatusLine());
-        }
-
-        Asserts.check(this.responseConsumerRef.get() == null, "Inconsistent state: response consumer is not null");
-
-        final HttpAsyncResponseConsumer<T> responseConsumer = this.responseConsumerQueue.poll();
-        Asserts.check(responseConsumer != null, "Inconsistent state: response consumer queue is empty");
-        this.responseConsumerRef.set(responseConsumer);
-
-        final HttpRequest request = this.requestQueue.poll();
-        Asserts.check(request != null, "Inconsistent state: request queue is empty");
-
-        this.localContext.setAttribute(HttpCoreContext.HTTP_REQUEST, request);
-        this.localContext.setAttribute(HttpCoreContext.HTTP_RESPONSE, response);
-        this.httpProcessor.process(response, this.localContext);
-
-        responseConsumer.responseReceived(response);
-
-        setCurrentResponse(response);
-    }
-
-    @Override
-    public void consumeContent(
-            final ContentDecoder decoder, final IOControl ioctrl) throws IOException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + getId() + "] Consume content");
-        }
-        final HttpAsyncResponseConsumer<T> responseConsumer = this.responseConsumerRef.get();
-        Asserts.check(responseConsumer != null, "Inconsistent state: response consumer is null");
-        responseConsumer.consumeContent(decoder, ioctrl);
-    }
-
-    @Override
-    public void responseCompleted() throws IOException, HttpException {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("[exchange: " + getId() + "] Response processed");
-        }
-
-        final boolean keepAlive = manageConnectionPersistence();
-
-        final HttpAsyncResponseConsumer<T> responseConsumer = this.responseConsumerRef.getAndSet(null);
-        Asserts.check(responseConsumer != null, "Inconsistent state: response consumer is null");
-        try {
-            responseConsumer.responseCompleted(this.localContext);
-            final T result = responseConsumer.getResult();
-            final Exception ex = responseConsumer.getException();
-            try {
-                responseConsumer.close();
-            } catch (final IOException ioex) {
-                this.log.debug(ioex.getMessage(), ioex);
-            }
-            if (result != null) {
-                this.resultQueue.add(result);
-            } else {
-                failed(ex);
-            }
-            if (!this.resultFuture.isDone() && this.responseConsumerQueue.isEmpty()) {
-                this.resultFuture.completed(new ArrayList<T>(this.resultQueue));
-                this.resultQueue.clear();
-            }
-
-            if (this.resultFuture.isDone()) {
-                close();
-            } else {
-                if (!keepAlive) {
-                    failed(new ConnectionClosedException("Connection closed"));
-                } else {
-                    final NHttpClientConnection localConn = getConnection();
-                    if (localConn != null) {
-                        localConn.requestOutput();
-                    } else {
-                        requestConnection();
-                    }
-                }
-            }
-        } catch (final RuntimeException ex) {
-            failed(ex);
-            throw ex;
-        }
-    }
-
-    @Override
-    public void inputTerminated() {
-        failed(new ConnectionClosedException("Connection closed"));
-    }
-
-    public void abortConnection() {
-        discardConnection();
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/package-info.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/package-info.java
deleted file mode 100644
index 10110e7..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/client/package-info.java
+++ /dev/null
@@ -1,46 +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/>.
- *
- */
-
-/**
- * Default asynchronous HTTP client implementation.
- * <p>
- * The usual execution flow can be demonstrated by the code snippet below:
- * <pre>
- * CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
- * try {
- *     httpclient.start();
- *     HttpGet request = new HttpGet("http://www.apache.org/");
- *     Future<HttpResponse> future = httpclient.execute(request, null);
- *     HttpResponse response = future.get();
- *     System.out.println(response.getStatusLine());
- *     // Do something useful with the response body
- * } finally {
- *     httpclient.close();
- * }
- * </pre>
- */
-package org.apache.http.impl.nio.client;
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/CPool.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/CPool.java
deleted file mode 100644
index eaa1e18..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/CPool.java
+++ /dev/null
@@ -1,81 +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.http.impl.nio.conn;
-
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.annotation.ThreadSafe;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.nio.conn.ManagedNHttpClientConnection;
-import org.apache.http.nio.pool.AbstractNIOConnPool;
-import org.apache.http.nio.pool.NIOConnFactory;
-import org.apache.http.nio.pool.SocketAddressResolver;
-import org.apache.http.nio.reactor.ConnectingIOReactor;
-
-@ThreadSafe
-class CPool extends AbstractNIOConnPool<HttpRoute, ManagedNHttpClientConnection, CPoolEntry> {
-
-    private final Log log = LogFactory.getLog(CPool.class);
-
-    private final long timeToLive;
-    private final TimeUnit tunit;
-
-    public CPool(
-            final ConnectingIOReactor ioreactor,
-            final NIOConnFactory<HttpRoute, ManagedNHttpClientConnection> connFactory,
-            final SocketAddressResolver<HttpRoute> addressResolver,
-            final int defaultMaxPerRoute, final int maxTotal,
-            final long timeToLive, final TimeUnit tunit) {
-        super(ioreactor, connFactory, addressResolver, defaultMaxPerRoute, maxTotal);
-        this.timeToLive = timeToLive;
-        this.tunit = tunit;
-    }
-
-    @Override
-    protected CPoolEntry createEntry(final HttpRoute route, final ManagedNHttpClientConnection conn) {
-        final CPoolEntry entry =  new CPoolEntry(this.log, conn.getId(), route, conn, this.timeToLive, this.tunit);
-        entry.setSocketTimeout(conn.getSocketTimeout());
-        return entry;
-    }
-
-    @Override
-    protected void onLease(final CPoolEntry entry) {
-        final NHttpClientConnection conn = entry.getConnection();
-        conn.setSocketTimeout(entry.getSocketTimeout());
-    }
-
-    @Override
-    protected void onRelease(final CPoolEntry entry) {
-        final NHttpClientConnection conn = entry.getConnection();
-        entry.setSocketTimeout(conn.getSocketTimeout());
-        conn.setSocketTimeout(0);
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/CPoolEntry.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/CPoolEntry.java
deleted file mode 100644
index ffe7286..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/CPoolEntry.java
+++ /dev/null
@@ -1,106 +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.http.impl.nio.conn;
-
-import java.io.IOException;
-import java.util.Date;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.logging.Log;
-import org.apache.http.annotation.ThreadSafe;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.nio.conn.ManagedNHttpClientConnection;
-import org.apache.http.pool.PoolEntry;
-
-@ThreadSafe
-class CPoolEntry extends PoolEntry<HttpRoute, ManagedNHttpClientConnection> {
-
-    private final Log log;
-    private volatile int socketTimeout;
-    private volatile boolean routeComplete;
-
-    public CPoolEntry(
-            final Log log,
-            final String id,
-            final HttpRoute route,
-            final ManagedNHttpClientConnection conn,
-            final long timeToLive, final TimeUnit tunit) {
-        super(id, route, conn, timeToLive, tunit);
-        this.log = log;
-    }
-
-    public boolean isRouteComplete() {
-        return this.routeComplete;
-    }
-
-    public void markRouteComplete() {
-        this.routeComplete = true;
-    }
-
-    public int getSocketTimeout() {
-        return this.socketTimeout;
-    }
-
-    public void setSocketTimeout(final int socketTimeout) {
-        this.socketTimeout = socketTimeout;
-    }
-
-    public void closeConnection() throws IOException {
-        final ManagedNHttpClientConnection conn = getConnection();
-        conn.close();
-    }
-
-    public void shutdownConnection() throws IOException {
-        final ManagedNHttpClientConnection conn = getConnection();
-        conn.shutdown();
-    }
-
-    @Override
-    public boolean isExpired(final long now) {
-        final boolean expired = super.isExpired(now);
-        if (expired && this.log.isDebugEnabled()) {
-            this.log.debug("Connection " + this + " expired @ " + new Date(getExpiry()));
-        }
-        return expired;
-    }
-
-    @Override
-    public boolean isClosed() {
-        final ManagedNHttpClientConnection conn = getConnection();
-        return !conn.isOpen();
-    }
-
-    @Override
-    public void close() {
-        try {
-            closeConnection();
-        } catch (final IOException ex) {
-            this.log.debug("I/O error closing connection", ex);
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/CPoolProxy.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/CPoolProxy.java
deleted file mode 100644
index 485d67d..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/CPoolProxy.java
+++ /dev/null
@@ -1,278 +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.http.impl.nio.conn;
-
-import java.io.IOException;
-import java.net.InetAddress;
-
-import javax.net.ssl.SSLSession;
-
-import org.apache.http.HttpConnectionMetrics;
-import org.apache.http.HttpException;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.annotation.NotThreadSafe;
-import org.apache.http.impl.conn.ConnectionShutdownException;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.nio.conn.ManagedNHttpClientConnection;
-import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.protocol.HttpContext;
-
-@NotThreadSafe
-class CPoolProxy implements ManagedNHttpClientConnection {
-
-    private volatile CPoolEntry poolEntry;
-
-    CPoolProxy(final CPoolEntry entry) {
-        super();
-        this.poolEntry = entry;
-    }
-
-    CPoolEntry getPoolEntry() {
-        return this.poolEntry;
-    }
-
-    CPoolEntry detach() {
-        final CPoolEntry local = this.poolEntry;
-        this.poolEntry = null;
-        return local;
-    }
-
-    ManagedNHttpClientConnection getConnection() {
-        final CPoolEntry local = this.poolEntry;
-        if (local == null) {
-            return null;
-        }
-        return local.getConnection();
-    }
-
-    ManagedNHttpClientConnection getValidConnection() {
-        final ManagedNHttpClientConnection conn = getConnection();
-        if (conn == null) {
-            throw new ConnectionShutdownException();
-        }
-        return conn;
-    }
-
-    @Override
-    public void close() throws IOException {
-        final CPoolEntry local = this.poolEntry;
-        if (local != null) {
-            local.closeConnection();
-        }
-    }
-
-    @Override
-    public void shutdown() throws IOException {
-        final CPoolEntry local = this.poolEntry;
-        if (local != null) {
-            local.shutdownConnection();
-        }
-    }
-
-    @Override
-    public HttpConnectionMetrics getMetrics() {
-        return getValidConnection().getMetrics();
-    }
-
-    @Override
-    public void requestInput() {
-        final NHttpClientConnection conn = getConnection();
-        if (conn != null) {
-            conn.requestInput();
-        }
-    }
-
-    @Override
-    public void suspendInput() {
-        final NHttpClientConnection conn = getConnection();
-        if (conn != null) {
-            conn.suspendInput();
-        }
-    }
-
-    @Override
-    public void requestOutput() {
-        final NHttpClientConnection conn = getConnection();
-        if (conn != null) {
-            conn.requestOutput();
-        }
-    }
-
-    @Override
-    public void suspendOutput() {
-        final NHttpClientConnection conn = getConnection();
-        if (conn != null) {
-            conn.suspendOutput();
-        }
-    }
-
-    @Override
-    public InetAddress getLocalAddress() {
-        return getValidConnection().getLocalAddress();
-    }
-
-    @Override
-    public int getLocalPort() {
-        return getValidConnection().getLocalPort();
-    }
-
-    @Override
-    public InetAddress getRemoteAddress() {
-        return getValidConnection().getRemoteAddress();
-    }
-
-    @Override
-    public int getRemotePort() {
-        return getValidConnection().getRemotePort();
-    }
-
-    @Override
-    public boolean isOpen() {
-        final CPoolEntry local = this.poolEntry;
-        if (local != null) {
-            return !local.isClosed();
-        }
-        return false;
-    }
-
-    @Override
-    public boolean isStale() {
-        final NHttpClientConnection conn = getConnection();
-        if (conn != null) {
-            return !conn.isOpen();
-        }
-        return false;
-    }
-
-    @Override
-    public void setSocketTimeout(final int i) {
-        getValidConnection().setSocketTimeout(i);
-    }
-
-    @Override
-    public int getSocketTimeout() {
-        return getValidConnection().getSocketTimeout();
-    }
-
-    @Override
-    public void submitRequest(final HttpRequest request) throws IOException, HttpException {
-        getValidConnection().submitRequest(request);
-    }
-
-    @Override
-    public boolean isRequestSubmitted() {
-        return getValidConnection().isRequestSubmitted();
-    }
-
-    @Override
-    public void resetOutput() {
-        getValidConnection().resetOutput();
-    }
-
-    @Override
-    public void resetInput() {
-        getValidConnection().resetInput();
-    }
-
-    @Override
-    public int getStatus() {
-        return getValidConnection().getStatus();
-    }
-
-    @Override
-    public HttpRequest getHttpRequest() {
-        return getValidConnection().getHttpRequest();
-    }
-
-    @Override
-    public HttpResponse getHttpResponse() {
-        return getValidConnection().getHttpResponse();
-    }
-
-    @Override
-    public HttpContext getContext() {
-        return getValidConnection().getContext();
-    }
-
-    public static NHttpClientConnection newProxy(final CPoolEntry poolEntry) {
-        return new CPoolProxy(poolEntry);
-    }
-
-    private static CPoolProxy getProxy(final NHttpClientConnection conn) {
-        if (!CPoolProxy.class.isInstance(conn)) {
-            throw new IllegalStateException("Unexpected connection proxy class: " + conn.getClass());
-        }
-        return CPoolProxy.class.cast(conn);
-    }
-
-    public static CPoolEntry getPoolEntry(final NHttpClientConnection proxy) {
-        final CPoolEntry entry = getProxy(proxy).getPoolEntry();
-        if (entry == null) {
-            throw new ConnectionShutdownException();
-        }
-        return entry;
-    }
-
-    public static CPoolEntry detach(final NHttpClientConnection proxy) {
-        return getProxy(proxy).detach();
-    }
-
-    @Override
-    public String getId() {
-        return getValidConnection().getId();
-    }
-
-    @Override
-    public void bind(final IOSession iosession) {
-        getValidConnection().bind(iosession);
-    }
-
-    @Override
-    public IOSession getIOSession() {
-        return getValidConnection().getIOSession();
-    }
-
-    @Override
-    public SSLSession getSSLSession() {
-        return getValidConnection().getSSLSession();
-    }
-
-    @Override
-    public String toString() {
-        final StringBuilder sb = new StringBuilder("CPoolProxy{");
-        final ManagedNHttpClientConnection conn = getConnection();
-        if (conn != null) {
-            sb.append(conn);
-        } else {
-            sb.append("detached");
-        }
-        sb.append('}');
-        return sb.toString();
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/LoggingIOSession.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/LoggingIOSession.java
deleted file mode 100644
index 57db166..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/LoggingIOSession.java
+++ /dev/null
@@ -1,249 +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.http.impl.nio.conn;
-
-import java.io.IOException;
-import java.net.SocketAddress;
-import java.nio.ByteBuffer;
-import java.nio.channels.ByteChannel;
-import java.nio.channels.SelectionKey;
-
-import org.apache.commons.logging.Log;
-import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.nio.reactor.SessionBufferStatus;
-
-class LoggingIOSession implements IOSession {
-
-    private final IOSession session;
-    private final ByteChannel channel;
-    private final String id;
-    private final Log log;
-    private final Wire wirelog;
-
-    public LoggingIOSession(final IOSession session, final String id, final Log log, final Log wirelog) {
-        super();
-        this.session = session;
-        this.channel = new LoggingByteChannel();
-        this.id = id;
-        this.log = log;
-        this.wirelog = new Wire(wirelog, this.id);
-    }
-
-    @Override
-    public ByteChannel channel() {
-        return this.channel;
-    }
-
-    @Override
-    public SocketAddress getLocalAddress() {
-        return this.session.getLocalAddress();
-    }
-
-    @Override
-    public SocketAddress getRemoteAddress() {
-        return this.session.getRemoteAddress();
-    }
-
-    @Override
-    public int getEventMask() {
-        return this.session.getEventMask();
-    }
-
-    private static String formatOps(final int ops) {
-        final StringBuilder buffer = new StringBuilder(6);
-        buffer.append('[');
-        if ((ops & SelectionKey.OP_READ) > 0) {
-            buffer.append('r');
-        }
-        if ((ops & SelectionKey.OP_WRITE) > 0) {
-            buffer.append('w');
-        }
-        if ((ops & SelectionKey.OP_ACCEPT) > 0) {
-            buffer.append('a');
-        }
-        if ((ops & SelectionKey.OP_CONNECT) > 0) {
-            buffer.append('c');
-        }
-        buffer.append(']');
-        return buffer.toString();
-    }
-
-    @Override
-    public void setEventMask(final int ops) {
-        this.session.setEventMask(ops);
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(this.id + " " + this.session + ": Event mask set " + formatOps(ops));
-        }
-    }
-
-    @Override
-    public void setEvent(final int op) {
-        this.session.setEvent(op);
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(this.id + " " + this.session + ": Event set " + formatOps(op));
-        }
-    }
-
-    @Override
-    public void clearEvent(final int op) {
-        this.session.clearEvent(op);
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(this.id + " " + this.session + ": Event cleared " + formatOps(op));
-        }
-    }
-
-    @Override
-    public void close() {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(this.id + " " + this.session + ": Close");
-        }
-        this.session.close();
-    }
-
-    @Override
-    public int getStatus() {
-        return this.session.getStatus();
-    }
-
-    @Override
-    public boolean isClosed() {
-        return this.session.isClosed();
-    }
-
-    @Override
-    public void shutdown() {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(this.id + " " + this.session + ": Shutdown");
-        }
-        this.session.shutdown();
-    }
-
-    @Override
-    public int getSocketTimeout() {
-        return this.session.getSocketTimeout();
-    }
-
-    @Override
-    public void setSocketTimeout(final int timeout) {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(this.id + " " + this.session + ": Set timeout " + timeout);
-        }
-        this.session.setSocketTimeout(timeout);
-    }
-
-    @Override
-    public void setBufferStatus(final SessionBufferStatus status) {
-        this.session.setBufferStatus(status);
-    }
-
-    @Override
-    public boolean hasBufferedInput() {
-        return this.session.hasBufferedInput();
-    }
-
-    @Override
-    public boolean hasBufferedOutput() {
-        return this.session.hasBufferedOutput();
-    }
-
-    @Override
-    public Object getAttribute(final String name) {
-        return this.session.getAttribute(name);
-    }
-
-    @Override
-    public void setAttribute(final String name, final Object obj) {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(this.id + " " + this.session + ": Set attribute " + name);
-        }
-        this.session.setAttribute(name, obj);
-    }
-
-    @Override
-    public Object removeAttribute(final String name) {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug(this.id + " " + this.session + ": Remove attribute " + name);
-        }
-        return this.session.removeAttribute(name);
-    }
-
-    @Override
-    public String toString() {
-        return this.id + " " + this.session.toString();
-    }
-
-    class LoggingByteChannel implements ByteChannel {
-
-        @Override
-        public int read(final ByteBuffer dst) throws IOException {
-            final int bytesRead = session.channel().read(dst);
-            if (log.isDebugEnabled()) {
-                log.debug(id + " " + session + ": " + bytesRead + " bytes read");
-            }
-            if (bytesRead > 0 && wirelog.isEnabled()) {
-                final ByteBuffer b = dst.duplicate();
-                final int p = b.position();
-                b.limit(p);
-                b.position(p - bytesRead);
-                wirelog.input(b);
-            }
-            return bytesRead;
-        }
-
-        @Override
-        public int write(final ByteBuffer src) throws IOException {
-            final int byteWritten = session.channel().write(src);
-            if (log.isDebugEnabled()) {
-                log.debug(id + " " + session + ": " + byteWritten + " bytes written");
-            }
-            if (byteWritten > 0 && wirelog.isEnabled()) {
-                final ByteBuffer b = src.duplicate();
-                final int p = b.position();
-                b.limit(p);
-                b.position(p - byteWritten);
-                wirelog.output(b);
-            }
-            return byteWritten;
-        }
-
-        @Override
-        public void close() throws IOException {
-            if (log.isDebugEnabled()) {
-                log.debug(id + " " + session + ": Channel close");
-            }
-            session.channel().close();
-        }
-
-        @Override
-        public boolean isOpen() {
-            return session.channel().isOpen();
-        }
-
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/ManagedNHttpClientConnectionFactory.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/ManagedNHttpClientConnectionFactory.java
deleted file mode 100644
index 83d0738..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/ManagedNHttpClientConnectionFactory.java
+++ /dev/null
@@ -1,125 +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.http.impl.nio.conn;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CodingErrorAction;
-import java.util.concurrent.atomic.AtomicLong;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.config.ConnectionConfig;
-import org.apache.http.impl.nio.codecs.DefaultHttpRequestWriterFactory;
-import org.apache.http.impl.nio.codecs.DefaultHttpResponseParserFactory;
-import org.apache.http.nio.NHttpMessageParserFactory;
-import org.apache.http.nio.NHttpMessageWriterFactory;
-import org.apache.http.nio.conn.ManagedNHttpClientConnection;
-import org.apache.http.nio.conn.NHttpConnectionFactory;
-import org.apache.http.nio.reactor.IOEventDispatch;
-import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.nio.util.ByteBufferAllocator;
-import org.apache.http.nio.util.HeapByteBufferAllocator;
-
-/**
- * Default factory for {@link ManagedNHttpClientConnection} instances.
- *
- * @since 4.0
- */
-public class ManagedNHttpClientConnectionFactory implements NHttpConnectionFactory<ManagedNHttpClientConnection> {
-
-    private final Log headerlog = LogFactory.getLog("org.apache.http.headers");
-    private final Log wirelog = LogFactory.getLog("org.apache.http.wire");
-    private final Log log = LogFactory.getLog(ManagedNHttpClientConnectionImpl.class);
-
-    private static final AtomicLong COUNTER = new AtomicLong();
-
-    public static final ManagedNHttpClientConnectionFactory INSTANCE = new ManagedNHttpClientConnectionFactory();
-
-    private final ByteBufferAllocator allocator;
-    private final NHttpMessageWriterFactory<HttpRequest> requestWriterFactory;
-    private final NHttpMessageParserFactory<HttpResponse> responseParserFactory;
-
-    public ManagedNHttpClientConnectionFactory(
-            final NHttpMessageWriterFactory<HttpRequest> requestWriterFactory,
-            final NHttpMessageParserFactory<HttpResponse> responseParserFactory,
-            final ByteBufferAllocator allocator) {
-        super();
-        this.requestWriterFactory = requestWriterFactory != null ? requestWriterFactory :
-            DefaultHttpRequestWriterFactory.INSTANCE;
-        this.responseParserFactory = responseParserFactory != null ? responseParserFactory :
-            DefaultHttpResponseParserFactory.INSTANCE;
-        this.allocator = allocator != null ? allocator : HeapByteBufferAllocator.INSTANCE;
-    }
-
-    public ManagedNHttpClientConnectionFactory() {
-        this(null, null, null);
-    }
-
-    @Override
-    public ManagedNHttpClientConnection create(
-            final IOSession iosession, final ConnectionConfig config) {
-        final String id = "http-outgoing-" + Long.toString(COUNTER.getAndIncrement());
-        CharsetDecoder chardecoder = null;
-        CharsetEncoder charencoder = null;
-        final Charset charset = config.getCharset();
-        final CodingErrorAction malformedInputAction = config.getMalformedInputAction() != null ?
-                config.getMalformedInputAction() : CodingErrorAction.REPORT;
-        final CodingErrorAction unmappableInputAction = config.getUnmappableInputAction() != null ?
-                config.getUnmappableInputAction() : CodingErrorAction.REPORT;
-        if (charset != null) {
-            chardecoder = charset.newDecoder();
-            chardecoder.onMalformedInput(malformedInputAction);
-            chardecoder.onUnmappableCharacter(unmappableInputAction);
-            charencoder = charset.newEncoder();
-            charencoder.onMalformedInput(malformedInputAction);
-            charencoder.onUnmappableCharacter(unmappableInputAction);
-        }
-        final ManagedNHttpClientConnection conn = new ManagedNHttpClientConnectionImpl(
-                id,
-                this.log,
-                this.headerlog,
-                this.wirelog,
-                iosession,
-                config.getBufferSize(),
-                config.getFragmentSizeHint(),
-                this.allocator,
-                chardecoder,
-                charencoder,
-                config.getMessageConstraints(),
-                null,
-                null,
-                this.requestWriterFactory,
-                this.responseParserFactory);
-        iosession.setAttribute(IOEventDispatch.CONNECTION_KEY, conn);
-        return conn;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/ManagedNHttpClientConnectionImpl.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/ManagedNHttpClientConnectionImpl.java
deleted file mode 100644
index 1ec810c..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/ManagedNHttpClientConnectionImpl.java
+++ /dev/null
@@ -1,166 +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.http.impl.nio.conn;
-
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-
-import javax.net.ssl.SSLSession;
-
-import org.apache.commons.logging.Log;
-import org.apache.http.Header;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.config.MessageConstraints;
-import org.apache.http.entity.ContentLengthStrategy;
-import org.apache.http.impl.nio.DefaultNHttpClientConnection;
-import org.apache.http.nio.NHttpMessageParserFactory;
-import org.apache.http.nio.NHttpMessageWriterFactory;
-import org.apache.http.nio.conn.ManagedNHttpClientConnection;
-import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.nio.reactor.ssl.SSLIOSession;
-import org.apache.http.nio.util.ByteBufferAllocator;
-import org.apache.http.util.Args;
-import org.apache.http.util.Asserts;
-
-class ManagedNHttpClientConnectionImpl
-                    extends DefaultNHttpClientConnection implements ManagedNHttpClientConnection {
-
-    private final Log headerlog;
-    private final Log wirelog;
-    private final Log log;
-
-    private final String id;
-    private IOSession original;
-
-    public ManagedNHttpClientConnectionImpl(
-            final String id,
-            final Log log,
-            final Log headerlog,
-            final Log wirelog,
-            final IOSession iosession,
-            final int buffersize,
-            final int fragmentSizeHint,
-            final ByteBufferAllocator allocator,
-            final CharsetDecoder chardecoder,
-            final CharsetEncoder charencoder,
-            final MessageConstraints constraints,
-            final ContentLengthStrategy incomingContentStrategy,
-            final ContentLengthStrategy outgoingContentStrategy,
-            final NHttpMessageWriterFactory<HttpRequest> requestWriterFactory,
-            final NHttpMessageParserFactory<HttpResponse> responseParserFactory) {
-        super(iosession, buffersize, fragmentSizeHint, allocator, chardecoder, charencoder, constraints,
-                incomingContentStrategy, outgoingContentStrategy,
-                requestWriterFactory, responseParserFactory);
-        this.id = id;
-        this.log = log;
-        this.headerlog = headerlog;
-        this.wirelog = wirelog;
-        this.original = iosession;
-        if (this.log.isDebugEnabled() || this.wirelog.isDebugEnabled()) {
-            super.bind(new LoggingIOSession(iosession, this.id, this.log, this.wirelog));
-        }
-    }
-
-    @Override
-    public void bind(final IOSession iosession) {
-        Args.notNull(iosession, "I/O session");
-        Asserts.check(!iosession.isClosed(), "I/O session is closed");
-        this.status = ACTIVE;
-        this.original = iosession;
-        if (this.log.isDebugEnabled() || this.wirelog.isDebugEnabled()) {
-            this.log.debug(this.id + " Upgrade session " + iosession);
-            super.bind(new LoggingIOSession(iosession, this.id, this.log, this.wirelog));
-        } else {
-            super.bind(iosession);
-        }
-    }
-
-    @Override
-    public IOSession getIOSession() {
-        return this.original;
-    }
-
-    @Override
-    public SSLSession getSSLSession() {
-        if (this.original instanceof SSLIOSession) {
-            return ((SSLIOSession) this.original).getSSLSession();
-        }
-        return null;
-    }
-
-    @Override
-    public String getId() {
-        return this.id;
-    }
-
-    @Override
-    protected void onResponseReceived(final HttpResponse response) {
-        if (response != null && this.headerlog.isDebugEnabled()) {
-            this.headerlog.debug(this.id + " << " + response.getStatusLine().toString());
-            final Header[] headers = response.getAllHeaders();
-            for (final Header header : headers) {
-                this.headerlog.debug(this.id + " << " + header.toString());
-            }
-        }
-    }
-
-    @Override
-    protected void onRequestSubmitted(final HttpRequest request) {
-        if (request != null && this.headerlog.isDebugEnabled()) {
-            this.headerlog.debug(this.id + " >> " + request.getRequestLine().toString());
-            final Header[] headers = request.getAllHeaders();
-            for (final Header header : headers) {
-                this.headerlog.debug(this.id + " >> " + header.toString());
-            }
-        }
-    }
-
-    @Override
-    public String toString() {
-        final StringBuilder buf = new StringBuilder();
-        buf.append(this.id);
-        buf.append(" [");
-        switch (this.status) {
-        case ACTIVE:
-            buf.append("ACTIVE");
-            if (this.inbuf.hasData()) {
-                buf.append("(").append(this.inbuf.length()).append(")");
-            }
-            break;
-        case CLOSING:
-            buf.append("CLOSING");
-            break;
-        case CLOSED:
-            buf.append("CLOSED");
-            break;
-        }
-        buf.append("]");
-        return buf.toString();
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/PoolingNHttpClientConnectionManager.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/PoolingNHttpClientConnectionManager.java
deleted file mode 100644
index 21b3ed8..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/PoolingNHttpClientConnectionManager.java
+++ /dev/null
@@ -1,613 +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.http.impl.nio.conn;
-
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.HttpHost;
-import org.apache.http.annotation.ThreadSafe;
-import org.apache.http.concurrent.BasicFuture;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.config.ConnectionConfig;
-import org.apache.http.config.Lookup;
-import org.apache.http.config.Registry;
-import org.apache.http.config.RegistryBuilder;
-import org.apache.http.conn.DnsResolver;
-import org.apache.http.conn.SchemePortResolver;
-import org.apache.http.conn.UnsupportedSchemeException;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.impl.conn.DefaultSchemePortResolver;
-import org.apache.http.impl.conn.SystemDefaultDnsResolver;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.nio.conn.ManagedNHttpClientConnection;
-import org.apache.http.nio.conn.NHttpClientConnectionManager;
-import org.apache.http.nio.conn.NHttpConnectionFactory;
-import org.apache.http.nio.conn.NoopIOSessionStrategy;
-import org.apache.http.nio.conn.SchemeIOSessionStrategy;
-import org.apache.http.nio.conn.ssl.SSLIOSessionStrategy;
-import org.apache.http.nio.pool.NIOConnFactory;
-import org.apache.http.nio.pool.SocketAddressResolver;
-import org.apache.http.nio.reactor.ConnectingIOReactor;
-import org.apache.http.nio.reactor.IOEventDispatch;
-import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.pool.ConnPoolControl;
-import org.apache.http.pool.PoolStats;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.util.Args;
-import org.apache.http.util.Asserts;
-
-/**
- * {@code PoolingNHttpClientConnectionManager} maintains a pool of
- * {@link NHttpClientConnection}s and is able to service connection requests
- * from multiple execution threads. Connections are pooled on a per route
- * basis. A request for a route which already the manager has persistent
- * connections for available in the pool will be services by leasing
- * a connection from the pool rather than creating a brand new connection.
- * <p>
- * {@code PoolingNHttpClientConnectionManager} maintains a maximum limit
- * of connection on a per route basis and in total. Per default this
- * implementation will create no more than than 2 concurrent connections
- * per given route and no more 20 connections in total. For many real-world
- * applications these limits may prove too constraining, especially if they
- * use HTTP as a transport protocol for their services. Connection limits,
- * however, can be adjusted using {@link ConnPoolControl} methods.
- *
- * @since 4.0
- */
-@ThreadSafe
-public class PoolingNHttpClientConnectionManager
-       implements NHttpClientConnectionManager, ConnPoolControl<HttpRoute> {
-
-    private final Log log = LogFactory.getLog(getClass());
-
-    static final String IOSESSION_FACTORY_REGISTRY = "http.iosession-factory-registry";
-
-    private final ConnectingIOReactor ioreactor;
-    private final ConfigData configData;
-    private final CPool pool;
-    private final Registry<SchemeIOSessionStrategy> iosessionFactoryRegistry;
-
-    private static Registry<SchemeIOSessionStrategy> getDefaultRegistry() {
-        return RegistryBuilder.<SchemeIOSessionStrategy>create()
-                .register("http", NoopIOSessionStrategy.INSTANCE)
-                .register("https", SSLIOSessionStrategy.getDefaultStrategy())
-                .build();
-    }
-
-    public PoolingNHttpClientConnectionManager(final ConnectingIOReactor ioreactor) {
-        this(ioreactor, getDefaultRegistry());
-    }
-
-    public PoolingNHttpClientConnectionManager(
-            final ConnectingIOReactor ioreactor,
-            final Registry<SchemeIOSessionStrategy> iosessionFactoryRegistry) {
-        this(ioreactor, null, iosessionFactoryRegistry, null);
-    }
-
-    public PoolingNHttpClientConnectionManager(
-            final ConnectingIOReactor ioreactor,
-            final NHttpConnectionFactory<ManagedNHttpClientConnection> connFactory,
-            final DnsResolver dnsResolver) {
-        this(ioreactor, connFactory, getDefaultRegistry(), dnsResolver);
-    }
-
-    public PoolingNHttpClientConnectionManager(
-            final ConnectingIOReactor ioreactor,
-            final NHttpConnectionFactory<ManagedNHttpClientConnection> connFactory) {
-        this(ioreactor, connFactory, getDefaultRegistry(), null);
-    }
-
-    public PoolingNHttpClientConnectionManager(
-            final ConnectingIOReactor ioreactor,
-            final NHttpConnectionFactory<ManagedNHttpClientConnection> connFactory,
-            final Registry<SchemeIOSessionStrategy> iosessionFactoryRegistry) {
-        this(ioreactor, connFactory, iosessionFactoryRegistry, null);
-    }
-
-    public PoolingNHttpClientConnectionManager(
-            final ConnectingIOReactor ioreactor,
-            final NHttpConnectionFactory<ManagedNHttpClientConnection> connFactory,
-            final Registry<SchemeIOSessionStrategy> iosessionFactoryRegistry,
-            final DnsResolver dnsResolver) {
-        this(ioreactor, connFactory, iosessionFactoryRegistry, null, dnsResolver,
-            -1, TimeUnit.MILLISECONDS);
-    }
-
-    public PoolingNHttpClientConnectionManager(
-            final ConnectingIOReactor ioreactor,
-            final NHttpConnectionFactory<ManagedNHttpClientConnection> connFactory,
-            final Registry<SchemeIOSessionStrategy> iosessionFactoryRegistry,
-            final SchemePortResolver schemePortResolver,
-            final DnsResolver dnsResolver,
-            final long timeToLive, final TimeUnit tunit) {
-        super();
-        Args.notNull(ioreactor, "I/O reactor");
-        Args.notNull(iosessionFactoryRegistry, "I/O session factory registry");
-        this.ioreactor = ioreactor;
-        this.configData = new ConfigData();
-        this.pool = new CPool(ioreactor,
-            new InternalConnectionFactory(this.configData, connFactory),
-            new InternalAddressResolver(schemePortResolver, dnsResolver),
-            2, 20, timeToLive, tunit != null ? tunit : TimeUnit.MILLISECONDS);
-        this.iosessionFactoryRegistry = iosessionFactoryRegistry;
-    }
-
-    PoolingNHttpClientConnectionManager(
-            final ConnectingIOReactor ioreactor,
-            final CPool pool,
-            final Registry<SchemeIOSessionStrategy> iosessionFactoryRegistry) {
-        super();
-        this.ioreactor = ioreactor;
-        this.configData = new ConfigData();
-        this.pool = pool;
-        this.iosessionFactoryRegistry = iosessionFactoryRegistry;
-    }
-
-    @Override
-    protected void finalize() throws Throwable {
-        try {
-            shutdown();
-        } finally {
-            super.finalize();
-        }
-    }
-
-    @Override
-    public void execute(final IOEventDispatch eventDispatch) throws IOException {
-        this.ioreactor.execute(eventDispatch);
-    }
-
-    public void shutdown(final long waitMs) throws IOException {
-        this.log.debug("Connection manager is shutting down");
-        this.pool.shutdown(waitMs);
-        this.log.debug("Connection manager shut down");
-    }
-
-    @Override
-    public void shutdown() throws IOException {
-        this.log.debug("Connection manager is shutting down");
-        this.pool.shutdown(2000);
-        this.log.debug("Connection manager shut down");
-    }
-
-    private String format(final HttpRoute route, final Object state) {
-        final StringBuilder buf = new StringBuilder();
-        buf.append("[route: ").append(route).append("]");
-        if (state != null) {
-            buf.append("[state: ").append(state).append("]");
-        }
-        return buf.toString();
-    }
-
-    private String formatStats(final HttpRoute route) {
-        final StringBuilder buf = new StringBuilder();
-        final PoolStats totals = this.pool.getTotalStats();
-        final PoolStats stats = this.pool.getStats(route);
-        buf.append("[total kept alive: ").append(totals.getAvailable()).append("; ");
-        buf.append("route allocated: ").append(stats.getLeased() + stats.getAvailable());
-        buf.append(" of ").append(stats.getMax()).append("; ");
-        buf.append("total allocated: ").append(totals.getLeased() + totals.getAvailable());
-        buf.append(" of ").append(totals.getMax()).append("]");
-        return buf.toString();
-    }
-
-    private String format(final CPoolEntry entry) {
-        final StringBuilder buf = new StringBuilder();
-        buf.append("[id: ").append(entry.getId()).append("]");
-        buf.append("[route: ").append(entry.getRoute()).append("]");
-        final Object state = entry.getState();
-        if (state != null) {
-            buf.append("[state: ").append(state).append("]");
-        }
-        return buf.toString();
-    }
-
-    @Override
-    public Future<NHttpClientConnection> requestConnection(
-            final HttpRoute route,
-            final Object state,
-            final long connectTimeout,
-            final long leaseTimeout,
-            final TimeUnit tunit,
-            final FutureCallback<NHttpClientConnection> callback) {
-        Args.notNull(route, "HTTP route");
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("Connection request: " + format(route, state) + formatStats(route));
-        }
-        final BasicFuture<NHttpClientConnection> future = new BasicFuture<NHttpClientConnection>(callback);
-        final HttpHost host;
-        if (route.getProxyHost() != null) {
-            host = route.getProxyHost();
-        } else {
-            host = route.getTargetHost();
-        }
-        final SchemeIOSessionStrategy sf = this.iosessionFactoryRegistry.lookup(
-                host.getSchemeName());
-        if (sf == null) {
-            future.failed(new UnsupportedSchemeException(host.getSchemeName() +
-                    " protocol is not supported"));
-            return future;
-        }
-        this.pool.lease(route, state,
-                connectTimeout, leaseTimeout, tunit != null ? tunit : TimeUnit.MILLISECONDS,
-                new InternalPoolEntryCallback(future));
-        return future;
-    }
-
-    @Override
-    public void releaseConnection(
-            final NHttpClientConnection managedConn,
-            final Object state,
-            final long keepalive,
-            final TimeUnit tunit) {
-        Args.notNull(managedConn, "Managed connection");
-        synchronized (managedConn) {
-            final CPoolEntry entry = CPoolProxy.detach(managedConn);
-            if (entry == null) {
-                return;
-            }
-            if (this.log.isDebugEnabled()) {
-                this.log.debug("Releasing connection: " + format(entry) + formatStats(entry.getRoute()));
-            }
-            final NHttpClientConnection conn = entry.getConnection();
-            try {
-                if (conn.isOpen()) {
-                    entry.setState(state);
-                    entry.updateExpiry(keepalive, tunit != null ? tunit : TimeUnit.MILLISECONDS);
-                    if (this.log.isDebugEnabled()) {
-                        final String s;
-                        if (keepalive > 0) {
-                            s = "for " + (double) keepalive / 1000 + " seconds";
-                        } else {
-                            s = "indefinitely";
-                        }
-                        this.log.debug("Connection " + format(entry) + " can be kept alive " + s);
-                    }
-                }
-            } finally {
-                this.pool.release(entry, conn.isOpen() && entry.isRouteComplete());
-                if (this.log.isDebugEnabled()) {
-                    this.log.debug("Connection released: " + format(entry) + formatStats(entry.getRoute()));
-                }
-            }
-        }
-    }
-
-    private Lookup<SchemeIOSessionStrategy> getIOSessionFactoryRegistry(final HttpContext context) {
-        @SuppressWarnings("unchecked")
-        Lookup<SchemeIOSessionStrategy> reg = (Lookup<SchemeIOSessionStrategy>) context.getAttribute(
-                IOSESSION_FACTORY_REGISTRY);
-        if (reg == null) {
-            reg = this.iosessionFactoryRegistry;
-        }
-        return reg;
-    }
-
-    @Override
-    public void startRoute(
-            final NHttpClientConnection managedConn,
-            final HttpRoute route,
-            final HttpContext context) throws IOException {
-        Args.notNull(managedConn, "Managed connection");
-        Args.notNull(route, "HTTP route");
-        final HttpHost host;
-        if (route.getProxyHost() != null) {
-            host = route.getProxyHost();
-        } else {
-            host = route.getTargetHost();
-        }
-        final Lookup<SchemeIOSessionStrategy> reg = getIOSessionFactoryRegistry(context);
-        final SchemeIOSessionStrategy sf = reg.lookup(host.getSchemeName());
-        if (sf == null) {
-            throw new UnsupportedSchemeException(host.getSchemeName() +
-                    " protocol is not supported");
-        }
-        if (sf.isLayeringRequired()) {
-            synchronized (managedConn) {
-                final CPoolEntry entry = CPoolProxy.getPoolEntry(managedConn);
-                final ManagedNHttpClientConnection conn = entry.getConnection();
-                final IOSession ioSession = conn.getIOSession();
-                final IOSession currentSession = sf.upgrade(host, ioSession);
-                conn.bind(currentSession);
-            }
-        }
-    }
-
-    @Override
-    public void upgrade(
-            final NHttpClientConnection managedConn,
-            final HttpRoute route,
-            final HttpContext context) throws IOException {
-        Args.notNull(managedConn, "Managed connection");
-        Args.notNull(route, "HTTP route");
-        final HttpHost host  = route.getTargetHost();
-        final Lookup<SchemeIOSessionStrategy> reg = getIOSessionFactoryRegistry(context);
-        final SchemeIOSessionStrategy sf = reg.lookup(host.getSchemeName());
-        if (sf == null) {
-            throw new UnsupportedSchemeException(host.getSchemeName() +
-                    " protocol is not supported");
-        }
-        if (!sf.isLayeringRequired()) {
-            throw new UnsupportedSchemeException(host.getSchemeName() +
-                    " protocol does not support connection upgrade");
-        }
-        synchronized (managedConn) {
-            final CPoolEntry entry = CPoolProxy.getPoolEntry(managedConn);
-            final ManagedNHttpClientConnection conn = entry.getConnection();
-            final IOSession currentSession = sf.upgrade(host, conn.getIOSession());
-            conn.bind(currentSession);
-        }
-    }
-
-    @Override
-    public void routeComplete(
-            final NHttpClientConnection managedConn,
-            final HttpRoute route,
-            final HttpContext context) {
-        Args.notNull(managedConn, "Managed connection");
-        Args.notNull(route, "HTTP route");
-        synchronized (managedConn) {
-            final CPoolEntry entry = CPoolProxy.getPoolEntry(managedConn);
-            entry.markRouteComplete();
-        }
-    }
-
-    @Override
-    public boolean isRouteComplete(
-            final NHttpClientConnection managedConn) {
-        Args.notNull(managedConn, "Managed connection");
-        synchronized (managedConn) {
-            final CPoolEntry entry = CPoolProxy.getPoolEntry(managedConn);
-            return entry.isRouteComplete();
-        }
-    }
-
-    @Override
-    public void closeIdleConnections(final long idleTimeout, final TimeUnit tunit) {
-        if (this.log.isDebugEnabled()) {
-            this.log.debug("Closing connections idle longer than " + idleTimeout + " " + tunit);
-        }
-        this.pool.closeIdle(idleTimeout, tunit);
-    }
-
-    @Override
-    public void closeExpiredConnections() {
-        log.debug("Closing expired connections");
-        this.pool.closeExpired();
-    }
-
-    @Override
-    public int getMaxTotal() {
-        return this.pool.getMaxTotal();
-    }
-
-    @Override
-    public void setMaxTotal(final int max) {
-        this.pool.setMaxTotal(max);
-    }
-
-    @Override
-    public int getDefaultMaxPerRoute() {
-        return this.pool.getDefaultMaxPerRoute();
-    }
-
-    @Override
-    public void setDefaultMaxPerRoute(final int max) {
-        this.pool.setDefaultMaxPerRoute(max);
-    }
-
-    @Override
-    public int getMaxPerRoute(final HttpRoute route) {
-        return this.pool.getMaxPerRoute(route);
-    }
-
-    @Override
-    public void setMaxPerRoute(final HttpRoute route, final int max) {
-        this.pool.setMaxPerRoute(route, max);
-    }
-
-    @Override
-    public PoolStats getTotalStats() {
-        return this.pool.getTotalStats();
-    }
-
-    @Override
-    public PoolStats getStats(final HttpRoute route) {
-        return this.pool.getStats(route);
-    }
-
-    /**
-     * @since 4.1
-     */
-    public Set<HttpRoute> getRoutes() {
-        return this.pool.getRoutes();
-    }
-
-    public ConnectionConfig getDefaultConnectionConfig() {
-        return this.configData.getDefaultConnectionConfig();
-    }
-
-    public void setDefaultConnectionConfig(final ConnectionConfig defaultConnectionConfig) {
-        this.configData.setDefaultConnectionConfig(defaultConnectionConfig);
-    }
-
-    public ConnectionConfig getConnectionConfig(final HttpHost host) {
-        return this.configData.getConnectionConfig(host);
-    }
-
-    public void setConnectionConfig(final HttpHost host, final ConnectionConfig connectionConfig) {
-        this.configData.setConnectionConfig(host, connectionConfig);
-    }
-
-    class InternalPoolEntryCallback implements FutureCallback<CPoolEntry> {
-
-        private final BasicFuture<NHttpClientConnection> future;
-
-        public InternalPoolEntryCallback(
-                final BasicFuture<NHttpClientConnection> future) {
-            super();
-            this.future = future;
-        }
-
-        @Override
-        public void completed(final CPoolEntry entry) {
-            Asserts.check(entry.getConnection() != null, "Pool entry with no connection");
-            if (log.isDebugEnabled()) {
-                log.debug("Connection leased: " + format(entry) + formatStats(entry.getRoute()));
-            }
-            final NHttpClientConnection managedConn = CPoolProxy.newProxy(entry);
-            if (!this.future.completed(managedConn)) {
-                pool.release(entry, true);
-            }
-        }
-
-        @Override
-        public void failed(final Exception ex) {
-            if (log.isDebugEnabled()) {
-                log.debug("Connection request failed", ex);
-            }
-            this.future.failed(ex);
-        }
-
-        @Override
-        public void cancelled() {
-            log.debug("Connection request cancelled");
-            this.future.cancel(true);
-        }
-
-    }
-
-    static class ConfigData {
-
-        private final Map<HttpHost, ConnectionConfig> connectionConfigMap;
-        private volatile ConnectionConfig defaultConnectionConfig;
-
-        ConfigData() {
-            super();
-            this.connectionConfigMap = new ConcurrentHashMap<HttpHost, ConnectionConfig>();
-        }
-
-        public ConnectionConfig getDefaultConnectionConfig() {
-            return this.defaultConnectionConfig;
-        }
-
-        public void setDefaultConnectionConfig(final ConnectionConfig defaultConnectionConfig) {
-            this.defaultConnectionConfig = defaultConnectionConfig;
-        }
-
-        public ConnectionConfig getConnectionConfig(final HttpHost host) {
-            return this.connectionConfigMap.get(host);
-        }
-
-        public void setConnectionConfig(final HttpHost host, final ConnectionConfig connectionConfig) {
-            this.connectionConfigMap.put(host, connectionConfig);
-        }
-
-    }
-
-    static class InternalConnectionFactory implements NIOConnFactory<HttpRoute, ManagedNHttpClientConnection> {
-
-        private final ConfigData configData;
-        private final NHttpConnectionFactory<ManagedNHttpClientConnection> connFactory;
-
-        InternalConnectionFactory(
-                final ConfigData configData,
-                final NHttpConnectionFactory<ManagedNHttpClientConnection> connFactory) {
-            super();
-            this.configData = configData != null ? configData : new ConfigData();
-            this.connFactory = connFactory != null ? connFactory :
-                ManagedNHttpClientConnectionFactory.INSTANCE;
-        }
-
-        @Override
-        public ManagedNHttpClientConnection create(
-                final HttpRoute route, final IOSession iosession) throws IOException {
-            ConnectionConfig config = null;
-            if (route.getProxyHost() != null) {
-                config = this.configData.getConnectionConfig(route.getProxyHost());
-            }
-            if (config == null) {
-                config = this.configData.getConnectionConfig(route.getTargetHost());
-            }
-            if (config == null) {
-                config = this.configData.getDefaultConnectionConfig();
-            }
-            if (config == null) {
-                config = ConnectionConfig.DEFAULT;
-            }
-            final ManagedNHttpClientConnection conn = this.connFactory.create(iosession, config);
-            iosession.setAttribute(IOEventDispatch.CONNECTION_KEY, conn);
-            return conn;
-        }
-
-    }
-
-    static class InternalAddressResolver implements SocketAddressResolver<HttpRoute> {
-
-        private final SchemePortResolver schemePortResolver;
-        private final DnsResolver dnsResolver;
-
-        public InternalAddressResolver(
-                final SchemePortResolver schemePortResolver,
-                final DnsResolver dnsResolver) {
-            super();
-            this.schemePortResolver = schemePortResolver != null ? schemePortResolver :
-                DefaultSchemePortResolver.INSTANCE;
-            this.dnsResolver = dnsResolver != null ? dnsResolver :
-                    SystemDefaultDnsResolver.INSTANCE;
-        }
-
-        @Override
-        public SocketAddress resolveLocalAddress(final HttpRoute route) throws IOException {
-            return route.getLocalAddress() != null ? new InetSocketAddress(route.getLocalAddress(), 0) : null;
-        }
-
-        @Override
-        public SocketAddress resolveRemoteAddress(final HttpRoute route) throws IOException {
-            final HttpHost host;
-            if (route.getProxyHost() != null) {
-                host = route.getProxyHost();
-            } else {
-                host = route.getTargetHost();
-            }
-            final int port = this.schemePortResolver.resolve(host);
-            final InetAddress[] addresses = this.dnsResolver.resolve(host.getHostName());
-            return new InetSocketAddress(addresses[0], port);
-        }
-
-    }
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/Wire.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/Wire.java
deleted file mode 100644
index 8fe8437..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/Wire.java
+++ /dev/null
@@ -1,121 +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.http.impl.nio.conn;
-
-import java.nio.ByteBuffer;
-
-import org.apache.commons.logging.Log;
-
-class Wire {
-
-    private final Log log;
-    private final String id;
-
-    public Wire(final Log log, final String id) {
-        super();
-        this.log = log;
-        this.id = id;
-    }
-
-    private void wire(final String header, final byte[] b, final int pos, final int off) {
-        final StringBuilder buffer = new StringBuilder();
-        for (int i = 0; i < off; i++) {
-            final int ch = b[pos + i];
-            if (ch == 13) {
-                buffer.append("[\\r]");
-            } else if (ch == 10) {
-                    buffer.append("[\\n]\"");
-                    buffer.insert(0, "\"");
-                    buffer.insert(0, header);
-                    this.log.debug(this.id + " " + buffer.toString());
-                    buffer.setLength(0);
-            } else if ((ch < 32) || (ch > 127)) {
-                buffer.append("[0x");
-                buffer.append(Integer.toHexString(ch));
-                buffer.append("]");
-            } else {
-                buffer.append((char) ch);
-            }
-        }
-        if (buffer.length() > 0) {
-            buffer.append('\"');
-            buffer.insert(0, '\"');
-            buffer.insert(0, header);
-            this.log.debug(this.id + " " + buffer.toString());
-        }
-    }
-
-
-    public boolean isEnabled() {
-        return this.log.isDebugEnabled();
-    }
-
-    public void output(final byte[] b, final int pos, final int off) {
-        wire(">> ", b, pos, off);
-    }
-
-    public void input(final byte[] b, final int pos, final int off) {
-        wire("<< ", b, pos, off);
-    }
-
-    public void output(final byte[] b) {
-        output(b, 0, b.length);
-    }
-
-    public void input(final byte[] b) {
-        input(b, 0, b.length);
-    }
-
-    public void output(final int b) {
-        output(new byte[] {(byte) b});
-    }
-
-    public void input(final int b) {
-        input(new byte[] {(byte) b});
-    }
-
-    public void output(final ByteBuffer b) {
-        if (b.hasArray()) {
-            output(b.array(), b.arrayOffset() + b.position(), b.remaining());
-        } else {
-            final byte[] tmp = new byte[b.remaining()];
-            b.get(tmp);
-            output(tmp);
-        }
-    }
-
-    public void input(final ByteBuffer b) {
-        if (b.hasArray()) {
-            input(b.array(), b.arrayOffset() + b.position(), b.remaining());
-        } else {
-            final byte[] tmp = new byte[b.remaining()];
-            b.get(tmp);
-            input(tmp);
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/package-info.java b/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/package-info.java
deleted file mode 100644
index a5c262d..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/impl/nio/conn/package-info.java
+++ /dev/null
@@ -1,32 +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/>.
- *
- */
-
-/**
- * Default implementations of asynchronous client connection
- * management functions.
- */
-package org.apache.http.impl.nio.conn;
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/HttpAsyncClient.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/HttpAsyncClient.java
deleted file mode 100644
index fd84c4f..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/HttpAsyncClient.java
+++ /dev/null
@@ -1,157 +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.http.nio.client;
-
-import java.util.concurrent.Future;
-
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.protocol.HttpContext;
-
-/**
- * This interface represents only the most basic contract for HTTP request
- * execution. It imposes no restrictions or particular details on the request
- * execution process and leaves the specifics of state management,
- * authentication and redirect handling up to individual implementations.
- *
- * @since 4.0
- */
-public interface HttpAsyncClient {
-
-    /**
-     * Initiates asynchronous HTTP request execution using the given context.
-     * <p>
-     * The request producer passed to this method will be used to generate
-     * a request message and stream out its content without buffering it
-     * in memory. The response consumer passed to this method will be used
-     * to process a response message without buffering its content in memory.
-     * <p>
-     * Please note it may be unsafe to interact with the context instance
-     * while the request is still being executed.
-     *
-     * @param <T> the result type of request execution.
-     * @param requestProducer request producer callback.
-     * @param responseConsumer response consumer callaback.
-     * @param context HTTP context
-     * @param callback future callback.
-     * @return future representing pending completion of the operation.
-     */
-    <T> Future<T> execute(
-            HttpAsyncRequestProducer requestProducer,
-            HttpAsyncResponseConsumer<T> responseConsumer,
-            HttpContext context,
-            FutureCallback<T> callback);
-
-    /**
-     * Initiates asynchronous HTTP request execution using the default
-     * context.
-     * <p>
-     * The request producer passed to this method will be used to generate
-     * a request message and stream out its content without buffering it
-     * in memory. The response consumer passed to this method will be used
-     * to process a response message without buffering its content in memory.
-     *
-     * @param <T> the result type of request execution.
-     * @param requestProducer request producer callback.
-     * @param responseConsumer response consumer callaback.
-     * @param callback future callback.
-     * @return future representing pending completion of the operation.
-     */
-    <T> Future<T> execute(
-            HttpAsyncRequestProducer requestProducer,
-            HttpAsyncResponseConsumer<T> responseConsumer,
-            FutureCallback<T> callback);
-
-    /**
-     * Initiates asynchronous HTTP request execution against the given target
-     * using the given context.
-     * <p>
-     * Please note it may be unsafe to interact with the context instance
-     * while the request is still being executed.
-     *
-     * @param target    the target host for the request.
-     *                  Implementations may accept {@code null}
-     *                  if they can still determine a route, for example
-     *                  to a default target or by inspecting the request.
-     * @param request   the request to execute
-     * @param context   the context to use for the execution, or
-     *                  {@code null} to use the default context
-     * @param callback future callback.
-     * @return future representing pending completion of the operation.
-     */
-    Future<HttpResponse> execute(
-            HttpHost target, HttpRequest request, HttpContext context,
-            FutureCallback<HttpResponse> callback);
-
-    /**
-     * Initiates asynchronous HTTP request execution against the given target.
-     *
-     * @param target    the target host for the request.
-     *                  Implementations may accept {@code null}
-     *                  if they can still determine a route, for example
-     *                  to a default target or by inspecting the request.
-     * @param request   the request to execute
-     * @param callback future callback.
-     * @return future representing pending completion of the operation.
-     */
-    Future<HttpResponse> execute(
-            HttpHost target, HttpRequest request,
-            FutureCallback<HttpResponse> callback);
-
-    /**
-     * Initiates asynchronous HTTP request execution using the given
-     * context.
-     * <p>
-     * Please note it may be unsafe to interact with the context instance
-     * while the request is still being executed.
-     *
-     * @param request   the request to execute
-     * @param context HTTP context
-     * @param callback future callback.
-     * @return future representing pending completion of the operation.
-     */
-    Future<HttpResponse> execute(
-            HttpUriRequest request, HttpContext context,
-            FutureCallback<HttpResponse> callback);
-
-    /**
-     * Initiates asynchronous HTTP request execution.
-     *
-     * @param request   the request to execute
-     * @param callback future callback.
-     * @return future representing pending completion of the operation.
-     */
-    Future<HttpResponse> execute(
-            HttpUriRequest request,
-            FutureCallback<HttpResponse> callback);
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/HttpPipeliningClient.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/HttpPipeliningClient.java
deleted file mode 100644
index 69382f5..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/HttpPipeliningClient.java
+++ /dev/null
@@ -1,137 +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.http.nio.client;
-
-import java.util.List;
-import java.util.concurrent.Future;
-
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.protocol.HttpContext;
-
-/**
- * This interface represents only the most basic contract for HTTP request
- * execution. It imposes no restrictions or particular details on the request
- * execution process and leaves the specifics of state management,
- * authentication and redirect handling up to individual implementations.
- *
- * @since 4.1
- */
-public interface HttpPipeliningClient extends HttpAsyncClient {
-
-    /**
-     * Initiates pipelined execution of a sequence of requests.
-     * <p>
-     * The request producers passed to this method will be used to generate
-     * a request message and stream out its content without buffering it
-     * in memory. The response consumers passed to this method will be used
-     * to process a response message without buffering its content in memory.
-     * <p>
-     * Please note it may be unsafe to interact with the context instance
-     * while the request is still being executed.
-     *
-     * @param <T> the result type of request execution.
-     * @param target    the target host for the request.
-     * @param requestProducers list of request producers.
-     * @param responseConsumers list of response consumers.
-     * @param context HTTP context
-     * @param callback future callback.
-     * @return future representing pending completion of the operation.
-     */
-    <T> Future<List<T>> execute(
-            HttpHost target,
-            List<? extends HttpAsyncRequestProducer> requestProducers,
-            List<? extends HttpAsyncResponseConsumer<T>> responseConsumers,
-            HttpContext context,
-            FutureCallback<List<T>> callback);
-
-    /**
-     * Initiates pipelined execution of a sequence of requests.
-     * <p>
-     * The request producers passed to this method will be used to generate
-     * a request message and stream out its content without buffering it
-     * in memory. The response consumers passed to this method will be used
-     * to process a response message without buffering its content in memory.
-     *
-     * @param <T> the result type of request execution.
-     * @param target    the target host for the request.
-     * @param requestProducers list of request producers.
-     * @param responseConsumers list of response consumers.
-     * @param callback future callback.
-     * @return future representing pending completion of the operation.
-     */
-    <T> Future<List<T>> execute(
-            HttpHost target,
-            List<? extends HttpAsyncRequestProducer> requestProducers,
-            List<? extends HttpAsyncResponseConsumer<T>> responseConsumers,
-            FutureCallback<List<T>> callback);
-
-    /**
-     * Initiates pipelined execution of a sequence of requests against
-     * the given target using the given context.
-     * <p>
-     * Please note it may be unsafe to interact with the context instance
-     * while the request is still being executed.
-     *
-     * @param target    the target host for the requests.
-     *                  Implementations may accept {@code null}
-     *                  if they can still determine a route, for example
-     *                  to a default target or by inspecting the request.
-     * @param requests  the requests to execute
-     * @param context   the context to use for the execution, or
-     *                  {@code null} to use the default context
-     * @param callback future callback.
-     * @return future representing pending completion of the operation.
-     */
-    Future<List<HttpResponse>> execute(
-            HttpHost target,
-            List<HttpRequest> requests,
-            HttpContext context,
-            FutureCallback<List<HttpResponse>> callback);
-
-    /**
-     * Initiates pipelined execution of a sequence of requests against
-     * the given target.
-     *
-     * @param target    the target host for the requests.
-     *                  Implementations may accept {@code null}
-     *                  if they can still determine a route, for example
-     *                  to a default target or by inspecting the request.
-     * @param requests  the requests to execute
-     * @param callback future callback.
-     * @return future representing pending completion of the operation.
-     */
-    Future<List<HttpResponse>> execute(
-            HttpHost target,
-            List<HttpRequest> requests,
-            FutureCallback<List<HttpResponse>> callback);
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/AsyncByteConsumer.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/AsyncByteConsumer.java
deleted file mode 100644
index d62cdbe..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/AsyncByteConsumer.java
+++ /dev/null
@@ -1,93 +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.http.nio.client.methods;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-import org.apache.http.HttpEntity;
-import org.apache.http.entity.ContentType;
-import org.apache.http.nio.ContentDecoder;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.protocol.AbstractAsyncResponseConsumer;
-import org.apache.http.util.Asserts;
-
-/**
- * {@link org.apache.http.nio.protocol.HttpAsyncResponseConsumer} implementation that
- * provides convenience methods for processing of binary content entities enclosed
- * in an HTTP response.
- *
- * @since 4.0
- */
-public abstract class AsyncByteConsumer<T> extends AbstractAsyncResponseConsumer<T> {
-
-    private final ByteBuffer bbuf;
-
-    public AsyncByteConsumer(final int bufSize) {
-        super();
-        this.bbuf = ByteBuffer.allocate(bufSize);
-    }
-
-    public AsyncByteConsumer() {
-        this(8 * 1024);
-    }
-
-    /**
-     * Invoked to process a {@link ByteBuffer chunk} of content.
-     * The {@link IOControl} interface can be used to suspend input events
-     * if the consumer is temporarily unable to consume more content.
-     *
-     * @param buf chunk of content.
-     * @param ioctrl I/O control of the underlying connection.
-     * @throws IOException in case of an I/O error
-     */
-    protected abstract void onByteReceived(
-            ByteBuffer buf, IOControl ioctrl) throws IOException;
-
-    @Override
-    protected final void onEntityEnclosed(
-            final HttpEntity entity, final ContentType contentType) throws IOException {
-    }
-
-    @Override
-    protected final void onContentReceived(
-            final ContentDecoder decoder, final IOControl ioctrl) throws IOException {
-        Asserts.notNull(this.bbuf, "Byte buffer");
-        final int bytesRead = decoder.read(this.bbuf);
-        if (bytesRead <= 0) {
-            return;
-        }
-        this.bbuf.flip();
-        onByteReceived(this.bbuf, ioctrl);
-        this.bbuf.clear();
-    }
-
-    @Override
-    protected void releaseResources() {
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/AsyncCharConsumer.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/AsyncCharConsumer.java
deleted file mode 100644
index fa1660a..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/AsyncCharConsumer.java
+++ /dev/null
@@ -1,140 +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.http.nio.client.methods;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CoderResult;
-
-import org.apache.http.HttpEntity;
-import org.apache.http.entity.ContentType;
-import org.apache.http.nio.ContentDecoder;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.protocol.AbstractAsyncResponseConsumer;
-import org.apache.http.protocol.HTTP;
-import org.apache.http.util.Asserts;
-
-/**
- * {@link org.apache.http.nio.protocol.HttpAsyncResponseConsumer} implementation that
- * provides convenience methods for processing of textual content entities enclosed
- * in an HTTP response.
- *
- * @since 4.0
- */
-public abstract class AsyncCharConsumer<T> extends AbstractAsyncResponseConsumer<T> {
-
-    private final ByteBuffer bbuf;
-    private final CharBuffer cbuf;
-
-    private CharsetDecoder chardecoder;
-
-    public AsyncCharConsumer(final int bufSize) {
-        super();
-        this.bbuf = ByteBuffer.allocate(bufSize);
-        this.cbuf = CharBuffer.allocate(bufSize);
-    }
-
-    public AsyncCharConsumer() {
-        this(8 * 1024);
-    }
-
-    /**
-     * Invoked to process a {@link CharBuffer chunk} of content.
-     * The {@link IOControl} interface can be used to suspend input events
-     * if the consumer is temporarily unable to consume more content.
-     *
-     * @param buf chunk of content.
-     * @param ioctrl I/O control of the underlying connection.
-     * @throws IOException in case of an I/O error
-     */
-    protected abstract void onCharReceived(
-            CharBuffer buf, IOControl ioctrl) throws IOException;
-
-    /**
-     * Invoked to create a @{link CharsetDecoder} for contentType.
-     * This allows to use different default charsets for different content
-     * types and set appropriate coding error actions.
-     *
-     * @param contentType response Content-Type or null if not specified.
-     * @return content decoder.
-     *
-     * @since 4.1
-     */
-    protected CharsetDecoder createDecoder(final ContentType contentType) {
-        Charset charset = contentType != null ? contentType.getCharset() : null;
-        if (charset == null) {
-            charset = HTTP.DEF_CONTENT_CHARSET;
-        }
-        return charset.newDecoder();
-    }
-
-    @Override
-    protected final void onEntityEnclosed(
-            final HttpEntity entity, final ContentType contentType) throws IOException {
-        this.chardecoder = createDecoder(contentType != null ? contentType : ContentType.DEFAULT_TEXT);
-    }
-
-    @Override
-    protected final void onContentReceived(
-            final ContentDecoder decoder, final IOControl ioctrl) throws IOException {
-        Asserts.notNull(this.bbuf, "Byte buffer");
-
-        final int bytesRead = decoder.read(this.bbuf);
-        if (bytesRead <= 0) {
-            return;
-        }
-        this.bbuf.flip();
-        final boolean completed = decoder.isCompleted();
-        CoderResult result = this.chardecoder.decode(this.bbuf, this.cbuf, completed);
-        handleDecodingResult(result, ioctrl);
-        this.bbuf.compact();
-        if (completed) {
-            result = this.chardecoder.flush(this.cbuf);
-            handleDecodingResult(result, ioctrl);
-        }
-    }
-
-    private void handleDecodingResult(
-            final CoderResult result, final IOControl ioctrl) throws IOException {
-        if (result.isError()) {
-            result.throwException();
-        }
-        this.cbuf.flip();
-        if (this.cbuf.hasRemaining()) {
-            onCharReceived(this.cbuf, ioctrl);
-        }
-        this.cbuf.clear();
-    }
-
-    @Override
-    protected void releaseResources() {
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BaseZeroCopyRequestProducer.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BaseZeroCopyRequestProducer.java
deleted file mode 100644
index ae813b7..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/BaseZeroCopyRequestProducer.java
+++ /dev/null
@@ -1,150 +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.http.nio.client.methods;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.net.URI;
-import java.nio.channels.FileChannel;
-
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpEntityEnclosingRequest;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.client.utils.URIUtils;
-import org.apache.http.entity.BasicHttpEntity;
-import org.apache.http.entity.ContentType;
-import org.apache.http.nio.ContentEncoder;
-import org.apache.http.nio.ContentEncoderChannel;
-import org.apache.http.nio.FileContentEncoder;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.util.Args;
-
-abstract class BaseZeroCopyRequestProducer implements HttpAsyncRequestProducer {
-
-    private final URI requestURI;
-    private final File file;
-    private final RandomAccessFile accessfile;
-    private final ContentType contentType;
-
-    private FileChannel fileChannel;
-    private long idx = -1;
-
-    protected BaseZeroCopyRequestProducer(
-            final URI requestURI,
-            final File file, final ContentType contentType) throws FileNotFoundException {
-        super();
-        Args.notNull(requestURI, "Request URI");
-        Args.notNull(file, "Source file");
-        this.requestURI = requestURI;
-        this.file = file;
-        this.accessfile = new RandomAccessFile(file, "r");
-        this.contentType = contentType;
-    }
-
-    private void closeChannel() throws IOException {
-        if (this.fileChannel != null) {
-            this.fileChannel.close();
-            this.fileChannel = null;
-        }
-    }
-
-    protected abstract HttpEntityEnclosingRequest createRequest(final URI requestURI, final HttpEntity entity);
-
-    @Override
-    public HttpRequest generateRequest() throws IOException, HttpException {
-        final BasicHttpEntity entity = new BasicHttpEntity();
-        entity.setChunked(false);
-        entity.setContentLength(this.file.length());
-        if (this.contentType != null) {
-            entity.setContentType(this.contentType.toString());
-        }
-        return createRequest(this.requestURI, entity);
-    }
-
-    @Override
-    public synchronized HttpHost getTarget() {
-        return URIUtils.extractHost(this.requestURI);
-    }
-
-    @Override
-    public synchronized void produceContent(
-            final ContentEncoder encoder, final IOControl ioctrl) throws IOException {
-        if (this.fileChannel == null) {
-            this.fileChannel = this.accessfile.getChannel();
-            this.idx = 0;
-        }
-        final long transferred;
-        if (encoder instanceof FileContentEncoder) {
-            transferred = ((FileContentEncoder)encoder).transfer(
-                    this.fileChannel, this.idx, Integer.MAX_VALUE);
-        } else {
-            transferred = this.fileChannel.transferTo(
-                    this.idx, Integer.MAX_VALUE, new ContentEncoderChannel(encoder));
-        }
-        if (transferred > 0) {
-            this.idx += transferred;
-        }
-
-        if (this.idx >= this.fileChannel.size()) {
-            encoder.complete();
-            closeChannel();
-        }
-    }
-
-    @Override
-    public void requestCompleted(final HttpContext context) {
-    }
-
-    @Override
-    public void failed(final Exception ex) {
-    }
-
-    @Override
-    public boolean isRepeatable() {
-        return true;
-    }
-
-    @Override
-    public synchronized void resetRequest() throws IOException {
-        closeChannel();
-    }
-
-    @Override
-    public synchronized void close() throws IOException {
-        try {
-            this.accessfile.close();
-        } catch (final IOException ignore) {
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncMethods.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncMethods.java
deleted file mode 100644
index 7fe5f56..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/HttpAsyncMethods.java
+++ /dev/null
@@ -1,427 +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.http.nio.client.methods;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.UnsupportedEncodingException;
-import java.net.URI;
-
-import org.apache.http.HttpEntityEnclosingRequest;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpDelete;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpOptions;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.client.methods.HttpPut;
-import org.apache.http.client.methods.HttpTrace;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.client.utils.URIUtils;
-import org.apache.http.entity.ContentType;
-import org.apache.http.nio.entity.HttpAsyncContentProducer;
-import org.apache.http.nio.entity.NByteArrayEntity;
-import org.apache.http.nio.entity.NStringEntity;
-import org.apache.http.nio.protocol.BasicAsyncRequestProducer;
-import org.apache.http.nio.protocol.BasicAsyncResponseConsumer;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.util.Args;
-
-/**
- * Factory methods for asynchronous request producers and response consumers.
- *
- * @since 4.0
- */
-public final class HttpAsyncMethods {
-
-    /**
-     * Creates asynchronous request generator for the given request message.
-     *
-     * @param target request target.
-     * @param request request message.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer create(final HttpHost target, final HttpRequest request) {
-        Args.notNull(target, "HTTP host");
-        Args.notNull(request, "HTTP request");
-        return new RequestProducerImpl(target, request);
-    }
-
-    /**
-     * Creates asynchronous request generator for the given request message.
-     *
-     * @param request request message.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer create(final HttpUriRequest request) {
-        Args.notNull(request, "HTTP request");
-        final HttpHost target = URIUtils.extractHost(request.getURI());
-        return new RequestProducerImpl(target, request);
-    }
-
-    /**
-     * Creates asynchronous {@code GET} request generator.
-     *
-     * @param requestURI request URI.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createGet(final URI requestURI) {
-        return create(new HttpGet(requestURI));
-    }
-
-    /**
-     * Creates asynchronous {@code GET} request generator.
-     *
-     * @param requestURI request URI.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createGet(final String requestURI) {
-        return create(new HttpGet(URI.create(requestURI)));
-    }
-
-    /**
-     * Creates asynchronous {@code HEAD} request generator.
-     *
-     * @param requestURI request URI.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createHead(final URI requestURI) {
-        return create(new HttpGet(requestURI));
-    }
-
-    /**
-     * Creates asynchronous {@code HEAD} request generator.
-     *
-     * @param requestURI request URI.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createHead(final String requestURI) {
-        return create(new HttpGet(URI.create(requestURI)));
-    }
-
-    /**
-     * Creates asynchronous {@code DELETE} request generator.
-     *
-     * @param requestURI request URI.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createDelete(final URI requestURI) {
-        return create(new HttpDelete(requestURI));
-    }
-
-    /**
-     * Creates asynchronous {@code DELETE} request generator.
-     *
-     * @param requestURI request URI.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createDelete(final String requestURI) {
-        return create(new HttpDelete(URI.create(requestURI)));
-    }
-
-    /**
-     * Creates asynchronous {@code OPTIONS} request generator.
-     *
-     * @param requestURI request URI.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createOptions(final URI requestURI) {
-        return create(new HttpOptions(requestURI));
-    }
-
-    /**
-     * Creates asynchronous {@code OPTIONS} request generator.
-     *
-     * @param requestURI request URI.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createOptions(final String requestURI) {
-        return create(new HttpOptions(URI.create(requestURI)));
-    }
-
-    /**
-     * Creates asynchronous {@code TRACE} request generator.
-     *
-     * @param requestURI request URI.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createTrace(final URI requestURI) {
-        return create(new HttpTrace(requestURI));
-    }
-
-    /**
-     * Creates asynchronous {@code TRACE} request generator.
-     *
-     * @param requestURI request URI.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createTrace(final String requestURI) {
-        return create(new HttpTrace(URI.create(requestURI)));
-    }
-
-    /**
-     * Creates asynchronous {@code POST} request generator.
-     *
-     * @param requestURI request URI.
-     * @param content request content.
-     * @param contentType request contentType.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createPost(
-            final URI requestURI,
-            final String content,
-            final ContentType contentType) throws UnsupportedEncodingException {
-        final HttpPost httppost = new HttpPost(requestURI);
-        final NStringEntity entity = new NStringEntity(content, contentType);
-        httppost.setEntity(entity);
-        final HttpHost target = URIUtils.extractHost(requestURI);
-        return new RequestProducerImpl(target, httppost, entity);
-    }
-
-    /**
-     * Creates asynchronous {@code POST} request generator.
-     *
-     * @param requestURI request URI.
-     * @param content request content.
-     * @param contentType request contentType.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createPost(
-            final String requestURI,
-            final String content,
-            final ContentType contentType) throws UnsupportedEncodingException {
-        return createPost(URI.create(requestURI), content, contentType);
-    }
-
-    /**
-     * Creates asynchronous {@code POST} request generator.
-     *
-     * @param requestURI request URI.
-     * @param content request content.
-     * @param contentType request contentType.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createPost(
-            final URI requestURI,
-            final byte[] content,
-            final ContentType contentType) {
-        final HttpPost httppost = new HttpPost(requestURI);
-        final NByteArrayEntity entity = new NByteArrayEntity(content, contentType);
-        httppost.setEntity(entity);
-        final HttpHost target = URIUtils.extractHost(requestURI);
-        return new RequestProducerImpl(target, httppost, entity);
-    }
-
-    /**
-     * Creates asynchronous {@code POST} request generator.
-     *
-     * @param requestURI request URI.
-     * @param content request content.
-     * @param contentType request contentType.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createPost(
-            final String requestURI,
-            final byte[] content,
-            final ContentType contentType) {
-        return createPost(URI.create(requestURI), content, contentType);
-    }
-
-    /**
-     * Creates asynchronous {@code PUT} request generator.
-     *
-     * @param requestURI request URI.
-     * @param content request content.
-     * @param contentType request contentType.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createPut(
-            final URI requestURI,
-            final String content,
-            final ContentType contentType) throws UnsupportedEncodingException {
-        final HttpPut httpput = new HttpPut(requestURI);
-        final NStringEntity entity = new NStringEntity(content, contentType);
-        httpput.setEntity(entity);
-        final HttpHost target = URIUtils.extractHost(requestURI);
-        return new RequestProducerImpl(target, httpput, entity);
-    }
-
-    /**
-     * Creates asynchronous {@code PUT} request generator.
-     *
-     * @param requestURI request URI.
-     * @param content request content.
-     * @param contentType request contentType.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createPut(
-            final String requestURI,
-            final String content,
-            final ContentType contentType) throws UnsupportedEncodingException {
-        return createPut(URI.create(requestURI), content, contentType);
-    }
-
-    /**
-     * Creates asynchronous {@code PUT} request generator.
-     *
-     * @param requestURI request URI.
-     * @param content request content.
-     * @param contentType request contentType.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createPut(
-            final URI requestURI,
-            final byte[] content,
-            final ContentType contentType) {
-        final HttpPut httpput = new HttpPut(requestURI);
-        final NByteArrayEntity entity = new NByteArrayEntity(content, contentType);
-        httpput.setEntity(entity);
-        final HttpHost target = URIUtils.extractHost(requestURI);
-        return new RequestProducerImpl(target, httpput, entity);
-    }
-
-    /**
-     * Creates asynchronous {@code PUT} request generator.
-     *
-     * @param requestURI request URI.
-     * @param content request content.
-     * @param contentType request contentType.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createPut(
-            final String requestURI,
-            final byte[] content,
-            final ContentType contentType) {
-        return createPut(URI.create(requestURI), content, contentType);
-    }
-
-    /**
-     * Creates asynchronous zero-copy {@code POST} request generator.
-     *
-     * @param requestURI request URI.
-     * @param content request content.
-     * @param contentType request contentType.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createZeroCopyPost(
-            final URI requestURI,
-            final File content,
-            final ContentType contentType) throws FileNotFoundException {
-        return new ZeroCopyPost(requestURI, content, contentType);
-    }
-
-    /**
-     * Creates asynchronous zero-copy {@code POST} request generator.
-     *
-     * @param requestURI request URI.
-     * @param content request content.
-     * @param contentType request contentType.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createZeroCopyPost(
-            final String requestURI,
-            final File content,
-            final ContentType contentType) throws FileNotFoundException {
-        return new ZeroCopyPost(URI.create(requestURI), content, contentType);
-    }
-
-    /**
-     * Creates asynchronous zero-copy {@code PUT} request generator.
-     *
-     * @param requestURI request URI.
-     * @param content request content.
-     * @param contentType request contentType.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createZeroCopyPut(
-            final URI requestURI,
-            final File content,
-            final ContentType contentType) throws FileNotFoundException {
-        return new ZeroCopyPut(requestURI, content, contentType);
-    }
-
-    /**
-     * Creates asynchronous zero-copy {@code PUT} request generator.
-     *
-     * @param requestURI request URI.
-     * @param content request content.
-     * @param contentType request contentType.
-     * @return asynchronous request generator
-     */
-    public static HttpAsyncRequestProducer createZeroCopyPut(
-            final String requestURI,
-            final File content,
-            final ContentType contentType) throws FileNotFoundException {
-        return new ZeroCopyPut(URI.create(requestURI), content, contentType);
-    }
-
-    /**
-     * Creates basic response consumer that will buffer response content in memory.
-     * @return asynchronous response consumer.
-     */
-    public static HttpAsyncResponseConsumer<HttpResponse> createConsumer() {
-        return new BasicAsyncResponseConsumer();
-    }
-
-    /**
-     * Creates zero-copy response consumer that will stream response content
-     * directly to the given file.
-     * @return asynchronous response consumer.
-     */
-    public static HttpAsyncResponseConsumer<HttpResponse> createZeroCopyConsumer(
-            final File file) throws FileNotFoundException {
-        return new ZeroCopyConsumer<HttpResponse>(file) {
-
-            @Override
-            protected HttpResponse process(
-                    final HttpResponse response,
-                    final File file,
-                    final ContentType contentType) {
-                return response;
-            }
-
-        };
-    }
-
-    static class RequestProducerImpl extends BasicAsyncRequestProducer {
-
-        protected RequestProducerImpl(
-                final HttpHost target,
-                final HttpEntityEnclosingRequest request,
-                final HttpAsyncContentProducer producer) {
-            super(target, request, producer);
-        }
-
-        public RequestProducerImpl(final HttpHost target, final HttpRequest request) {
-            super(target, request);
-        }
-
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyConsumer.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyConsumer.java
deleted file mode 100644
index 24a556f..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyConsumer.java
+++ /dev/null
@@ -1,138 +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.http.nio.client.methods;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.nio.channels.FileChannel;
-
-import org.apache.http.Header;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.entity.ContentType;
-import org.apache.http.entity.FileEntity;
-import org.apache.http.nio.ContentDecoder;
-import org.apache.http.nio.ContentDecoderChannel;
-import org.apache.http.nio.FileContentDecoder;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.protocol.AbstractAsyncResponseConsumer;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.util.Asserts;
-
-/**
- * {@link org.apache.http.nio.protocol.HttpAsyncResponseConsumer} implementation that
- * streams content entity enclosed in an HTTP response directly into a file
- * without an intermediate in-memory buffer.
- * <p>
- * This consumer can be useful for file downloads.
- *
- * @since 4.0
- */
-public abstract class ZeroCopyConsumer<T> extends AbstractAsyncResponseConsumer<T> {
-
-    private final File file;
-    private final RandomAccessFile accessfile;
-
-    private HttpResponse response;
-    private ContentType contentType;
-    private Header contentEncoding;
-    private FileChannel fileChannel;
-    private long idx = -1;
-
-    public ZeroCopyConsumer(final File file) throws FileNotFoundException {
-        super();
-        if (file == null) {
-            throw new IllegalArgumentException("File may nor be null");
-        }
-        this.file = file;
-        this.accessfile = new RandomAccessFile(this.file, "rw");
-    }
-
-    @Override
-    protected void onResponseReceived(final HttpResponse response) {
-        this.response = response;
-    }
-
-    @Override
-    protected void onEntityEnclosed(
-            final HttpEntity entity, final ContentType contentType) throws IOException {
-        this.contentType = contentType;
-        this.contentEncoding = entity.getContentEncoding();
-        this.fileChannel = this.accessfile.getChannel();
-        this.idx = 0;
-    }
-
-    @Override
-    protected void onContentReceived(
-            final ContentDecoder decoder, final IOControl ioctrl) throws IOException {
-        Asserts.notNull(this.fileChannel, "File channel");
-        final long transferred;
-        if (decoder instanceof FileContentDecoder) {
-            transferred = ((FileContentDecoder)decoder).transfer(
-                    this.fileChannel, this.idx, Integer.MAX_VALUE);
-        } else {
-            transferred = this.fileChannel.transferFrom(
-                    new ContentDecoderChannel(decoder), this.idx, Integer.MAX_VALUE);
-        }
-        if (transferred > 0) {
-            this.idx += transferred;
-        }
-        if (decoder.isCompleted()) {
-            this.fileChannel.close();
-        }
-    }
-
-    /**
-     * Invoked to process received file.
-     *
-     * @param response original response head.
-     * @param file file containing response content.
-     * @param contentType the cotnent type.
-     * @return result of the response processing
-     */
-    protected abstract T process(
-            HttpResponse response, File file, ContentType contentType) throws Exception;
-
-    @Override
-    protected T buildResult(final HttpContext context) throws Exception {
-        final FileEntity entity = new FileEntity(this.file, this.contentType);
-        entity.setContentEncoding(this.contentEncoding);
-        this.response.setEntity(entity);
-        return process(this.response, this.file, this.contentType);
-    }
-
-    @Override
-    protected void releaseResources() {
-        try {
-            this.accessfile.close();
-        } catch (final IOException ignore) {
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyPost.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyPost.java
deleted file mode 100644
index f061f9d..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyPost.java
+++ /dev/null
@@ -1,69 +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.http.nio.client.methods;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.net.URI;
-
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpEntityEnclosingRequest;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.ContentType;
-
-/**
- * {@link org.apache.http.nio.protocol.HttpAsyncRequestProducer} implementation
- * that generates an HTTP {@code POST} request enclosing content of a file.
- * The request content will be streamed out directly from the underlying file
- * without an intermediate in-memory buffer.
- *
- * @since 4.0
- */
-public class ZeroCopyPost extends BaseZeroCopyRequestProducer {
-
-    public ZeroCopyPost(
-            final URI requestURI,
-            final File content,
-            final ContentType contentType) throws FileNotFoundException {
-        super(requestURI, content, contentType);
-    }
-
-    public ZeroCopyPost(
-            final String requestURI,
-            final File content,
-            final ContentType contentType) throws FileNotFoundException {
-        super(URI.create(requestURI), content, contentType);
-    }
-
-    @Override
-    protected HttpEntityEnclosingRequest createRequest(final URI requestURI, final HttpEntity entity) {
-        final HttpPost httppost = new HttpPost(requestURI);
-        httppost.setEntity(entity);
-        return httppost;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyPut.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyPut.java
deleted file mode 100644
index ae257d7..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/ZeroCopyPut.java
+++ /dev/null
@@ -1,69 +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.http.nio.client.methods;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.net.URI;
-
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpEntityEnclosingRequest;
-import org.apache.http.client.methods.HttpPut;
-import org.apache.http.entity.ContentType;
-
-/**
- * {@link org.apache.http.nio.protocol.HttpAsyncRequestProducer} implementation
- * that generates an HTTP {@code PUT} request enclosing content of a file.
- * The request content will be streamed out directly from the underlying file
- * without an intermediate in-memory buffer.
- *
- * @since 4.0
- */
-public class ZeroCopyPut extends BaseZeroCopyRequestProducer {
-
-    public ZeroCopyPut(
-            final URI requestURI,
-            final File content,
-            final ContentType contentType) throws FileNotFoundException {
-        super(requestURI, content, contentType);
-    }
-
-    public ZeroCopyPut(
-            final String requestURI,
-            final File content,
-            final ContentType contentType) throws FileNotFoundException {
-        super(URI.create(requestURI), content, contentType);
-    }
-
-    @Override
-    protected HttpEntityEnclosingRequest createRequest(final URI requestURI, final HttpEntity entity) {
-        final HttpPut httpput = new HttpPut(requestURI);
-        httpput.setEntity(entity);
-        return httpput;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/package-info.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/package-info.java
deleted file mode 100644
index 9fa081d..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/methods/package-info.java
+++ /dev/null
@@ -1,31 +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/>.
- *
- */
-
-/**
- * Asynchronous HTTP method implementations.
- */
-package org.apache.http.nio.client.methods;
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/package-info.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/package-info.java
deleted file mode 100644
index 7ce425c..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/package-info.java
+++ /dev/null
@@ -1,31 +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/>.
- *
- */
-
-/**
- * Asynchronous HTTP client communication APIs.
- */
-package org.apache.http.nio.client;
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/util/HttpAsyncClientUtils.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/util/HttpAsyncClientUtils.java
deleted file mode 100644
index 42e5bec..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/util/HttpAsyncClientUtils.java
+++ /dev/null
@@ -1,70 +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.http.nio.client.util;
-
-import java.io.IOException;
-
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-
-/**
- * Static helpers for dealing with {@link org.apache.http.nio.client.HttpAsyncClient}.
- */
-public class HttpAsyncClientUtils {
-
-    private HttpAsyncClientUtils() {
-    }
-
-    /**
-     * Unconditionally close a httpAsyncClient. Shuts down the underlying
-     * connection manager and releases the resources.
-     * <p>
-     * Example Code:
-     *
-     * <pre>
-     * HttpAsyncClient httpAsyncClient = null;
-     * try {
-     *   httpAsyncClient = ...;
-     * } catch (Exception e) {
-     *   // error handling
-     * } finally {
-     *   HttpAsyncClientUtils.closeQuietly(httpAsyncClient);
-     * }
-     * </pre>
-     *
-     * @param httpAsyncClient
-     *            the HttpAsyncClient to close, may be null or already closed.
-     */
-    public static void closeQuietly(final CloseableHttpAsyncClient httpAsyncClient) {
-        if (httpAsyncClient != null) {
-            try {
-                httpAsyncClient.close();
-            } catch (final IOException ignore) {
-            }
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/client/util/package-info.java b/httpasyncclient/src/main/java/org/apache/http/nio/client/util/package-info.java
deleted file mode 100644
index 440881b..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/client/util/package-info.java
+++ /dev/null
@@ -1,31 +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/>.
- *
- */
-
-/**
- * Asynchronous client utility classes.
- */
-package org.apache.http.nio.client.util;
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/conn/ManagedNHttpClientConnection.java b/httpasyncclient/src/main/java/org/apache/http/nio/conn/ManagedNHttpClientConnection.java
deleted file mode 100644
index d25343d..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/conn/ManagedNHttpClientConnection.java
+++ /dev/null
@@ -1,69 +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.http.nio.conn;
-
-import javax.net.ssl.SSLSession;
-
-import org.apache.http.HttpInetConnection;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.nio.reactor.IOSession;
-
-/**
- * Represents a managed connection whose state and life cycle is managed by
- * a connection manager. This interface extends {@link NHttpClientConnection}
- * with methods to bind the connection to an arbitrary {@link IOSession} and
- * to obtain SSL session details.
- *
- * @since 4.0
- */
-public interface ManagedNHttpClientConnection extends NHttpClientConnection, HttpInetConnection {
-
-    /**
-     * Returns connection ID which is expected to be unique
-     * for the life span of the connection manager.
-     */
-    String getId();
-
-    /**
-     * Binds connection to the given I/O session.
-     */
-    void bind(IOSession iosession);
-
-    /**
-     * Returns the underlying I/O session.
-     */
-    IOSession getIOSession();
-
-    /**
-     * Obtains the SSL session of the underlying connection, if any.
-     *
-     * @return  the underlying SSL session if available,
-     *          {@code null} otherwise
-     */
-    SSLSession getSSLSession();
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/conn/NHttpClientConnectionManager.java b/httpasyncclient/src/main/java/org/apache/http/nio/conn/NHttpClientConnectionManager.java
deleted file mode 100644
index a886389..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/conn/NHttpClientConnectionManager.java
+++ /dev/null
@@ -1,197 +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.http.nio.conn;
-
-import java.io.IOException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.nio.reactor.IOEventDispatch;
-import org.apache.http.protocol.HttpContext;
-
-/**
- * Represents a manager of persistent client connections.
- * <p>
- * The purpose of an HTTP connection manager is to serve as a factory for new
- * HTTP connections, manage persistent connections and synchronize access to
- * persistent connections making sure that only one thread of execution can
- * have access to a connection at a time.
- * <p>
- * Implementations of this interface must be thread-safe. Access to shared
- * data must be synchronized as methods of this interface may be executed
- * from multiple threads.
- *
- * @since 4.0
- */
-public interface NHttpClientConnectionManager {
-
-    /**
-     * Returns a {@link Future} for a {@link NHttpClientConnection}.
-     * <p>
-     * Please note that the consumer of that connection is responsible
-     * for fully establishing the route the to the connection target
-     * by calling {@link #startRoute(org.apache.http.nio.NHttpClientConnection,
-     *   org.apache.http.conn.routing.HttpRoute,
-     *   org.apache.http.protocol.HttpContext) startRoute} in order to start
-     * the process of connection initialization, optionally calling
-     * {@link #upgrade(org.apache.http.nio.NHttpClientConnection,
-     *   org.apache.http.conn.routing.HttpRoute,
-     *   org.apache.http.protocol.HttpContext) upgrade} method to upgrade
-     * the connection after having executed {@code CONNECT} method to
-     * all intermediate proxy hops and and finally calling
-     * {@link #routeComplete(org.apache.http.nio.NHttpClientConnection,
-     *   org.apache.http.conn.routing.HttpRoute,
-     *   org.apache.http.protocol.HttpContext) routeComplete} to mark the route
-     * as fully completed.
-     *
-     * @param route HTTP route of the requested connection.
-     * @param state expected state of the connection or {@code null}
-     *              if the connection is not expected to carry any state.
-     * @param connectTimeout connect timeout.
-     * @param connectionRequestTimeout  connection request timeout.
-     * @param timeUnit time unit of the previous two timeout values.
-     * @param callback future callback.
-     */
-    Future<NHttpClientConnection> requestConnection(
-            HttpRoute route,
-            Object state,
-            long connectTimeout,
-            long connectionRequestTimeout,
-            TimeUnit timeUnit,
-            FutureCallback<NHttpClientConnection> callback);
-
-    /**
-     * Releases the connection back to the manager making it potentially
-     * re-usable by other consumers. Optionally, the maximum period
-     * of how long the manager should keep the connection alive can be
-     * defined using {@code validDuration} and {@code timeUnit}
-     * parameters.
-     *
-     * @param conn      the managed connection to release.
-     * @param validDuration the duration of time this connection is valid for reuse.
-     * @param timeUnit the time unit.
-     *
-     * @see #closeExpiredConnections()
-     */
-    void releaseConnection(
-            NHttpClientConnection conn, Object newState, long validDuration, TimeUnit timeUnit);
-
-    /**
-     * Starts the process of connection initialization. Connection route may consist of several
-     * intermediate hops and may require a protocol upgrade. Once the route is fully established
-     * the {@link #routeComplete(org.apache.http.nio.NHttpClientConnection,
-     *   org.apache.http.conn.routing.HttpRoute,
-     *   org.apache.http.protocol.HttpContext) routeComplete} method must be called.
-     *
-     * @param conn the managed connection to initialize.
-     * @param route the connection route.
-     * @param context the context
-     */
-    void startRoute(
-            NHttpClientConnection conn,
-            HttpRoute route,
-            HttpContext context) throws IOException;
-
-    /**
-     * Upgrades the underlying connection I/O session to TLS/SSL (or another layering
-     * protocol) after having executed {@code CONNECT} method to all
-     * intermediate proxy hops.
-     *
-     * @param conn the managed connection to upgrade.
-     * @param route the connection route.
-     * @param context the context
-     */
-    void upgrade(
-            NHttpClientConnection conn,
-            HttpRoute route,
-            HttpContext context) throws IOException;
-
-    /**
-     * Marks the connection as fully established with all its intermediate
-     * hops completed.
-     *
-     * @param conn the managed connection to mark as route complete.
-     * @param route the connection route.
-     * @param context the context
-     */
-    void routeComplete(
-            NHttpClientConnection conn,
-            HttpRoute route,
-            HttpContext context);
-
-    /**
-     * Determines if the given connection has been fully established and
-     * marked as route complete.
-     *
-     * @param conn the managed connection.
-     */
-    boolean isRouteComplete(NHttpClientConnection conn);
-
-    /**
-     * Closes idle connections in the pool.
-     * <p>
-     * Open connections in the pool that have not been used for the
-     * timespan given by the argument will be closed.
-     * Currently allocated connections are not subject to this method.
-     * Times will be checked with milliseconds precision
-     *
-     * All expired connections will also be closed.
-     *
-     * @param idletime  the idle time of connections to be closed
-     * @param tunit     the unit for the {@code idletime}
-     *
-     * @see #closeExpiredConnections()
-     */
-    void closeIdleConnections(long idletime, TimeUnit tunit);
-
-    /**
-     * Closes all expired connections in the pool.
-     * <p>
-     * Open connections in the pool that have not been used for
-     * the timespan defined when the connection was released will be closed.
-     * Currently allocated connections are not subject to this method.
-     * Times will be checked with milliseconds precision.
-     */
-    void closeExpiredConnections();
-
-    /**
-     * Starts the underlying I/O reactor and initiates the dispatch of
-     * I/O event notifications to the given {@link IOEventDispatch}.
-     */
-    void execute(IOEventDispatch eventDispatch) throws IOException;
-
-    /**
-     * Shuts down this connection manager and releases allocated resources.
-     * This includes closing all connections, whether they are currently
-     * used or not.
-     */
-    void shutdown() throws IOException;
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/conn/NHttpConnectionFactory.java b/httpasyncclient/src/main/java/org/apache/http/nio/conn/NHttpConnectionFactory.java
deleted file mode 100644
index 0b87925..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/conn/NHttpConnectionFactory.java
+++ /dev/null
@@ -1,42 +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.http.nio.conn;
-
-import org.apache.http.config.ConnectionConfig;
-import org.apache.http.nio.NHttpConnection;
-import org.apache.http.nio.reactor.IOSession;
-
-/**
- * Generic {@link NHttpConnection} factory.
- *
- * @since 4.0
- */
-public interface NHttpConnectionFactory<T extends NHttpConnection> {
-
-    T create(IOSession iosession, ConnectionConfig config);
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/conn/NoopIOSessionStrategy.java b/httpasyncclient/src/main/java/org/apache/http/nio/conn/NoopIOSessionStrategy.java
deleted file mode 100644
index e88053b..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/conn/NoopIOSessionStrategy.java
+++ /dev/null
@@ -1,52 +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.http.nio.conn;
-
-import org.apache.http.HttpHost;
-import org.apache.http.nio.reactor.IOSession;
-
-/**
- * Noop implementation for protocol schemes that have no transport level
- * security.
- *
- * @since 4.0
- */
-public class NoopIOSessionStrategy implements SchemeIOSessionStrategy {
-
-    public static final NoopIOSessionStrategy INSTANCE = new NoopIOSessionStrategy();
-
-    @Override
-    public IOSession upgrade(final HttpHost host, final IOSession iosession) {
-        return iosession;
-    }
-
-    @Override
-    public boolean isLayeringRequired() {
-        return false;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/conn/SchemeIOSessionStrategy.java b/httpasyncclient/src/main/java/org/apache/http/nio/conn/SchemeIOSessionStrategy.java
deleted file mode 100644
index b9b1037..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/conn/SchemeIOSessionStrategy.java
+++ /dev/null
@@ -1,61 +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.http.nio.conn;
-
-import org.apache.http.HttpHost;
-import org.apache.http.nio.reactor.IOSession;
-
-import java.io.IOException;
-
-/**
- * I/O session layering strategy for complex protocol schemes, which employ
- * a transport level security protocol to secure HTTP communication
- * (in other words those schemes 'layer' HTTP on top of a transport level
- * protocol such as TLS/SSL).
- *
- * @since 4.0
- */
-public interface SchemeIOSessionStrategy {
-
-    /**
-     * Determines whether or not protocol layering is required. If this method
-     * returns {@code false} the {@link #upgrade(org.apache.http.HttpHost,
-     * org.apache.http.nio.reactor.IOSession) upgrade} method  is expected
-     * to have no effect and should not be called.
-     */
-    boolean isLayeringRequired();
-
-    /**
-     * Decorates the original {@link IOSession} with a transport level security
-     * protocol implementation.
-     * @param host the target host.
-     * @param iosession the I/O session.
-     * @return upgraded I/O session.
-     */
-    IOSession upgrade(HttpHost host, IOSession iosession) throws IOException;
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/conn/package-info.java b/httpasyncclient/src/main/java/org/apache/http/nio/conn/package-info.java
deleted file mode 100644
index 0562ff8..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/conn/package-info.java
+++ /dev/null
@@ -1,31 +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/>.
- *
- */
-
-/**
- * Asynchronous client connection management APIs.
- */
-package org.apache.http.nio.conn;
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/conn/ssl/SSLIOSessionStrategy.java b/httpasyncclient/src/main/java/org/apache/http/nio/conn/ssl/SSLIOSessionStrategy.java
deleted file mode 100644
index 29d6b47..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/conn/ssl/SSLIOSessionStrategy.java
+++ /dev/null
@@ -1,218 +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.http.nio.conn.ssl;
-
-import java.io.IOException;
-import java.security.cert.Certificate;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLEngine;
-import javax.net.ssl.SSLException;
-import javax.net.ssl.SSLPeerUnverifiedException;
-import javax.net.ssl.SSLSession;
-import javax.security.auth.x500.X500Principal;
-
-import org.apache.http.HttpHost;
-import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
-import org.apache.http.conn.ssl.BrowserCompatHostnameVerifier;
-import org.apache.http.conn.ssl.DefaultHostnameVerifier;
-import org.apache.http.conn.ssl.StrictHostnameVerifier;
-import org.apache.http.conn.ssl.X509HostnameVerifier;
-import org.apache.http.conn.util.PublicSuffixMatcherLoader;
-import org.apache.http.nio.conn.SchemeIOSessionStrategy;
-import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.nio.reactor.ssl.SSLIOSession;
-import org.apache.http.nio.reactor.ssl.SSLMode;
-import org.apache.http.nio.reactor.ssl.SSLSetupHandler;
-import org.apache.http.ssl.SSLContexts;
-import org.apache.http.util.Args;
-import org.apache.http.util.Asserts;
-import org.apache.http.util.TextUtils;
-
-/**
- * TLS/SSL transport level security strategy.
- *
- * @since 4.0
- */
-public class SSLIOSessionStrategy implements SchemeIOSessionStrategy {
-
-    @Deprecated
-    public static final X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER =
-            new AllowAllHostnameVerifier();
-
-    @Deprecated
-    public static final X509HostnameVerifier BROWSER_COMPATIBLE_HOSTNAME_VERIFIER =
-            new BrowserCompatHostnameVerifier();
-
-    @Deprecated
-    public static final X509HostnameVerifier STRICT_HOSTNAME_VERIFIER =
-            new StrictHostnameVerifier();
-
-    private static String[] split(final String s) {
-        if (TextUtils.isBlank(s)) {
-            return null;
-        }
-        return s.split(" *, *");
-    }
-
-    /**
-     * @since 4.1
-     */
-    public static HostnameVerifier getDefaultHostnameVerifier() {
-        return new DefaultHostnameVerifier(PublicSuffixMatcherLoader.getDefault());
-    }
-
-    public static SSLIOSessionStrategy getDefaultStrategy() {
-        return new SSLIOSessionStrategy(
-                SSLContexts.createDefault(),
-                getDefaultHostnameVerifier());
-    }
-
-    public static SSLIOSessionStrategy getSystemDefaultStrategy() {
-        return new SSLIOSessionStrategy(
-                SSLContexts.createSystemDefault(),
-                split(System.getProperty("https.protocols")),
-                split(System.getProperty("https.cipherSuites")),
-                getDefaultHostnameVerifier());
-    }
-
-    private final SSLContext sslContext;
-    private final String[] supportedProtocols;
-    private final String[] supportedCipherSuites;
-    private final HostnameVerifier hostnameVerifier;
-
-    /**
-     * @deprecated (4.1) use {@link SSLIOSessionStrategy#SSLIOSessionStrategy(
-     *   javax.net.ssl.SSLContext, String[], String[], javax.net.ssl.HostnameVerifier)}
-     */
-    @Deprecated
-    public SSLIOSessionStrategy(
-            final SSLContext sslContext,
-            final String[] supportedProtocols,
-            final String[] supportedCipherSuites,
-            final X509HostnameVerifier hostnameVerifier) {
-        this(sslContext, supportedProtocols, supportedCipherSuites, (HostnameVerifier) hostnameVerifier);
-    }
-
-    /**
-     * @deprecated (4.1)
-     */
-    @Deprecated
-    public SSLIOSessionStrategy(
-            final SSLContext sslcontext,
-            final X509HostnameVerifier hostnameVerifier) {
-        this(sslcontext, null, null, (HostnameVerifier) hostnameVerifier);
-    }
-
-    /**
-     * @since 4.1
-     */
-    public SSLIOSessionStrategy(
-            final SSLContext sslContext,
-            final String[] supportedProtocols,
-            final String[] supportedCipherSuites,
-            final HostnameVerifier hostnameVerifier) {
-        super();
-        this.sslContext = Args.notNull(sslContext, "SSL context");
-        this.supportedProtocols = supportedProtocols;
-        this.supportedCipherSuites = supportedCipherSuites;
-        this.hostnameVerifier = hostnameVerifier != null ? hostnameVerifier : getDefaultHostnameVerifier();
-    }
-
-    /**
-     * @since 4.1
-     */
-    public SSLIOSessionStrategy(
-            final SSLContext sslcontext,
-            final HostnameVerifier hostnameVerifier) {
-        this(sslcontext, null, null, hostnameVerifier);
-    }
-
-    public SSLIOSessionStrategy(final SSLContext sslcontext) {
-        this(sslcontext, null, null, getDefaultHostnameVerifier());
-    }
-
-    @Override
-    public SSLIOSession upgrade(final HttpHost host, final IOSession iosession) throws IOException {
-        Asserts.check(!(iosession instanceof SSLIOSession), "I/O session is already upgraded to TLS/SSL");
-        final SSLIOSession ssliosession = new SSLIOSession(
-            iosession,
-            SSLMode.CLIENT,
-            host,
-            this.sslContext,
-            new SSLSetupHandler() {
-
-                @Override
-                public void initalize(
-                        final SSLEngine sslengine) throws SSLException {
-                    if (supportedProtocols != null) {
-                        sslengine.setEnabledProtocols(supportedProtocols);
-                    }
-                    if (supportedCipherSuites != null) {
-                        sslengine.setEnabledCipherSuites(supportedCipherSuites);
-                    }
-                    initializeEngine(sslengine);
-                }
-
-                @Override
-                public void verify(
-                        final IOSession iosession,
-                        final SSLSession sslsession) throws SSLException {
-                    verifySession(host, iosession, sslsession);
-                }
-
-        });
-        iosession.setAttribute(SSLIOSession.SESSION_KEY, ssliosession);
-        ssliosession.initialize();
-        return ssliosession;
-    }
-
-    protected void initializeEngine(final SSLEngine engine) {
-    }
-
-    protected void verifySession(
-            final HttpHost host,
-            final IOSession iosession,
-            final SSLSession sslsession) throws SSLException {
-        if (!this.hostnameVerifier.verify(host.getHostName(), sslsession)) {
-            final Certificate[] certs = sslsession.getPeerCertificates();
-            final X509Certificate x509 = (X509Certificate) certs[0];
-            final X500Principal x500Principal = x509.getSubjectX500Principal();
-            throw new SSLPeerUnverifiedException("Host name '" + host.getHostName() + "' does not match " +
-                    "the certificate subject provided by the peer (" + x500Principal.toString() + ")");
-        }
-    }
-
-    @Override
-    public boolean isLayeringRequired() {
-        return true;
-    }
-
-}
diff --git a/httpasyncclient/src/main/java/org/apache/http/nio/conn/ssl/package-info.java b/httpasyncclient/src/main/java/org/apache/http/nio/conn/ssl/package-info.java
deleted file mode 100644
index bc2a5b5..0000000
--- a/httpasyncclient/src/main/java/org/apache/http/nio/conn/ssl/package-info.java
+++ /dev/null
@@ -1,31 +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/>.
- *
- */
-
-/**
- * Asynchronous client TLS/SSL support.
- */
-package org.apache.http.nio.conn.ssl;
diff --git a/httpasyncclient/src/main/resources/org/apache/http/nio/client/version.properties b/httpasyncclient/src/main/resources/org/apache/http/nio/client/version.properties
deleted file mode 100644
index 2c67ce8..0000000
--- a/httpasyncclient/src/main/resources/org/apache/http/nio/client/version.properties
+++ /dev/null
@@ -1,22 +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.
-#
-info.module    = HttpAsyncClient
-info.release   = ${pom.version}
-info.timestamp = ${mvn.timestamp}
-# timestamp requires Maven 2.1
diff --git a/httpasyncclient/src/test/java/org/apache/http/impl/nio/conn/CPoolUtils.java b/httpasyncclient/src/test/java/org/apache/http/impl/nio/conn/CPoolUtils.java
deleted file mode 100644
index 0148327..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/impl/nio/conn/CPoolUtils.java
+++ /dev/null
@@ -1,40 +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.http.impl.nio.conn;
-
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.nio.conn.ManagedNHttpClientConnection;
-import org.apache.http.pool.PoolEntry;
-
-public class CPoolUtils {
-
-    public static PoolEntry<HttpRoute, ManagedNHttpClientConnection> getPoolEntry(final NHttpClientConnection managedConn) {
-        return CPoolProxy.getPoolEntry(managedConn);
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/impl/nio/conn/TestPoolingHttpClientAsyncConnectionManager.java b/httpasyncclient/src/test/java/org/apache/http/impl/nio/conn/TestPoolingHttpClientAsyncConnectionManager.java
deleted file mode 100644
index 8d6e8f2..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/impl/nio/conn/TestPoolingHttpClientAsyncConnectionManager.java
+++ /dev/null
@@ -1,601 +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.http.impl.nio.conn;
-
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.util.Calendar;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.logging.Log;
-import org.apache.http.HttpHost;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.config.ConnectionConfig;
-import org.apache.http.config.Registry;
-import org.apache.http.config.RegistryBuilder;
-import org.apache.http.conn.DnsResolver;
-import org.apache.http.conn.SchemePortResolver;
-import org.apache.http.conn.UnsupportedSchemeException;
-import org.apache.http.conn.routing.HttpRoute;
-import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.ConfigData;
-import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.InternalAddressResolver;
-import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.InternalConnectionFactory;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.nio.conn.ManagedNHttpClientConnection;
-import org.apache.http.nio.conn.NHttpConnectionFactory;
-import org.apache.http.nio.conn.SchemeIOSessionStrategy;
-import org.apache.http.nio.reactor.ConnectingIOReactor;
-import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.nio.reactor.SessionRequest;
-import org.apache.http.protocol.BasicHttpContext;
-import org.apache.http.protocol.HttpContext;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Matchers;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-
-public class TestPoolingHttpClientAsyncConnectionManager {
-
-    @Mock
-    private ConnectingIOReactor ioreactor;
-    @Mock
-    private CPool pool;
-    @Mock
-    private SchemeIOSessionStrategy noopStrategy;
-    @Mock
-    private SchemeIOSessionStrategy sslStrategy;
-    @Mock
-    private SchemePortResolver schemePortResolver;
-    @Mock
-    private DnsResolver dnsResolver;
-    @Mock
-    private FutureCallback<NHttpClientConnection> connCallback;
-    @Captor
-    private ArgumentCaptor<FutureCallback<CPoolEntry>> poolEntryCallbackCaptor;
-    @Mock
-    private ManagedNHttpClientConnection conn;
-    @Mock
-    private NHttpConnectionFactory<ManagedNHttpClientConnection> connFactory;
-    @Mock
-    private SessionRequest sessionRequest;
-    @Mock
-    private IOSession iosession;
-
-    private Registry<SchemeIOSessionStrategy> layeringStrategyRegistry;
-    private PoolingNHttpClientConnectionManager connman;
-
-    @Before
-    public void setUp() throws Exception {
-        MockitoAnnotations.initMocks(this);
-        Mockito.when(sslStrategy.isLayeringRequired()).thenReturn(Boolean.TRUE);
-
-        layeringStrategyRegistry = RegistryBuilder.<SchemeIOSessionStrategy>create()
-            .register("http", noopStrategy)
-            .register("https", sslStrategy)
-            .build();
-        connman = new PoolingNHttpClientConnectionManager(
-            ioreactor, pool, layeringStrategyRegistry);
-    }
-
-    @Test
-    public void testShutdown() throws Exception {
-        connman.shutdown();
-
-        Mockito.verify(pool).shutdown(2000);
-    }
-
-    @Test
-    public void testShutdownMs() throws Exception {
-        connman.shutdown(500);
-
-        Mockito.verify(pool).shutdown(500);
-    }
-
-    @Test
-    public void testRequestReleaseConnection() throws Exception {
-        final HttpHost target = new HttpHost("localhost");
-        final HttpRoute route = new HttpRoute(target);
-        final Future<NHttpClientConnection> future = connman.requestConnection(
-            route, "some state", 1000L, 2000L, TimeUnit.MILLISECONDS, connCallback);
-        Assert.assertNotNull(future);
-
-        Mockito.verify(pool).lease(
-                Matchers.same(route),
-                Matchers.eq("some state"),
-                Matchers.eq(1000L),
-                Matchers.eq(2000L),
-                Matchers.eq(TimeUnit.MILLISECONDS),
-                poolEntryCallbackCaptor.capture());
-        final FutureCallback<CPoolEntry> callaback = poolEntryCallbackCaptor.getValue();
-        final Log log = Mockito.mock(Log.class);
-        final CPoolEntry poolentry = new CPoolEntry(log, "some-id", route, conn, -1, TimeUnit.MILLISECONDS);
-        poolentry.markRouteComplete();
-        callaback.completed(poolentry);
-
-        Assert.assertTrue(future.isDone());
-        final NHttpClientConnection managedConn = future.get();
-        Mockito.verify(connCallback).completed(Matchers.<NHttpClientConnection>any());
-
-        Mockito.when(conn.isOpen()).thenReturn(Boolean.TRUE);
-        connman.releaseConnection(managedConn, "new state", 5, TimeUnit.SECONDS);
-
-        Mockito.verify(pool).release(poolentry, true);
-        Assert.assertEquals("new state", poolentry.getState());
-        final Calendar cal = Calendar.getInstance();
-        cal.setTimeInMillis(poolentry.getUpdated());
-        cal.add(Calendar.SECOND, 5);
-        Assert.assertEquals(cal.getTimeInMillis(), poolentry.getExpiry());
-    }
-
-    @Test
-    public void testReleaseConnectionIncompleteRoute() throws Exception {
-        final HttpHost target = new HttpHost("localhost");
-        final HttpRoute route = new HttpRoute(target);
-        final Future<NHttpClientConnection> future = connman.requestConnection(
-            route, "some state", 1000L, 2000L, TimeUnit.MILLISECONDS, connCallback);
-        Assert.assertNotNull(future);
-
-        Mockito.verify(pool).lease(
-                Matchers.same(route),
-                Matchers.eq("some state"),
-                Matchers.eq(1000L),
-                Matchers.eq(2000L),
-                Matchers.eq(TimeUnit.MILLISECONDS),
-                poolEntryCallbackCaptor.capture());
-        final FutureCallback<CPoolEntry> callaback = poolEntryCallbackCaptor.getValue();
-        final Log log = Mockito.mock(Log.class);
-        final CPoolEntry poolentry = new CPoolEntry(log, "some-id", route, conn, -1, TimeUnit.MILLISECONDS);
-        callaback.completed(poolentry);
-
-        Assert.assertTrue(future.isDone());
-        final NHttpClientConnection managedConn = future.get();
-        Mockito.verify(connCallback).completed(Matchers.<NHttpClientConnection>any());
-
-        Mockito.when(conn.isOpen()).thenReturn(Boolean.TRUE);
-        connman.releaseConnection(managedConn, "new state", 5, TimeUnit.SECONDS);
-
-        Mockito.verify(pool).release(poolentry, false);
-    }
-
-    @Test
-    public void testRequestConnectionFutureCancelled() throws Exception {
-        final HttpHost target = new HttpHost("localhost");
-        final HttpRoute route = new HttpRoute(target);
-        final Future<NHttpClientConnection> future = connman.requestConnection(
-            route, "some state", 1000L, 2000L, TimeUnit.MILLISECONDS, null);
-        Assert.assertNotNull(future);
-        future.cancel(true);
-
-        Mockito.verify(pool).lease(
-                Matchers.same(route),
-                Matchers.eq("some state"),
-                Matchers.eq(1000L),
-                Matchers.eq(2000L),
-                Matchers.eq(TimeUnit.MILLISECONDS),
-                poolEntryCallbackCaptor.capture());
-        final FutureCallback<CPoolEntry> callaback = poolEntryCallbackCaptor.getValue();
-        final Log log = Mockito.mock(Log.class);
-        final CPoolEntry poolentry = new CPoolEntry(log, "some-id", route, conn, -1, TimeUnit.MILLISECONDS);
-        poolentry.markRouteComplete();
-        callaback.completed(poolentry);
-
-        Mockito.verify(pool).release(poolentry, true);
-    }
-
-    @Test(expected=ExecutionException.class)
-    public void testRequestConnectionFailed() throws Exception {
-        final HttpHost target = new HttpHost("localhost");
-        final HttpRoute route = new HttpRoute(target);
-        final Future<NHttpClientConnection> future = connman.requestConnection(
-            route, "some state", 1000L, 2000L, TimeUnit.MILLISECONDS, null);
-        Assert.assertNotNull(future);
-
-        Mockito.verify(pool).lease(
-                Matchers.same(route),
-                Matchers.eq("some state"),
-                Matchers.eq(1000L),
-                Matchers.eq(2000L),
-                Matchers.eq(TimeUnit.MILLISECONDS),
-                poolEntryCallbackCaptor.capture());
-        final FutureCallback<CPoolEntry> callaback = poolEntryCallbackCaptor.getValue();
-        callaback.failed(new Exception());
-
-        Assert.assertTrue(future.isDone());
-        future.get();
-    }
-
-    @Test
-    public void testRequestConnectionCancelled() throws Exception {
-        final HttpHost target = new HttpHost("localhost");
-        final HttpRoute route = new HttpRoute(target);
-        final Future<NHttpClientConnection> future = connman.requestConnection(
-            route, "some state", 1000L, 2000L, TimeUnit.MILLISECONDS, null);
-        Assert.assertNotNull(future);
-
-        Mockito.verify(pool).lease(
-                Matchers.same(route),
-                Matchers.eq("some state"),
-                Matchers.eq(1000L),
-                Matchers.eq(2000L),
-                Matchers.eq(TimeUnit.MILLISECONDS),
-                poolEntryCallbackCaptor.capture());
-        final FutureCallback<CPoolEntry> callaback = poolEntryCallbackCaptor.getValue();
-        callaback.cancelled();
-
-        Assert.assertTrue(future.isDone());
-        Assert.assertTrue(future.isCancelled());
-        Assert.assertNull(future.get());
-    }
-
-    @Test
-    public void testConnectionInitialize() throws Exception {
-        final HttpHost target = new HttpHost("somehost", -1, "http");
-        final HttpRoute route = new HttpRoute(target);
-        final HttpContext context = new BasicHttpContext();
-
-        final Log log = Mockito.mock(Log.class);
-        final CPoolEntry poolentry = new CPoolEntry(log, "some-id", route, conn, -1, TimeUnit.MILLISECONDS);
-        final NHttpClientConnection managedConn = CPoolProxy.newProxy(poolentry);
-
-        Mockito.when(conn.getIOSession()).thenReturn(iosession);
-        Mockito.when(sslStrategy.upgrade(target, iosession)).thenReturn(iosession);
-
-        connman.startRoute(managedConn, route, context);
-
-        Mockito.verify(noopStrategy, Mockito.never()).upgrade(target, iosession);
-        Mockito.verify(conn, Mockito.never()).bind(iosession);
-
-        Assert.assertFalse(connman.isRouteComplete(managedConn));
-    }
-
-    @Test
-    public void testConnectionInitializeHttps() throws Exception {
-        final HttpHost target = new HttpHost("somehost", 443, "https");
-        final HttpRoute route = new HttpRoute(target, null, true);
-        final HttpContext context = new BasicHttpContext();
-
-        final Log log = Mockito.mock(Log.class);
-        final CPoolEntry poolentry = new CPoolEntry(log, "some-id", route, conn, -1, TimeUnit.MILLISECONDS);
-        poolentry.markRouteComplete();
-        final NHttpClientConnection managedConn = CPoolProxy.newProxy(poolentry);
-
-        Mockito.when(conn.getIOSession()).thenReturn(iosession);
-        Mockito.when(sslStrategy.upgrade(target, iosession)).thenReturn(iosession);
-
-        connman.startRoute(managedConn, route, context);
-
-        Mockito.verify(sslStrategy).upgrade(target, iosession);
-        Mockito.verify(conn).bind(iosession);
-    }
-
-    @Test
-    public void testConnectionInitializeContextSpecific() throws Exception {
-        final HttpHost target = new HttpHost("somehost", 80, "http11");
-        final HttpRoute route = new HttpRoute(target);
-        final HttpContext context = new BasicHttpContext();
-
-        final Registry<SchemeIOSessionStrategy> reg = RegistryBuilder.<SchemeIOSessionStrategy>create()
-                .register("http11", noopStrategy)
-                .build();
-        context.setAttribute(PoolingNHttpClientConnectionManager.IOSESSION_FACTORY_REGISTRY, reg);
-
-        final Log log = Mockito.mock(Log.class);
-        final CPoolEntry poolentry = new CPoolEntry(log, "some-id", route, conn, -1, TimeUnit.MILLISECONDS);
-        final NHttpClientConnection managedConn = CPoolProxy.newProxy(poolentry);
-
-        Mockito.when(conn.getIOSession()).thenReturn(iosession);
-        Mockito.when(sslStrategy.upgrade(target, iosession)).thenReturn(iosession);
-
-        connman.startRoute(managedConn, route, context);
-
-        Mockito.verify(noopStrategy, Mockito.never()).upgrade(target, iosession);
-        Mockito.verify(conn, Mockito.never()).bind(iosession);
-
-        Assert.assertFalse(connman.isRouteComplete(managedConn));
-    }
-
-    @Test(expected=UnsupportedSchemeException.class)
-    public void testConnectionInitializeUnknownScheme() throws Exception {
-        final HttpHost target = new HttpHost("somehost", -1, "whatever");
-        final HttpRoute route = new HttpRoute(target, null, true);
-        final HttpContext context = new BasicHttpContext();
-
-        final Log log = Mockito.mock(Log.class);
-        final CPoolEntry poolentry = new CPoolEntry(log, "some-id", route, conn, -1, TimeUnit.MILLISECONDS);
-        poolentry.markRouteComplete();
-        final NHttpClientConnection managedConn = CPoolProxy.newProxy(poolentry);
-
-        Mockito.when(conn.getIOSession()).thenReturn(iosession);
-        Mockito.when(sslStrategy.upgrade(target, iosession)).thenReturn(iosession);
-
-        connman.startRoute(managedConn, route, context);
-    }
-
-    @Test
-    public void testConnectionUpgrade() throws Exception {
-        final HttpHost target = new HttpHost("somehost", 443, "https");
-        final HttpRoute route = new HttpRoute(target);
-        final HttpContext context = new BasicHttpContext();
-
-        final Log log = Mockito.mock(Log.class);
-        final CPoolEntry poolentry = new CPoolEntry(log, "some-id", route, conn, -1, TimeUnit.MILLISECONDS);
-        poolentry.markRouteComplete();
-        final NHttpClientConnection managedConn = CPoolProxy.newProxy(poolentry);
-
-        Mockito.when(conn.getIOSession()).thenReturn(iosession);
-        Mockito.when(sslStrategy.upgrade(target, iosession)).thenReturn(iosession);
-
-        connman.upgrade(managedConn, route, context);
-
-        Mockito.verify(sslStrategy).upgrade(target, iosession);
-        Mockito.verify(conn).bind(iosession);
-    }
-
-    @Test(expected=UnsupportedSchemeException.class)
-    public void testConnectionUpgradeUnknownScheme() throws Exception {
-        final HttpHost target = new HttpHost("somehost", -1, "whatever");
-        final HttpRoute route = new HttpRoute(target);
-        final HttpContext context = new BasicHttpContext();
-
-        final Log log = Mockito.mock(Log.class);
-        final CPoolEntry poolentry = new CPoolEntry(log, "some-id", route, conn, -1, TimeUnit.MILLISECONDS);
-        poolentry.markRouteComplete();
-        final NHttpClientConnection managedConn = CPoolProxy.newProxy(poolentry);
-
-        Mockito.when(conn.getIOSession()).thenReturn(iosession);
-        Mockito.when(sslStrategy.upgrade(target, iosession)).thenReturn(iosession);
-
-        connman.upgrade(managedConn, route, context);
-    }
-
-    @Test(expected=UnsupportedSchemeException.class)
-    public void testConnectionUpgradeIllegalScheme() throws Exception {
-        final HttpHost target = new HttpHost("somehost", 80, "http");
-        final HttpRoute route = new HttpRoute(target);
-        final HttpContext context = new BasicHttpContext();
-
-        final Log log = Mockito.mock(Log.class);
-        final CPoolEntry poolentry = new CPoolEntry(log, "some-id", route, conn, -1, TimeUnit.MILLISECONDS);
-        poolentry.markRouteComplete();
-        final NHttpClientConnection managedConn = CPoolProxy.newProxy(poolentry);
-
-        Mockito.when(conn.getIOSession()).thenReturn(iosession);
-        Mockito.when(sslStrategy.upgrade(target, iosession)).thenReturn(iosession);
-
-        connman.upgrade(managedConn, route, context);
-    }
-
-    @Test
-    public void testConnectionRouteComplete() throws Exception {
-        final HttpHost target = new HttpHost("somehost", 80, "http");
-        final HttpRoute route = new HttpRoute(target);
-        final HttpContext context = new BasicHttpContext();
-
-        final Log log = Mockito.mock(Log.class);
-        final CPoolEntry poolentry = new CPoolEntry(log, "some-id", route, conn, -1, TimeUnit.MILLISECONDS);
-        poolentry.markRouteComplete();
-        final NHttpClientConnection managedConn = CPoolProxy.newProxy(poolentry);
-
-        Mockito.when(conn.getIOSession()).thenReturn(iosession);
-        Mockito.when(sslStrategy.upgrade(target, iosession)).thenReturn(iosession);
-
-        connman.startRoute(managedConn, route, context);
-        connman.routeComplete(managedConn, route, context);
-
-        Assert.assertTrue(connman.isRouteComplete(managedConn));
-    }
-
-    @Test
-    public void testDelegationToCPool() throws Exception {
-        connman.closeExpiredConnections();
-        Mockito.verify(pool).closeExpired();
-
-        connman.closeIdleConnections(3, TimeUnit.SECONDS);
-        Mockito.verify(pool).closeIdle(3, TimeUnit.SECONDS);
-
-        connman.getMaxTotal();
-        Mockito.verify(pool).getMaxTotal();
-
-        connman.getDefaultMaxPerRoute();
-        Mockito.verify(pool).getDefaultMaxPerRoute();
-
-        final HttpRoute route = new HttpRoute(new HttpHost("somehost", 80));
-        connman.getMaxPerRoute(route);
-        Mockito.verify(pool).getMaxPerRoute(route);
-
-        connman.setMaxTotal(200);
-        Mockito.verify(pool).setMaxTotal(200);
-
-        connman.setDefaultMaxPerRoute(100);
-        Mockito.verify(pool).setDefaultMaxPerRoute(100);
-
-        connman.setMaxPerRoute(route, 150);
-        Mockito.verify(pool).setMaxPerRoute(route, 150);
-
-        connman.getTotalStats();
-        Mockito.verify(pool).getTotalStats();
-
-        connman.getStats(route);
-        Mockito.verify(pool).getStats(route);
-    }
-
-    @Test
-    public void testInternalConnFactoryCreate() throws Exception {
-        final ConfigData configData = new ConfigData();
-        final InternalConnectionFactory internalConnFactory = new InternalConnectionFactory(
-            configData, connFactory);
-
-        final HttpRoute route = new HttpRoute(new HttpHost("somehost", 80));
-        internalConnFactory.create(route, iosession);
-
-        Mockito.verify(sslStrategy, Mockito.never()).upgrade(Matchers.eq(new HttpHost("somehost", 80)),
-                Matchers.<IOSession>any());
-        Mockito.verify(connFactory).create(Matchers.same(iosession), Matchers.<ConnectionConfig>any());
-    }
-
-    @Test
-    public void testInternalConnFactoryCreateViaProxy() throws Exception {
-        final ConfigData configData = new ConfigData();
-        final InternalConnectionFactory internalConnFactory = new InternalConnectionFactory(
-            configData, connFactory);
-
-        final HttpHost target = new HttpHost("somehost", 80);
-        final HttpHost proxy = new HttpHost("someproxy", 8888);
-        final HttpRoute route = new HttpRoute(target, null, proxy, false);
-
-        final ConnectionConfig config = ConnectionConfig.custom().build();
-        configData.setConnectionConfig(proxy, config);
-
-        internalConnFactory.create(route, iosession);
-
-        Mockito.verify(connFactory).create(iosession, config);
-    }
-
-    @Test
-    public void testInternalConnFactoryCreateDirect() throws Exception {
-        final ConfigData configData = new ConfigData();
-        final InternalConnectionFactory internalConnFactory = new InternalConnectionFactory(
-            configData, connFactory);
-
-        final HttpHost target = new HttpHost("somehost", 80);
-        final HttpRoute route = new HttpRoute(target);
-
-        final ConnectionConfig config = ConnectionConfig.custom().build();
-        configData.setConnectionConfig(target, config);
-
-        internalConnFactory.create(route, iosession);
-
-        Mockito.verify(connFactory).create(iosession, config);
-    }
-
-    @Test
-    public void testInternalConnFactoryCreateDefaultConfig() throws Exception {
-        final ConfigData configData = new ConfigData();
-        final InternalConnectionFactory internalConnFactory = new InternalConnectionFactory(
-            configData, connFactory);
-
-        final HttpHost target = new HttpHost("somehost", 80);
-        final HttpRoute route = new HttpRoute(target);
-
-        final ConnectionConfig config = ConnectionConfig.custom().build();
-        configData.setDefaultConnectionConfig(config);
-
-        internalConnFactory.create(route, iosession);
-
-        Mockito.verify(connFactory).create(iosession, config);
-    }
-
-    @Test
-    public void testInternalConnFactoryCreateGlobalDefaultConfig() throws Exception {
-        final ConfigData configData = new ConfigData();
-        final InternalConnectionFactory internalConnFactory = new InternalConnectionFactory(
-            configData, connFactory);
-
-        final HttpHost target = new HttpHost("somehost", 80);
-        final HttpRoute route = new HttpRoute(target);
-
-        configData.setDefaultConnectionConfig(null);
-
-        internalConnFactory.create(route, iosession);
-
-        Mockito.verify(connFactory).create(iosession, ConnectionConfig.DEFAULT);
-    }
-
-    @Test
-    public void testResolveLocalAddress() throws Exception {
-        final InternalAddressResolver addressResolver = new InternalAddressResolver(
-                schemePortResolver, dnsResolver);
-
-        final HttpHost target = new HttpHost("localhost");
-        final byte[] ip = new byte[] {10, 0, 0, 10};
-        final HttpRoute route = new HttpRoute(target, InetAddress.getByAddress(ip), false);
-        final InetSocketAddress address = (InetSocketAddress) addressResolver.resolveLocalAddress(route);
-
-        Assert.assertNotNull(address);
-        Assert.assertEquals(InetAddress.getByAddress(ip), address.getAddress());
-        Assert.assertEquals(0, address.getPort());
-    }
-
-    @Test
-    public void testResolveLocalAddressNull() throws Exception {
-        final InternalAddressResolver addressResolver = new InternalAddressResolver(
-                schemePortResolver, dnsResolver);
-
-        final HttpHost target = new HttpHost("localhost");
-        final HttpRoute route = new HttpRoute(target);
-        final InetSocketAddress address = (InetSocketAddress) addressResolver.resolveLocalAddress(route);
-
-        Assert.assertNull(address);
-    }
-
-    @Test
-    public void testResolveRemoteAddress() throws Exception {
-        final InternalAddressResolver addressResolver = new InternalAddressResolver(
-                schemePortResolver, dnsResolver);
-
-        final HttpHost target = new HttpHost("somehost", 80);
-        final HttpRoute route = new HttpRoute(target);
-
-        Mockito.when(schemePortResolver.resolve(target)).thenReturn(123);
-        final byte[] ip = new byte[] {10, 0, 0, 10};
-        Mockito.when(dnsResolver.resolve("somehost")).thenReturn(new InetAddress[] {InetAddress.getByAddress(ip)});
-
-        final InetSocketAddress address = (InetSocketAddress) addressResolver.resolveRemoteAddress(route);
-
-        Assert.assertNotNull(address);
-        Assert.assertEquals(InetAddress.getByAddress(ip), address.getAddress());
-        Assert.assertEquals(123, address.getPort());
-    }
-
-    @Test
-    public void testResolveRemoteAddressViaProxy() throws Exception {
-        final InternalAddressResolver addressResolver = new InternalAddressResolver(
-                schemePortResolver, dnsResolver);
-
-        final HttpHost target = new HttpHost("somehost", 80);
-        final HttpHost proxy = new HttpHost("someproxy");
-        final HttpRoute route = new HttpRoute(target, null, proxy, false);
-
-        Mockito.when(schemePortResolver.resolve(proxy)).thenReturn(8888);
-        final byte[] ip = new byte[] {10, 0, 0, 10};
-        Mockito.when(dnsResolver.resolve("someproxy")).thenReturn(new InetAddress[] {InetAddress.getByAddress(ip)});
-
-        final InetSocketAddress address = (InetSocketAddress) addressResolver.resolveRemoteAddress(route);
-
-        Assert.assertNotNull(address);
-        Assert.assertEquals(InetAddress.getByAddress(ip), address.getAddress());
-        Assert.assertEquals(8888, address.getPort());
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/localserver/AbstractAsyncTest.java b/httpasyncclient/src/test/java/org/apache/http/localserver/AbstractAsyncTest.java
deleted file mode 100644
index 980b1e9..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/localserver/AbstractAsyncTest.java
+++ /dev/null
@@ -1,146 +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.http.localserver;
-
-import java.net.InetSocketAddress;
-import java.net.URL;
-import java.util.concurrent.TimeUnit;
-
-import javax.net.ssl.SSLContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.ExceptionLogger;
-import org.apache.http.HttpHost;
-import org.apache.http.config.Registry;
-import org.apache.http.config.RegistryBuilder;
-import org.apache.http.conn.ssl.DefaultHostnameVerifier;
-import org.apache.http.impl.nio.bootstrap.HttpServer;
-import org.apache.http.impl.nio.bootstrap.ServerBootstrap;
-import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager;
-import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
-import org.apache.http.impl.nio.reactor.IOReactorConfig;
-import org.apache.http.nio.conn.NoopIOSessionStrategy;
-import org.apache.http.nio.conn.SchemeIOSessionStrategy;
-import org.apache.http.nio.conn.ssl.SSLIOSessionStrategy;
-import org.apache.http.nio.reactor.ListenerEndpoint;
-import org.apache.http.ssl.SSLContextBuilder;
-import org.junit.After;
-import org.junit.Before;
-
-public abstract class AbstractAsyncTest {
-
-    public enum ProtocolScheme { http, https };
-
-    protected final ProtocolScheme scheme;
-
-    protected ServerBootstrap serverBootstrap;
-    protected HttpServer server;
-    protected PoolingNHttpClientConnectionManager connMgr;
-
-    public AbstractAsyncTest(final ProtocolScheme scheme) {
-        this.scheme = scheme;
-    }
-
-    public AbstractAsyncTest() {
-        this(ProtocolScheme.http);
-    }
-
-    public String getSchemeName() {
-        return this.scheme.name();
-    }
-
-    protected SSLContext createServerSSLContext() throws Exception {
-        final URL keyStoreURL = getClass().getResource("/test.keystore");
-        final String storePassword = "nopassword";
-        return SSLContextBuilder.create()
-                .loadTrustMaterial(keyStoreURL, storePassword.toCharArray())
-                .loadKeyMaterial(keyStoreURL, storePassword.toCharArray(), storePassword.toCharArray())
-                .build();
-    }
-
-    protected SSLContext createClientSSLContext() throws Exception {
-        final URL keyStoreURL = getClass().getResource("/test.keystore");
-        final String storePassword = "nopassword";
-        return SSLContextBuilder.create()
-                .loadTrustMaterial(keyStoreURL, storePassword.toCharArray())
-                .build();
-    }
-
-    public HttpHost startServer() throws Exception {
-        this.server = this.serverBootstrap.create();
-        this.server.start();
-
-        final ListenerEndpoint endpoint = this.server.getEndpoint();
-        endpoint.waitFor();
-
-        final InetSocketAddress address = (InetSocketAddress) endpoint.getAddress();
-        return new HttpHost("localhost", address.getPort(), this.scheme.name());
-    }
-
-    @Before
-    public void setUp() throws Exception {
-        this.serverBootstrap = ServerBootstrap.bootstrap();
-        final IOReactorConfig ioReactorConfig = IOReactorConfig.custom()
-                .setSoTimeout(15000)
-                .build();
-        this.serverBootstrap.setServerInfo("TEST/1.1");
-        this.serverBootstrap.setIOReactorConfig(ioReactorConfig);
-        this.serverBootstrap.setExceptionLogger(new ExceptionLogger() {
-
-            private final Log log = LogFactory.getLog(AbstractAsyncTest.class);
-
-            @Override
-            public void log(final Exception ex) {
-                log.error(ex.getMessage(), ex);
-            }
-        });
-        if (this.scheme.equals(ProtocolScheme.https)) {
-            this.serverBootstrap.setSslContext(createServerSSLContext());
-        }
-
-        final RegistryBuilder<SchemeIOSessionStrategy> builder = RegistryBuilder.create();
-        builder.register("http", NoopIOSessionStrategy.INSTANCE);
-        if (this.scheme.equals(ProtocolScheme.https)) {
-            builder.register("https", new SSLIOSessionStrategy(
-                    createClientSSLContext(),
-                    new DefaultHostnameVerifier()));
-        }
-        final Registry<SchemeIOSessionStrategy> registry =  builder.build();
-        final DefaultConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(ioReactorConfig);
-        this.connMgr = new PoolingNHttpClientConnectionManager(ioReactor, registry);
-    }
-
-    @After
-    public void shutDown() throws Exception {
-        if (this.server != null) {
-            this.server.shutdown(10, TimeUnit.SECONDS);
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/localserver/BasicAuthTokenExtractor.java b/httpasyncclient/src/test/java/org/apache/http/localserver/BasicAuthTokenExtractor.java
deleted file mode 100644
index 3bb93c6..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/localserver/BasicAuthTokenExtractor.java
+++ /dev/null
@@ -1,73 +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.http.localserver;
-
-import org.apache.commons.codec.BinaryDecoder;
-import org.apache.commons.codec.DecoderException;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.http.Header;
-import org.apache.http.HttpException;
-import org.apache.http.HttpRequest;
-import org.apache.http.ProtocolException;
-import org.apache.http.auth.AUTH;
-import org.apache.http.util.EncodingUtils;
-
-public class BasicAuthTokenExtractor {
-
-    public String extract(final HttpRequest request) throws HttpException {
-        String auth = null;
-
-        final Header h = request.getFirstHeader(AUTH.WWW_AUTH_RESP);
-        if (h != null) {
-            final String s = h.getValue();
-            if (s != null) {
-                auth = s.trim();
-            }
-        }
-
-        if (auth != null) {
-            final int i = auth.indexOf(' ');
-            if (i == -1) {
-                throw new ProtocolException("Invalid Authorization header: " + auth);
-            }
-            final String authscheme = auth.substring(0, i);
-            if (authscheme.equalsIgnoreCase("basic")) {
-                final String s = auth.substring(i + 1).trim();
-                try {
-                    final byte[] credsRaw = EncodingUtils.getAsciiBytes(s);
-                    final BinaryDecoder codec = new Base64();
-                    auth = EncodingUtils.getAsciiString(codec.decode(credsRaw));
-                } catch (final DecoderException ex) {
-                    throw new ProtocolException("Malformed BASIC credentials");
-                }
-            }
-        }
-        return auth;
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/localserver/EchoHandler.java b/httpasyncclient/src/test/java/org/apache/http/localserver/EchoHandler.java
deleted file mode 100644
index 21b6d54..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/localserver/EchoHandler.java
+++ /dev/null
@@ -1,99 +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.http.localserver;
-
-import java.io.IOException;
-import java.util.Locale;
-
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpEntityEnclosingRequest;
-import org.apache.http.HttpException;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.MethodNotSupportedException;
-import org.apache.http.nio.entity.NByteArrayEntity;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.protocol.HttpRequestHandler;
-import org.apache.http.util.EntityUtils;
-
-/**
- * A handler that echos the incoming request entity.
- */
-public class EchoHandler
-    implements HttpRequestHandler {
-
-    // public default constructor
-
-    /**
-     * Handles a request by echoing the incoming request entity.
-     * If there is no request entity, an empty document is returned.
-     *
-     * @param request   the request
-     * @param response  the response
-     * @param context   the context
-     *
-     * @throws HttpException    in case of a problem
-     * @throws IOException      in case of an IO problem
-     */
-    @Override
-    public void handle(final HttpRequest request,
-                       final HttpResponse response,
-                       final HttpContext context)
-        throws HttpException, IOException {
-
-        final String method = request.getRequestLine().getMethod().toUpperCase(Locale.ROOT);
-        if (!"GET".equals(method) &&
-            !"POST".equals(method) &&
-            !"PUT".equals(method)
-            ) {
-            throw new MethodNotSupportedException
-                (method + " not supported by " + getClass().getName());
-        }
-
-        HttpEntity entity = null;
-        if (request instanceof HttpEntityEnclosingRequest) {
-            entity = ((HttpEntityEnclosingRequest)request).getEntity();
-        }
-
-        // For some reason, just putting the incoming entity into
-        // the response will not work. We have to buffer the message.
-        final byte[] data;
-        if (entity == null) {
-            data = new byte [0];
-        } else {
-            data = EntityUtils.toByteArray(entity);
-        }
-
-        final NByteArrayEntity bae = new NByteArrayEntity(data);
-        if (entity != null) {
-            bae.setContentType(entity.getContentType());
-        }
-        response.setEntity(bae);
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/localserver/HttpAsyncTestBase.java b/httpasyncclient/src/test/java/org/apache/http/localserver/HttpAsyncTestBase.java
deleted file mode 100644
index dd05d98..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/localserver/HttpAsyncTestBase.java
+++ /dev/null
@@ -1,73 +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.http.localserver;
-
-import org.apache.http.HttpHost;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
-import org.junit.After;
-import org.junit.Before;
-
-public abstract class HttpAsyncTestBase extends AbstractAsyncTest{
-
-    protected HttpAsyncClientBuilder clientBuilder;
-    protected CloseableHttpAsyncClient httpclient;
-
-    public HttpAsyncTestBase() {
-        super();
-    }
-
-    public HttpAsyncTestBase(final ProtocolScheme scheme) {
-        super(scheme);
-    }
-
-    public HttpHost start() throws Exception {
-        final HttpHost serverEndpoint = startServer();
-
-        this.httpclient = this.clientBuilder.build();
-        this.httpclient.start();
-
-        return serverEndpoint;
-    }
-
-    @Before @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        this.clientBuilder = HttpAsyncClientBuilder.create();
-        this.clientBuilder.setConnectionManager(this.connMgr);
-    }
-
-    @After  @Override
-    public void shutDown() throws Exception {
-        if (this.httpclient != null) {
-            this.httpclient.close();
-        }
-        super.shutDown();
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/localserver/RandomHandler.java b/httpasyncclient/src/test/java/org/apache/http/localserver/RandomHandler.java
deleted file mode 100644
index 966b500..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/localserver/RandomHandler.java
+++ /dev/null
@@ -1,122 +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.http.localserver;
-
-import java.io.IOException;
-import java.util.Locale;
-
-import org.apache.http.Consts;
-import org.apache.http.HttpException;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.MethodNotSupportedException;
-import org.apache.http.entity.ContentType;
-import org.apache.http.nio.entity.NByteArrayEntity;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.protocol.HttpRequestHandler;
-
-/**
- * A handler that generates random data.
- */
-public class RandomHandler implements HttpRequestHandler {
-
-    private final static byte[] RANGE;
-    static {
-        RANGE = ("abcdefghijklmnopqrstuvwxyz" +
-                "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789"
-        ).getBytes(Consts.ASCII);
-    }
-
-    /**
-     * Handles a request by generating random data.
-     * The length of the response can be specified in the request URI
-     * as a number after the last /. For example /random/whatever/20
-     * will generate 20 random bytes in the printable ASCII range.
-     * If the request URI ends with /, a random number of random bytes
-     * is generated, but at least one.
-     *
-     * @param request   the request
-     * @param response  the response
-     * @param context   the context
-     *
-     * @throws HttpException    in case of a problem
-     * @throws IOException      in case of an IO problem
-     */
-    @Override
-    public void handle(final HttpRequest request,
-                       final HttpResponse response,
-                       final HttpContext context)
-        throws HttpException, IOException {
-
-        final String method = request.getRequestLine().getMethod().toUpperCase(Locale.ROOT);
-        if (!"GET".equals(method) && !"HEAD".equals(method)) {
-            throw new MethodNotSupportedException
-                (method + " not supported by " + getClass().getName());
-        }
-
-        final String uri = request.getRequestLine().getUri();
-        final int  slash = uri.lastIndexOf('/');
-        int length = -1;
-        if (slash < uri.length()-1) {
-            try {
-                // no more than Integer, 2 GB ought to be enough for anybody
-                length = Integer.parseInt(uri.substring(slash+1));
-
-                if (length < 0) {
-                    response.setStatusCode(HttpStatus.SC_BAD_REQUEST);
-                    response.setReasonPhrase("LENGTH " + length);
-                }
-            } catch (final NumberFormatException nfx) {
-                response.setStatusCode(HttpStatus.SC_BAD_REQUEST);
-                response.setReasonPhrase(nfx.toString());
-            }
-        } else {
-            // random length, but make sure at least something is sent
-            length = 1 + (int)(Math.random() * 79.0);
-        }
-
-        if (length >= 0) {
-            final byte[] data = new byte[length];
-            for (int i = 0; i < length; i++) {
-                double value = 0.0;
-                // we get 5 random characters out of one random value
-                if (i%5 == 0) {
-                    value = Math.random();
-                }
-                value = value * RANGE.length;
-                final int d = (int) value;
-                value = value - d;
-                data[i] = RANGE[d];
-            }
-            final NByteArrayEntity bae = new NByteArrayEntity(data, ContentType.DEFAULT_TEXT);
-            response.setEntity(bae);
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/localserver/RequestBasicAuth.java b/httpasyncclient/src/test/java/org/apache/http/localserver/RequestBasicAuth.java
deleted file mode 100644
index 5723bd6..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/localserver/RequestBasicAuth.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.http.localserver;
-
-import java.io.IOException;
-
-import org.apache.http.HttpException;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpRequestInterceptor;
-import org.apache.http.protocol.HttpContext;
-
-public class RequestBasicAuth implements HttpRequestInterceptor {
-
-    private final BasicAuthTokenExtractor authTokenExtractor;
-
-    public RequestBasicAuth() {
-        super();
-        this.authTokenExtractor = new BasicAuthTokenExtractor();
-    }
-
-    @Override
-    public void process(
-            final HttpRequest request,
-            final HttpContext context) throws HttpException, IOException {
-        context.setAttribute("creds", this.authTokenExtractor.extract(request));
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/localserver/ResponseBasicUnauthorized.java b/httpasyncclient/src/test/java/org/apache/http/localserver/ResponseBasicUnauthorized.java
deleted file mode 100644
index a1c58d8..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/localserver/ResponseBasicUnauthorized.java
+++ /dev/null
@@ -1,50 +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.http.localserver;
-
-import java.io.IOException;
-
-import org.apache.http.HttpException;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpResponseInterceptor;
-import org.apache.http.HttpStatus;
-import org.apache.http.auth.AUTH;
-import org.apache.http.protocol.HttpContext;
-
-public class ResponseBasicUnauthorized implements HttpResponseInterceptor {
-
-    @Override
-    public void process(
-            final HttpResponse response,
-            final HttpContext context) throws HttpException, IOException {
-        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_UNAUTHORIZED) {
-            response.addHeader(AUTH.WWW_AUTH, "Basic realm=\"test realm\"");
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestClientAuthentication.java b/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestClientAuthentication.java
deleted file mode 100644
index 774f95f..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestClientAuthentication.java
+++ /dev/null
@@ -1,474 +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.http.nio.client.integration;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-
-import org.apache.http.Consts;
-import org.apache.http.localserver.HttpAsyncTestBase;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpInetConnection;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.HttpVersion;
-import org.apache.http.ProtocolVersion;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.Credentials;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.client.methods.HttpPut;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.apache.http.impl.client.TargetAuthenticationStrategy;
-import org.apache.http.localserver.BasicAuthTokenExtractor;
-import org.apache.http.localserver.RequestBasicAuth;
-import org.apache.http.localserver.ResponseBasicUnauthorized;
-import org.apache.http.message.BasicHeader;
-import org.apache.http.message.BasicHttpResponse;
-import org.apache.http.nio.entity.NByteArrayEntity;
-import org.apache.http.nio.entity.NStringEntity;
-import org.apache.http.nio.protocol.BasicAsyncRequestHandler;
-import org.apache.http.nio.protocol.BasicAsyncResponseProducer;
-import org.apache.http.nio.protocol.HttpAsyncExchange;
-import org.apache.http.nio.protocol.HttpAsyncExpectationVerifier;
-import org.apache.http.protocol.HTTP;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.protocol.HttpCoreContext;
-import org.apache.http.protocol.HttpRequestHandler;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-@RunWith(Parameterized.class)
-public class TestClientAuthentication extends HttpAsyncTestBase {
-
-    @Parameterized.Parameters(name = "{0}")
-    public static Collection<Object[]> protocols() {
-        return Arrays.asList(new Object[][]{
-                {ProtocolScheme.http},
-                {ProtocolScheme.https},
-        });
-    }
-
-    public TestClientAuthentication(final ProtocolScheme scheme) {
-        super(scheme);
-    }
-
-    @Before @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        this.serverBootstrap.addInterceptorFirst(new RequestBasicAuth());
-        this.serverBootstrap.addInterceptorLast(new ResponseBasicUnauthorized());
-    }
-
-    static class AuthHandler implements HttpRequestHandler {
-
-        private final boolean keepAlive;
-
-        AuthHandler(final boolean keepAlive) {
-            super();
-            this.keepAlive = keepAlive;
-        }
-
-        AuthHandler() {
-            this(true);
-        }
-
-        @Override
-        public void handle(
-                final HttpRequest request,
-                final HttpResponse response,
-                final HttpContext context) throws HttpException, IOException {
-            final String creds = (String) context.getAttribute("creds");
-            if (creds == null || !creds.equals("test:test")) {
-                response.setStatusCode(HttpStatus.SC_UNAUTHORIZED);
-            } else {
-                response.setStatusCode(HttpStatus.SC_OK);
-                final NStringEntity entity = new NStringEntity("success", Consts.ASCII);
-                response.setEntity(entity);
-            }
-            response.setHeader(HTTP.CONN_DIRECTIVE,
-                    this.keepAlive ? HTTP.CONN_KEEP_ALIVE : HTTP.CONN_CLOSE);
-        }
-
-    }
-
-    static class TestTargetAuthenticationStrategy extends TargetAuthenticationStrategy {
-
-        private int count;
-
-        public TestTargetAuthenticationStrategy() {
-            super();
-            this.count = 0;
-        }
-
-        @Override
-        public boolean isAuthenticationRequested(
-                final HttpHost authhost,
-                final HttpResponse response,
-                final HttpContext context) {
-            final boolean res = super.isAuthenticationRequested(authhost, response, context);
-            if (res) {
-                synchronized (this) {
-                    this.count++;
-                }
-            }
-            return res;
-        }
-
-        public int getCount() {
-            synchronized (this) {
-                return this.count;
-            }
-        }
-
-    }
-
-    static class AuthExpectationVerifier implements HttpAsyncExpectationVerifier {
-
-        private final BasicAuthTokenExtractor authTokenExtractor;
-
-        public AuthExpectationVerifier() {
-            super();
-            this.authTokenExtractor = new BasicAuthTokenExtractor();
-        }
-
-        @Override
-        public void verify(
-                final HttpAsyncExchange httpexchange,
-                final HttpContext context) throws HttpException, IOException {
-            final HttpRequest request = httpexchange.getRequest();
-            ProtocolVersion ver = request.getRequestLine().getProtocolVersion();
-            if (!ver.lessEquals(HttpVersion.HTTP_1_1)) {
-                ver = HttpVersion.HTTP_1_1;
-            }
-            final String creds = this.authTokenExtractor.extract(request);
-            if (creds == null || !creds.equals("test:test")) {
-                final HttpResponse response = new BasicHttpResponse(ver, HttpStatus.SC_UNAUTHORIZED, "UNAUTHORIZED");
-                httpexchange.submitResponse(new BasicAsyncResponseProducer(response));
-            } else {
-                httpexchange.submitResponse();
-            }
-        }
-
-    }
-
-    static class TestCredentialsProvider implements CredentialsProvider {
-
-        private final Credentials creds;
-        private AuthScope authscope;
-
-        TestCredentialsProvider(final Credentials creds) {
-            super();
-            this.creds = creds;
-        }
-
-        @Override
-        public void clear() {
-        }
-
-        @Override
-        public Credentials getCredentials(final AuthScope authscope) {
-            this.authscope = authscope;
-            return this.creds;
-        }
-
-        @Override
-        public void setCredentials(final AuthScope authscope, final Credentials credentials) {
-        }
-
-        public AuthScope getAuthScope() {
-            return this.authscope;
-        }
-
-    }
-
-    @Test
-    public void testBasicAuthenticationNoCreds() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new AuthHandler()));
-        final HttpHost target = start();
-
-        final TestCredentialsProvider credsProvider = new TestCredentialsProvider(null);
-        final HttpClientContext context = HttpClientContext.create();
-        context.setCredentialsProvider(credsProvider);
-        final HttpGet httpget = new HttpGet("/");
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        Assert.assertEquals(HttpStatus.SC_UNAUTHORIZED, response.getStatusLine().getStatusCode());
-        final AuthScope authscope = credsProvider.getAuthScope();
-        Assert.assertNotNull(authscope);
-        Assert.assertEquals("test realm", authscope.getRealm());
-    }
-
-    @Test
-    public void testBasicAuthenticationFailure() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new AuthHandler()));
-        final HttpHost target = start();
-
-        final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
-                new UsernamePasswordCredentials("test", "all-wrong"));
-        final HttpClientContext context = HttpClientContext.create();
-        context.setCredentialsProvider(credsProvider);
-        final HttpGet httpget = new HttpGet("/");
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        Assert.assertEquals(HttpStatus.SC_UNAUTHORIZED, response.getStatusLine().getStatusCode());
-        final AuthScope authscope = credsProvider.getAuthScope();
-        Assert.assertNotNull(authscope);
-        Assert.assertEquals("test realm", authscope.getRealm());
-    }
-
-    @Test
-    public void testBasicAuthenticationSuccess() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new AuthHandler()));
-        final HttpHost target = start();
-
-        final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
-                new UsernamePasswordCredentials("test", "test"));
-        final HttpClientContext context = HttpClientContext.create();
-        context.setCredentialsProvider(credsProvider);
-        final HttpGet httpget = new HttpGet("/");
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-        final AuthScope authscope = credsProvider.getAuthScope();
-        Assert.assertNotNull(authscope);
-        Assert.assertEquals("test realm", authscope.getRealm());
-    }
-
-    @Test
-    public void testBasicAuthenticationSuccessNonPersistentConnection() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new AuthHandler(false)));
-        final HttpHost target = start();
-
-        final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
-                new UsernamePasswordCredentials("test", "test"));
-        final HttpClientContext context = HttpClientContext.create();
-        context.setCredentialsProvider(credsProvider);
-
-        final HttpGet httpget = new HttpGet("/");
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-        final AuthScope authscope = credsProvider.getAuthScope();
-        Assert.assertNotNull(authscope);
-        Assert.assertEquals("test realm", authscope.getRealm());
-    }
-
-    @Test
-    public void testBasicAuthenticationSuccessWithNonRepeatableExpectContinue() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new AuthHandler()));
-        this.serverBootstrap.setExpectationVerifier(new AuthExpectationVerifier());
-        final HttpHost target = start();
-
-        final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
-                new UsernamePasswordCredentials("test", "test"));
-        final HttpClientContext context = HttpClientContext.create();
-        context.setCredentialsProvider(credsProvider);
-        final HttpPut httpput = new HttpPut("/");
-
-        final NByteArrayEntity entity = new NByteArrayEntity(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }) {
-
-            @Override
-            public boolean isRepeatable() {
-                return false;
-            }
-
-        };
-
-        httpput.setEntity(entity);
-        httpput.setConfig(RequestConfig.custom().setExpectContinueEnabled(true).build());
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpput, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-    }
-
-    @Test(expected=ExecutionException.class)
-    public void testBasicAuthenticationFailureWithNonRepeatableEntityExpectContinueOff() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new AuthHandler()));
-        final HttpHost target = start();
-
-        final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
-                new UsernamePasswordCredentials("test", "test"));
-        final HttpClientContext context = HttpClientContext.create();
-        context.setCredentialsProvider(credsProvider);
-        final HttpPut httpput = new HttpPut("/");
-
-        final NByteArrayEntity requestEntity = new NByteArrayEntity(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }) {
-
-            @Override
-            public boolean isRepeatable() {
-                return false;
-            }
-
-        };
-
-        httpput.setEntity(requestEntity);
-        httpput.setConfig(RequestConfig.custom().setExpectContinueEnabled(false).build());
-
-        try {
-            final Future<HttpResponse> future = this.httpclient.execute(target, httpput, context, null);
-            future.get();
-            Assert.fail("ExecutionException should have been thrown");
-        } catch (final ExecutionException ex) {
-            final Throwable cause = ex.getCause();
-            Assert.assertNotNull(cause);
-            throw ex;
-        }
-    }
-
-    @Test
-    public void testBasicAuthenticationSuccessOnRepeatablePost() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new AuthHandler()));
-        final HttpHost target = start();
-
-        final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
-                new UsernamePasswordCredentials("test", "test"));
-        final HttpClientContext context = HttpClientContext.create();
-        context.setCredentialsProvider(credsProvider);
-        final HttpPost httppost = new HttpPost("/");
-        httppost.setEntity(new NStringEntity("some important stuff", Consts.ISO_8859_1));
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httppost, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-        final AuthScope authscope = credsProvider.getAuthScope();
-        Assert.assertNotNull(authscope);
-        Assert.assertEquals("test realm", authscope.getRealm());
-    }
-
-    @Test
-    public void testBasicAuthenticationCredentialsCaching() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new AuthHandler()));
-        final TestTargetAuthenticationStrategy authStrategy = new TestTargetAuthenticationStrategy();
-        this.clientBuilder.setTargetAuthenticationStrategy(authStrategy);
-        final HttpHost target = start();
-
-        final BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
-        credsProvider.setCredentials(AuthScope.ANY,
-                new UsernamePasswordCredentials("test", "test"));
-        final HttpClientContext context = HttpClientContext.create();
-        context.setCredentialsProvider(credsProvider);
-
-        final HttpGet httpget1 = new HttpGet("/");
-        final Future<HttpResponse> future1 = this.httpclient.execute(target, httpget1, context, null);
-        final HttpResponse response1 = future1.get();
-        Assert.assertNotNull(response1);
-        Assert.assertEquals(HttpStatus.SC_OK, response1.getStatusLine().getStatusCode());
-
-        final HttpGet httpget2 = new HttpGet("/");
-        final Future<HttpResponse> future2 = this.httpclient.execute(target, httpget2, context, null);
-        final HttpResponse response2 = future2.get();
-        Assert.assertNotNull(response2);
-        Assert.assertEquals(HttpStatus.SC_OK, response2.getStatusLine().getStatusCode());
-
-        Assert.assertEquals(1, authStrategy.getCount());
-    }
-
-    @Test
-    public void testAuthenticationUserinfoInRequestSuccess() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new AuthHandler()));
-        final HttpHost target = start();
-
-        final HttpGet httpget = new HttpGet("http://test:test@" +  target.toHostString() + "/");
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        final HttpEntity entity = response.getEntity();
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-        Assert.assertNotNull(entity);
-    }
-
-    @Test
-    public void testAuthenticationUserinfoInRequestFailure() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new AuthHandler()));
-        final HttpHost target = start();
-
-        final HttpGet httpget = new HttpGet("http://test:all-wrong@" +  target.toHostString() + "/");
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        final HttpEntity entity = response.getEntity();
-        Assert.assertEquals(HttpStatus.SC_UNAUTHORIZED, response.getStatusLine().getStatusCode());
-        Assert.assertNotNull(entity);
-    }
-
-    private class RedirectHandler implements HttpRequestHandler {
-
-        public RedirectHandler() {
-            super();
-        }
-
-        @Override
-        public void handle(
-                final HttpRequest request,
-                final HttpResponse response,
-                final HttpContext context) throws HttpException, IOException {
-            final HttpInetConnection conn = (HttpInetConnection) context.getAttribute(HttpCoreContext.HTTP_CONNECTION);
-            final int port = conn.getLocalPort();
-            response.setStatusCode(HttpStatus.SC_MOVED_PERMANENTLY);
-            response.addHeader(new BasicHeader("Location", getSchemeName() + "://test:test@localhost:" + port + "/"));
-        }
-
-    }
-
-    @Test
-    public void testAuthenticationUserinfoInRedirectSuccess() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new AuthHandler()));
-        this.serverBootstrap.registerHandler("/thatway", new BasicAsyncRequestHandler(new RedirectHandler()));
-        final HttpHost target = start();
-
-        final HttpGet httpget = new HttpGet(target.getSchemeName() + "://test:test@" +  target.toHostString() + "/thatway");
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        final HttpEntity entity = response.getEntity();
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-        Assert.assertNotNull(entity);
-    }
-
-}
\ No newline at end of file
diff --git a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestClientAuthenticationFallBack.java b/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestClientAuthenticationFallBack.java
deleted file mode 100644
index d6fcc07..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestClientAuthenticationFallBack.java
+++ /dev/null
@@ -1,155 +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.http.nio.client.integration;
-
-import java.io.IOException;
-import java.util.concurrent.Future;
-
-import org.apache.http.Consts;
-import org.apache.http.localserver.HttpAsyncTestBase;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpResponseInterceptor;
-import org.apache.http.HttpStatus;
-import org.apache.http.auth.AUTH;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.Credentials;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.localserver.RequestBasicAuth;
-import org.apache.http.nio.protocol.BasicAsyncRequestHandler;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.protocol.HttpRequestHandler;
-import org.apache.http.util.EntityUtils;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-public class TestClientAuthenticationFallBack extends HttpAsyncTestBase {
-
-    @Before
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        this.serverBootstrap.addInterceptorFirst(new RequestBasicAuth());
-        this.serverBootstrap.addInterceptorLast(new ResponseBasicUnauthorized());
-    }
-
-    public class ResponseBasicUnauthorized implements HttpResponseInterceptor {
-
-        @Override
-        public void process(
-                final HttpResponse response,
-                final HttpContext context) throws HttpException, IOException {
-            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_UNAUTHORIZED) {
-                response.addHeader(AUTH.WWW_AUTH, "Digest realm=\"test realm\" invalid");
-                response.addHeader(AUTH.WWW_AUTH, "Basic realm=\"test realm\"");
-            }
-        }
-
-    }
-
-    static class AuthHandler implements HttpRequestHandler {
-
-        @Override
-        public void handle(
-                final HttpRequest request,
-                final HttpResponse response,
-                final HttpContext context) throws HttpException, IOException {
-            final String creds = (String) context.getAttribute("creds");
-            if (creds == null || !creds.equals("test:test")) {
-                response.setStatusCode(HttpStatus.SC_UNAUTHORIZED);
-            } else {
-                response.setStatusCode(HttpStatus.SC_OK);
-                final StringEntity entity = new StringEntity("success", Consts.ASCII);
-                response.setEntity(entity);
-            }
-        }
-
-    }
-
-    static class TestCredentialsProvider implements CredentialsProvider {
-
-        private final Credentials creds;
-        private AuthScope authscope;
-
-        TestCredentialsProvider(final Credentials creds) {
-            super();
-            this.creds = creds;
-        }
-
-        @Override
-        public void clear() {
-        }
-
-        @Override
-        public Credentials getCredentials(final AuthScope authscope) {
-            this.authscope = authscope;
-            return this.creds;
-        }
-
-        @Override
-        public void setCredentials(final AuthScope authscope, final Credentials credentials) {
-        }
-
-        public AuthScope getAuthScope() {
-            return this.authscope;
-        }
-
-    }
-
-    @Test
-    public void testBasicAuthenticationSuccess() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new AuthHandler()));
-        final HttpHost target = start();
-
-        final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
-                new UsernamePasswordCredentials("test", "test"));
-        final HttpClientContext context = HttpClientContext.create();
-        context.setCredentialsProvider(credsProvider);
-
-        final HttpGet httpget = new HttpGet("/");
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        final HttpEntity entity = response.getEntity();
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-        Assert.assertNotNull(entity);
-        EntityUtils.consume(entity);
-        final AuthScope authscope = credsProvider.getAuthScope();
-        Assert.assertNotNull(authscope);
-        Assert.assertEquals("test realm", authscope.getRealm());
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestClientReauthentication.java b/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestClientReauthentication.java
deleted file mode 100644
index 40bf2bb..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestClientReauthentication.java
+++ /dev/null
@@ -1,205 +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.http.nio.client.integration;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.concurrent.Future;
-import java.util.concurrent.atomic.AtomicLong;
-
-import org.apache.http.Consts;
-import org.apache.http.localserver.HttpAsyncTestBase;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpResponseInterceptor;
-import org.apache.http.HttpStatus;
-import org.apache.http.auth.AUTH;
-import org.apache.http.auth.AuthScheme;
-import org.apache.http.auth.AuthSchemeProvider;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.Credentials;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.config.Registry;
-import org.apache.http.config.RegistryBuilder;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.auth.BasicScheme;
-import org.apache.http.impl.auth.BasicSchemeFactory;
-import org.apache.http.impl.client.TargetAuthenticationStrategy;
-import org.apache.http.localserver.RequestBasicAuth;
-import org.apache.http.nio.protocol.BasicAsyncRequestHandler;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.protocol.HttpRequestHandler;
-import org.apache.http.util.EntityUtils;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-public class TestClientReauthentication extends HttpAsyncTestBase {
-
-    @Before @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        this.serverBootstrap.addInterceptorFirst(new RequestBasicAuth());
-        this.serverBootstrap.addInterceptorLast(new ResponseBasicUnauthorized());
-    }
-
-    public class ResponseBasicUnauthorized implements HttpResponseInterceptor {
-
-        @Override
-        public void process(
-                final HttpResponse response,
-                final HttpContext context) throws HttpException, IOException {
-            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_UNAUTHORIZED) {
-                response.addHeader(AUTH.WWW_AUTH, "MyBasic realm=\"test realm\"");
-            }
-        }
-
-    }
-
-    static class AuthHandler implements HttpRequestHandler {
-
-        private final AtomicLong count = new AtomicLong(0);
-
-        @Override
-        public void handle(
-                final HttpRequest request,
-                final HttpResponse response,
-                final HttpContext context) throws HttpException, IOException {
-            final String creds = (String) context.getAttribute("creds");
-            if (creds == null || !creds.equals("test:test")) {
-                response.setStatusCode(HttpStatus.SC_UNAUTHORIZED);
-            } else {
-                // Make client re-authenticate on each fourth request
-                if (this.count.incrementAndGet() % 4 == 0) {
-                    response.setStatusCode(HttpStatus.SC_UNAUTHORIZED);
-                } else {
-                    response.setStatusCode(HttpStatus.SC_OK);
-                    final StringEntity entity = new StringEntity("success", Consts.ASCII);
-                    response.setEntity(entity);
-                }
-            }
-        }
-
-    }
-
-    static class TestCredentialsProvider implements CredentialsProvider {
-
-        private final Credentials creds;
-        private AuthScope authscope;
-
-        TestCredentialsProvider(final Credentials creds) {
-            super();
-            this.creds = creds;
-        }
-
-        @Override
-        public void clear() {
-        }
-
-        @Override
-        public Credentials getCredentials(final AuthScope authscope) {
-            this.authscope = authscope;
-            return this.creds;
-        }
-
-        @Override
-        public void setCredentials(final AuthScope authscope, final Credentials credentials) {
-        }
-
-        public AuthScope getAuthScope() {
-            return this.authscope;
-        }
-
-    }
-
-    @Test
-    public void testBasicAuthenticationSuccess() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new AuthHandler()));
-
-        final BasicSchemeFactory myBasicAuthSchemeFactory = new BasicSchemeFactory() {
-
-            @Override
-            public AuthScheme create(final HttpContext context) {
-                return new BasicScheme() {
-                    private static final long serialVersionUID = 1L;
-
-                    @Override
-                    public String getSchemeName() {
-                        return "MyBasic";
-                    }
-
-                };
-            }
-
-        };
-
-        final TargetAuthenticationStrategy myAuthStrategy = new TargetAuthenticationStrategy() {
-
-            @Override
-            protected boolean isCachable(final AuthScheme authScheme) {
-                return "MyBasic".equalsIgnoreCase(authScheme.getSchemeName());
-            }
-
-        };
-
-        final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
-                new UsernamePasswordCredentials("test", "test"));
-
-        final Registry<AuthSchemeProvider> authSchemeRegistry = RegistryBuilder.<AuthSchemeProvider>create()
-            .register("MyBasic", myBasicAuthSchemeFactory)
-            .build();
-        this.clientBuilder.setDefaultAuthSchemeRegistry(authSchemeRegistry);
-        this.clientBuilder.setTargetAuthenticationStrategy(myAuthStrategy);
-        final HttpHost target = start();
-
-        final RequestConfig config = RequestConfig.custom()
-                .setTargetPreferredAuthSchemes(Arrays.asList("MyBasic"))
-                .build();
-        final HttpClientContext context = HttpClientContext.create();
-        context.setCredentialsProvider(credsProvider);
-
-        for (int i = 0; i < 10; i++) {
-            final HttpGet httpget = new HttpGet("/");
-            httpget.setConfig(config);
-            final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-            final HttpResponse response = future.get();
-            Assert.assertNotNull(response);
-            final HttpEntity entity = response.getEntity();
-            Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-            Assert.assertNotNull(entity);
-            EntityUtils.consume(entity);
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestHttpAsync.java b/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestHttpAsync.java
deleted file mode 100644
index 8a9a5d7..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestHttpAsync.java
+++ /dev/null
@@ -1,272 +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.http.nio.client.integration;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.Queue;
-import java.util.Random;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-
-import org.apache.http.localserver.HttpAsyncTestBase;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-import org.apache.http.localserver.EchoHandler;
-import org.apache.http.localserver.RandomHandler;
-import org.apache.http.nio.ContentDecoder;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.client.methods.HttpAsyncMethods;
-import org.apache.http.nio.client.util.HttpAsyncClientUtils;
-import org.apache.http.nio.entity.NByteArrayEntity;
-import org.apache.http.nio.protocol.BasicAsyncRequestHandler;
-import org.apache.http.nio.protocol.BasicAsyncResponseConsumer;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.util.EntityUtils;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-@RunWith(Parameterized.class)
-public class TestHttpAsync extends HttpAsyncTestBase {
-
-    @Parameterized.Parameters(name = "{0}")
-    public static Collection<Object[]> protocols() {
-        return Arrays.asList(new Object[][]{
-                { ProtocolScheme.http },
-                { ProtocolScheme.https },
-        });
-    }
-
-    public TestHttpAsync(final ProtocolScheme scheme) {
-        super(scheme);
-    }
-
-    @Before @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        this.serverBootstrap.registerHandler("/echo/*", new BasicAsyncRequestHandler(new EchoHandler()));
-        this.serverBootstrap.registerHandler("/random/*", new BasicAsyncRequestHandler(new RandomHandler()));
-    }
-
-    @Test
-    public void testSingleGet() throws Exception {
-        final HttpHost target = start();
-        final HttpGet httpget = new HttpGet("/random/2048");
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        Assert.assertEquals(200, response.getStatusLine().getStatusCode());
-    }
-
-    @Test
-    public void testSinglePost() throws Exception {
-        final HttpHost target = start();
-        final byte[] b1 = new byte[1024];
-        final Random rnd = new Random(System.currentTimeMillis());
-        rnd.nextBytes(b1);
-
-        final HttpPost httppost = new HttpPost("/echo/stuff");
-        httppost.setEntity(new NByteArrayEntity(b1));
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httppost, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        Assert.assertEquals(200, response.getStatusLine().getStatusCode());
-        final HttpEntity entity = response.getEntity();
-        Assert.assertNotNull(entity);
-        final byte[] b2 = EntityUtils.toByteArray(entity);
-        Assert.assertArrayEquals(b1, b2);
-    }
-
-    @Test
-    public void testHttpAsyncMethods() throws Exception {
-        final HttpHost target = start();
-        final byte[] b1 = new byte[1024];
-        final Random rnd = new Random(System.currentTimeMillis());
-        rnd.nextBytes(b1);
-
-        final Future<HttpResponse> future = this.httpclient.execute(
-            HttpAsyncMethods.createPost(target + "/echo/post", b1, null),
-            new BasicAsyncResponseConsumer(),
-            null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        Assert.assertEquals(200, response.getStatusLine().getStatusCode());
-        final HttpEntity entity = response.getEntity();
-        Assert.assertNotNull(entity);
-        final byte[] b2 = EntityUtils.toByteArray(entity);
-        Assert.assertArrayEquals(b1, b2);
-    }
-
-    @Test
-    public void testMultiplePostsOverMultipleConnections() throws Exception {
-        final HttpHost target = start();
-        final byte[] b1 = new byte[1024];
-        final Random rnd = new Random(System.currentTimeMillis());
-        rnd.nextBytes(b1);
-
-        final int reqCount = 20;
-
-        this.connMgr.setDefaultMaxPerRoute(reqCount);
-        this.connMgr.setMaxTotal(100);
-
-        final Queue<Future<HttpResponse>> queue = new LinkedList<Future<HttpResponse>>();
-
-        for (int i = 0; i < reqCount; i++) {
-            final HttpPost httppost = new HttpPost("/echo/stuff");
-            httppost.setEntity(new NByteArrayEntity(b1));
-            queue.add(this.httpclient.execute(target, httppost, null));
-        }
-
-        while (!queue.isEmpty()) {
-            final Future<HttpResponse> future = queue.remove();
-            final HttpResponse response = future.get();
-            Assert.assertNotNull(response);
-            Assert.assertEquals(200, response.getStatusLine().getStatusCode());
-            final HttpEntity entity = response.getEntity();
-            Assert.assertNotNull(entity);
-            final byte[] b2 = EntityUtils.toByteArray(entity);
-            Assert.assertArrayEquals(b1, b2);
-        }
-    }
-
-    @Test
-    public void testMultiplePostsOverSingleConnection() throws Exception {
-        final HttpHost target = start();
-        final byte[] b1 = new byte[1024];
-        final Random rnd = new Random(System.currentTimeMillis());
-        rnd.nextBytes(b1);
-
-        final int reqCount = 20;
-
-        this.connMgr.setDefaultMaxPerRoute(1);
-        this.connMgr.setMaxTotal(100);
-
-        final Queue<Future<HttpResponse>> queue = new LinkedList<Future<HttpResponse>>();
-
-        for (int i = 0; i < reqCount; i++) {
-            final HttpPost httppost = new HttpPost("/echo/stuff");
-            httppost.setEntity(new NByteArrayEntity(b1));
-            queue.add(this.httpclient.execute(target, httppost, null));
-        }
-
-        while (!queue.isEmpty()) {
-            final Future<HttpResponse> future = queue.remove();
-            final HttpResponse response = future.get();
-            Assert.assertNotNull(response);
-            Assert.assertEquals(200, response.getStatusLine().getStatusCode());
-            final HttpEntity entity = response.getEntity();
-            Assert.assertNotNull(entity);
-            final byte[] b2 = EntityUtils.toByteArray(entity);
-            Assert.assertArrayEquals(b1, b2);
-        }
-    }
-
-    @Test
-    public void testRequestFailure() throws Exception {
-        final HttpHost target = start();
-        final HttpGet httpget = new HttpGet("/random/2048");
-        final HttpAsyncRequestProducer requestProducer = HttpAsyncMethods.create(target, httpget) ;
-        final BasicAsyncResponseConsumer responseConsumer = new BasicAsyncResponseConsumer() {
-
-            @Override
-            public void onContentReceived(final ContentDecoder decoder, final IOControl ioctrl)
-                    throws IOException {
-                throw new IOException("Kaboom");
-            }
-
-        };
-        final Future<HttpResponse> future = this.httpclient.execute(requestProducer, responseConsumer, null);
-        try {
-            future.get();
-            Assert.fail("ExecutionException expected");
-        } catch (final ExecutionException ex) {
-            final Throwable t = ex.getCause();
-            Assert.assertNotNull(t);
-            Assert.assertTrue(t instanceof IOException);
-            Assert.assertEquals("Kaboom", t.getMessage());
-        }
-    }
-
-    @Test
-    public void testSharedPool() throws Exception {
-        final HttpHost target = start();
-        final HttpGet httpget = new HttpGet("/random/2048");
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        Assert.assertEquals(200, response.getStatusLine().getStatusCode());
-
-
-        final CloseableHttpAsyncClient httpclient2 = HttpAsyncClients.custom()
-                .setConnectionManager(this.connMgr)
-                .setConnectionManagerShared(true)
-                .build();
-        try {
-            httpclient2.start();
-            final HttpGet httpget2 = new HttpGet("/random/2048");
-            final Future<HttpResponse> future2 = httpclient2.execute(target, httpget2, null);
-            final HttpResponse response2 = future2.get();
-            Assert.assertNotNull(response2);
-            Assert.assertEquals(200, response2.getStatusLine().getStatusCode());
-
-        } finally {
-            httpclient2.close();
-        }
-
-        final HttpGet httpget3 = new HttpGet("/random/2048");
-        final Future<HttpResponse> future3 = this.httpclient.execute(target, httpget3, null);
-        final HttpResponse response3 = future3.get();
-        Assert.assertNotNull(response3);
-        Assert.assertEquals(200, response3.getStatusLine().getStatusCode());
-    }
-
-    @Test
-    public void testClientCloseloseQuietly() throws Exception {
-        final HttpHost target = start();
-        final HttpGet httpget = new HttpGet("/random/2048");
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        Assert.assertEquals(200, response.getStatusLine().getStatusCode());
-
-        HttpAsyncClientUtils.closeQuietly(this.httpclient);
-        // Close it twice
-        HttpAsyncClientUtils.closeQuietly(this.httpclient);
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestHttpAsyncMinimal.java b/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestHttpAsyncMinimal.java
deleted file mode 100644
index 3993d10..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestHttpAsyncMinimal.java
+++ /dev/null
@@ -1,192 +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.http.nio.client.integration;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.Queue;
-import java.util.Random;
-import java.util.concurrent.Future;
-
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-import org.apache.http.localserver.AbstractAsyncTest;
-import org.apache.http.localserver.EchoHandler;
-import org.apache.http.localserver.RandomHandler;
-import org.apache.http.nio.entity.NByteArrayEntity;
-import org.apache.http.nio.protocol.BasicAsyncRequestHandler;
-import org.apache.http.util.EntityUtils;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-@RunWith(Parameterized.class)
-public class TestHttpAsyncMinimal extends AbstractAsyncTest {
-
-    @Parameterized.Parameters(name = "{0}")
-    public static Collection<Object[]> protocols() {
-        return Arrays.asList(new Object[][]{
-                {ProtocolScheme.http},
-                {ProtocolScheme.https},
-        });
-    }
-
-    protected CloseableHttpAsyncClient httpclient;
-
-    public TestHttpAsyncMinimal(final ProtocolScheme scheme) {
-        super(scheme);
-    }
-
-    @Before @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        this.serverBootstrap.registerHandler("/echo/*", new BasicAsyncRequestHandler(new EchoHandler()));
-        this.serverBootstrap.registerHandler("/random/*", new BasicAsyncRequestHandler(new RandomHandler()));
-
-        this.httpclient = HttpAsyncClients.createMinimal(this.connMgr);
-    }
-
-    @After @Override
-    public void shutDown() throws Exception {
-        if (this.httpclient != null) {
-            this.httpclient.close();
-        }
-        super.shutDown();
-    }
-
-    public HttpHost start() throws Exception {
-        final HttpHost serverEndpoint = startServer();
-
-        this.httpclient.start();
-
-        return serverEndpoint;
-    }
-
-    @Test
-    public void testSingleGet() throws Exception {
-        final HttpHost target = start();
-        final HttpGet httpget = new HttpGet("/random/2048");
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        Assert.assertEquals(200, response.getStatusLine().getStatusCode());
-    }
-
-    @Test
-    public void testSinglePost() throws Exception {
-        final HttpHost target = start();
-        final byte[] b1 = new byte[1024];
-        final Random rnd = new Random(System.currentTimeMillis());
-        rnd.nextBytes(b1);
-
-        final HttpPost httppost = new HttpPost("/echo/stuff");
-        httppost.setEntity(new NByteArrayEntity(b1));
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httppost, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-        Assert.assertEquals(200, response.getStatusLine().getStatusCode());
-        final HttpEntity entity = response.getEntity();
-        Assert.assertNotNull(entity);
-        final byte[] b2 = EntityUtils.toByteArray(entity);
-        Assert.assertArrayEquals(b1, b2);
-    }
-
-    @Test
-    public void testMultiplePostsOverMultipleConnections() throws Exception {
-        final HttpHost target = start();
-        final byte[] b1 = new byte[1024];
-        final Random rnd = new Random(System.currentTimeMillis());
-        rnd.nextBytes(b1);
-
-        final int reqCount = 20;
-
-        this.connMgr.setDefaultMaxPerRoute(reqCount);
-        this.connMgr.setMaxTotal(100);
-
-        final Queue<Future<HttpResponse>> queue = new LinkedList<Future<HttpResponse>>();
-
-        for (int i = 0; i < reqCount; i++) {
-            final HttpPost httppost = new HttpPost("/echo/stuff");
-            httppost.setEntity(new NByteArrayEntity(b1));
-            queue.add(this.httpclient.execute(target, httppost, null));
-        }
-
-        while (!queue.isEmpty()) {
-            final Future<HttpResponse> future = queue.remove();
-            final HttpResponse response = future.get();
-            Assert.assertNotNull(response);
-            Assert.assertEquals(200, response.getStatusLine().getStatusCode());
-            final HttpEntity entity = response.getEntity();
-            Assert.assertNotNull(entity);
-            final byte[] b2 = EntityUtils.toByteArray(entity);
-            Assert.assertArrayEquals(b1, b2);
-        }
-    }
-
-    @Test
-    public void testMultiplePostsOverSingleConnection() throws Exception {
-        final HttpHost target = start();
-        final byte[] b1 = new byte[1024];
-        final Random rnd = new Random(System.currentTimeMillis());
-        rnd.nextBytes(b1);
-
-        final int reqCount = 20;
-
-        this.connMgr.setDefaultMaxPerRoute(1);
-        this.connMgr.setMaxTotal(100);
-
-        final Queue<Future<HttpResponse>> queue = new LinkedList<Future<HttpResponse>>();
-
-        for (int i = 0; i < reqCount; i++) {
-            final HttpPost httppost = new HttpPost("/echo/stuff");
-            httppost.setEntity(new NByteArrayEntity(b1));
-            queue.add(this.httpclient.execute(target, httppost, null));
-        }
-
-        while (!queue.isEmpty()) {
-            final Future<HttpResponse> future = queue.remove();
-            final HttpResponse response = future.get();
-            Assert.assertNotNull(response);
-            Assert.assertEquals(200, response.getStatusLine().getStatusCode());
-            final HttpEntity entity = response.getEntity();
-            Assert.assertNotNull(entity);
-            final byte[] b2 = EntityUtils.toByteArray(entity);
-            Assert.assertArrayEquals(b1, b2);
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestHttpAsyncPipelining.java b/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestHttpAsyncPipelining.java
deleted file mode 100644
index 04d80b2..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestHttpAsyncPipelining.java
+++ /dev/null
@@ -1,230 +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.http.nio.client.integration;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Queue;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-
-import org.apache.http.ConnectionClosedException;
-import org.apache.http.HttpEntityEnclosingRequest;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.nio.client.CloseableHttpPipeliningClient;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-import org.apache.http.localserver.AbstractAsyncTest;
-import org.apache.http.localserver.EchoHandler;
-import org.apache.http.localserver.RandomHandler;
-import org.apache.http.nio.client.methods.HttpAsyncMethods;
-import org.apache.http.nio.protocol.BasicAsyncRequestHandler;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.util.EntityUtils;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-@RunWith(Parameterized.class)
-public class TestHttpAsyncPipelining extends AbstractAsyncTest {
-
-    @Parameterized.Parameters(name = "{0}")
-    public static Collection<Object[]> protocols() {
-        return Arrays.asList(new Object[][]{
-                {ProtocolScheme.http},
-                {ProtocolScheme.https},
-        });
-    }
-
-    protected CloseableHttpPipeliningClient httpclient;
-
-    public TestHttpAsyncPipelining(final ProtocolScheme scheme) {
-        super(scheme);
-    }
-
-    @Before @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        this.serverBootstrap.registerHandler("/echo/*", new BasicAsyncRequestHandler(new EchoHandler()));
-        this.serverBootstrap.registerHandler("/random/*", new BasicAsyncRequestHandler(new RandomHandler()));
-
-        this.httpclient = HttpAsyncClients.createPipelining(this.connMgr);
-    }
-
-    @After @Override
-    public void shutDown() throws Exception {
-        if (this.httpclient != null) {
-            this.httpclient.close();
-        }
-        super.shutDown();
-    }
-
-    public HttpHost start() throws Exception {
-        final HttpHost serverEndpoint = startServer();
-
-        this.connMgr.setDefaultMaxPerRoute(1);
-        this.httpclient.start();
-
-        return serverEndpoint;
-    }
-
-    @Test
-    public void testPipelinedGets() throws Exception {
-        final HttpHost target = start();
-
-        final Queue<Future<List<HttpResponse>>> queue = new ConcurrentLinkedQueue<Future<List<HttpResponse>>>();
-        for (int i = 0; i < 10; i++) {
-            final HttpRequest httpget1 = new HttpGet("/random/512");
-            final HttpRequest httpget2 = new HttpGet("/random/1024");
-            final HttpRequest httpget3 = new HttpGet("/random/2048");
-            queue.add(this.httpclient.execute(target, Arrays.asList(httpget1, httpget2, httpget3), null));
-        }
-
-        while (!queue.isEmpty()) {
-            final Future<List<HttpResponse>> future = queue.remove();
-            final List<HttpResponse> responses = future.get();
-            Assert.assertNotNull(responses);
-            Assert.assertEquals(3, responses.size());
-            final HttpResponse response1 = responses.get(0);
-            Assert.assertEquals(200, response1.getStatusLine().getStatusCode());
-            final byte[] bytes1 = EntityUtils.toByteArray(response1.getEntity());
-            Assert.assertNotNull(bytes1);
-            Assert.assertEquals(512, bytes1.length);
-            final HttpResponse response2 = responses.get(1);
-            Assert.assertEquals(200, response2.getStatusLine().getStatusCode());
-            final byte[] bytes2 = EntityUtils.toByteArray(response2.getEntity());
-            Assert.assertNotNull(bytes2);
-            Assert.assertEquals(1024, bytes2.length);
-            final HttpResponse response3 = responses.get(2);
-            Assert.assertEquals(200, response3.getStatusLine().getStatusCode());
-            final byte[] bytes3 = EntityUtils.toByteArray(response3.getEntity());
-            Assert.assertNotNull(bytes3);
-            Assert.assertEquals(2048, bytes3.length);
-        }
-
-    }
-
-    @Test
-    public void testPipelinedPostsAndGets() throws Exception {
-        final HttpHost target = start();
-
-        final Queue<Future<List<HttpResponse>>> queue = new ConcurrentLinkedQueue<Future<List<HttpResponse>>>();
-        for (int i = 0; i < 10; i++) {
-            final HttpEntityEnclosingRequest httppost1 = new HttpPost("/echo/");
-            httppost1.setEntity(new StringEntity("this and that"));
-            final HttpRequest httpget2 = new HttpGet("/echo/");
-            final HttpEntityEnclosingRequest httppost3 = new HttpPost("/echo/");
-            httppost3.setEntity(new StringEntity("all sorts of things"));
-            queue.add(this.httpclient.execute(target, Arrays.asList(httppost1, httpget2, httppost3), null));
-        }
-
-        while (!queue.isEmpty()) {
-            final Future<List<HttpResponse>> future = queue.remove();
-            final List<HttpResponse> responses = future.get();
-            Assert.assertNotNull(responses);
-            Assert.assertEquals(3, responses.size());
-            final HttpResponse response1 = responses.get(0);
-            Assert.assertEquals(200, response1.getStatusLine().getStatusCode());
-            final String s1 = EntityUtils.toString(response1.getEntity());
-            Assert.assertNotNull(s1);
-            Assert.assertEquals("this and that", s1);
-            final HttpResponse response2 = responses.get(1);
-            Assert.assertEquals(200, response2.getStatusLine().getStatusCode());
-            final String s2 = EntityUtils.toString(response2.getEntity());
-            Assert.assertNotNull(s2);
-            Assert.assertEquals("", s2);
-            final HttpResponse response3 = responses.get(2);
-            Assert.assertEquals(200, response3.getStatusLine().getStatusCode());
-            final String s3 = EntityUtils.toString(response3.getEntity());
-            Assert.assertNotNull(s3);
-            Assert.assertEquals("all sorts of things", s3);
-        }
-
-    }
-
-    @Test @Ignore(value = "Fails on Windows")
-    public void testPipelinedRequestsUnexpectedConnectionClosure() throws Exception {
-        final HttpHost target = start();
-
-        for (int i = 0; i < 20; i++) {
-            final HttpAsyncRequestProducer p1 = HttpAsyncMethods.create(target, new HttpGet("/random/512"));
-            final HttpAsyncRequestProducer p2 = HttpAsyncMethods.create(target, new HttpGet("/pampa"));
-            final HttpAsyncRequestProducer p3 = HttpAsyncMethods.create(target, new HttpGet("/random/512"));
-            final HttpAsyncRequestProducer p4 = HttpAsyncMethods.create(target, new HttpGet("/random/512"));
-            final List<HttpAsyncRequestProducer> requestProducers = new ArrayList<HttpAsyncRequestProducer>();
-            requestProducers.add(p1);
-            requestProducers.add(p2);
-            requestProducers.add(p3);
-            requestProducers.add(p4);
-
-            final HttpAsyncResponseConsumer<HttpResponse> c1 = HttpAsyncMethods.createConsumer();
-            final HttpAsyncResponseConsumer<HttpResponse> c2 = HttpAsyncMethods.createConsumer();
-            final HttpAsyncResponseConsumer<HttpResponse> c3 = HttpAsyncMethods.createConsumer();
-            final HttpAsyncResponseConsumer<HttpResponse> c4 = HttpAsyncMethods.createConsumer();
-            final List<HttpAsyncResponseConsumer<HttpResponse>> responseConsumers = new ArrayList<HttpAsyncResponseConsumer<HttpResponse>>();
-            responseConsumers.add(c1);
-            responseConsumers.add(c2);
-            responseConsumers.add(c3);
-            responseConsumers.add(c4);
-
-            final Future<List<HttpResponse>> future = this.httpclient.execute(
-                    target,
-                    requestProducers,
-                    responseConsumers,
-                    null, null);
-            try {
-                future.get();
-            } catch (final ExecutionException ex) {
-                final Throwable cause = ex.getCause();
-                Assert.assertNotNull(cause);
-                Assert.assertTrue(cause instanceof ConnectionClosedException);
-            }
-            Assert.assertTrue(c1.isDone());
-            Assert.assertNotNull(c1.getResult());
-            Assert.assertTrue(c2.isDone());
-            Assert.assertNotNull(c2.getResult());
-            Assert.assertTrue(c3.isDone());
-            Assert.assertNull(c3.getResult());
-            Assert.assertTrue(c4.isDone());
-            Assert.assertNull(c4.getResult());
-        }
-
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestHttpAsyncPrematureTermination.java b/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestHttpAsyncPrematureTermination.java
deleted file mode 100644
index 1977e27..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestHttpAsyncPrematureTermination.java
+++ /dev/null
@@ -1,395 +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.http.nio.client.integration;
-
-import java.io.IOException;
-import java.net.UnknownHostException;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.http.HttpConnection;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.concurrent.FutureCallback;
-import org.apache.http.entity.ContentType;
-import org.apache.http.impl.nio.client.HttpAsyncClients;
-import org.apache.http.localserver.EchoHandler;
-import org.apache.http.localserver.HttpAsyncTestBase;
-import org.apache.http.localserver.RandomHandler;
-import org.apache.http.nio.ContentDecoder;
-import org.apache.http.nio.ContentEncoder;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.client.methods.HttpAsyncMethods;
-import org.apache.http.nio.entity.NStringEntity;
-import org.apache.http.nio.protocol.BasicAsyncRequestConsumer;
-import org.apache.http.nio.protocol.BasicAsyncRequestHandler;
-import org.apache.http.nio.protocol.BasicAsyncRequestProducer;
-import org.apache.http.nio.protocol.BasicAsyncResponseProducer;
-import org.apache.http.nio.protocol.HttpAsyncExchange;
-import org.apache.http.nio.protocol.HttpAsyncRequestConsumer;
-import org.apache.http.nio.protocol.HttpAsyncRequestHandler;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.protocol.HttpCoreContext;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class TestHttpAsyncPrematureTermination extends HttpAsyncTestBase {
-
-    @Test
-    public void testConnectionTerminatedProcessingRequest() throws Exception {
-        this.serverBootstrap.registerHandler("*", new HttpAsyncRequestHandler<HttpRequest>() {
-
-            @Override
-            public HttpAsyncRequestConsumer<HttpRequest> processRequest(
-                    final HttpRequest request,
-                    final HttpContext context) throws HttpException, IOException {
-                final HttpConnection conn = (HttpConnection) context.getAttribute(
-                        HttpCoreContext.HTTP_CONNECTION);
-                conn.shutdown();
-                return new BasicAsyncRequestConsumer();
-            }
-
-            @Override
-            public void handle(
-                    final HttpRequest request,
-                    final HttpAsyncExchange httpExchange,
-                    final HttpContext context) throws HttpException, IOException {
-                final HttpResponse response = httpExchange.getResponse();
-                response.setEntity(new NStringEntity("all is well", ContentType.TEXT_PLAIN));
-                httpExchange.submitResponse();
-            }
-
-        });
-
-        final HttpHost target = start();
-        final HttpGet httpget = new HttpGet("/");
-
-        final CountDownLatch latch = new CountDownLatch(1);
-
-        final FutureCallback<HttpResponse> callback = new FutureCallback<HttpResponse>() {
-
-            @Override
-            public void cancelled() {
-                latch.countDown();
-            }
-
-            @Override
-            public void failed(final Exception ex) {
-                latch.countDown();
-            }
-
-            @Override
-            public void completed(final HttpResponse response) {
-                Assert.fail();
-            }
-
-        };
-
-        this.httpclient.execute(target, httpget, callback);
-        Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
-    }
-
-    @Test
-    public void testConnectionTerminatedHandlingRequest() throws Exception {
-        this.serverBootstrap.registerHandler("*", new HttpAsyncRequestHandler<HttpRequest>() {
-
-            @Override
-            public HttpAsyncRequestConsumer<HttpRequest> processRequest(
-                    final HttpRequest request,
-                    final HttpContext context) throws HttpException, IOException {
-                return new BasicAsyncRequestConsumer();
-            }
-
-            @Override
-            public void handle(
-                    final HttpRequest request,
-                    final HttpAsyncExchange httpExchange,
-                    final HttpContext context) throws HttpException, IOException {
-                final HttpConnection conn = (HttpConnection) context.getAttribute(
-                        HttpCoreContext.HTTP_CONNECTION);
-                conn.shutdown();
-                final HttpResponse response = httpExchange.getResponse();
-                response.setEntity(new NStringEntity("all is well", ContentType.TEXT_PLAIN));
-                httpExchange.submitResponse();
-            }
-
-        });
-
-        final HttpHost target = start();
-        final HttpGet httpget = new HttpGet("/");
-
-        final CountDownLatch latch = new CountDownLatch(1);
-
-        final FutureCallback<HttpResponse> callback = new FutureCallback<HttpResponse>() {
-
-            @Override
-            public void cancelled() {
-                latch.countDown();
-            }
-
-            @Override
-            public void failed(final Exception ex) {
-                latch.countDown();
-            }
-
-            @Override
-            public void completed(final HttpResponse response) {
-                Assert.fail();
-            }
-
-        };
-
-        this.httpclient.execute(target, httpget, callback);
-        Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
-    }
-
-    @Test
-    public void testConnectionTerminatedSendingResponse() throws Exception {
-        this.serverBootstrap.registerHandler("*", new HttpAsyncRequestHandler<HttpRequest>() {
-
-            @Override
-            public HttpAsyncRequestConsumer<HttpRequest> processRequest(
-                    final HttpRequest request,
-                    final HttpContext context) throws HttpException, IOException {
-                return new BasicAsyncRequestConsumer();
-            }
-
-            @Override
-            public void handle(
-                    final HttpRequest request,
-                    final HttpAsyncExchange httpExchange,
-                    final HttpContext context) throws HttpException, IOException {
-                final HttpResponse response = httpExchange.getResponse();
-                response.setEntity(new NStringEntity("all is well", ContentType.TEXT_PLAIN));
-                httpExchange.submitResponse(new BasicAsyncResponseProducer(response) {
-
-                    @Override
-                    public synchronized void produceContent(
-                            final ContentEncoder encoder,
-                            final IOControl ioctrl) throws IOException {
-                        ioctrl.shutdown();
-                    }
-
-                });
-            }
-
-        });
-
-        final HttpHost target = start();
-        final HttpGet httpget = new HttpGet("/");
-
-        final CountDownLatch latch = new CountDownLatch(1);
-
-        final FutureCallback<HttpResponse> callback = new FutureCallback<HttpResponse>() {
-
-            @Override
-            public void cancelled() {
-                latch.countDown();
-            }
-
-            @Override
-            public void failed(final Exception ex) {
-                latch.countDown();
-            }
-
-            @Override
-            public void completed(final HttpResponse response) {
-                Assert.fail();
-            }
-
-        };
-
-        this.httpclient.execute(target, httpget, callback);
-        Assert.assertTrue(latch.await(5, TimeUnit.SECONDS));
-    }
-
-    @Test
-    public void testConnectionRequestFailure() throws Exception {
-        this.httpclient = HttpAsyncClients.custom()
-                .setConnectionManager(this.connMgr)
-                .build();
-        this.httpclient.start();
-
-        final HttpGet get = new HttpGet("http://stuff.invalid/");
-        final HttpAsyncRequestProducer producer = HttpAsyncMethods.create(get);
-
-        final AtomicBoolean closed = new AtomicBoolean(false);
-        final AtomicBoolean cancelled = new AtomicBoolean(false);
-        final AtomicBoolean failed = new AtomicBoolean(false);
-
-        final HttpAsyncResponseConsumer<?> consumer = new HttpAsyncResponseConsumer<Object>() {
-
-            @Override
-            public void close() throws IOException {
-                closed.set(true);
-            }
-
-            @Override
-            public boolean cancel() {
-                cancelled.set(true);
-                return false;
-            }
-
-            @Override
-            public void failed(final Exception ex) {
-                failed.set(true);
-            }
-
-            @Override
-            public void responseReceived(
-                    final HttpResponse response) throws IOException, HttpException {
-                throw new IllegalStateException();
-            }
-
-            @Override
-            public void consumeContent(
-                    final ContentDecoder decoder, final IOControl ioctrl) throws IOException {
-                throw new IllegalStateException();
-            }
-
-            @Override
-            public void responseCompleted(final HttpContext context) {
-                throw new IllegalStateException();
-            }
-
-            @Override
-            public Exception getException() {
-                return null;
-            }
-
-            @Override
-            public String getResult() {
-                return null;
-            }
-
-            @Override
-            public boolean isDone() {
-                return false;
-            }
-        };
-
-        final Future<?> future = this.httpclient.execute(producer, consumer, null, null);
-        try {
-            future.get();
-            Assert.fail();
-        } catch (final ExecutionException e) {
-            Assert.assertTrue(e.toString(), e.getCause() instanceof UnknownHostException);
-        }
-        this.connMgr.shutdown(1000);
-
-        Assert.assertTrue(closed.get());
-        Assert.assertFalse(cancelled.get());
-        Assert.assertTrue(failed.get());
-    }
-
-    @Test
-    public void testConsumerIsDone() throws Exception {
-        this.serverBootstrap.registerHandler("/echo/*", new BasicAsyncRequestHandler(new EchoHandler()));
-        this.serverBootstrap.registerHandler("/random/*", new BasicAsyncRequestHandler(new RandomHandler()));
-
-        final HttpHost target = start();
-
-        final AtomicInteger producerClosed = new AtomicInteger(0);
-        final AtomicInteger consumerClosed = new AtomicInteger(0);
-
-        final HttpAsyncRequestProducer producer = new BasicAsyncRequestProducer(target, new HttpGet("/")) {
-
-            @Override
-            public synchronized void close() throws IOException {
-                producerClosed.incrementAndGet();
-                super.close();
-            }
-        };
-
-        final HttpAsyncResponseConsumer<?> consumer = new HttpAsyncResponseConsumer<Object>() {
-
-            @Override
-            public void close() throws IOException {
-                consumerClosed.incrementAndGet();
-            }
-
-            @Override
-            public boolean cancel() {
-                return false;
-            }
-
-            @Override
-            public void failed(final Exception ex) {
-            }
-
-            @Override
-            public void responseReceived(
-                    final HttpResponse response) throws IOException, HttpException {
-            }
-
-            @Override
-            public void consumeContent(
-                    final ContentDecoder decoder, final IOControl ioctrl) throws IOException {
-            }
-
-            @Override
-            public void responseCompleted(final HttpContext context) {
-            }
-
-            @Override
-            public Exception getException() {
-                return null;
-            }
-
-            @Override
-            public String getResult() {
-                return null;
-            }
-
-            @Override
-            public boolean isDone() {
-                return true; // cancels fetching the response-body
-            }
-        };
-
-        final Future<?> future = this.httpclient.execute(producer, consumer, null, null);
-        future.get();
-
-        connMgr.shutdown(1000);
-
-        Assert.assertTrue(future.isCancelled());
-        Assert.assertTrue(future.isCancelled());
-
-        Assert.assertEquals(1, producerClosed.get());
-        Assert.assertEquals(1, consumerClosed.get());
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestRedirects.java b/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestRedirects.java
deleted file mode 100644
index 75341d4..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestRedirects.java
+++ /dev/null
@@ -1,856 +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.http.nio.client.integration;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Queue;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.http.Header;
-import org.apache.http.localserver.HttpAsyncTestBase;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpInetConnection;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.ProtocolException;
-import org.apache.http.ProtocolVersion;
-import org.apache.http.client.CircularRedirectException;
-import org.apache.http.client.CookieStore;
-import org.apache.http.client.RedirectException;
-import org.apache.http.client.config.RequestConfig;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.client.utils.URIBuilder;
-import org.apache.http.cookie.SM;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.BasicCookieStore;
-import org.apache.http.impl.cookie.BasicClientCookie;
-import org.apache.http.impl.nio.bootstrap.HttpServer;
-import org.apache.http.localserver.RandomHandler;
-import org.apache.http.message.BasicHeader;
-import org.apache.http.nio.entity.NStringEntity;
-import org.apache.http.nio.protocol.BasicAsyncRequestHandler;
-import org.apache.http.nio.reactor.ListenerEndpoint;
-import org.apache.http.protocol.HTTP;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.protocol.HttpCoreContext;
-import org.apache.http.protocol.HttpRequestHandler;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-
-/**
- * Redirection test cases.
- */
-@RunWith(Parameterized.class)
-public class TestRedirects extends HttpAsyncTestBase {
-
-    @Parameterized.Parameters(name = "{0}")
-    public static Collection<Object[]> protocols() {
-        return Arrays.asList(new Object[][]{
-                {ProtocolScheme.http},
-                {ProtocolScheme.https},
-        });
-    }
-
-    public TestRedirects(final ProtocolScheme scheme) {
-        super(scheme);
-    }
-
-    static class BasicRedirectService implements HttpRequestHandler {
-
-        private final String schemeName;
-        private final int statuscode;
-
-        public BasicRedirectService(final String schemeName, final int statuscode) {
-            super();
-            this.schemeName = schemeName;
-            this.statuscode = statuscode;
-        }
-
-        @Override
-        public void handle(
-                final HttpRequest request,
-                final HttpResponse response,
-                final HttpContext context) throws HttpException, IOException {
-            final HttpInetConnection conn = (HttpInetConnection) context.getAttribute(
-                    HttpCoreContext.HTTP_CONNECTION);
-            final ProtocolVersion ver = request.getRequestLine().getProtocolVersion();
-            final String uri = request.getRequestLine().getUri();
-            if (uri.equals("/oldlocation/")) {
-                final String redirectUrl = this.schemeName + "://localhost:" + conn.getLocalPort() + "/newlocation/";
-                response.setStatusLine(ver, this.statuscode);
-                response.addHeader(new BasicHeader("Location", redirectUrl));
-                response.addHeader(new BasicHeader("Connection", "close"));
-            } else if (uri.equals("/newlocation/")) {
-                response.setStatusLine(ver, HttpStatus.SC_OK);
-                final StringEntity entity = new StringEntity("Successful redirect");
-                response.setEntity(entity);
-            } else {
-                response.setStatusLine(ver, HttpStatus.SC_NOT_FOUND);
-            }
-        }
-    }
-
-    static class CircularRedirectService implements HttpRequestHandler {
-
-        public CircularRedirectService() {
-            super();
-        }
-
-        @Override
-        public void handle(
-                final HttpRequest request,
-                final HttpResponse response,
-                final HttpContext context) throws HttpException, IOException {
-            final ProtocolVersion ver = request.getRequestLine().getProtocolVersion();
-            final String uri = request.getRequestLine().getUri();
-            if (uri.startsWith("/circular-oldlocation")) {
-                response.setStatusLine(ver, HttpStatus.SC_MOVED_TEMPORARILY);
-                response.addHeader(new BasicHeader("Location", "/circular-location2"));
-            } else if (uri.startsWith("/circular-location2")) {
-                response.setStatusLine(ver, HttpStatus.SC_MOVED_TEMPORARILY);
-                response.addHeader(new BasicHeader("Location", "/circular-oldlocation"));
-            } else {
-                response.setStatusLine(ver, HttpStatus.SC_NOT_FOUND);
-            }
-        }
-    }
-
-    static class RelativeRedirectService implements HttpRequestHandler {
-
-        public RelativeRedirectService() {
-            super();
-        }
-
-        @Override
-        public void handle(
-                final HttpRequest request,
-                final HttpResponse response,
-                final HttpContext context) throws HttpException, IOException {
-            final ProtocolVersion ver = request.getRequestLine().getProtocolVersion();
-            final String uri = request.getRequestLine().getUri();
-            if (uri.equals("/oldlocation/")) {
-                response.setStatusLine(ver, HttpStatus.SC_MOVED_TEMPORARILY);
-                response.addHeader(new BasicHeader("Location", "/relativelocation/"));
-            } else if (uri.equals("/relativelocation/")) {
-                response.setStatusLine(ver, HttpStatus.SC_OK);
-                final StringEntity entity = new StringEntity("Successful redirect");
-                response.setEntity(entity);
-            } else {
-                response.setStatusLine(ver, HttpStatus.SC_NOT_FOUND);
-            }
-        }
-    }
-
-    static class RelativeRedirectService2 implements HttpRequestHandler {
-
-        public RelativeRedirectService2() {
-            super();
-        }
-
-        @Override
-        public void handle(
-                final HttpRequest request,
-                final HttpResponse response,
-                final HttpContext context) throws HttpException, IOException {
-            final ProtocolVersion ver = request.getRequestLine().getProtocolVersion();
-            final String uri = request.getRequestLine().getUri();
-            if (uri.equals("/test/oldlocation")) {
-                response.setStatusLine(ver, HttpStatus.SC_MOVED_TEMPORARILY);
-                response.addHeader(new BasicHeader("Location", "relativelocation"));
-            } else if (uri.equals("/test/relativelocation")) {
-                response.setStatusLine(ver, HttpStatus.SC_OK);
-                final StringEntity entity = new StringEntity("Successful redirect");
-                response.setEntity(entity);
-            } else {
-                response.setStatusLine(ver, HttpStatus.SC_NOT_FOUND);
-            }
-        }
-    }
-
-    static class BogusRedirectService implements HttpRequestHandler {
-
-        private final String schemeName;
-        private final String url;
-        private final boolean absolute;
-
-        public BogusRedirectService(final String schemeName, final String url, final boolean absolute) {
-            super();
-            this.schemeName = schemeName;
-            this.url = url;
-            this.absolute = absolute;
-        }
-
-        @Override
-        public void handle(
-                final HttpRequest request,
-                final HttpResponse response,
-                final HttpContext context) throws HttpException, IOException {
-            final HttpInetConnection conn = (HttpInetConnection) context.getAttribute(
-                    HttpCoreContext.HTTP_CONNECTION);
-            String redirectUrl = this.url;
-            if (!this.absolute) {
-                redirectUrl = this.schemeName + "://localhost:" + conn.getLocalPort() + redirectUrl;
-            }
-
-            final ProtocolVersion ver = request.getRequestLine().getProtocolVersion();
-            final String uri = request.getRequestLine().getUri();
-            if (uri.equals("/oldlocation/")) {
-                response.setStatusLine(ver, HttpStatus.SC_MOVED_TEMPORARILY);
-                response.addHeader(new BasicHeader("Location", redirectUrl));
-            } else if (uri.equals("/relativelocation/")) {
-                response.setStatusLine(ver, HttpStatus.SC_OK);
-                final StringEntity entity = new StringEntity("Successful redirect");
-                response.setEntity(entity);
-            } else {
-                response.setStatusLine(ver, HttpStatus.SC_NOT_FOUND);
-            }
-        }
-    }
-
-    private static class RomeRedirectService implements HttpRequestHandler {
-
-        public RomeRedirectService() {
-            super();
-        }
-
-        @Override
-        public void handle(
-                final HttpRequest request,
-                final HttpResponse response,
-                final HttpContext context) throws HttpException, IOException {
-            final String uri = request.getRequestLine().getUri();
-            if (uri.equals("/rome")) {
-                response.setStatusCode(HttpStatus.SC_OK);
-                final StringEntity entity = new StringEntity("Successful redirect");
-                response.setEntity(entity);
-            } else {
-                response.setStatusCode(HttpStatus.SC_MOVED_TEMPORARILY);
-                response.addHeader(new BasicHeader("Location", "/rome"));
-            }
-        }
-    }
-
-    @Test
-    public void testBasicRedirect300() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(
-                new BasicRedirectService(getSchemeName(), HttpStatus.SC_MULTIPLE_CHOICES)));
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final HttpGet httpget = new HttpGet("/oldlocation/");
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-
-        final HttpRequest reqWrapper = context.getRequest();
-
-        Assert.assertEquals(HttpStatus.SC_MULTIPLE_CHOICES, response.getStatusLine().getStatusCode());
-        Assert.assertEquals("/oldlocation/", reqWrapper.getRequestLine().getUri());
-    }
-
-    @Test
-    public void testBasicRedirect301() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(
-                new BasicRedirectService(getSchemeName(), HttpStatus.SC_MOVED_PERMANENTLY)));
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final HttpGet httpget = new HttpGet("/oldlocation/");
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-
-        final HttpRequest reqWrapper = context.getRequest();
-        final HttpHost host = context.getTargetHost();
-
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-        Assert.assertEquals("/newlocation/", reqWrapper.getRequestLine().getUri());
-        Assert.assertEquals(target, host);
-    }
-
-    @Test
-    public void testBasicRedirect302() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(
-                new BasicRedirectService(getSchemeName(), HttpStatus.SC_MOVED_TEMPORARILY)));
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final HttpGet httpget = new HttpGet("/oldlocation/");
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-
-        final HttpRequest reqWrapper = context.getRequest();
-        final HttpHost host = context.getTargetHost();
-
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-        Assert.assertEquals("/newlocation/", reqWrapper.getRequestLine().getUri());
-        Assert.assertEquals(target, host);
-    }
-
-    @Test
-    public void testBasicRedirect302NoLocation() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new HttpRequestHandler() {
-
-            @Override
-            public void handle(
-                    final HttpRequest request,
-                    final HttpResponse response,
-                    final HttpContext context) throws HttpException, IOException {
-                response.setStatusCode(HttpStatus.SC_MOVED_TEMPORARILY);
-            }
-
-        }));
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final HttpGet httpget = new HttpGet("/oldlocation/");
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-
-        final HttpRequest reqWrapper = context.getRequest();
-        final HttpHost host = context.getTargetHost();
-
-        Assert.assertEquals(HttpStatus.SC_MOVED_TEMPORARILY, response.getStatusLine().getStatusCode());
-        Assert.assertEquals("/oldlocation/", reqWrapper.getRequestLine().getUri());
-        Assert.assertEquals(target, host);
-    }
-
-    @Test
-    public void testBasicRedirect303() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(
-                new BasicRedirectService(getSchemeName(), HttpStatus.SC_SEE_OTHER)));
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final HttpGet httpget = new HttpGet("/oldlocation/");
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-
-        final HttpRequest reqWrapper = context.getRequest();
-        final HttpHost host = context.getTargetHost();
-
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-        Assert.assertEquals("/newlocation/", reqWrapper.getRequestLine().getUri());
-        Assert.assertEquals(target, host);
-    }
-
-    @Test
-    public void testBasicRedirect304() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(
-                new BasicRedirectService(getSchemeName(), HttpStatus.SC_NOT_MODIFIED)));
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final HttpGet httpget = new HttpGet("/oldlocation/");
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-
-        final HttpRequest reqWrapper = context.getRequest();
-
-        Assert.assertEquals(HttpStatus.SC_NOT_MODIFIED, response.getStatusLine().getStatusCode());
-        Assert.assertEquals("/oldlocation/", reqWrapper.getRequestLine().getUri());
-    }
-
-    @Test
-    public void testBasicRedirect305() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(
-                new BasicRedirectService(getSchemeName(), HttpStatus.SC_USE_PROXY)));
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final HttpGet httpget = new HttpGet("/oldlocation/");
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-
-        final HttpRequest reqWrapper = context.getRequest();
-
-        Assert.assertEquals(HttpStatus.SC_USE_PROXY, response.getStatusLine().getStatusCode());
-        Assert.assertEquals("/oldlocation/", reqWrapper.getRequestLine().getUri());
-    }
-
-    @Test
-    public void testBasicRedirect307() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(
-                new BasicRedirectService(getSchemeName(), HttpStatus.SC_TEMPORARY_REDIRECT)));
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final HttpGet httpget = new HttpGet("/oldlocation/");
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-
-        final HttpRequest reqWrapper = context.getRequest();
-        final HttpHost host = context.getTargetHost();
-
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-        Assert.assertEquals("/newlocation/", reqWrapper.getRequestLine().getUri());
-        Assert.assertEquals(target, host);
-    }
-
-    @Test(expected=ExecutionException.class)
-    public void testMaxRedirectCheck() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new CircularRedirectService()));
-        final HttpHost target = start();
-
-        final RequestConfig config = RequestConfig.custom()
-                .setCircularRedirectsAllowed(true)
-                .setMaxRedirects(5).build();
-
-        final HttpGet httpget = new HttpGet("/circular-oldlocation/");
-        httpget.setConfig(config);
-        try {
-            final Future<HttpResponse> future = this.httpclient.execute(target, httpget, null);
-            future.get();
-        } catch (final ExecutionException e) {
-            Assert.assertTrue(e.getCause() instanceof RedirectException);
-            throw e;
-        }
-    }
-
-    @Test(expected=ExecutionException.class)
-    public void testCircularRedirect() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new CircularRedirectService()));
-        final HttpHost target = start();
-
-        final RequestConfig config = RequestConfig.custom()
-                .setCircularRedirectsAllowed(false)
-                .setRelativeRedirectsAllowed(true)
-                .build();
-
-        final HttpGet httpget = new HttpGet("/circular-oldlocation/");
-        httpget.setConfig(config);
-        try {
-            final Future<HttpResponse> future = this.httpclient.execute(target, httpget, null);
-            future.get();
-        } catch (final ExecutionException e) {
-            Assert.assertTrue(e.getCause() instanceof CircularRedirectException);
-            throw e;
-        }
-    }
-
-    @Test
-    public void testPostNoRedirect() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(
-                new BasicRedirectService(getSchemeName(), HttpStatus.SC_MOVED_TEMPORARILY)));
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final HttpPost httppost = new HttpPost("/oldlocation/");
-        httppost.setEntity(new NStringEntity("stuff"));
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httppost, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-
-        final HttpRequest reqWrapper = context.getRequest();
-
-        Assert.assertEquals(HttpStatus.SC_MOVED_TEMPORARILY, response.getStatusLine().getStatusCode());
-        Assert.assertEquals("/oldlocation/", reqWrapper.getRequestLine().getUri());
-        Assert.assertEquals("POST", reqWrapper.getRequestLine().getMethod());
-    }
-
-    @Test
-    public void testPostRedirectSeeOther() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(
-                new BasicRedirectService(getSchemeName(), HttpStatus.SC_SEE_OTHER)));
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final HttpPost httppost = new HttpPost("/oldlocation/");
-        httppost.setEntity(new NStringEntity("stuff"));
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httppost, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-
-        final HttpRequest reqWrapper = context.getRequest();
-
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-        Assert.assertEquals("/newlocation/", reqWrapper.getRequestLine().getUri());
-        Assert.assertEquals("GET", reqWrapper.getRequestLine().getMethod());
-    }
-
-    @Test
-    public void testRelativeRedirect() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new RelativeRedirectService()));
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final RequestConfig config = RequestConfig.custom()
-                .setRelativeRedirectsAllowed(true)
-                .build();
-
-        final HttpGet httpget = new HttpGet("/oldlocation/");
-        httpget.setConfig(config);
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-
-        final HttpRequest reqWrapper = context.getRequest();
-        final HttpHost host = context.getTargetHost();
-
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-        Assert.assertEquals("/relativelocation/", reqWrapper.getRequestLine().getUri());
-        Assert.assertEquals(target, host);
-    }
-
-    @Test
-    public void testRelativeRedirect2() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new RelativeRedirectService2()));
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final RequestConfig config = RequestConfig.custom()
-                .setRelativeRedirectsAllowed(true)
-                .build();
-
-        final HttpGet httpget = new HttpGet("/test/oldlocation");
-        httpget.setConfig(config);
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-
-        final HttpRequest reqWrapper = context.getRequest();
-        final HttpHost host = context.getTargetHost();
-
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-        Assert.assertEquals("/test/relativelocation", reqWrapper.getRequestLine().getUri());
-        Assert.assertEquals(target, host);
-    }
-
-    @Test(expected=ExecutionException.class)
-    public void testRejectRelativeRedirect() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new RelativeRedirectService()));
-        final HttpHost target = start();
-
-        final RequestConfig config = RequestConfig.custom()
-                .setRelativeRedirectsAllowed(false)
-                .build();
-
-        final HttpGet httpget = new HttpGet("/oldlocation/");
-        httpget.setConfig(config);
-        try {
-            final Future<HttpResponse> future = this.httpclient.execute(target, httpget, null);
-            future.get();
-        } catch (final ExecutionException e) {
-            Assert.assertTrue(e.getCause() instanceof ProtocolException);
-            throw e;
-        }
-    }
-
-    @Test(expected=ExecutionException.class)
-    public void testRejectBogusRedirectLocation() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(
-                new BogusRedirectService(getSchemeName(), "xxx://bogus", true)));
-        final HttpHost target = start();
-
-        final HttpGet httpget = new HttpGet("/oldlocation/");
-
-        try {
-            final Future<HttpResponse> future = this.httpclient.execute(target, httpget, null);
-            future.get();
-        } catch (final ExecutionException ex) {
-            Assert.assertTrue(ex.getCause() instanceof HttpException);
-            throw ex;
-        }
-    }
-
-    @Test(expected=ExecutionException.class)
-    public void testRejectInvalidRedirectLocation() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(
-                new BogusRedirectService(getSchemeName(), "/newlocation/?p=I have spaces", false)));
-        final HttpHost target = start();
-
-        final HttpGet httpget = new HttpGet("/oldlocation/");
-        try {
-            final Future<HttpResponse> future = this.httpclient.execute(target, httpget, null);
-            future.get();
-        } catch (final ExecutionException e) {
-            Assert.assertTrue(e.getCause() instanceof ProtocolException);
-            throw e;
-        }
-    }
-
-    @Test
-    public void testRedirectWithCookie() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(
-                new BasicRedirectService(getSchemeName(), HttpStatus.SC_MOVED_TEMPORARILY)));
-        final HttpHost target = start();
-
-        final CookieStore cookieStore = new BasicCookieStore();
-        final HttpClientContext context = HttpClientContext.create();
-        context.setCookieStore(cookieStore);
-
-        final BasicClientCookie cookie = new BasicClientCookie("name", "value");
-        cookie.setDomain(target.getHostName());
-        cookie.setPath("/");
-
-        cookieStore.addCookie(cookie);
-
-        final HttpGet httpget = new HttpGet("/oldlocation/");
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-
-        final HttpRequest reqWrapper = context.getRequest();
-
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-        Assert.assertEquals("/newlocation/", reqWrapper.getRequestLine().getUri());
-
-        final Header[] headers = reqWrapper.getHeaders(SM.COOKIE);
-        Assert.assertEquals("There can only be one (cookie)", 1, headers.length);
-    }
-
-    @Test
-    public void testDefaultHeadersRedirect() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(
-                new BasicRedirectService(getSchemeName(), HttpStatus.SC_MOVED_TEMPORARILY)));
-
-        final List<Header> defaultHeaders = new ArrayList<Header>(1);
-        defaultHeaders.add(new BasicHeader(HTTP.USER_AGENT, "my-test-client"));
-        this.clientBuilder.setDefaultHeaders(defaultHeaders);
-
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final HttpGet httpget = new HttpGet("/oldlocation/");
-
-        final Future<HttpResponse> future = this.httpclient.execute(target, httpget, context, null);
-        final HttpResponse response = future.get();
-        Assert.assertNotNull(response);
-
-        final HttpRequest reqWrapper = context.getRequest();
-
-        Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
-        Assert.assertEquals("/newlocation/", reqWrapper.getRequestLine().getUri());
-
-        final Header header = reqWrapper.getFirstHeader(HTTP.USER_AGENT);
-        Assert.assertEquals("my-test-client", header.getValue());
-    }
-
-    static class CrossSiteRedirectService implements HttpRequestHandler {
-
-        private final HttpHost host;
-
-        public CrossSiteRedirectService(final HttpHost host) {
-            super();
-            this.host = host;
-        }
-
-        @Override
-        public void handle(
-                final HttpRequest request,
-                final HttpResponse response,
-                final HttpContext context) throws HttpException, IOException {
-            final ProtocolVersion ver = request.getRequestLine().getProtocolVersion();
-            final String location;
-            try {
-                final URIBuilder uribuilder = new URIBuilder(request.getRequestLine().getUri());
-                uribuilder.setScheme(this.host.getSchemeName());
-                uribuilder.setHost(this.host.getHostName());
-                uribuilder.setPort(this.host.getPort());
-                uribuilder.setPath("/random/1024");
-                location = uribuilder.build().toASCIIString();
-            } catch (final URISyntaxException ex) {
-                throw new ProtocolException("Invalid request URI", ex);
-            }
-            response.setStatusLine(ver, HttpStatus.SC_TEMPORARY_REDIRECT);
-            response.addHeader(new BasicHeader("Location", location));
-        }
-    }
-
-    @Test
-    public void testCrossSiteRedirect() throws Exception {
-        this.serverBootstrap.registerHandler("/random/*", new BasicAsyncRequestHandler(
-                new RandomHandler()));
-        final HttpHost redirectTarget = start();
-
-        this.serverBootstrap.registerHandler("/redirect/*", new BasicAsyncRequestHandler(
-                new CrossSiteRedirectService(redirectTarget)));
-
-        final HttpServer secondServer = this.serverBootstrap.create();
-        try {
-            secondServer.start();
-            final ListenerEndpoint endpoint2 = secondServer.getEndpoint();
-            endpoint2.waitFor();
-
-            final InetSocketAddress address2 = (InetSocketAddress) endpoint2.getAddress();
-            final HttpHost initialTarget = new HttpHost("localhost", address2.getPort(), getSchemeName());
-
-            final Queue<Future<HttpResponse>> queue = new ConcurrentLinkedQueue<Future<HttpResponse>>();
-            for (int i = 0; i < 4; i++) {
-                final HttpClientContext context = HttpClientContext.create();
-                final HttpGet httpget = new HttpGet("/redirect/anywhere");
-                queue.add(this.httpclient.execute(initialTarget, httpget, context, null));
-            }
-            while (!queue.isEmpty()) {
-                final Future<HttpResponse> future = queue.remove();
-                final HttpResponse response = future.get();
-                Assert.assertNotNull(response);
-                Assert.assertEquals(200, response.getStatusLine().getStatusCode());
-            }
-        } finally {
-            this.server.shutdown(10, TimeUnit.SECONDS);
-        }
-    }
-
-    @Test
-    public void testRepeatRequest() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new RomeRedirectService()));
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final RequestConfig config = RequestConfig.custom().setRelativeRedirectsAllowed(true).build();
-        final HttpGet first = new HttpGet("/rome");
-        first.setConfig(config);
-
-        final Future<HttpResponse> future1 = this.httpclient.execute(target, first, context, null);
-        final HttpResponse response1 = future1.get();
-        Assert.assertNotNull(response1);
-
-        final HttpGet second = new HttpGet("/rome");
-        second.setConfig(config);
-
-        final Future<HttpResponse> future2 = this.httpclient.execute(target, second, context, null);
-        final HttpResponse response2 = future2.get();
-        Assert.assertNotNull(response2);
-
-        final HttpRequest reqWrapper = context.getRequest();
-        final HttpHost host = context.getTargetHost();
-
-        Assert.assertEquals(HttpStatus.SC_OK, response2.getStatusLine().getStatusCode());
-        Assert.assertEquals("/rome", reqWrapper.getRequestLine().getUri());
-        Assert.assertEquals(host, target);
-    }
-
-    @Test
-    public void testRepeatRequestRedirect() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new RomeRedirectService()));
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final RequestConfig config = RequestConfig.custom().setRelativeRedirectsAllowed(true).build();
-        final HttpGet first = new HttpGet("/lille");
-        first.setConfig(config);
-
-        final Future<HttpResponse> future1 = this.httpclient.execute(target, first, context, null);
-        final HttpResponse response1 = future1.get();
-        Assert.assertNotNull(response1);
-
-        final HttpGet second = new HttpGet("/lille");
-        second.setConfig(config);
-
-        final Future<HttpResponse> future2 = this.httpclient.execute(target, second, context, null);
-        final HttpResponse response2 = future2.get();
-        Assert.assertNotNull(response2);
-
-        final HttpRequest reqWrapper = context.getRequest();
-        final HttpHost host = context.getTargetHost();
-
-        Assert.assertEquals(HttpStatus.SC_OK, response2.getStatusLine().getStatusCode());
-        Assert.assertEquals("/rome", reqWrapper.getRequestLine().getUri());
-        Assert.assertEquals(host, target);
-    }
-
-    @Test
-    public void testDifferentRequestSameRedirect() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new RomeRedirectService()));
-        final HttpHost target = start();
-
-        final HttpClientContext context = HttpClientContext.create();
-
-        final RequestConfig config = RequestConfig.custom().setRelativeRedirectsAllowed(true).build();
-        final HttpGet first = new HttpGet("/alian");
-        first.setConfig(config);
-
-        final Future<HttpResponse> future1 = this.httpclient.execute(target, first, context, null);
-        final HttpResponse response1 = future1.get();
-        Assert.assertNotNull(response1);
-
-        final HttpGet second = new HttpGet("/lille");
-        second.setConfig(config);
-
-        final Future<HttpResponse> future2 = this.httpclient.execute(target, second, context, null);
-        final HttpResponse response2 = future2.get();
-        Assert.assertNotNull(response2);
-
-        final HttpRequest reqWrapper = context.getRequest();
-        final HttpHost host = context.getTargetHost();
-
-        Assert.assertEquals(HttpStatus.SC_OK, response2.getStatusLine().getStatusCode());
-        Assert.assertEquals("/rome", reqWrapper.getRequestLine().getUri());
-        Assert.assertEquals(host, target);
-    }
-
-}
\ No newline at end of file
diff --git a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestStatefulConnManagement.java b/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestStatefulConnManagement.java
deleted file mode 100644
index 5020073..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/nio/client/integration/TestStatefulConnManagement.java
+++ /dev/null
@@ -1,286 +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.http.nio.client.integration;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.util.concurrent.Future;
-
-import org.apache.http.localserver.HttpAsyncTestBase;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.client.UserTokenHandler;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.entity.ContentType;
-import org.apache.http.impl.nio.conn.CPoolUtils;
-import org.apache.http.nio.ContentDecoder;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.NHttpClientConnection;
-import org.apache.http.nio.client.HttpAsyncClient;
-import org.apache.http.nio.entity.NStringEntity;
-import org.apache.http.nio.protocol.AbstractAsyncResponseConsumer;
-import org.apache.http.nio.protocol.BasicAsyncRequestHandler;
-import org.apache.http.nio.protocol.BasicAsyncRequestProducer;
-import org.apache.http.nio.reactor.IOEventDispatch;
-import org.apache.http.pool.PoolEntry;
-import org.apache.http.protocol.BasicHttpContext;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.protocol.HttpRequestHandler;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class TestStatefulConnManagement extends HttpAsyncTestBase {
-
-    static class SimpleService implements HttpRequestHandler {
-
-        public SimpleService() {
-            super();
-        }
-
-        @Override
-        public void handle(
-                final HttpRequest request,
-                final HttpResponse response,
-                final HttpContext context) throws HttpException, IOException {
-            response.setStatusCode(HttpStatus.SC_OK);
-            final NStringEntity entity = new NStringEntity("Whatever");
-            response.setEntity(entity);
-        }
-    }
-
-    @Test
-    public void testStatefulConnections() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new SimpleService()));
-
-        final UserTokenHandler userTokenHandler = new UserTokenHandler() {
-
-            @Override
-            public Object getUserToken(final HttpContext context) {
-                return context.getAttribute("user");
-            }
-
-        };
-        this.clientBuilder.setUserTokenHandler(userTokenHandler);
-        final HttpHost target = start();
-
-        final int workerCount = 2;
-        final int requestCount = 5;
-
-        final HttpContext[] contexts = new HttpContext[workerCount];
-        final HttpWorker[] workers = new HttpWorker[workerCount];
-        for (int i = 0; i < contexts.length; i++) {
-            final HttpContext context = new BasicHttpContext();
-            final Object token = Integer.valueOf(i);
-            context.setAttribute("user", token);
-            contexts[i] = context;
-            workers[i] = new HttpWorker(context, requestCount, target, this.httpclient);
-        }
-
-        for (final HttpWorker worker : workers) {
-            worker.start();
-        }
-        for (final HttpWorker worker : workers) {
-            worker.join(10000);
-        }
-        for (final HttpWorker worker : workers) {
-            final Exception ex = worker.getException();
-            if (ex != null) {
-                throw ex;
-            }
-            Assert.assertEquals(requestCount, worker.getCount());
-        }
-
-        for (final HttpContext context : contexts) {
-            final Integer id = (Integer) context.getAttribute("user");
-
-            for (int r = 1; r < requestCount; r++) {
-                final Integer state = (Integer) context.getAttribute("r" + r);
-                Assert.assertEquals(id, state);
-            }
-        }
-
-    }
-
-    static class HttpWorker extends Thread {
-
-        private final HttpContext context;
-        private final int requestCount;
-        private final HttpHost target;
-        private final HttpAsyncClient httpclient;
-
-        private volatile Exception exception;
-        private volatile int count;
-
-        public HttpWorker(
-                final HttpContext context,
-                final int requestCount,
-                final HttpHost target,
-                final HttpAsyncClient httpclient) {
-            super();
-            this.context = context;
-            this.requestCount = requestCount;
-            this.target = target;
-            this.httpclient = httpclient;
-            this.count = 0;
-        }
-
-        public int getCount() {
-            return this.count;
-        }
-
-        public Exception getException() {
-            return this.exception;
-        }
-
-        @Override
-        public void run() {
-            try {
-                for (int r = 0; r < this.requestCount; r++) {
-                    final HttpGet httpget = new HttpGet("/");
-                    final Future<Object> future = this.httpclient.execute(
-                            new BasicAsyncRequestProducer(this.target, httpget),
-                            new AbstractAsyncResponseConsumer<Object>() {
-
-                                @Override
-                                protected void onResponseReceived(final HttpResponse response) {
-                                }
-
-                                @Override
-                                protected void onEntityEnclosed(
-                                        final HttpEntity entity,
-                                        final ContentType contentType) throws IOException {
-                                }
-
-                                @Override
-                                protected void onContentReceived(
-                                        final ContentDecoder decoder,
-                                        final IOControl ioctrl) throws IOException {
-                                    final ByteBuffer buf = ByteBuffer.allocate(2048);
-                                    decoder.read(buf);
-                                }
-
-                                @Override
-                                protected Object buildResult(final HttpContext context) throws Exception {
-                                    final NHttpClientConnection conn = (NHttpClientConnection) context.getAttribute(
-                                            IOEventDispatch.CONNECTION_KEY);
-
-                                    final PoolEntry<?, ?> entry = CPoolUtils.getPoolEntry(conn);
-                                    return entry.getState();
-                                }
-
-                                @Override
-                                protected void releaseResources() {
-                                }
-
-                            },
-                            this.context,
-                            null);
-                    this.count++;
-                    final Object state = future.get();
-                    this.context.setAttribute("r" + r, state);
-                }
-
-            } catch (final Exception ex) {
-                this.exception = ex;
-            }
-        }
-
-    }
-
-    @Test
-    public void testRouteSpecificPoolRecylcing() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new SimpleService()));
-        // This tests what happens when a maxed connection pool needs
-        // to kill the last idle connection to a route to build a new
-        // one to the same route.
-        final UserTokenHandler userTokenHandler = new UserTokenHandler() {
-
-            @Override
-            public Object getUserToken(final HttpContext context) {
-                return context.getAttribute("user");
-            }
-
-        };
-        this.clientBuilder.setUserTokenHandler(userTokenHandler);
-
-        final HttpHost target = start();
-        final int maxConn = 2;
-        // We build a client with 2 max active // connections, and 2 max per route.
-        this.connMgr.setMaxTotal(maxConn);
-        this.connMgr.setDefaultMaxPerRoute(maxConn);
-
-        // Bottom of the pool : a *keep alive* connection to Route 1.
-        final HttpContext context1 = new BasicHttpContext();
-        context1.setAttribute("user", "stuff");
-
-        final Future<HttpResponse> future1 = this.httpclient.execute(
-                target, new HttpGet("/"), context1, null);
-        final HttpResponse response1 = future1.get();
-        Assert.assertNotNull(response1);
-        Assert.assertEquals(200, response1.getStatusLine().getStatusCode());
-
-        // The ConnPoolByRoute now has 1 free connection, out of 2 max
-        // The ConnPoolByRoute has one RouteSpcfcPool, that has one free connection
-        // for [localhost][stuff]
-
-        Thread.sleep(100);
-
-        // Send a very simple HTTP get (it MUST be simple, no auth, no proxy, no 302, no 401, ...)
-        // Send it to another route. Must be a keepalive.
-        final HttpContext context2 = new BasicHttpContext();
-
-        final Future<HttpResponse> future2 = this.httpclient.execute(
-                new HttpHost("127.0.0.1", target.getPort(), target.getSchemeName()),
-                new HttpGet("/"), context2, null);
-        final HttpResponse response2 = future2.get();
-        Assert.assertNotNull(response2);
-        Assert.assertEquals(200, response2.getStatusLine().getStatusCode());
-
-        // ConnPoolByRoute now has 2 free connexions, out of its 2 max.
-        // The [localhost][stuff] RouteSpcfcPool is the same as earlier
-        // And there is a [127.0.0.1][null] pool with 1 free connection
-
-        Thread.sleep(100);
-
-        // This will put the ConnPoolByRoute to the targeted state :
-        // [localhost][stuff] will not get reused because this call is [localhost][null]
-        // So the ConnPoolByRoute will need to kill one connection (it is maxed out globally).
-        // The killed conn is the oldest, which means the first HTTPGet ([localhost][stuff]).
-        // When this happens, the RouteSpecificPool becomes empty.
-        final HttpContext context3 = new BasicHttpContext();
-        final Future<HttpResponse> future3 = this.httpclient.execute(
-                target, new HttpGet("/"), context3, null);
-        final HttpResponse response3 = future3.get();
-        Assert.assertNotNull(response3);
-        Assert.assertEquals(200, response3.getStatusLine().getStatusCode());
-    }
-
-}
\ No newline at end of file
diff --git a/httpasyncclient/src/test/java/org/apache/http/nio/client/methods/TestAsyncConsumers.java b/httpasyncclient/src/test/java/org/apache/http/nio/client/methods/TestAsyncConsumers.java
deleted file mode 100644
index 1f957ea..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/nio/client/methods/TestAsyncConsumers.java
+++ /dev/null
@@ -1,259 +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.http.nio.client.methods;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.atomic.AtomicLong;
-
-import org.apache.http.Consts;
-import org.apache.http.localserver.HttpAsyncTestBase;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpResponse;
-import org.apache.http.entity.ContentType;
-import org.apache.http.localserver.EchoHandler;
-import org.apache.http.localserver.RandomHandler;
-import org.apache.http.nio.IOControl;
-import org.apache.http.nio.protocol.BasicAsyncRequestHandler;
-import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
-import org.apache.http.protocol.HttpContext;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Matchers;
-import org.mockito.Mockito;
-
-public class TestAsyncConsumers extends HttpAsyncTestBase {
-
-    @Before @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        this.serverBootstrap.registerHandler("/echo/*", new BasicAsyncRequestHandler(new EchoHandler()));
-        this.serverBootstrap.registerHandler("/random/*", new BasicAsyncRequestHandler(new RandomHandler()));
-    }
-
-    static class ByteCountingConsumer extends AsyncByteConsumer<Long> {
-
-        public ByteCountingConsumer() {
-            super();
-        }
-
-        public ByteCountingConsumer(final int bufSize) {
-            super(bufSize);
-        }
-
-        private final AtomicLong count = new AtomicLong(0);
-
-        @Override
-        protected void onResponseReceived(final HttpResponse response) {
-        }
-
-        @Override
-        protected void onByteReceived(final ByteBuffer buf, final IOControl ioctrl) {
-            this.count.addAndGet(buf.remaining());
-        }
-
-        @Override
-        protected Long buildResult(final HttpContext context) throws Exception {
-            return count.get();
-        }
-
-    }
-
-    @Test
-    public void testByteConsumer() throws Exception {
-        final HttpHost target = start();
-        for (int i = 0; i < 5; i++) {
-            final HttpAsyncRequestProducer httpget = HttpAsyncMethods.createGet(target.toURI() + "/random/20480");
-            final AsyncByteConsumer<Long> consumer = new ByteCountingConsumer();
-            final Future<Long> future = this.httpclient.execute(httpget, consumer, null);
-            final Long count = future.get();
-            Assert.assertEquals(20480, count.longValue());
-        }
-    }
-
-    @Test
-    public void testByteConsumerSmallBufffer() throws Exception {
-        final HttpHost target = start();
-        for (int i = 0; i < 5; i++) {
-            final HttpAsyncRequestProducer httpget = HttpAsyncMethods.createGet(target.toURI() + "/random/20480");
-            final AsyncByteConsumer<Long> consumer = new ByteCountingConsumer(512);
-            final Future<Long> future = this.httpclient.execute(httpget, consumer, null);
-            final Long count = future.get();
-            Assert.assertEquals(20480, count.longValue());
-        }
-    }
-
-    static class BufferingCharConsumer extends AsyncCharConsumer<String> {
-
-        public BufferingCharConsumer() {
-            super();
-        }
-
-        public BufferingCharConsumer(final int bufSize) {
-            super(bufSize);
-        }
-
-        private final StringBuilder sb = new StringBuilder();
-
-        @Override
-        public void onResponseReceived(final HttpResponse response) {
-        }
-
-        @Override
-        protected void onCharReceived(final CharBuffer buf, final IOControl ioctrl) throws IOException {
-            while (buf.hasRemaining()) {
-                this.sb.append(buf.get());
-            }
-        }
-
-        @Override
-        protected void releaseResources() {
-            super.releaseResources();
-            this.sb.setLength(0);
-        }
-
-        @Override
-        protected String buildResult(final HttpContext context) throws Exception {
-            return this.sb.toString();
-        }
-
-    }
-
-    @Test
-    public void testCharConsumer() throws Exception {
-        final HttpHost target = start();
-        final StringBuilder sb = new StringBuilder();
-        for (int i= 0; i < 25; i++) {
-            sb.append("blah blah blah blah\r\n");
-            sb.append("yada yada yada yada\r\n");
-        }
-        final String s = sb.toString();
-
-        for (int i = 0; i < 5; i++) {
-            final HttpAsyncRequestProducer httppost = HttpAsyncMethods.createPost(
-                    target.toURI() + "/echo/stuff", s,
-                    ContentType.create("text/plain", Consts.ASCII));
-            final AsyncCharConsumer<String> consumer = new BufferingCharConsumer();
-            final Future<String> future = this.httpclient.execute(httppost, consumer, null);
-            final String result = future.get();
-            Assert.assertEquals(s, result);
-        }
-    }
-
-    @Test
-    public void testCharConsumerSmallBufffer() throws Exception {
-        final HttpHost target = start();
-        final StringBuilder sb = new StringBuilder();
-        for (int i= 0; i < 25; i++) {
-            sb.append("blah blah blah blah\r\n");
-            sb.append("yada yada yada yada\r\n");
-        }
-        final String s = sb.toString();
-
-        for (int i = 0; i < 5; i++) {
-            final HttpAsyncRequestProducer httppost = HttpAsyncMethods.createPost(
-                    target.toURI() + "/echo/stuff", s,
-                    ContentType.create("text/plain", Consts.ASCII));
-            final AsyncCharConsumer<String> consumer = new BufferingCharConsumer(512);
-            final Future<String> future = this.httpclient.execute(httppost, consumer, null);
-            final String result = future.get();
-            Assert.assertEquals(s, result);
-        }
-    }
-
-    @Test
-    public void testResourceReleaseOnSuccess() throws Exception {
-        final HttpHost target = start();
-        final StringBuilder sb = new StringBuilder();
-        for (int i= 0; i < 25; i++) {
-            sb.append("blah blah blah blah\r\n");
-            sb.append("yada yada yada yada\r\n");
-        }
-        final String s = sb.toString();
-
-        final HttpAsyncRequestProducer httppost = HttpAsyncMethods.createPost(
-                target.toURI() + "/echo/stuff", s,
-                ContentType.create("text/plain", Consts.ASCII));
-        final BufferingCharConsumer consumer = Mockito.spy(new BufferingCharConsumer());
-        final Future<String> future = this.httpclient.execute(httppost, consumer, null);
-        final String result = future.get();
-        Assert.assertEquals(s, result);
-        Mockito.verify(consumer).buildResult(Matchers.any(HttpContext.class));
-        Mockito.verify(consumer).releaseResources();
-    }
-
-    @Test
-    public void testResourceReleaseOnException() throws Exception {
-        final HttpHost target = start();
-        final HttpAsyncRequestProducer httppost = HttpAsyncMethods.createPost(
-                target.toURI() + "/echo/stuff", "stuff",
-                ContentType.create("text/plain", Consts.ASCII));
-        final AsyncCharConsumer<String> consumer = Mockito.spy(new BufferingCharConsumer());
-        Mockito.doThrow(new IOException("Kaboom")).when(consumer).onCharReceived(
-                Matchers.any(CharBuffer.class), Matchers.any(IOControl.class));
-
-        final Future<String> future = this.httpclient.execute(httppost, consumer, null);
-        try {
-            future.get();
-            Assert.fail("ExecutionException expected");
-        } catch (final ExecutionException ex) {
-            final Throwable t = ex.getCause();
-            Assert.assertNotNull(t);
-            Assert.assertTrue(t instanceof IOException);
-            Assert.assertEquals("Kaboom", t.getMessage());
-        }
-        Mockito.verify(consumer).releaseResources();
-    }
-
-    @Test
-    public void testResourceReleaseOnBuildFailure() throws Exception {
-        final HttpHost target = start();
-        final HttpAsyncRequestProducer httppost = HttpAsyncMethods.createPost(
-                target.toURI() + "/echo/stuff", "stuff",
-                ContentType.create("text/plain", Consts.ASCII));
-        final BufferingCharConsumer consumer = Mockito.spy(new BufferingCharConsumer());
-        Mockito.doThrow(new HttpException("Kaboom")).when(consumer).buildResult(Matchers.any(HttpContext.class));
-
-        final Future<String> future = this.httpclient.execute(httppost, consumer, null);
-        try {
-            future.get();
-            Assert.fail("ExecutionException expected");
-        } catch (final ExecutionException ex) {
-            final Throwable t = ex.getCause();
-            Assert.assertNotNull(t);
-            Assert.assertTrue(t instanceof HttpException);
-            Assert.assertEquals("Kaboom", t.getMessage());
-        }
-        Mockito.verify(consumer).releaseResources();
-    }
-
-}
diff --git a/httpasyncclient/src/test/java/org/apache/http/nio/client/methods/TestZeroCopy.java b/httpasyncclient/src/test/java/org/apache/http/nio/client/methods/TestZeroCopy.java
deleted file mode 100644
index 7b7bb31..0000000
--- a/httpasyncclient/src/test/java/org/apache/http/nio/client/methods/TestZeroCopy.java
+++ /dev/null
@@ -1,269 +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.http.nio.client.methods;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.nio.charset.Charset;
-import java.util.concurrent.Future;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.LineIterator;
-import org.apache.commons.io.output.FileWriterWithEncoding;
-import org.apache.http.Consts;
-import org.apache.http.localserver.HttpAsyncTestBase;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpEntityEnclosingRequest;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.entity.BasicHttpEntity;
-import org.apache.http.entity.ContentType;
-import org.apache.http.nio.entity.NFileEntity;
-import org.apache.http.nio.entity.NStringEntity;
-import org.apache.http.nio.protocol.BasicAsyncRequestHandler;
-import org.apache.http.protocol.HttpContext;
-import org.apache.http.protocol.HttpRequestHandler;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-public class TestZeroCopy extends HttpAsyncTestBase {
-
-    private static final String[] TEXT = {
-        "blah blah blah blah blah blah blah blah blah blah blah blah blah blah",
-        "yada yada yada yada yada yada yada yada yada yada yada yada yada yada",
-        "da da da da da da da da da da da da da da da da da da da da da da da da",
-        "nyet nyet nyet nyet nyet nyet nyet nyet nyet nyet nyet nyet nyet nyet"
-    };
-
-    private static final Charset ASCII = Charset.forName("ascii");
-    private static File TEST_FILE;
-    private File tmpfile;
-
-    @BeforeClass
-    public static void createSrcFile() throws Exception {
-        final File tmpdir = FileUtils.getTempDirectory();
-        TEST_FILE = new File(tmpdir, "src.test");
-        final FileWriterWithEncoding out = new FileWriterWithEncoding(TEST_FILE, ASCII);
-        try {
-            for (int i = 0; i < 500; i++) {
-                for (final String line: TEXT) {
-                    out.write(line);
-                    out.write("\r\n");
-                }
-            }
-        } finally {
-            out.close();
-        }
-    }
-
-    @AfterClass
-    public static void deleteSrcFile() throws Exception {
-        if (TEST_FILE != null) {
-            TEST_FILE.delete();
-            TEST_FILE = null;
-        }
-    }
-
-    @After
-    public void cleanUp() throws Exception {
-        if (this.tmpfile != null && this.tmpfile.exists()) {
-            this.tmpfile.delete();
-        }
-    }
-
-    static class TestZeroCopyPost extends BaseZeroCopyRequestProducer {
-
-        private final boolean forceChunking;
-
-        protected TestZeroCopyPost(
-                final String requestURI,
-                final boolean forceChunking) throws FileNotFoundException {
-            super(URI.create(requestURI), TEST_FILE, ContentType.create("text/plain"));
-            this.forceChunking = forceChunking;
-        }
-
-        @Override
-        protected HttpEntityEnclosingRequest createRequest(final URI requestURI, final HttpEntity entity) {
-            final HttpPost httppost = new HttpPost(requestURI);
-            if (this.forceChunking) {
-                final BasicHttpEntity chunkedEntity = new BasicHttpEntity();
-                chunkedEntity.setChunked(true);
-                httppost.setEntity(chunkedEntity);
-            } else {
-                httppost.setEntity(entity);
-            }
-            return httppost;
-        }
-
-    }
-
-    static class TestZeroCopyConsumer extends ZeroCopyConsumer<Integer> {
-
-        public TestZeroCopyConsumer(final File file) throws FileNotFoundException {
-            super(file);
-        }
-
-        @Override
-        protected Integer process(
-                final HttpResponse response,
-                final File file,
-                final ContentType contentType) {
-            return response.getStatusLine().getStatusCode();
-        }
-
-    }
-
-    static class TestHandler implements HttpRequestHandler {
-
-        private final boolean forceChunking;
-
-        TestHandler(final boolean forceChunking) {
-            super();
-            this.forceChunking = forceChunking;
-        }
-
-        @Override
-        public void handle(
-                final HttpRequest request,
-                final HttpResponse response,
-                final HttpContext context) throws HttpException, IOException {
-            HttpEntity requestEntity = null;
-            if (request instanceof HttpEntityEnclosingRequest) {
-                requestEntity = ((HttpEntityEnclosingRequest) request).getEntity();
-            }
-            if (requestEntity == null) {
-                response.setEntity(new NStringEntity("Empty content"));
-                return;
-            }
-
-            boolean ok = true;
-
-            final InputStream instream = requestEntity.getContent();
-            try {
-                final ContentType contentType = ContentType.getOrDefault(requestEntity);
-                Charset charset = contentType.getCharset();
-                if (charset == null) {
-                    charset = Consts.ISO_8859_1;
-                }
-                final LineIterator it = IOUtils.lineIterator(instream, charset.name());
-                int count = 0;
-                while (it.hasNext()) {
-                    final String line = it.next();
-                    final int i = count % TEXT.length;
-                    final String expected = TEXT[i];
-                    if (!line.equals(expected)) {
-                        ok = false;
-                        break;
-                    }
-                    count++;
-                }
-            } finally {
-                instream.close();
-            }
-            if (ok) {
-                final NFileEntity responseEntity = new NFileEntity(TEST_FILE,
-                        ContentType.create("text/plian"));
-                if (this.forceChunking) {
-                    responseEntity.setChunked(true);
-                }
-                response.setEntity(responseEntity);
-            } else {
-                response.setEntity(new NStringEntity("Invalid content"));
-            }
-        }
-    }
-
-    @Test
-    public void testTwoWayZeroCopy() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new TestHandler(false)));
-        final HttpHost target = start();
-
-        final File tmpdir = FileUtils.getTempDirectory();
-        this.tmpfile = new File(tmpdir, "dst.test");
-        final TestZeroCopyPost httppost = new TestZeroCopyPost(target.toURI() + "/bounce", false);
-        final TestZeroCopyConsumer consumer = new TestZeroCopyConsumer(this.tmpfile);
-        final Future<Integer> future = this.httpclient.execute(httppost, consumer, null);
-        final Integer status = future.get();
-        Assert.assertNotNull(status);
-        Assert.assertEquals(HttpStatus.SC_OK, status.intValue());
-        final InputStream instream = new FileInputStream(this.tmpfile);
-        try {
-            final LineIterator it = IOUtils.lineIterator(instream, ASCII.name());
-            int count = 0;
-            while (it.hasNext()) {
-                final String line = it.next();
-                final int i = count % TEXT.length;
-                final String expected = TEXT[i];
-                Assert.assertEquals(expected, line);
-                count++;
-            }
-        } finally {
-            instream.close();
-        }
-    }
-
-    @Test
-    public void testZeroCopyFallback() throws Exception {
-        this.serverBootstrap.registerHandler("*", new BasicAsyncRequestHandler(new TestHandler(true)));
-        final HttpHost target = start();
-        final File tmpdir = FileUtils.getTempDirectory();
-        this.tmpfile = new File(tmpdir, "dst.test");
-        final TestZeroCopyPost httppost = new TestZeroCopyPost(target.toURI() + "/bounce", true);
-        final TestZeroCopyConsumer consumer = new TestZeroCopyConsumer(this.tmpfile);
-        final Future<Integer> future = this.httpclient.execute(httppost, consumer, null);
-        final Integer status = future.get();
-        Assert.assertNotNull(status);
-        Assert.assertEquals(HttpStatus.SC_OK, status.intValue());
-        final InputStream instream = new FileInputStream(this.tmpfile);
-        try {
-            final LineIterator it = IOUtils.lineIterator(instream, ASCII.name());
-            int count = 0;
-            while (it.hasNext()) {
-                final String line = it.next();
-                final int i = count % TEXT.length;
-                final String expected = TEXT[i];
-                Assert.assertEquals(expected, line);
-                count++;
-            }
-        } finally {
-            instream.close();
-        }
-    }
-
-}
diff --git a/httpasyncclient/src/test/resources/commons-logging.properties b/httpasyncclient/src/test/resources/commons-logging.properties
deleted file mode 100644
index 2fa1b3b..0000000
--- a/httpasyncclient/src/test/resources/commons-logging.properties
+++ /dev/null
@@ -1,26 +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/>.
-
-# Disable logging for unit tests
-org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog
diff --git a/httpasyncclient/src/test/resources/test.keystore b/httpasyncclient/src/test/resources/test.keystore
deleted file mode 100644
index 917f83e..0000000
--- a/httpasyncclient/src/test/resources/test.keystore
+++ /dev/null
Binary files differ
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
index 8296ca5..0000000
--- a/pom.xml
+++ /dev/null
@@ -1,311 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   ====================================================================
-   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 />.
- --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <parent>
-      <artifactId>project</artifactId>
-      <groupId>org.apache.httpcomponents</groupId>
-      <version>7</version>
-      <relativePath>../project/pom.xml</relativePath>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-  <artifactId>httpcomponents-asyncclient</artifactId>
-  <name>Apache HttpComponents AsyncClient</name>
-  <version>4.2-alpha1-SNAPSHOT</version>
-  <description>Apache components to build asynchronous client side HTTP services</description>
-  <url>http://hc.apache.org/httpcomponents-asyncclient</url>
-  <inceptionYear>2010</inceptionYear>
-  <packaging>pom</packaging>
-
-  <organization>
-    <name>The Apache Software Foundation</name>
-    <url>http://www.apache.org/</url>
-  </organization>
-
-  <licenses>
-    <license>
-      <name>Apache License, Version 2.0</name>
-      <url>LICENSE.txt</url>
-      <distribution>repo</distribution>
-    </license>
-  </licenses>
-
-  <issueManagement>
-    <system>Jira</system>
-    <url>http://issues.apache.org/jira/browse/HTTPASYNC</url>
-  </issueManagement>
-
-  <scm>
-    <connection>scm:svn:https://svn.apache.org/repos/asf/httpcomponents/httpasyncclient/trunk</connection>
-    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/httpcomponents/httpasyncclient/trunk</developerConnection>
-    <url>https://svn.apache.org/repos/asf/httpcomponents/httpasyncclient/trunk</url>
-  </scm>
-
-  <properties>
-    <maven.compiler.source>1.6</maven.compiler.source>
-    <maven.compiler.target>1.6</maven.compiler.target>
-    <httpcore.version>4.4.1</httpcore.version>
-    <httpclient.version>4.4.1</httpclient.version>
-    <commons-logging.version>1.2</commons-logging.version>
-    <commons-io.version>2.4</commons-io.version>
-    <junit.version>4.11</junit.version>
-    <easymock.version>2.5.2</easymock.version>
-    <mockito.version>1.8.5</mockito.version>
-    <hc.stylecheck.version>1</hc.stylecheck.version>
-    <api.comparison.version>4.0</api.comparison.version>
-  </properties>
-
-  <dependencyManagement>
-    <dependencies>
-      <dependency>
-        <groupId>org.apache.httpcomponents</groupId>
-        <artifactId>httpcore</artifactId>
-        <version>${httpcore.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.httpcomponents</groupId>
-        <artifactId>httpcore-nio</artifactId>
-        <version>${httpcore.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.httpcomponents</groupId>
-        <artifactId>httpclient</artifactId>
-        <version>${httpclient.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.httpcomponents</groupId>
-        <artifactId>httpclient-cache</artifactId>
-        <version>${httpclient.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-logging</groupId>
-        <artifactId>commons-logging</artifactId>
-        <version>${commons-logging.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>junit</groupId>
-        <artifactId>junit</artifactId>
-        <version>${junit.version}</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.mockito</groupId>
-        <artifactId>mockito-core</artifactId>
-        <version>${mockito.version}</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.easymock</groupId>
-        <artifactId>easymock</artifactId>
-        <version>${easymock.version}</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.easymock</groupId>
-        <artifactId>easymockclassextension</artifactId>
-        <version>${easymock.version}</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>commons-io</groupId>
-        <artifactId>commons-io</artifactId>
-        <version>${commons-io.version}</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.httpcomponents</groupId>
-        <artifactId>httpclient-cache</artifactId>
-        <version>${httpclient.version}</version>
-        <type>test-jar</type>
-        <scope>test</scope>
-      </dependency>
-    </dependencies>
-  </dependencyManagement>
-
-  <modules>
-    <module>httpasyncclient</module>
-    <module>httpasyncclient-cache</module>
-    <module>httpasyncclient-osgi</module>
-  </modules>
-
-  <build>
-    <plugins>
-      <plugin>
-        <artifactId>maven-jar-plugin</artifactId>
-        <configuration>
-          <archive>
-            <manifestEntries>
-              <Specification-Title>HttpComponents ${project.name}</Specification-Title>
-              <Specification-Version>${project.version}</Specification-Version>
-              <Specification-Vendor>The Apache Software Foundation</Specification-Vendor>
-              <Implementation-Title>HttpComponents ${project.name}</Implementation-Title>
-              <Implementation-Version>${project.version}</Implementation-Version>
-              <Implementation-Vendor>The Apache Software Foundation</Implementation-Vendor>
-              <Implementation-Vendor-Id>org.apache</Implementation-Vendor-Id>
-              <url>${project.url}</url>
-            </manifestEntries>
-          </archive>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-source-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>attach-sources</id>
-            <goals>
-              <goal>jar</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <artifactId>maven-javadoc-plugin</artifactId>
-        <configuration>
-          <source>${maven.compiler.source}</source>
-          <links>
-            <link>http://docs.oracle.com/javase/6/docs/api/</link>
-            <link>http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/</link>
-            <link>http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/</link>
-          </links>
-        </configuration>
-      </plugin>
-      <plugin>
-        <artifactId>maven-site-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <version>2.9.1</version>
-        <dependencies>
-          <dependency>
-            <groupId>org.apache.httpcomponents</groupId>
-            <artifactId>hc-stylecheck</artifactId>
-            <version>${hc.stylecheck.version}</version>
-          </dependency>
-        </dependencies>
-        <configuration>
-          <encoding>UTF-8</encoding>
-        </configuration>
-        <executions>
-          <execution>
-            <id>validate-main</id>
-            <phase>validate</phase>
-            <configuration>
-              <configLocation>hc-stylecheck/default.xml</configLocation>
-              <headerLocation>hc-stylecheck/asl2.header</headerLocation>
-              <consoleOutput>true</consoleOutput>
-              <failsOnError>true</failsOnError>
-              <linkXRef>false</linkXRef>
-              <sourceDirectory>${basedir}/src/main</sourceDirectory>
-            </configuration>
-            <goals>
-              <goal>checkstyle</goal>
-            </goals>
-          </execution>
-          <execution>
-            <id>validate-test</id>
-            <phase>validate</phase>
-            <configuration>
-              <configLocation>hc-stylecheck/default.xml</configLocation>
-              <headerLocation>hc-stylecheck/asl2.header</headerLocation>
-              <consoleOutput>true</consoleOutput>
-              <failsOnError>true</failsOnError>
-              <linkXRef>false</linkXRef>
-              <sourceDirectory>${basedir}/src/test</sourceDirectory>
-            </configuration>
-            <goals>
-              <goal>checkstyle</goal>
-            </goals>
-          </execution>
-          <execution>
-            <id>validate-examples</id>
-            <phase>validate</phase>
-            <configuration>
-              <configLocation>hc-stylecheck/minimal.xml</configLocation>
-              <headerLocation>hc-stylecheck/asl2.header</headerLocation>
-              <consoleOutput>true</consoleOutput>
-              <failsOnError>true</failsOnError>
-              <linkXRef>false</linkXRef>
-              <sourceDirectory>${basedir}/src/examples</sourceDirectory>
-            </configuration>
-            <goals>
-              <goal>checkstyle</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>clirr-maven-plugin</artifactId>
-        <version>${hc.clirr.version}</version>
-        <configuration>
-          <comparisonVersion>${api.comparison.version}</comparisonVersion>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.rat</groupId>
-        <artifactId>apache-rat-plugin</artifactId>
-        <version>0.11</version>
-        <executions>
-          <execution>
-            <phase>verify</phase>
-            <goals>
-              <goal>check</goal>
-            </goals>
-          </execution>
-        </executions>
-        <configuration>
-          <excludes>
-            <exclude>src/test/resources/*.truststore</exclude>
-          </excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
-  <reporting>
-    <plugins>
-
-      <plugin>
-        <artifactId>maven-project-info-reports-plugin</artifactId>
-        <version>${hc.project-info.version}</version>
-        <inherited>false</inherited>
-        <reportSets>
-          <reportSet>
-            <reports>
-              <report>dependency-management</report>
-              <report>issue-tracking</report>
-              <report>license</report>
-              <report>scm</report>
-              <report>summary</report>
-            </reports>
-          </reportSet>
-        </reportSets>
-      </plugin>
-
-    </plugins>
-  </reporting>
-
-</project>