diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
index 0ad64e5..e813bb6 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/Configuration.java
@@ -182,10 +182,12 @@
   }
 
   public static class AutoReindex {
+
     static final String AUTO_REINDEX_SECTION = "autoReindex";
     static final String ENABLED = "enabled";
     static final String DELAY = "delay";
     static final String POLL_INTERVAL = "pollInterval";
+    static final boolean DEFAULT_AUTO_REINDEX = false;
     static final long DEFAULT_DELAY = 10L;
     static final long DEFAULT_POLL_INTERVAL = 0L;
 
@@ -194,11 +196,11 @@
     private final long pollSec;
 
     public AutoReindex(Config cfg) {
-      this.enabled = cfg.getBoolean(AUTO_REINDEX_SECTION, ENABLED, false);
-      this.delaySec =
+      enabled = cfg.getBoolean(AUTO_REINDEX_SECTION, ENABLED, DEFAULT_AUTO_REINDEX);
+      delaySec =
           ConfigUtil.getTimeUnit(
               cfg, AUTO_REINDEX_SECTION, null, DELAY, DEFAULT_DELAY, TimeUnit.SECONDS);
-      this.pollSec =
+      pollSec =
           ConfigUtil.getTimeUnit(
               cfg,
               AUTO_REINDEX_SECTION,
@@ -458,7 +460,7 @@
 
     private Websession(Config cfg) {
       super(cfg, WEBSESSION_SECTION);
-      this.cleanupInterval =
+      cleanupInterval =
           ConfigUtil.getTimeUnit(
               Strings.nullToEmpty(cfg.getString(WEBSESSION_SECTION, null, CLEANUP_INTERVAL_KEY)),
               DEFAULT_CLEANUP_INTERVAL_MS,
diff --git a/src/main/java/com/ericsson/gerrit/plugins/highavailability/Setup.java b/src/main/java/com/ericsson/gerrit/plugins/highavailability/Setup.java
index 217e644..e58f62f 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/highavailability/Setup.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/highavailability/Setup.java
@@ -15,13 +15,21 @@
 package com.ericsson.gerrit.plugins.highavailability;
 
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.AutoReindex.AUTO_REINDEX_SECTION;
+import static com.ericsson.gerrit.plugins.highavailability.Configuration.AutoReindex.DEFAULT_AUTO_REINDEX;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.AutoReindex.DEFAULT_DELAY;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.AutoReindex.DEFAULT_POLL_INTERVAL;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.AutoReindex.DELAY;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.AutoReindex.ENABLED;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.AutoReindex.POLL_INTERVAL;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.Cache.CACHE_SECTION;
+import static com.ericsson.gerrit.plugins.highavailability.Configuration.Cache.PATTERN_KEY;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.DEFAULT_THREAD_POOL_SIZE;
+import static com.ericsson.gerrit.plugins.highavailability.Configuration.Event.EVENT_SECTION;
+import static com.ericsson.gerrit.plugins.highavailability.Configuration.Forwarding.DEFAULT_SYNCHRONIZE;
+import static com.ericsson.gerrit.plugins.highavailability.Configuration.Forwarding.SYNCHRONIZE_KEY;
+import static com.ericsson.gerrit.plugins.highavailability.Configuration.HealthCheck.DEFAULT_HEALTH_CHECK_ENABLED;
+import static com.ericsson.gerrit.plugins.highavailability.Configuration.HealthCheck.ENABLE_KEY;
+import static com.ericsson.gerrit.plugins.highavailability.Configuration.HealthCheck.HEALTH_CHECK_SECTION;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.Http.CONNECTION_TIMEOUT_KEY;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.Http.DEFAULT_MAX_TRIES;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.Http.DEFAULT_RETRY_INTERVAL;
@@ -35,6 +43,8 @@
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.Index.INDEX_SECTION;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.JGroups.CLUSTER_NAME_KEY;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.JGroups.DEFAULT_CLUSTER_NAME;
+import static com.ericsson.gerrit.plugins.highavailability.Configuration.JGroups.PROTOCOL_STACK_KEY;
+import static com.ericsson.gerrit.plugins.highavailability.Configuration.JGroups.SKIP_INTERFACE_KEY;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.Main.DEFAULT_SHARED_DIRECTORY;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.Main.MAIN_SECTION;
 import static com.ericsson.gerrit.plugins.highavailability.Configuration.Main.SHARED_DIRECTORY_KEY;
@@ -103,8 +113,10 @@
       configureAutoReindexSection();
       configureHttpSection();
       configureCacheSection();
+      configureEventSection();
       configureIndexSection();
       configureWebsessionsSection();
+      configureHealthCheckSection();
       if (!createHAReplicaSite(config)) {
         configureMainSection();
         configurePeerInfoSection();
@@ -117,19 +129,17 @@
   private void configureAutoReindexSection() {
     ui.header("AutoReindex section");
     Boolean autoReindex =
-        promptAndSetBoolean("Auto reindex", AUTO_REINDEX_SECTION, null, ENABLED, false);
+        promptAndSetBoolean("Auto reindex", AUTO_REINDEX_SECTION, ENABLED, DEFAULT_AUTO_REINDEX);
     config.setBoolean(AUTO_REINDEX_SECTION, null, ENABLED, autoReindex);
 
     String delay =
-        promptAndSetString(
-            "Delay", AUTO_REINDEX_SECTION, null, DELAY, numberToString(DEFAULT_DELAY));
+        promptAndSetString("Delay", AUTO_REINDEX_SECTION, DELAY, numberToString(DEFAULT_DELAY));
     config.setLong(AUTO_REINDEX_SECTION, null, DELAY, Long.valueOf(delay));
 
     String pollInterval =
         promptAndSetString(
             "Poll interval",
             AUTO_REINDEX_SECTION,
-            null,
             POLL_INTERVAL,
             numberToString(DEFAULT_POLL_INTERVAL));
     config.setLong(AUTO_REINDEX_SECTION, null, POLL_INTERVAL, Long.valueOf(pollInterval));
@@ -162,6 +172,18 @@
           JGROUPS_SUBSECTION,
           CLUSTER_NAME_KEY,
           DEFAULT_CLUSTER_NAME);
+      promptAndSetString(
+          "Protocol stack (optional)",
+          PEER_INFO_SECTION,
+          JGROUPS_SUBSECTION,
+          PROTOCOL_STACK_KEY,
+          null);
+      promptAndSetString(
+          titleForOptionalWithNote("Skip interface", "interfaces"),
+          PEER_INFO_SECTION,
+          JGROUPS_SUBSECTION,
+          SKIP_INTERFACE_KEY,
+          null);
     }
   }
 
@@ -193,15 +215,24 @@
 
   private void configureCacheSection() {
     ui.header("Cache section");
+    promptAndSetSynchronize("Cache", CACHE_SECTION);
     promptAndSetString(
         "Cache thread pool size",
         CACHE_SECTION,
         THREAD_POOL_SIZE_KEY,
         numberToString(DEFAULT_THREAD_POOL_SIZE));
+    promptAndSetString(
+        titleForOptionalWithNote("Cache pattern", "patterns"), CACHE_SECTION, PATTERN_KEY, null);
+  }
+
+  private void configureEventSection() {
+    ui.header("Event section");
+    promptAndSetSynchronize("Event", EVENT_SECTION);
   }
 
   private void configureIndexSection() {
     ui.header("Index section");
+    promptAndSetSynchronize("Index", INDEX_SECTION);
     promptAndSetString(
         "Index thread pool size",
         INDEX_SECTION,
@@ -211,16 +242,31 @@
 
   private void configureWebsessionsSection() {
     ui.header("Websession section");
+    promptAndSetSynchronize("Websession", WEBSESSION_SECTION);
     promptAndSetString(
         "Cleanup interval", WEBSESSION_SECTION, CLEANUP_INTERVAL_KEY, DEFAULT_CLEANUP_INTERVAL);
   }
 
+  private void configureHealthCheckSection() {
+    ui.header("HealthCheck section");
+    Boolean healthCheck =
+        promptAndSetBoolean(
+            "Health check", HEALTH_CHECK_SECTION, ENABLE_KEY, DEFAULT_HEALTH_CHECK_ENABLED);
+    config.setBoolean(HEALTH_CHECK_SECTION, null, ENABLE_KEY, healthCheck);
+  }
+
+  private void promptAndSetSynchronize(String sectionTitle, String section) {
+    String titleSuffix = ": synchronize?";
+    String title = sectionTitle + titleSuffix;
+    promptAndSetBoolean(title, section, SYNCHRONIZE_KEY, DEFAULT_SYNCHRONIZE);
+  }
+
   private Boolean promptAndSetBoolean(
-      String title, String section, String subsection, String name, Boolean defaultValue) {
-    Boolean oldValue = config.getBoolean(section, subsection, name, defaultValue);
+      String title, String section, String name, Boolean defaultValue) {
+    Boolean oldValue = config.getBoolean(section, null, name, defaultValue);
     Boolean newValue = Boolean.parseBoolean(ui.readString(String.valueOf(oldValue), title));
     if (!Objects.equals(oldValue, newValue)) {
-      config.setBoolean(section, subsection, name, newValue);
+      config.setBoolean(section, null, name, newValue);
     }
     return newValue;
   }
@@ -244,6 +290,10 @@
     return newValue;
   }
 
+  private static String titleForOptionalWithNote(String prefix, String suffix) {
+    return prefix + " (optional); manually repeat this line to configure more " + suffix;
+  }
+
   private static String numberToString(int number) {
     return Integer.toString(number);
   }
