diff --git a/BUCK b/BUCK
index 82e2e88..dc9ab17 100644
--- a/BUCK
+++ b/BUCK
@@ -38,7 +38,6 @@
     'Gerrit-ApiType: plugin',
     'Gerrit-ApiVersion: 2.13.4',
     'Gerrit-Module: com.ruesga.gerrit.plugins.fcm.ApiModule',
-    'Gerrit-InitStep: com.ruesga.gerrit.plugins.fcm.InitStep',
     'Implementation-Title: Firebase Cloud Notifications Plugin',
     'Implementation-Vendor: Jorge Ruesga',
     'Implementation-URL: https://gerrit.googlesource.com/plugins/cloud-notifications',
diff --git a/src/main/java/com/ruesga/gerrit/plugins/fcm/InitStep.java b/src/main/java/com/ruesga/gerrit/plugins/fcm/InitStep.java
deleted file mode 100644
index f133a61..0000000
--- a/src/main/java/com/ruesga/gerrit/plugins/fcm/InitStep.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2016 Jorge Ruesga
- *
- * 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
- * limitations under the License.
- */
-package com.ruesga.gerrit.plugins.fcm;
-
-import org.eclipse.jgit.lib.Config;
-
-import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.gerrit.pgm.init.api.AllProjectsConfig;
-import com.google.gerrit.pgm.init.api.ConsoleUI;
-import com.google.inject.Inject;
-
-public class InitStep implements com.google.gerrit.pgm.init.api.InitStep {
-    private final String pluginName;
-    private final ConsoleUI ui;
-    private final AllProjectsConfig allProjectsConfig;
-
-    @Inject
-    public InitStep(@PluginName String pluginName, ConsoleUI ui,
-        AllProjectsConfig allProjectsConfig) {
-      this.pluginName = pluginName;
-      this.ui = ui;
-      this.allProjectsConfig = allProjectsConfig;
-    }
-
-    @Override
-    public void run() throws Exception {
-    }
-
-    @Override
-    public void postRun() throws Exception {
-        ui.message("\n");
-        ui.header(pluginName + " Settings");
-        Config cfg = allProjectsConfig.load().getConfig();
-
-        String serverUrl = ui.readString(
-                Configuration.DEFAULT_SERVER_URL, "Firebase Server Url");
-        String serverToken = ui.readString("", "Firebase Server Token");
-        String serverSenderId = ui.readString("", "Firebase Server Sender Id");
-        String databasePath = ui.readString(
-                "", "Database path (leave empty for default)");
-
-        if (serverUrl != null && serverUrl.isEmpty()) {
-            serverUrl = Configuration.DEFAULT_SERVER_URL;
-        }
-        cfg.setString("plugin", pluginName,
-                Configuration.PROP_SERVER_URL, serverUrl);
-        if (serverToken != null && serverToken.isEmpty()) {
-            cfg.unset("plugin", pluginName, Configuration.PROP_SERVER_TOKEN);
-        } else {
-            cfg.setString("plugin", pluginName,
-                    Configuration.PROP_SERVER_TOKEN, serverToken);
-        }
-        if (serverSenderId != null && serverSenderId.isEmpty()) {
-            cfg.unset("plugin", pluginName, Configuration.PROP_SERVER_SENDER_ID);
-        } else {
-            cfg.setString("plugin", pluginName,
-                    Configuration.PROP_SERVER_SENDER_ID, serverSenderId);
-        }
-        if (databasePath != null && databasePath.isEmpty()) {
-            cfg.unset("plugin", pluginName, Configuration.PROP_DATABASE_PATH);
-        } else {
-            cfg.setString("plugin", pluginName,
-                    Configuration.PROP_DATABASE_PATH, databasePath);
-        }
-
-        allProjectsConfig.save(pluginName, pluginName + " initialized");
-    }
-
-}
