public GUI(final HelpGUI pluginInstance, final SpoutPlayer player) {

        plugin = pluginInstance;

        int screenWidth = player.getMainScreen().getWidth();
        int screenHeight = player.getMainScreen().getHeight();
        x = (screenWidth / 2) - (WIDTH / 2);
        y = (screenHeight / 2) - (HEIGHT / 2);

        String bgImg = plugin.getConfig().getString("textures.background");
        if (bgImg != null && bgImg != backgroundImage) {
            backgroundImage = bgImg;
            SpoutManager.getFileManager().addToPreLoginCache(pluginInstance, bgImg);
        }

        String iconsImg = plugin.getConfig().getString("textures.icons");
        if (iconsImg != null && iconsImg != iconsImage) {
            iconsImage = iconsImg;
            SpoutManager.getFileManager().addToPreLoginCache(pluginInstance, iconsImg);
        }

        GenericContainer buttons = new GenericContainer();
        GenericLabel title = new GenericLabel();
        WrappedGenericLabel body = new WrappedGenericLabel();
        GenericLabel copyright = new GenericLabel();
        SelectorButton general = new SelectorButton(this, "general");
        SelectorButton rules = new SelectorButton(this, "rules");
        SelectorButton commands = new SelectorButton(this, "commands");
        SelectorButton ranks = new SelectorButton(this, "ranks");
        ExitButton exit = new ExitButton(this);
        GenericTexture icons = new GenericTexture();
        GenericTexture background = new GenericTexture();

        // Button Icons
        icons.setX(x + 7).setY(y + 17);
        icons.setWidth(326).setHeight(20);
        icons.setUrl(iconsImage);
        icons.setPriority(RenderPriority.Normal);

        // Buttons
        general.setMarginRight(4).setFixed(true);
        rules.setMarginRight(4).setFixed(true);
        commands.setMarginRight(4).setFixed(true);
        ranks.setFixed(true);
        exit.setMarginLeft(214).setFixed(true);

        // Button Container
        buttons.addChildren(general, rules, commands, ranks, exit);
        buttons.setX(x + 7).setY(y + 17);
        buttons.setWidth(326).setHeight(20);
        buttons.setLayout(ContainerType.HORIZONTAL);
        buttons.setAuto(false);
        buttons.setPriority(RenderPriority.High);

        // GUI Title
        title.setTextColor(new Color("3F3F3F"));
        title.setShadow(false);
        title.setText(plugin.getConfig().getString("general.windowtitle", "Help"));
        title.setX(x + 7).setY(y + 6);
        title.setWidth(100).setHeight(20);
        title.setFixed(false);
        title.setPriority(RenderPriority.High);

        // Body Text
        body.setX(x + 10).setY(y + 44);
        body.setWidth(320).setHeight(136);
        body.setText(general.getTopicText());
        body.setDirty(true);
        body.setPriority(RenderPriority.High);

        // Copyright Text
        copyright.setTextColor(new Color("8B8B8B"));
        copyright.setShadow(false);
        copyright.setText("HelpGUI");
        copyright.setWidth(100).setHeight(20);
        copyright.setX(body.getX() + body.getWidth() - GenericLabel.getStringWidth(copyright.getText())).setY(y + 186);
        copyright.setFixed(false);
        copyright.setPriority(RenderPriority.High);

        // Main GUI
        background.setX(x).setY(y);
        background.setWidth(WIDTH).setHeight(HEIGHT);
        background.setFixed(false);
        background.setUrl(backgroundImage);
        background.setPriority(RenderPriority.Highest);

        // Attach Widgets
        setTransparent(true);
        attachWidget(plugin, background);
        attachWidget(plugin, title);
        attachWidget(plugin, body);
        attachWidget(plugin, copyright);
        attachWidget(plugin, buttons);
        attachWidget(plugin, icons);

        topicBody = body;
    }