diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/HttpResponse.java b/src/main/java/com/googlesource/gerrit/plugins/importer/HttpResponse.java
index 4cd58dd..34786d3 100755
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/HttpResponse.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/HttpResponse.java
@@ -16,6 +16,7 @@
 
 import com.google.common.base.Preconditions;
 
+import org.apache.http.client.methods.CloseableHttpResponse;
 import org.eclipse.jgit.util.IO;
 import org.eclipse.jgit.util.RawParseUtils;
 
@@ -24,12 +25,12 @@
 import java.io.Reader;
 import java.nio.ByteBuffer;
 
-public class HttpResponse {
+public class HttpResponse implements AutoCloseable {
 
-  protected org.apache.http.HttpResponse response;
+  protected CloseableHttpResponse response;
   protected Reader reader;
 
-  HttpResponse(org.apache.http.HttpResponse response) {
+  HttpResponse(CloseableHttpResponse response) {
     this.response = response;
   }
 
@@ -40,10 +41,15 @@
     return reader;
   }
 
-  public void consume() throws IllegalStateException, IOException {
-    Reader reader = getReader();
-    if (reader != null) {
-      while (reader.read() != -1);
+  @Override
+  public void close() throws IOException {
+    try {
+      Reader reader = getReader();
+      if (reader != null) {
+        while (reader.read() != -1);
+      }
+    } finally {
+      response.close();
     }
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/HttpSession.java b/src/main/java/com/googlesource/gerrit/plugins/importer/HttpSession.java
index 31329b3..cf49557 100755
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/HttpSession.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/HttpSession.java
@@ -18,11 +18,11 @@
 
 import org.apache.http.auth.AuthScope;
 import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 import org.apache.http.conn.ssl.X509HostnameVerifier;
 import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 
 import java.io.IOException;
@@ -43,7 +43,7 @@
   protected final String url;
   private final String user;
   private final String pass;
-  private HttpClient client;
+  private CloseableHttpClient client;
 
   public HttpSession(String url, String user, String pass) {
     this.url = CharMatcher.is('/').trimTrailingFrom(url);
@@ -56,7 +56,7 @@
     return new HttpResponse(getClient().execute(get));
   }
 
-  protected HttpClient getClient() throws IOException {
+  protected CloseableHttpClient getClient() throws IOException {
     if (client == null) {
       URI uri = URI.create(url);
       BasicCredentialsProvider creds = new BasicCredentialsProvider();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/RemoteApi.java b/src/main/java/com/googlesource/gerrit/plugins/importer/RemoteApi.java
index d48ca5d..967069e 100755
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/RemoteApi.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/RemoteApi.java
@@ -42,9 +42,10 @@
   public ProjectInfo getProject(String projectName) throws IOException,
       BadRequestException {
     String endPoint = "/projects/" + projectName;
-    RestResponse r = checkedGet(endPoint);
-    return newGson().fromJson(r.getReader(),
-        new TypeToken<ProjectInfo>() {}.getType());
+    try (RestResponse r = checkedGet(endPoint)) {
+      return newGson().fromJson(r.getReader(),
+          new TypeToken<ProjectInfo>() {}.getType());
+    }
   }
 
   public List<ChangeInfo> queryChanges(String projectName) throws IOException,
@@ -59,10 +60,12 @@
                 ListChangesOption.CURRENT_REVISION,
                 ListChangesOption.ALL_REVISIONS,
                 ListChangesOption.ALL_COMMITS)));
-    RestResponse r = checkedGet(endPoint);
-    List<ChangeInfo> result =
-        newGson().fromJson(r.getReader(),
+
+    List<ChangeInfo> result;
+    try (RestResponse r = checkedGet(endPoint)) {
+      result = newGson().fromJson(r.getReader(),
             new TypeToken<List<ChangeInfo>>() {}.getType());
+    }
 
     for (ChangeInfo c : result) {
       for (Map.Entry<String, RevisionInfo> e : c.revisions.entrySet()) {
@@ -76,10 +79,11 @@
   public Iterable<CommentInfo> getComments(int changeId, String rev)
       throws IOException, BadRequestException {
     String endPoint = "/changes/" + changeId + "/revisions/" + rev + "/comments";
-    RestResponse r = checkedGet(endPoint);
-    Map<String, List<CommentInfo>> result =
-        newGson().fromJson(r.getReader(),
-            new TypeToken<Map<String, List<CommentInfo>>>() {}.getType());
+    Map<String, List<CommentInfo>> result;
+    try (RestResponse r = checkedGet(endPoint)) {
+      result = newGson().fromJson(r.getReader(),
+              new TypeToken<Map<String, List<CommentInfo>>>() {}.getType());
+    }
     for (Map.Entry<String, List<CommentInfo>> e : result.entrySet()) {
       for (CommentInfo i : e.getValue()) {
         i.path = e.getKey();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/importer/RestResponse.java b/src/main/java/com/googlesource/gerrit/plugins/importer/RestResponse.java
index 512db6e..24f6831 100755
--- a/src/main/java/com/googlesource/gerrit/plugins/importer/RestResponse.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/importer/RestResponse.java
@@ -16,13 +16,15 @@
 
 import static com.google.gerrit.httpd.restapi.RestApiServlet.JSON_MAGIC;
 
+import org.apache.http.client.methods.CloseableHttpResponse;
+
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
 
 public class RestResponse extends HttpResponse {
 
-  RestResponse(org.apache.http.HttpResponse response) {
+  RestResponse(CloseableHttpResponse response) {
     super(response);
   }
 
