diff --git a/CHANGES.md b/CHANGES.md
index 9341431970433f76e616c56769455498ee829f4d..f5dd1d233b1a8fcaa9fba679fb37cf709f84e30f 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -10,11 +10,11 @@
 ## From 2.0 to 2.1
 
 * AHC 2.1 targets Netty 4.1.
-* `org.asynchttpclient.HttpResponseHeaders` was dropped in favor of `io.netty.handler.codec.http.HttpHeaders`.
-* `org.asynchttpclient.cookie.Cookie` was dropped in favor of `io.netty.handler.codec.http.cookie.Cookie` as AHC's cookie parsers were contributed to Netty.
+* `org.asynchttpclient.HttpResponseHeaders` was [dropped](https://github.com/AsyncHttpClient/async-http-client/commit/f4786f3ac7699f8f8664e7c7db0b7097585a0786) in favor of `io.netty.handler.codec.http.HttpHeaders`.
+* `org.asynchttpclient.cookie.Cookie` was [dropped](https://github.com/AsyncHttpClient/async-http-client/commit/a6d659ea0cc11fa5131304d8a04a7ba89c7a66af) in favor of `io.netty.handler.codec.http.cookie.Cookie` as AHC's cookie parsers were contributed to Netty.
 * AHC now has a RFC6265 `CookieStore` that is enabled by default. Implementation can be changed in `AsyncHttpClientConfig`.
 * `AsyncHttpClient` now exposes stats with `getClientStats`.
-* `AsyncHandlerExtensions` was dropped in favor of default methods in `AsyncHandler`.
+* `AsyncHandlerExtensions` was [dropped](https://github.com/AsyncHttpClient/async-http-client/commit/1972c9b9984d6d9f9faca6edd4f2159013205aea) in favor of default methods in `AsyncHandler`.
 * `WebSocket` and `WebSocketListener` methods were renamed to mention frames
 * `AsyncHttpClientConfig` various changes:
   * new `getCookieStore` now lets you configure a CookieStore (enabled by default)
diff --git a/README.md b/README.md
index 15f053b0b83579e054396e5c00395a7df5535f0b..4d456449965fce77d55bc1f901e98c0bc4e26832 100644
--- a/README.md
+++ b/README.md
@@ -116,7 +116,7 @@ This part can be of type:
 
 #### Blocking on the Future
 
-`execute` methods return a `java.util.concurrent.Future`. You can simply both the calling thread to get the response.
+`execute` methods return a `java.util.concurrent.Future`. You can simply block the calling thread to get the response.
 
 ```java
 Future<Response> whenResponse = asyncHttpClient.prepareGet("http://www.example.com/").execute();
diff --git a/client/pom.xml b/client/pom.xml
index 0c1d7dcd7c308a99d8934f73479b01c9f820e0db..17c4b9b582b76d9d4aae3d10935d7a1d1e1bf30f 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.asynchttpclient</groupId>
     <artifactId>async-http-client-project</artifactId>
-    <version>2.4.7</version>
+    <version>2.4.8</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>async-http-client</artifactId>
diff --git a/client/src/main/java/org/asynchttpclient/DefaultAsyncHttpClient.java b/client/src/main/java/org/asynchttpclient/DefaultAsyncHttpClient.java
index aa9138dc21d2a2b6c96ad63da5b6e5a2a8400255..8d2c3f7ab10fb7ec9cde6e760870643bcd4a2216 100644
--- a/client/src/main/java/org/asynchttpclient/DefaultAsyncHttpClient.java
+++ b/client/src/main/java/org/asynchttpclient/DefaultAsyncHttpClient.java
@@ -92,7 +92,8 @@ public class DefaultAsyncHttpClient implements AsyncHttpClient {
   }
 
   private Timer newNettyTimer(AsyncHttpClientConfig config) {
-    ThreadFactory threadFactory = new DefaultThreadFactory(config.getThreadPoolName() + "-timer");
+    ThreadFactory threadFactory = config.getThreadFactory() != null ? config.getThreadFactory() : new DefaultThreadFactory(config.getThreadPoolName() + "-timer");
+
     HashedWheelTimer timer = new HashedWheelTimer(threadFactory);
     timer.start();
     return timer;
diff --git a/client/src/main/java/org/asynchttpclient/HttpResponseStatus.java b/client/src/main/java/org/asynchttpclient/HttpResponseStatus.java
index 75c94b855fa29a128c9cf9c01dcbb306e1b9dca2..7cdd41465545c8a2fbde8bc9d51ff4193fdecfd0 100644
--- a/client/src/main/java/org/asynchttpclient/HttpResponseStatus.java
+++ b/client/src/main/java/org/asynchttpclient/HttpResponseStatus.java
@@ -36,7 +36,7 @@ public abstract class HttpResponseStatus {
    *
    * @return the request {@link Uri}
    */
-  public final Uri getUri() {
+  public Uri getUri() {
     return uri;
   }
 
diff --git a/client/src/main/java/org/asynchttpclient/netty/channel/NettyConnectListener.java b/client/src/main/java/org/asynchttpclient/netty/channel/NettyConnectListener.java
index 9c3c8901886575e823c31c8c6dff73fa92bbe10a..76bd652a44dd286cf6eb98633ca7af6e86cc56ef 100755
--- a/client/src/main/java/org/asynchttpclient/netty/channel/NettyConnectListener.java
+++ b/client/src/main/java/org/asynchttpclient/netty/channel/NettyConnectListener.java
@@ -175,9 +175,8 @@ public final class NettyConnectListener<T> {
 
     LOGGER.debug("Failed to recover from connect exception: {} with channel {}", cause, channel);
 
-    boolean printCause = cause.getMessage() != null;
-    String printedCause = printCause ? cause.getMessage() : future.getUri().getBaseUrl();
-    ConnectException e = new ConnectException(printedCause);
+    String message = cause.getMessage() != null ? cause.getMessage() : future.getUri().getBaseUrl();
+    ConnectException e = new ConnectException(message);
     e.initCause(cause);
     future.abort(e);
   }
diff --git a/client/src/test/java/org/asynchttpclient/handler/resumable/ResumableAsyncHandlerTest.java b/client/src/test/java/org/asynchttpclient/handler/resumable/ResumableAsyncHandlerTest.java
index 4fd77666ab864c775e00685f68879ec510a19f40..a46a424e38db8ae6501cf002c11d28886d9733f6 100644
--- a/client/src/test/java/org/asynchttpclient/handler/resumable/ResumableAsyncHandlerTest.java
+++ b/client/src/test/java/org/asynchttpclient/handler/resumable/ResumableAsyncHandlerTest.java
@@ -17,9 +17,6 @@ import io.netty.handler.codec.http.HttpHeaders;
 import org.asynchttpclient.*;
 import org.asynchttpclient.AsyncHandler.State;
 import org.asynchttpclient.uri.Uri;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.testng.PowerMockTestCase;
 import org.testng.annotations.Test;
 
 import java.io.IOException;
@@ -28,19 +25,14 @@ import java.nio.ByteBuffer;
 import static io.netty.handler.codec.http.HttpHeaderNames.CONTENT_LENGTH;
 import static io.netty.handler.codec.http.HttpHeaderNames.RANGE;
 import static org.asynchttpclient.Dsl.get;
-import static org.mockito.Matchers.anyObject;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-import static org.powermock.api.mockito.PowerMockito.mock;
+import static org.mockito.Mockito.*;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNull;
 
 /**
  * @author Benjamin Hanzelmann
  */
-@PrepareForTest({HttpResponseStatus.class, State.class})
-public class ResumableAsyncHandlerTest extends PowerMockTestCase {
+public class ResumableAsyncHandlerTest {
   @Test
   public void testAdjustRange() {
     MapResumableProcessor proc = new MapResumableProcessor();
@@ -89,14 +81,13 @@ public class ResumableAsyncHandlerTest extends PowerMockTestCase {
 
     @SuppressWarnings("unchecked")
     AsyncHandler<Response> decoratedAsyncHandler = mock(AsyncHandler.class);
-    State mockState = mock(State.class);
-    when(decoratedAsyncHandler.onStatusReceived(mockResponseStatus)).thenReturn(mockState);
+    when(decoratedAsyncHandler.onStatusReceived(mockResponseStatus)).thenReturn(State.CONTINUE);
 
     ResumableAsyncHandler handler = new ResumableAsyncHandler(decoratedAsyncHandler);
 
     State state = handler.onStatusReceived(mockResponseStatus);
     verify(decoratedAsyncHandler).onStatusReceived(mockResponseStatus);
-    assertEquals(state, mockState, "State returned should be equal to the one returned from decoratedAsyncHandler");
+    assertEquals(state, State.CONTINUE, "State returned should be equal to the one returned from decoratedAsyncHandler");
   }
 
   @Test
@@ -113,7 +104,7 @@ public class ResumableAsyncHandlerTest extends PowerMockTestCase {
   @Test
   public void testOnBodyPartReceived() throws Exception {
     ResumableAsyncHandler handler = new ResumableAsyncHandler();
-    HttpResponseBodyPart bodyPart = PowerMockito.mock(HttpResponseBodyPart.class);
+    HttpResponseBodyPart bodyPart = mock(HttpResponseBodyPart.class);
     when(bodyPart.getBodyPartBytes()).thenReturn(new byte[0]);
     ByteBuffer buffer = ByteBuffer.allocate(0);
     when(bodyPart.getBodyByteBuffer()).thenReturn(buffer);
@@ -125,11 +116,11 @@ public class ResumableAsyncHandlerTest extends PowerMockTestCase {
   public void testOnBodyPartReceivedWithResumableListenerThrowsException() throws Exception {
     ResumableAsyncHandler handler = new ResumableAsyncHandler();
 
-    ResumableListener resumableListener = PowerMockito.mock(ResumableListener.class);
-    doThrow(new IOException()).when(resumableListener).onBytesReceived(anyObject());
+    ResumableListener resumableListener = mock(ResumableListener.class);
+    doThrow(new IOException()).when(resumableListener).onBytesReceived(any());
     handler.setResumableListener(resumableListener);
 
-    HttpResponseBodyPart bodyPart = PowerMockito.mock(HttpResponseBodyPart.class);
+    HttpResponseBodyPart bodyPart = mock(HttpResponseBodyPart.class);
     State state = handler.onBodyPartReceived(bodyPart);
     assertEquals(state, AsyncHandler.State.ABORT,
             "State should be ABORT if the resumableListener threw an exception in onBodyPartReceived");
@@ -137,28 +128,26 @@ public class ResumableAsyncHandlerTest extends PowerMockTestCase {
 
   @Test
   public void testOnBodyPartReceivedWithDecoratedAsyncHandler() throws Exception {
-    HttpResponseBodyPart bodyPart = PowerMockito.mock(HttpResponseBodyPart.class);
+    HttpResponseBodyPart bodyPart = mock(HttpResponseBodyPart.class);
     when(bodyPart.getBodyPartBytes()).thenReturn(new byte[0]);
     ByteBuffer buffer = ByteBuffer.allocate(0);
     when(bodyPart.getBodyByteBuffer()).thenReturn(buffer);
 
     @SuppressWarnings("unchecked")
     AsyncHandler<Response> decoratedAsyncHandler = mock(AsyncHandler.class);
-    State mockState = mock(State.class);
-    when(decoratedAsyncHandler.onBodyPartReceived(bodyPart)).thenReturn(mockState);
+    when(decoratedAsyncHandler.onBodyPartReceived(bodyPart)).thenReturn(State.CONTINUE);
 
     // following is needed to set the url variable
     HttpResponseStatus mockResponseStatus = mock(HttpResponseStatus.class);
     when(mockResponseStatus.getStatusCode()).thenReturn(200);
-    Uri mockUri = mock(Uri.class);
-    when(mockUri.toUrl()).thenReturn("http://non.null");
-    when(mockResponseStatus.getUri()).thenReturn(mockUri);
+    Uri uri = Uri.create("http://non.null");
+    when(mockResponseStatus.getUri()).thenReturn(uri);
 
     ResumableAsyncHandler handler = new ResumableAsyncHandler(decoratedAsyncHandler);
     handler.onStatusReceived(mockResponseStatus);
 
     State state = handler.onBodyPartReceived(bodyPart);
-    assertEquals(state, mockState, "State should be equal to the state returned from decoratedAsyncHandler");
+    assertEquals(state, State.CONTINUE, "State should be equal to the state returned from decoratedAsyncHandler");
 
   }
 
@@ -176,12 +165,11 @@ public class ResumableAsyncHandlerTest extends PowerMockTestCase {
 
     @SuppressWarnings("unchecked")
     AsyncHandler<Response> decoratedAsyncHandler = mock(AsyncHandler.class);
-    State mockState = mock(State.class);
-    when(decoratedAsyncHandler.onHeadersReceived(responseHeaders)).thenReturn(mockState);
+    when(decoratedAsyncHandler.onHeadersReceived(responseHeaders)).thenReturn(State.CONTINUE);
 
     ResumableAsyncHandler handler = new ResumableAsyncHandler(decoratedAsyncHandler);
     State status = handler.onHeadersReceived(responseHeaders);
-    assertEquals(status, mockState, "State should be equal to the state returned from decoratedAsyncHandler");
+    assertEquals(status, State.CONTINUE, "State should be equal to the state returned from decoratedAsyncHandler");
   }
 
   @Test
diff --git a/client/src/test/java/org/asynchttpclient/handler/resumable/ResumableRandomAccessFileListenerTest.java b/client/src/test/java/org/asynchttpclient/handler/resumable/ResumableRandomAccessFileListenerTest.java
index cb0ebec2848cc4d76e0def3c986ea63bc2cb39d7..e7f509a0728e1ce1bf8d07ad8cbccdabcb66ad46 100644
--- a/client/src/test/java/org/asynchttpclient/handler/resumable/ResumableRandomAccessFileListenerTest.java
+++ b/client/src/test/java/org/asynchttpclient/handler/resumable/ResumableRandomAccessFileListenerTest.java
@@ -13,20 +13,19 @@
  */
 package org.asynchttpclient.handler.resumable;
 
-import org.powermock.api.mockito.PowerMockito;
 import org.testng.annotations.Test;
 
 import java.io.IOException;
 import java.io.RandomAccessFile;
 import java.nio.ByteBuffer;
 
-import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.*;
 
 public class ResumableRandomAccessFileListenerTest {
 
   @Test
   public void testOnBytesReceivedBufferHasArray() throws IOException {
-    RandomAccessFile file = PowerMockito.mock(RandomAccessFile.class);
+    RandomAccessFile file = mock(RandomAccessFile.class);
     ResumableRandomAccessFileListener listener = new ResumableRandomAccessFileListener(file);
     byte[] array = new byte[]{1, 2, 23, 33};
     ByteBuffer buf = ByteBuffer.wrap(array);
@@ -36,7 +35,7 @@ public class ResumableRandomAccessFileListenerTest {
 
   @Test
   public void testOnBytesReceivedBufferHasNoArray() throws IOException {
-    RandomAccessFile file = PowerMockito.mock(RandomAccessFile.class);
+    RandomAccessFile file = mock(RandomAccessFile.class);
     ResumableRandomAccessFileListener listener = new ResumableRandomAccessFileListener(file);
 
     byte[] byteArray = new byte[]{1, 2, 23, 33};
diff --git a/example/pom.xml b/example/pom.xml
index f3db1d5df765fd65fcaa1a885b580fe241c1643b..f669720a7d68f24e15d34b624ef244bad0c8118f 100644
--- a/example/pom.xml
+++ b/example/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.asynchttpclient</groupId>
     <artifactId>async-http-client-project</artifactId>
-    <version>2.4.7</version>
+    <version>2.4.8</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>async-http-client-example</artifactId>
diff --git a/extras/guava/pom.xml b/extras/guava/pom.xml
index e0c2db6be512e59c3104b1c4f9c7becc4c49e85c..f9b1a22b73d72aba5d067ffc772d7ee693c25ded 100644
--- a/extras/guava/pom.xml
+++ b/extras/guava/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.asynchttpclient</groupId>
     <artifactId>async-http-client-extras-parent</artifactId>
-    <version>2.4.7</version>
+    <version>2.4.8</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>async-http-client-extras-guava</artifactId>
diff --git a/extras/jdeferred/pom.xml b/extras/jdeferred/pom.xml
index 0e15be7d8f7fa7c9095950a4516199a1667decd3..2e0b1b540016bfa9fa7045eec4ab86fbe966b000 100644
--- a/extras/jdeferred/pom.xml
+++ b/extras/jdeferred/pom.xml
@@ -18,7 +18,7 @@
   <parent>
     <artifactId>async-http-client-extras-parent</artifactId>
     <groupId>org.asynchttpclient</groupId>
-    <version>2.4.7</version>
+    <version>2.4.8</version>
   </parent>
   <artifactId>async-http-client-extras-jdeferred</artifactId>
   <name>Asynchronous Http Client JDeferred Extras</name>
diff --git a/extras/pom.xml b/extras/pom.xml
index 71b876c6b7ab9b3bbcf12d04d484c822117b7434..f87b0f67d7c2fcc45794dea8c1ebdb2febb12a66 100644
--- a/extras/pom.xml
+++ b/extras/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.asynchttpclient</groupId>
     <artifactId>async-http-client-project</artifactId>
-    <version>2.4.7</version>
+    <version>2.4.8</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>async-http-client-extras-parent</artifactId>
diff --git a/extras/registry/pom.xml b/extras/registry/pom.xml
index 7d74bfa1738711dae46285d4763d4eca1b797da0..7d6d4944f75325bab82b0ecffd4a3dbb7635ffc4 100644
--- a/extras/registry/pom.xml
+++ b/extras/registry/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.asynchttpclient</groupId>
     <artifactId>async-http-client-extras-parent</artifactId>
-    <version>2.4.7</version>
+    <version>2.4.8</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>async-http-client-extras-registry</artifactId>
diff --git a/extras/retrofit2/pom.xml b/extras/retrofit2/pom.xml
index 1bcec496bfe4fd839c3f1bebfab5d6ae18045e78..5a66cf2f3120ff70cf96e7ab7caefbf895340bd2 100644
--- a/extras/retrofit2/pom.xml
+++ b/extras/retrofit2/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <artifactId>async-http-client-extras-parent</artifactId>
     <groupId>org.asynchttpclient</groupId>
-    <version>2.4.7</version>
+    <version>2.4.8</version>
   </parent>
 
   <artifactId>async-http-client-extras-retrofit2</artifactId>
@@ -12,8 +12,8 @@
   <description>The Async Http Client Retrofit2 Extras.</description>
 
   <properties>
-    <retrofit2.version>2.3.0</retrofit2.version>
-    <lombok.version>1.16.18</lombok.version>
+    <retrofit2.version>2.4.0</retrofit2.version>
+    <lombok.version>1.16.20</lombok.version>
   </properties>
 
   <dependencies>
diff --git a/extras/retrofit2/src/test/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCallTest.java b/extras/retrofit2/src/test/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCallTest.java
index 68ef94624cdc13b17457a229e19fa6cf050fb9f9..90ab4b33e50c37e79a5dc71de84fc265580c7485 100644
--- a/extras/retrofit2/src/test/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCallTest.java
+++ b/extras/retrofit2/src/test/java/org/asynchttpclient/extras/retrofit/AsyncHttpClientCallTest.java
@@ -86,7 +86,7 @@ public class AsyncHttpClientCallTest {
 
         when(httpClient.executeRequest((org.asynchttpclient.Request) any(), any())).then(invocationOnMock -> {
             @SuppressWarnings("rawtypes")
-            val handler = invocationOnMock.getArgumentAt(1, AsyncCompletionHandler.class);
+            AsyncCompletionHandler<?> handler = invocationOnMock.getArgument(1);
             handlerConsumer.accept(handler);
             return null;
         });
@@ -283,7 +283,7 @@ public class AsyncHttpClientCallTest {
 
     private void givenResponseIsProduced(AsyncHttpClient client, Response response) {
         when(client.executeRequest(any(org.asynchttpclient.Request.class), any())).thenAnswer(invocation -> {
-            AsyncCompletionHandler<Response> handler = invocation.getArgumentAt(1, AsyncCompletionHandler.class);
+            AsyncCompletionHandler<Response> handler = invocation.getArgument(1);
             handler.onCompleted(response);
             return null;
         });
diff --git a/extras/retrofit2/src/test/java/org/asynchttpclient/extras/retrofit/TestServices.java b/extras/retrofit2/src/test/java/org/asynchttpclient/extras/retrofit/TestServices.java
index 5688488a1b1d56c99050fd40aef482d82ea2c2b6..cb8872acb6146d689df9ef8666a0db7748700cd8 100644
--- a/extras/retrofit2/src/test/java/org/asynchttpclient/extras/retrofit/TestServices.java
+++ b/extras/retrofit2/src/test/java/org/asynchttpclient/extras/retrofit/TestServices.java
@@ -13,8 +13,7 @@
 package org.asynchttpclient.extras.retrofit;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import lombok.NonNull;
-import lombok.Value;
+import lombok.*;
 import retrofit2.Call;
 import retrofit2.http.GET;
 import retrofit2.http.Path;
@@ -51,7 +50,9 @@ class TestServices {
     io.reactivex.Single<List<Contributor>> contributors(@Path("owner") String owner, @Path("repo") String repo);
   }
 
-  @Value
+  @Data
+  @NoArgsConstructor
+  @AllArgsConstructor
   @JsonIgnoreProperties(ignoreUnknown = true)
   static class Contributor implements Serializable {
     private static final long serialVersionUID = 1;
diff --git a/extras/rxjava/pom.xml b/extras/rxjava/pom.xml
index 60cc530f6a20919bc50dfc5a2bbf587d0c9e093b..645866d964bfbbbb6f12215add292afa2b4e9581 100644
--- a/extras/rxjava/pom.xml
+++ b/extras/rxjava/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>async-http-client-extras-parent</artifactId>
     <groupId>org.asynchttpclient</groupId>
-    <version>2.4.7</version>
+    <version>2.4.8</version>
   </parent>
   <artifactId>async-http-client-extras-rxjava</artifactId>
   <name>Asynchronous Http Client RxJava Extras</name>
diff --git a/extras/rxjava/src/test/java/org/asynchttpclient/extras/rxjava/single/AsyncHttpSingleTest.java b/extras/rxjava/src/test/java/org/asynchttpclient/extras/rxjava/single/AsyncHttpSingleTest.java
index 90b2446b797b2731209f8f2f19f78c5c30e8ac7a..018da8044c7bacc053a3eb01c61b8e82c692bf74 100644
--- a/extras/rxjava/src/test/java/org/asynchttpclient/extras/rxjava/single/AsyncHttpSingleTest.java
+++ b/extras/rxjava/src/test/java/org/asynchttpclient/extras/rxjava/single/AsyncHttpSingleTest.java
@@ -31,17 +31,7 @@ import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.isA;
-import static org.mockito.Mockito.doThrow;
-import static org.mockito.Mockito.inOrder;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.verifyZeroInteractions;
-import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.*;
 import static org.testng.Assert.assertEquals;
 
 public class AsyncHttpSingleTest {
diff --git a/extras/rxjava2/pom.xml b/extras/rxjava2/pom.xml
index 958497e86a032d824167acdbd5210805b0e1e0a0..edfd268b44fba0b4380679070cfc5a054913105c 100644
--- a/extras/rxjava2/pom.xml
+++ b/extras/rxjava2/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>async-http-client-extras-parent</artifactId>
     <groupId>org.asynchttpclient</groupId>
-    <version>2.4.7</version>
+    <version>2.4.8</version>
   </parent>
   <artifactId>async-http-client-extras-rxjava2</artifactId>
   <name>Asynchronous Http Client RxJava2 Extras</name>
diff --git a/extras/simple/pom.xml b/extras/simple/pom.xml
index 72c40a15afd34175c440050f010aaa3ee77973a1..b1250a8a73290a12296a766887f5d7c727f48cd6 100644
--- a/extras/simple/pom.xml
+++ b/extras/simple/pom.xml
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>async-http-client-extras-parent</artifactId>
     <groupId>org.asynchttpclient</groupId>
-    <version>2.4.7</version>
+    <version>2.4.8</version>
   </parent>
   <artifactId>async-http-client-extras-simple</artifactId>
   <name>Asynchronous Http Simple Client</name>
diff --git a/extras/typesafeconfig/pom.xml b/extras/typesafeconfig/pom.xml
index 3fe1e0ec644ec557530ecd8335c6e42ac5d6250b..dd0fb7766a865640b540f534b6447e807bca9089 100644
--- a/extras/typesafeconfig/pom.xml
+++ b/extras/typesafeconfig/pom.xml
@@ -4,7 +4,7 @@
   <parent>
     <artifactId>async-http-client-extras-parent</artifactId>
     <groupId>org.asynchttpclient</groupId>
-    <version>2.4.7</version>
+    <version>2.4.8</version>
   </parent>
 
   <artifactId>async-http-client-extras-typesafe-config</artifactId>
diff --git a/netty-utils/pom.xml b/netty-utils/pom.xml
index 8ddae6d3d254e8b4143ad3229dfc559581c45402..753aaed2738185fab5c069ad573438f943114dfd 100644
--- a/netty-utils/pom.xml
+++ b/netty-utils/pom.xml
@@ -2,7 +2,7 @@
   <parent>
     <groupId>org.asynchttpclient</groupId>
     <artifactId>async-http-client-project</artifactId>
-    <version>2.4.7</version>
+    <version>2.4.8</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>async-http-client-netty-utils</artifactId>
diff --git a/pom.xml b/pom.xml
index e375002065c59e930abedae282cdc55589a5a4f1..36a3dd5c7cb474b0ff7a8e7d87b265db3438f9eb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
   <groupId>org.asynchttpclient</groupId>
   <artifactId>async-http-client-project</artifactId>
   <name>Asynchronous Http Client Project</name>
-  <version>2.4.7</version>
+  <version>2.4.8</version>
   <packaging>pom</packaging>
   <description>
     The Async Http Client (AHC) library's purpose is to allow Java
@@ -300,6 +300,11 @@
       <artifactId>slf4j-api</artifactId>
       <version>${slf4j.version}</version>
     </dependency>
+    <dependency>
+      <groupId>com.sun.activation</groupId>
+      <artifactId>javax.activation</artifactId>
+      <version>${activation.version}</version>
+    </dependency>
     <!-- Test dependencies -->
     <dependency>
       <groupId>ch.qos.logback</groupId>
@@ -380,16 +385,14 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.powermock</groupId>
-      <artifactId>powermock-module-testng</artifactId>
-      <version>${powermock.version}</version>
-      <scope>test</scope>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <version>${mockito.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.powermock</groupId>
-      <artifactId>powermock-api-mockito</artifactId>
-      <version>${powermock.version}</version>
-      <scope>test</scope>
+      <groupId>org.hamcrest</groupId>
+      <artifactId>java-hamcrest</artifactId>
+      <version>${hamcrest.version}</version>
     </dependency>
   </dependencies>
   <properties>
@@ -397,19 +400,21 @@
     <surefire.redirectTestOutputToFile>true</surefire.redirectTestOutputToFile>
     <source.property>1.8</source.property>
     <target.property>1.8</target.property>
-    <netty.version>4.1.24.Final</netty.version>
+    <netty.version>4.1.25.Final</netty.version>
     <slf4j.version>1.7.25</slf4j.version>
     <reactive-streams.version>1.0.2</reactive-streams.version>
+    <activation.version>1.2.0</activation.version>
     <netty-reactive-streams.version>2.0.0</netty-reactive-streams.version>
-    <rxjava.version>1.3.6</rxjava.version>
-    <rxjava2.version>2.1.13</rxjava2.version>
+    <rxjava.version>1.3.8</rxjava.version>
+    <rxjava2.version>2.1.14</rxjava2.version>
     <logback.version>1.2.3</logback.version>
     <testng.version>6.13.1</testng.version>
-    <jetty.version>9.4.9.v20180320</jetty.version>
+    <jetty.version>9.4.8.v20171121</jetty.version>
     <tomcat.version>9.0.7</tomcat.version>
     <commons-io.version>2.6</commons-io.version>
     <commons-fileupload.version>1.3.3</commons-fileupload.version>
     <privilegedaccessor.version>1.2.2</privilegedaccessor.version>
-    <powermock.version>1.6.6</powermock.version>
+    <mockito.version>2.18.3</mockito.version>
+    <hamcrest.version>2.0.0.0</hamcrest.version>
   </properties>
 </project>