diff --git a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java
index 12f02e4..ca242d6 100644
--- a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java
+++ b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/GitHubOAuthConfig.java
@@ -18,7 +18,6 @@
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import com.google.common.collect.Maps;
-import com.google.gerrit.httpd.ProxyProperties;
 import com.google.gerrit.reviewdb.client.AuthType;
 import com.google.gerrit.server.config.AuthConfig;
 import com.google.gerrit.server.config.CanonicalWebUrl;
@@ -68,8 +67,7 @@
   protected
   GitHubOAuthConfig(@GerritServerConfig Config config,
       @CanonicalWebUrl String canonicalWebUrl, 
-      AuthConfig authConfig,
-      ProxyProperties proxyProperties) {
+      AuthConfig authConfig) {
     httpHeader =
         Preconditions.checkNotNull(
             config.getString("auth", null, "httpHeader"),
@@ -107,21 +105,6 @@
         config.getInt(CONF_SECTION, "fileUpdateMaxRetryCount", 3);
     fileUpdateMaxRetryIntervalMsec =
         config.getInt(CONF_SECTION, "fileUpdateMaxRetryIntervalMsec", 3000);
-
-    URL proxyUrl = proxyProperties.getProxyUrl();
-    if (proxyUrl != null) {
-      setProxyProperty("proxyHost", proxyUrl.getHost());
-      setProxyProperty("proxyPort", "" + proxyUrl.getPort());
-      setProxyProperty("proxyUser", proxyProperties.getUsername());
-      setProxyProperty("proxyPassword", proxyProperties.getPassword());
-    }
-  }
-
-  private static void setProxyProperty(String property, String value) {
-    if (value != null) {
-      System.setProperty("http." + property, value);
-      System.setProperty("https." + property, value);
-    }
   }
 
   private Map<String, List<Scope>> getScopes(Config config) {
diff --git a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/PooledHttpClientProvider.java b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/PooledHttpClientProvider.java
index 0263877..4376242 100644
--- a/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/PooledHttpClientProvider.java
+++ b/github-oauth/src/main/java/com/googlesource/gerrit/plugins/github/oauth/PooledHttpClientProvider.java
@@ -41,12 +41,27 @@
   PooledHttpClientProvider(@GerritServerConfig Config config,
       ProxyProperties proxyProperties) {
     this.proxy = proxyProperties;
+    URL proxyUrl = proxyProperties.getProxyUrl();
+    if (proxyUrl != null) {
+      setProxyProperty("proxyHost", proxyUrl.getHost());
+      setProxyProperty("proxyPort", "" + proxyUrl.getPort());
+      setProxyProperty("proxyUser", proxyProperties.getUsername());
+      setProxyProperty("proxyPassword", proxyProperties.getPassword());
+    }
+
     maxConnectionPerRoute = config.getInt("http", null,
         "pooledMaxConnectionsPerRoute", 16);
     maxTotalConnection = config.getInt("http", null,
         "pooledMaxTotalConnections", 32);
   }
 
+  private static void setProxyProperty(String property, String value) {
+    if (value != null) {
+      System.setProperty("http." + property, value);
+      System.setProperty("https." + property, value);
+    }
+  }
+
   @Override
   public HttpClient get() {
     HttpClientBuilder builder = HttpClientBuilder
diff --git a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GitHubConfig.java b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GitHubConfig.java
index 51e63a7..249a61e 100644
--- a/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GitHubConfig.java
+++ b/github-plugin/src/main/java/com/googlesource/gerrit/plugins/github/GitHubConfig.java
@@ -15,7 +15,6 @@
 
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.Maps;
-import com.google.gerrit.httpd.ProxyProperties;
 import com.google.gerrit.server.config.AllProjectsNameProvider;
 import com.google.gerrit.server.config.AuthConfig;
 import com.google.gerrit.server.config.CanonicalWebUrl;
@@ -79,10 +78,9 @@
       final SitePaths site, 
       AllProjectsNameProvider allProjectsNameProvider,
       @CanonicalWebUrl String canonicalWebUrl, 
-      AuthConfig authConfig,
-      ProxyProperties proxyProperties)
+      AuthConfig authConfig)
       throws MalformedURLException {
-    super(config, canonicalWebUrl, authConfig, proxyProperties);
+    super(config, canonicalWebUrl, authConfig);
     String[] wizardFlows =
         config.getStringList(CONF_SECTION, null, CONF_WIZARD_FLOW);
     for (String fromTo : wizardFlows) {
