diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
index 99804d4..3ffcc12 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Manager.java
@@ -25,7 +25,6 @@
 import com.googlesource.gerrit.plugins.rabbitmq.config.section.Gerrit;
 import com.googlesource.gerrit.plugins.rabbitmq.message.Publisher;
 import com.googlesource.gerrit.plugins.rabbitmq.message.PublisherFactory;
-import com.googlesource.gerrit.plugins.rabbitmq.solver.Solver;
 import com.googlesource.gerrit.plugins.rabbitmq.worker.EventWorker;
 import com.googlesource.gerrit.plugins.rabbitmq.worker.EventWorkerFactory;
 import com.googlesource.gerrit.plugins.rabbitmq.worker.DefaultEventWorker;
@@ -40,7 +39,6 @@
 import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
 
 @Singleton
 public class Manager implements LifecycleListener {
@@ -56,7 +54,6 @@
   private final EventWorker userEventWorker;
   private final PublisherFactory publisherFactory;
   private final PropertiesFactory propFactory;
-  private final Set<Solver> solvers;
   private final List<Publisher> publisherList = new ArrayList<>();
 
   @Inject
@@ -66,23 +63,17 @@
       final DefaultEventWorker defaultEventWorker,
       final EventWorkerFactory eventWorkerFactory,
       final PublisherFactory publisherFactory,
-      final PropertiesFactory propFactory,
-      final Set<Solver> solvers) {
+      final PropertiesFactory propFactory) {
     this.pluginName = pluginName;
     this.pluginDataDir = pluginData.toPath();
     this.defaultEventWorker = defaultEventWorker;
     this.userEventWorker = eventWorkerFactory.create();
     this.publisherFactory = publisherFactory;
     this.propFactory = propFactory;
-    this.solvers = solvers;
   }
 
   @Override
   public void start() {
-    for (Solver solver : solvers) {
-      solver.solve();
-    }
-
     List<Properties> propList = load();
     for (Properties properties : propList) {
       Publisher publisher = publisherFactory.create(properties);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
index d19b4c3..f9ccdd5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/Module.java
@@ -35,8 +35,6 @@
 import com.googlesource.gerrit.plugins.rabbitmq.message.PublisherFactory;
 import com.googlesource.gerrit.plugins.rabbitmq.session.SessionFactory;
 import com.googlesource.gerrit.plugins.rabbitmq.session.SessionFactoryProvider;
-import com.googlesource.gerrit.plugins.rabbitmq.solver.Solver;
-import com.googlesource.gerrit.plugins.rabbitmq.solver.version.V1;
 import com.googlesource.gerrit.plugins.rabbitmq.worker.EventWorker;
 import com.googlesource.gerrit.plugins.rabbitmq.worker.EventWorkerFactory;
 import com.googlesource.gerrit.plugins.rabbitmq.worker.DefaultEventWorker;
@@ -55,9 +53,6 @@
     sectionBinder.addBinding().to(Message.class);
     sectionBinder.addBinding().to(Monitor.class);
 
-    Multibinder<Solver> solverBinder = Multibinder.newSetBinder(binder(), Solver.class);
-    solverBinder.addBinding().to(V1.class);
-
     install(new FactoryModuleBuilder().implement(Publisher.class, MessagePublisher.class).build(PublisherFactory.class));
     install(new FactoryModuleBuilder().implement(Properties.class, PluginProperties.class).build(PropertiesFactory.class));
     install(new FactoryModuleBuilder().implement(EventWorker.class, UserEventWorker.class).build(EventWorkerFactory.class));
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/Solver.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/Solver.java
deleted file mode 100644
index 98d5cf1..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/Solver.java
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (C) 2015 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-package com.googlesource.gerrit.plugins.rabbitmq.solver;
-
-public interface Solver {
-  public void solve();
-}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/version/V1.java b/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/version/V1.java
deleted file mode 100644
index ebcec00..0000000
--- a/src/main/java/com/googlesource/gerrit/plugins/rabbitmq/solver/version/V1.java
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright (C) 2015 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-package com.googlesource.gerrit.plugins.rabbitmq.solver.version;
-
-import static com.googlesource.gerrit.plugins.rabbitmq.Manager.FILE_EXT;
-import static com.googlesource.gerrit.plugins.rabbitmq.Manager.SITE_DIR;
-
-import com.google.gerrit.extensions.annotations.PluginData;
-import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.gerrit.server.config.SitePaths;
-import com.google.inject.Inject;
-
-import com.googlesource.gerrit.plugins.rabbitmq.solver.Solver;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-
-public class V1 implements Solver {
-
-  private final static String DEFAULT_SITE_NAME = "default";
-  private static final Logger LOGGER = LoggerFactory.getLogger(V1.class);
-
-  private final String pluginName;
-  private final Path pluginDataDir;
-  private final Path etcDir;
-
-  @Inject
-  public V1(
-      @PluginName final String pluginName,
-      @PluginData final File pluginData,
-      final SitePaths sites
-      ) {
-    this.pluginName = pluginName;
-    this.pluginDataDir = pluginData.toPath();
-    this.etcDir = sites.etc_dir.toPath();
-  }
-
-  /**
-   * old : etc/rabbitmq.config
-   *
-   * new : data/rabbitmq/rabbitmq.config
-   *       data/rabbitmq/site/default.config
-   */
-  @Override
-  public void solve() {
-    try {
-      Path oldFile = etcDir.resolve(pluginName + FILE_EXT);
-      Path newFile = pluginDataDir.resolve(pluginName + FILE_EXT);
-      Path siteDir = pluginDataDir.resolve(SITE_DIR);
-      Path defaultSiteFile = siteDir.resolve(DEFAULT_SITE_NAME + FILE_EXT);
-
-      Files.createDirectories(siteDir);
-      if (oldFile.toFile().exists()) {
-        Files.move(oldFile, newFile);
-      }
-      if (!defaultSiteFile.toFile().exists()) {
-        Files.createFile(defaultSiteFile);
-      }
-    } catch (IOException ex) {
-      LOGGER.error("Failed to initialize plugin configuration", ex);
-    }
-  }
-}
