diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/RTCItsFacade.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/RTCItsFacade.java
index 1545859..dd75fed 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/RTCItsFacade.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/RTCItsFacade.java
@@ -125,11 +125,6 @@
     return gerritConfig.getString(pluginName, null, GERRIT_CONFIG_CCM_URL);
   }
 
-  private boolean getSslVerify() {
-    return gerritConfig.getBoolean(pluginName, null,
-        GERRIT_CONFIG_SSL_VERIFY, true);
-  }
-
   @Override
   public String createLinkForWebui(String url, String text) {
     return "<a href=\"" + url + "\">" + text + "</a>";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/network/CachableResourcesFactory.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/network/CachableResourcesFactory.java
index 4aba41d..3d0a5c5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/network/CachableResourcesFactory.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/network/CachableResourcesFactory.java
@@ -33,11 +33,10 @@
     return (T) getFactory(clazz).get(url);
   }
 
-  @SuppressWarnings("unchecked")
   private <T> InternalFactory<?> getFactory(Class<T> clazz) {
     InternalFactory<?> factory = factories.get(clazz);
     if (factory == null) {
-      factory = new InternalFactory(transport, clazz);
+      factory = new InternalFactory<>(transport, clazz);
       factories.put(clazz, factory);
     }
     return factory;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/network/Transport.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/network/Transport.java
index fb50058..e9ab550 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/network/Transport.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/network/Transport.java
@@ -20,6 +20,7 @@
 import java.lang.reflect.Type;
 import java.net.MalformedURLException;
 import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.List;
 
@@ -40,7 +41,6 @@
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.DefaultHttpClient;
 import org.apache.http.params.HttpParams;
-import org.apache.http.protocol.HTTP;
 
 import com.google.gson.Gson;
 import com.google.gson.JsonObject;
@@ -80,7 +80,7 @@
     if (log.isDebugEnabled())
       log.debug("Preparing PUT against " + request.getURI() + " using etag "
           + etag + " and data " + data);
-    request.setEntity(new StringEntity(data.toString(), HTTP.UTF_8));
+    request.setEntity(new StringEntity(data.toString(), StandardCharsets.UTF_8));
     if (etag != null) request.addHeader("If-Match", etag);
     return invoke(request, typeOrClass, APP_OSLC, APP_OSLC);
   }
@@ -91,7 +91,7 @@
     if (log.isDebugEnabled())
       log.debug("Preparing PATCH against " + request.getURI() + " using etag "
           + etag + " and data " + data);
-    request.setEntity(new StringEntity(data.toString(), HTTP.UTF_8));
+    request.setEntity(new StringEntity(data.toString(), StandardCharsets.UTF_8));
     if (etag != null) request.addHeader("If-Match", etag);
     return invoke(request, typeOrClass, APP_OSLC, APP_OSLC);
   }
@@ -104,7 +104,7 @@
       log.debug("Preparing POST against " + request.getURI() + " using params "
           + Arrays.asList(params));
     List<NameValuePair> nameValuePairs = Arrays.asList(params);
-    request.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));
+    request.setEntity(new UrlEncodedFormEntity(nameValuePairs, StandardCharsets.UTF_8));
     return invoke(request, typeOrClass, contentType, null);
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/session/SessionApiImpl.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/session/SessionApiImpl.java
index 1eb5d68..6362c48 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/session/SessionApiImpl.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/session/SessionApiImpl.java
@@ -18,7 +18,6 @@
 import org.apache.http.message.BasicNameValuePair;
 
 import com.googlesource.gerrit.plugins.hooks.rtc.network.AuthenticationException;
-import com.googlesource.gerrit.plugins.hooks.rtc.network.InvalidContentTypeException;
 import com.googlesource.gerrit.plugins.hooks.rtc.network.RTCClient;
 import com.googlesource.gerrit.plugins.hooks.rtc.network.Transport;
 import com.googlesource.gerrit.plugins.hooks.rtc.workitems.AbstractApiImpl;
