diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookArgs.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookArgs.java
index 61af73b..fa3baec 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookArgs.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookArgs.java
@@ -21,26 +21,35 @@
 import com.google.gerrit.extensions.common.AccountInfo;
 import com.google.gerrit.extensions.common.ApprovalInfo;
 import com.google.gerrit.extensions.common.ChangeInfo;
+import com.google.gerrit.server.config.SitePaths;
+import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.inject.Provider;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
 class HookArgs {
-  private final String anonymousCowardName;
-  private final Provider<String> urlProvider;
-  private final HookMetrics metrics;
+  final String anonymousCowardName;
+  final Provider<String> urlProvider;
+  final HookMetrics metrics;
+  final GitRepositoryManager gitManager;
+  final SitePaths sitePaths;
+
   private final List<String> args;
 
-  HookArgs(String anonymousCowardName, Provider<String> urlProvider, HookMetrics metrics) {
+  HookArgs(
+      String anonymousCowardName,
+      Provider<String> urlProvider,
+      HookMetrics metrics,
+      GitRepositoryManager gitManager,
+      SitePaths sitePaths) {
     this.anonymousCowardName = anonymousCowardName;
     this.urlProvider = urlProvider;
     this.metrics = metrics;
-    this.args = new ArrayList<>();
-  }
+    this.gitManager = gitManager;
+    this.sitePaths = sitePaths;
 
-  public HookMetrics metrics() {
-    return metrics;
+    this.args = new ArrayList<>();
   }
 
   public ImmutableList<String> get() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookExecutor.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookExecutor.java
index 3765128..5409227 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookExecutor.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookExecutor.java
@@ -3,8 +3,6 @@
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 import com.google.gerrit.extensions.events.LifecycleListener;
 import com.google.gerrit.server.config.GerritServerConfig;
-import com.google.gerrit.server.config.SitePaths;
-import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.inject.Inject;
 import java.lang.Thread.UncaughtExceptionHandler;
 import java.nio.file.Files;
@@ -28,17 +26,11 @@
         }
       };
 
-  private final SitePaths sitePaths;
-  private final GitRepositoryManager gitManager;
   private final ExecutorService threadPool;
   private final int timeout;
 
   @Inject
-  HookExecutor(
-      @GerritServerConfig Config config, SitePaths sitePaths, GitRepositoryManager gitManager) {
-    this.sitePaths = sitePaths;
-    this.gitManager = gitManager;
-
+  HookExecutor(@GerritServerConfig Config config) {
     this.timeout = config.getInt("hooks", "syncHookTimeout", 30);
     this.threadPool =
         Executors.newCachedThreadPool(
@@ -56,8 +48,7 @@
     if (!Files.exists(hook)) {
       return null;
     }
-    HookTask.Sync hookTask =
-        new HookTask.Sync(gitManager, sitePaths.site_path, projectName, hook, args);
+    HookTask.Sync hookTask = new HookTask.Sync(projectName, hook, args);
     FutureTask<HookResult> task = new FutureTask<>(hookTask);
     threadPool.execute(task);
     String message;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookFactory.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookFactory.java
index 210c588..be08977 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookFactory.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookFactory.java
@@ -21,6 +21,7 @@
 import com.google.gerrit.server.config.CanonicalWebUrl;
 import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.gerrit.server.config.SitePaths;
+import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
@@ -37,6 +38,8 @@
   private final HookMetrics metrics;
   private final Provider<String> urlProvider;
   private final Path hooksPath;
+  private final GitRepositoryManager gitManager;
+  private final SitePaths sitePaths;
 
   @Inject
   HookFactory(
@@ -46,13 +49,16 @@
       @AnonymousCowardName String anonymousCowardName,
       @CanonicalWebUrl @Nullable Provider<String> urlProvider,
       HookMetrics metrics,
-      SitePaths sitePaths) {
+      SitePaths sitePaths,
+      GitRepositoryManager gitManager) {
     this.queue = queue;
     this.syncHookExecutor = syncHookExecutor;
     this.config = config;
     this.anonymousCowardName = anonymousCowardName;
     this.metrics = metrics;
     this.urlProvider = urlProvider;
+    this.gitManager = gitManager;
+    this.sitePaths = sitePaths;
 
     String v = config.getString("hooks", null, "path");
     if (v != null) {
@@ -76,6 +82,6 @@
   }
 
   public HookArgs createArgs() {
-    return new HookArgs(anonymousCowardName, urlProvider, metrics);
+    return new HookArgs(anonymousCowardName, urlProvider, metrics, gitManager, sitePaths);
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookQueue.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookQueue.java
index 9f06cd1..6a5e33e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookQueue.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookQueue.java
@@ -15,25 +15,19 @@
 package com.googlesource.gerrit.plugins.hooks;
 
 import com.google.gerrit.extensions.events.LifecycleListener;
-import com.google.gerrit.server.config.SitePaths;
-import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.WorkQueue;
 import com.google.inject.Inject;
 import java.nio.file.Files;
 import java.nio.file.Path;
 
 class HookQueue implements LifecycleListener {
-  private final GitRepositoryManager gitManager;
   private final WorkQueue workQueue;
-  private final SitePaths sitePaths;
 
   private WorkQueue.Executor queue;
 
   @Inject
-  HookQueue(GitRepositoryManager m, WorkQueue q, SitePaths s) {
-    gitManager = m;
-    workQueue = q;
-    sitePaths = s;
+  HookQueue(WorkQueue queue) {
+    workQueue = queue;
   }
 
   void submit(Path hook, HookArgs args) {
@@ -42,7 +36,7 @@
 
   void submit(String projectName, Path hook, HookArgs args) {
     if (Files.exists(hook)) {
-      queue.submit(new HookTask.Async(gitManager, sitePaths.site_path, projectName, hook, args));
+      queue.submit(new HookTask.Async(projectName, hook, args));
     }
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java
index 7b59630..83d4b66 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java
@@ -19,7 +19,6 @@
 import com.google.common.io.ByteStreams;
 import com.google.gerrit.metrics.Timer1;
 import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.server.git.GitRepositoryManager;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.StringReader;
@@ -36,23 +35,16 @@
 class HookTask {
   private static final Logger log = LoggerFactory.getLogger(HookTask.class);
 
-  private final GitRepositoryManager gitManager;
   private final Path sitePath;
   private final String projectName;
   private final Path hook;
-  private final List<String> args;
-  private final HookMetrics metrics;
+  private final HookArgs args;
   private StringWriter output;
   private Process ps;
 
   public static class Async extends HookTask implements Runnable {
-    Async(
-        GitRepositoryManager gitManager,
-        Path sitePath,
-        String projectName,
-        Path hook,
-        HookArgs args) {
-      super(gitManager, sitePath, projectName, hook, args);
+    Async(String projectName, Path hook, HookArgs args) {
+      super(projectName, hook, args);
     }
 
     @Override
@@ -62,13 +54,8 @@
   }
 
   public static class Sync extends HookTask implements Callable<HookResult> {
-    Sync(
-        GitRepositoryManager gitManager,
-        Path sitePath,
-        String projectName,
-        Path hook,
-        HookArgs args) {
-      super(gitManager, sitePath, projectName, hook, args);
+    Sync(String projectName, Path hook, HookArgs args) {
+      super(projectName, hook, args);
     }
 
     @Override
@@ -77,18 +64,11 @@
     }
   }
 
-  HookTask(
-      GitRepositoryManager gitManager,
-      Path sitePath,
-      String projectName,
-      Path hook,
-      HookArgs args) {
-    this.gitManager = gitManager;
-    this.sitePath = sitePath;
+  HookTask(String projectName, Path hook, HookArgs args) {
     this.projectName = projectName;
     this.hook = hook;
-    this.args = args.get();
-    this.metrics = args.metrics();
+    this.args = args;
+    this.sitePath = args.sitePaths.site_path;
   }
 
   public void cancel() {
@@ -106,11 +86,11 @@
   public HookResult runHook() {
     HookResult result = null;
     String name = getName();
-    try (Timer1.Context timer = metrics.start(name)) {
-      metrics.count(name);
-      List<String> argv = new ArrayList<>(1 + args.size());
+    try (Timer1.Context timer = args.metrics.start(name)) {
+      args.metrics.count(name);
+      List<String> argv = new ArrayList<>(1 + args.get().size());
       argv.add(hook.toAbsolutePath().toString());
-      argv.addAll(args);
+      argv.addAll(args.get());
 
       ProcessBuilder pb = new ProcessBuilder(argv);
       pb.redirectErrorStream(true);
@@ -119,7 +99,7 @@
       env.put("GERRIT_SITE", sitePath.toAbsolutePath().toString());
 
       if (projectName != null) {
-        try (Repository git = gitManager.openRepository(new Project.NameKey(projectName))) {
+        try (Repository git = args.gitManager.openRepository(new Project.NameKey(projectName))) {
           pb.directory(git.getDirectory());
           env.put("GIT_DIR", git.getDirectory().getAbsolutePath());
         }
@@ -132,9 +112,9 @@
       result = new HookResult(ps.exitValue(), output);
     } catch (InterruptedException iex) {
       // InterruptedException - timeout or cancel
-      metrics.timeout(name);
+      args.metrics.timeout(name);
     } catch (Throwable err) {
-      metrics.error(name);
+      args.metrics.error(name);
       log.error("Error running hook " + hook.toAbsolutePath(), err);
     }
 
