@Override
    public void starting() {
        // Load defaults
        final ConfigurationSection config = plugin.getConfig();
        // LinkedHashmap of defaults
        final Map<String, Object> defaults = new LinkedHashMap<String, Object>();
        defaults.put("formatter.use", true);
        defaults.put("formatter.defaultFormat",
                "%world %group %prefix%name%suffix: %message");
        defaults.put("shout.format", "%prefix%name%suffix shouts: %message");
        defaults.put("nobody.message", "&oNo one can hear you...");
        defaults.put("hashQuickMessage", false);
        defaults.put("debug.time", false);
        defaults.put("debug.vault", false);
        defaults.put("debug.chat", false);
        defaults.put("debug.announcer", false);
        defaults.put("globalChannels", new ArrayList<String>());
        // Insert defaults into config file if they're not present
        for(final Entry<String, Object> e : defaults.entrySet()) {
            if(!config.contains(e.getKey())) {
                config.set(e.getKey(), e.getValue());
            }
        }
        //Update version
        config.set("version", plugin.getDescription().getVersion());
        // Save config
        plugin.saveConfig();
        // Load settings
        this.loadSettings(config);
        // Check if worlds folder exists
        final File file = new File(plugin.getDataFolder().getAbsolutePath()
                + "/worlds");
        if(!file.exists()) {
            // Create directory
            if(!file.mkdir()) {
                plugin.getLogger()
                        .warning(
                                "Something went wrong! Could not create worlds directory.");
            }
        }
        // Load config per world
        final List<World> worlds = plugin.getServer().getWorlds();
        for(World world : worlds) {
            final String worldName = world.getName();
            configs.put(worldName, new WorldConfig(plugin, worldName));
        }
        hookChannels();
    }