diff --git a/its-base/src/main/java/com/googlesource/gerrit/plugins/hooks/its/InitIts.java b/its-base/src/main/java/com/googlesource/gerrit/plugins/hooks/its/InitIts.java
index 18df41d..da65ff8 100644
--- a/its-base/src/main/java/com/googlesource/gerrit/plugins/hooks/its/InitIts.java
+++ b/its-base/src/main/java/com/googlesource/gerrit/plugins/hooks/its/InitIts.java
@@ -14,7 +14,10 @@
 
 package com.googlesource.gerrit.plugins.hooks.its;
 
+import com.google.common.base.Strings;
+import com.google.gerrit.common.data.RefConfigSection;
 import com.google.gerrit.pgm.init.AllProjectsConfig;
+import com.google.gerrit.pgm.init.AllProjectsNameOnInitProvider;
 import com.google.gerrit.pgm.init.InitStep;
 import com.google.gerrit.pgm.init.Section;
 import com.google.gerrit.pgm.util.ConsoleUI;
@@ -40,13 +43,16 @@
   private final String itsDisplayName;
   protected final ConsoleUI ui;
   private final AllProjectsConfig allProjectsConfig;
+  private final AllProjectsNameOnInitProvider allProjects;
 
   public InitIts(String pluginName, String itsDisplayName, ConsoleUI ui,
-      AllProjectsConfig allProjectsConfig) {
+      AllProjectsConfig allProjectsConfig,
+      AllProjectsNameOnInitProvider allProjects) {
     this.pluginName = pluginName;
     this.itsDisplayName = itsDisplayName;
     this.ui = ui;
     this.allProjectsConfig = allProjectsConfig;
+    this.allProjects = allProjects;
   }
 
   @Override
@@ -74,9 +80,11 @@
     switch (itsintegration) {
       case ENFORCED:
         cfg.setString("plugin", pluginName, "enabled", "enforced");
+        configureBranches(cfg);
         break;
       case ENABLED:
         cfg.setBoolean("plugin", pluginName, "enabled", true);
+        configureBranches(cfg);
         break;
       case DISABLED:
         cfg.unset("plugin", pluginName, "enabled");
@@ -88,6 +96,36 @@
     allProjectsConfig.save(pluginName, "Initialize " + itsDisplayName + " Integration");
   }
 
+  private void configureBranches(Config cfg) {
+    String[] branches = cfg.getStringList("plugin", pluginName, "branch");
+    if (branches.length > 1) {
+      ui.message("The issue tracker integration is configured for multiple branches."
+          + " Please adapt the configuration in the 'project.config' file of the '%s' project.\n",
+          allProjects.get());
+      return;
+    }
+
+    String branch = branches.length == 1 ? branches[0] : null;
+    if (Strings.isNullOrEmpty(branch)) {
+      branch = "refs/heads/*";
+    }
+
+    boolean validRef;
+    do {
+      String v = ui.readString(branch, "Branches for which the issue tracker integration"
+          + " should be enabled (ref, ref pattern or regular expression)");
+      validRef = RefConfigSection.isValid(v);
+      if (validRef) {
+        branch = v;
+      } else {
+        ui.message(
+            "'%s' is not valid. Please specify a valid ref, ref pattern or regular expression\n", v);
+      }
+    } while (!validRef);
+
+    cfg.setString("plugin", pluginName, "branch", branch);
+  }
+
   public boolean isConnectivityRequested(String url) {
     return ui.yesno(false, "Test connectivity to %s", url);
   }
