diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/InitRTC.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/InitRTC.java
index 6f0cd2f..24dc5ba 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/InitRTC.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/rtc/InitRTC.java
@@ -16,6 +16,7 @@
 import com.google.gerrit.extensions.annotations.PluginName;
 import com.google.gerrit.pgm.init.AllProjectsConfig;
 import com.google.gerrit.pgm.init.AllProjectsNameOnInitProvider;
+import com.google.gerrit.pgm.init.InitFlags;
 import com.google.gerrit.pgm.init.Section;
 import com.google.gerrit.pgm.util.ConsoleUI;
 import com.google.inject.Inject;
@@ -28,12 +29,14 @@
 import org.eclipse.jgit.errors.ConfigInvalidException;
 
 import java.io.IOException;
+import java.util.Arrays;
 
 /** Initialize the GitRepositoryManager configuration section. */
 @Singleton
 class InitRTC extends InitIts {
   private static final String COMMENT_LINK_SECTION = "commentLink";
   private final String pluginName;
+  private final InitFlags flags;
   private Section rtc;
   private Section rtcComment;
   private Section.Factory sections;
@@ -44,24 +47,52 @@
   @Inject
   InitRTC(@PluginName String pluginName, ConsoleUI ui,
       Section.Factory sections, AllProjectsConfig allProjectsConfig,
-      AllProjectsNameOnInitProvider allProjects) {
+      AllProjectsNameOnInitProvider allProjects, InitFlags flags) {
     super(pluginName, "IBM Rational Team Concert", ui,
         allProjectsConfig, allProjects);
     this.pluginName = pluginName;
     this.sections = sections;
+    this.flags = flags;
   }
 
   @Override
   public void run() throws IOException, ConfigInvalidException {
     super.run();
 
+    ui.message("\n");
+    ui.header("IBM Rational Team Concert connectivity");
+
+    if (!pluginName.equalsIgnoreCase("rtc")
+        && !flags.cfg.getSections().contains(pluginName)
+        && flags.cfg.getSections().contains("rtc")) {
+      ui.message("A RTC configuration for the 'hooks-rtc' plugin was found.\n");
+      if (ui.yesno(true, "Copy it for the '%s' plugin?", pluginName)) {
+        for (String n : flags.cfg.getNames("rtc")) {
+          flags.cfg.setStringList(pluginName, null, n,
+              Arrays.asList(flags.cfg.getStringList("rtc", null, n)));
+        }
+        for (String n : flags.cfg.getNames(COMMENT_LINK_SECTION, "rtc")) {
+          flags.cfg.setStringList(COMMENT_LINK_SECTION, pluginName, n,
+              Arrays.asList(flags.cfg.getStringList(COMMENT_LINK_SECTION, "rtc", n)));
+        }
+
+        if (ui.yesno(false, "Remove configuration for 'hooks-rtc' plugin?")) {
+          flags.cfg.unsetSection("rtc", null);
+          flags.cfg.unsetSection(COMMENT_LINK_SECTION, "rtc");
+        }
+      } else {
+        init();
+      }
+    } else {
+      init();
+    }
+  }
+
+  private void init() {
     this.rtc = sections.get(pluginName, null);
     this.rtcComment =
         sections.get(COMMENT_LINK_SECTION, pluginName);
 
-    ui.message("\n");
-    ui.header("IBM Rational Team Concert connectivity");
-
     boolean sslVerify = true;
     do {
       rtcUrl = enterRTCConnectivity();
