diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/HttpServiceImpl.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/HttpServiceImpl.java
index c63df3006872929b8bf33a6832e9f60171085a15..9f74e06722e6f3d6af333ef7cfb83e833a3cc21c 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/HttpServiceImpl.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/HttpServiceImpl.java
@@ -128,20 +128,12 @@ public class HttpServiceImpl implements HttpService, Closeable, InitializingBean
 
     @Override
     public void close() throws IOException {
-        HttpClients.getThreadHttpClient()
-//        httpClientCache.clear();
-//        requestConfigCache.clear();
-//
-//        if (wsEndPoints.size() != 0) {
-//            for (WebsocketClientEndpoint clientEndPoint: wsEndPoints.values()) {
-//                clientEndPoint.close();
-//            }
-//            wsEndPoints.clear();
-//        }
-//
-//        if (connectionManager != null) {
-//            connectionManager.close();
-//        }
+        if (wsEndPoints.size() != 0) {
+            for (WebsocketClientEndpoint clientEndPoint: wsEndPoints.values()) {
+                clientEndPoint.close();
+            }
+            wsEndPoints.clear();
+        }
     }
 
     public <T> T executeRequest(HttpUriRequest request, Class<? extends T> resultClass)  {
@@ -204,97 +196,6 @@ public class HttpServiceImpl implements HttpService, Closeable, InitializingBean
         }
     }
 
-//    protected PoolingHttpClientConnectionManager createConnectionManager(
-//            int maxTotalConnections,
-//            int maxConnectionsPerRoute,
-//            int timeout) {
-//        PoolingHttpClientConnectionManager connectionManager
-//                = new PoolingHttpClientConnectionManager();
-//        connectionManager.setMaxTotal(maxTotalConnections);
-//        connectionManager.setDefaultMaxPerRoute(maxConnectionsPerRoute);
-//        connectionManager.setDefaultSocketConfig(SocketConfig.custom()
-//                .setSoTimeout(timeout).build());
-//        return connectionManager;
-//    }
-//
-//    protected HttpClient createHttpClient(int timeout) {
-//        if (connectionManager == null) {
-//            Configuration config = Configuration.instance();
-//            connectionManager = createConnectionManager(
-//                    config.getNetworkMaxTotalConnections(),
-//                    config.getNetworkMaxConnectionsPerRoute(),
-//                    config.getNetworkTimeout());
-//        }
-//
-//        return HttpClients.custom()
-//                .setConnectionManager(connectionManager)
-//                .setDefaultRequestConfig(requestConfigCache.get(timeout))
-//                .setRetryHandler(httpRetryHandlerCache.get(timeout))
-//                .build();
-//    }
-//
-//    protected HttpRequestRetryHandler createRetryHandler(int timeout) {
-//        if (timeout <= 0) timeout = defaultTimeout;
-//        final int maxRetryCount = (timeout < defaultTimeout) ? 2 : 3;
-//        return new HttpRequestRetryHandler() {
-//            public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
-//
-//                log.warn("Failed request: " + exception.getMessage());
-//
-//                boolean retrying = true;
-//                if (exception instanceof NoRouteToHostException) {
-//                    // Bad DNS name
-//                    retrying =false;
-//                }
-//                else if (exception instanceof InterruptedIOException) {
-//                    // Timeout
-//                    retrying = false;
-//                }
-//                else if (exception instanceof UnknownHostException) {
-//                    // Unknown host
-//                    retrying = false;
-//                }
-//                else if (exception instanceof SSLException) {
-//                    // SSL handshake exception
-//                    retrying = false;
-//                }
-//                else if (exception instanceof HttpHostConnectException) {
-//                    // Host connect error
-//                    retrying = false;
-//                }
-//
-//                if (retrying && executionCount >= maxRetryCount) {
-//                    // Do not retry if over max retry count
-//                    return false;
-//                }
-//
-//
-//                HttpClientContext clientContext = HttpClientContext.adapt(context);
-//                HttpRequest request = clientContext.getRequest();
-//                if (!retrying) {
-//                    if (debug) log.debug("Failed request to " + request.getRequestLine() + ": " + exception.getMessage());
-//                    return false;
-//                }
-//
-//                boolean idempotent = !(request instanceof HttpEntityEnclosingRequest);
-//                if (idempotent) {
-//                    // Retry if the request is considered idempotent
-//                    if (debug) log.debug("Failed (but will retry) request to " + request.getRequestLine() + ": " + exception.getMessage());
-//                    return true;
-//                }
-//                return false;
-//            }
-//        };
-//    }
-//
-//    protected RequestConfig createRequestConfig(int timeout) {
-//        return RequestConfig.custom()
-//                .setSocketTimeout(timeout).setConnectTimeout(timeout)
-//                .setMaxRedirects(1)
-//                .setCookieSpec(CookieSpecs.IGNORE_COOKIES)
-//                .build();
-//    }
-
     protected <T> T executeRequest(HttpClient httpClient, HttpUriRequest request, Class<? extends T> resultClass)  {
         return executeRequest(httpClient, request, resultClass, Error.class);
     }
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/util/http/HttpClients.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/util/http/HttpClients.java
index 70d7a6608ed3ef1c830727b1f9ad13d66d6e4081..53b8a5e58cd16236836ed11c84184d1284e7a6a3 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/util/http/HttpClients.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/util/http/HttpClients.java
@@ -29,6 +29,9 @@ public abstract class HttpClients {
     private static ThreadLocal<HttpClientConnectionManager> connectionManagerMapper = new ThreadLocal<HttpClientConnectionManager>() {
         @Override
         public HttpClientConnectionManager initialValue() {
+
+            if (log.isDebugEnabled()) log.debug("[HttpClients] Creating new HttpClientConnectionManager, for thread [%s]", Thread.currentThread().getId());
+
             Configuration config = Configuration.instance();
 
             return createConnectionManager(
@@ -42,8 +45,14 @@ public abstract class HttpClients {
         @Override
         public HttpClient initialValue() {
             HttpClientConnectionManager connectionManager= connectionManagerMapper.get();
+            if (log.isDebugEnabled()) log.debug("[HttpClients] Creating new HttpClient, for thread [%s]", Thread.currentThread().getId());
             return createHttpClient(connectionManager, 0);
         }
+
+        @Override
+        public void remove() {
+            super.remove();
+        }
     };
 
     public static HttpClient getThreadHttpClient(final Integer timeout) {
@@ -58,14 +67,18 @@ public abstract class HttpClients {
     }
 
     /**
-     * Remlove client from the thread
+     * Remove client from the thread
      */
     public static void remove() {
         connectionManagerMapper.remove();
         httpClientsMapper.remove();
     }
 
-    protected static HttpClient createHttpClient(HttpClientConnectionManager connectionManager, int timeout) {
+    public static HttpClient createHttpClient(int timeout) {
+        return createHttpClient(null,timeout);
+    }
+
+    public static HttpClient createHttpClient(HttpClientConnectionManager connectionManager, int timeout) {
         if (timeout <= 0)  {
             Configuration config = Configuration.instance();
             timeout = config.getNetworkTimeout();
@@ -79,7 +92,7 @@ public abstract class HttpClients {
     }
 
 
-    protected static PoolingHttpClientConnectionManager createConnectionManager(
+    public static PoolingHttpClientConnectionManager createConnectionManager(
             int maxTotalConnections,
             int maxConnectionsPerRoute,
             int timeout) {
@@ -92,7 +105,7 @@ public abstract class HttpClients {
         return connectionManager;
     }
 
-    protected static RequestConfig createRequestConfig(int timeout) {
+    public static RequestConfig createRequestConfig(int timeout) {
         return RequestConfig.custom()
                 .setSocketTimeout(timeout).setConnectTimeout(timeout)
                 .setMaxRedirects(1)