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
index 5c5381f..7ee0202 100644
--- 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
@@ -28,6 +28,7 @@
 
 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;
 
@@ -48,22 +49,23 @@
 
     public CloseableHttpAsyncClientBase(
             final NHttpClientConnectionManager connmgr,
-            final ThreadFactory threadFactory) {
+            final ThreadFactory threadFactory,
+            final NHttpClientEventHandler handler) {
         super();
         this.connmgr = connmgr;
         this.reactorThread = threadFactory.newThread(new Runnable() {
 
             public void run() {
-                doExecute();
+                doExecute(handler);
             }
 
         });
         this.status = new AtomicReference<Status>(Status.INACTIVE);
     }
 
-    private void doExecute() {
+    private void doExecute(final NHttpClientEventHandler handler) {
         try {
-            final IOEventDispatch ioEventDispatch = new InternalIODispatch();
+            final IOEventDispatch ioEventDispatch = new InternalIODispatch(handler);
             this.connmgr.execute(ioEventDispatch);
         } catch (final Exception ex) {
             this.log.error("I/O reactor terminated abnormally", ex);
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
index 638fd36..71e8434 100644
--- 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
@@ -92,6 +92,7 @@
 import org.apache.http.impl.cookie.RFC2965SpecFactory;
 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;
@@ -181,6 +182,7 @@
     private RequestConfig defaultRequestConfig;
 
     private ThreadFactory threadFactory;
+    private NHttpClientEventHandler eventHandler;
 
     private boolean systemProperties;
     private boolean cookieManagementDisabled;
@@ -531,6 +533,16 @@
     }
 
     /**
+     * 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() {
@@ -779,6 +791,11 @@
             threadFactory = Executors.defaultThreadFactory();
         }
 
+        NHttpClientEventHandler eventHandler = this.eventHandler;
+        if (eventHandler == null) {
+            eventHandler = new LoggingAsyncRequestExecutor();
+        }
+
         final MainClientExec exec = new MainClientExec(
             connManager,
             httpprocessor,
@@ -798,7 +815,8 @@
             defaultCookieStore,
             defaultCredentialsProvider,
             defaultRequestConfig,
-            threadFactory);
+            threadFactory,
+            eventHandler);
     }
 
 }
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
index fac96d3..8e6dc10 100644
--- 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
@@ -41,6 +41,7 @@
 import org.apache.http.concurrent.FutureCallback;
 import org.apache.http.config.Lookup;
 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;
@@ -68,8 +69,9 @@
             final CookieStore cookieStore,
             final CredentialsProvider credentialsProvider,
             final RequestConfig defaultConfig,
-            final ThreadFactory threadFactory) {
-        super(connmgr, threadFactory);
+            final ThreadFactory threadFactory,
+            final NHttpClientEventHandler eventHandler) {
+        super(connmgr, threadFactory, eventHandler);
         this.connmgr = connmgr;
         this.exec = exec;
         this.cookieSpecRegistry = cookieSpecRegistry;
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
index 0c4fd44..cfdd4dc 100644
--- 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
@@ -38,9 +38,9 @@
 
     private final NHttpClientEventHandler handler;
 
-    public InternalIODispatch() {
+    public InternalIODispatch(final NHttpClientEventHandler handler) {
         super();
-        this.handler = new LoggingAsyncRequestExecutor();
+        this.handler = handler;
     }
 
     @Override
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
index 0174046..ca5a2f2 100644
--- 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
@@ -38,6 +38,7 @@
 import org.apache.http.concurrent.FutureCallback;
 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.HttpAsyncRequestProducer;
 import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
@@ -60,8 +61,9 @@
 
     public MinimalHttpAsyncClient(
             final NHttpClientConnectionManager connmgr,
-            final ThreadFactory threadFactory) {
-        super(connmgr, threadFactory);
+            final ThreadFactory threadFactory,
+            final NHttpClientEventHandler eventHandler) {
+        super(connmgr, threadFactory, eventHandler);
         this.connmgr = connmgr;
         final HttpProcessor httpProcessor = new ImmutableHttpProcessor(new RequestContent(),
                 new RequestTargetHost(),
@@ -76,6 +78,12 @@
     }
 
     public MinimalHttpAsyncClient(
+            final NHttpClientConnectionManager connmgr,
+            final ThreadFactory threadFactory) {
+        this(connmgr, threadFactory, new LoggingAsyncRequestExecutor());
+    }
+
+    public MinimalHttpAsyncClient(
             final NHttpClientConnectionManager connmgr) {
         this(connmgr, Executors.defaultThreadFactory());
     }
diff --git a/httpasyncclient/src/test/java/org/apache/http/localserver/RandomHandler.java b/httpasyncclient/src/test/java/org/apache/http/localserver/RandomHandler.java
index 65c3166..a774715 100644
--- a/httpasyncclient/src/test/java/org/apache/http/localserver/RandomHandler.java
+++ b/httpasyncclient/src/test/java/org/apache/http/localserver/RandomHandler.java
@@ -28,7 +28,6 @@
 package org.apache.http.localserver;
 
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
 import java.util.Locale;
 
 import org.apache.http.Consts;
