public void applyChanges() {
        // HIDE THE WINDOW TO APPLY CHANGES
        setVisible(false);

        // PRINT THE GRAPHICAL CONFIG
        // MAKE THE WINDOW FULLSCREEN IF REQUIRED
        if (config.isFullscreen() && gd.isFullScreenSupported()) {
            setSize(tk.getScreenSize().width, tk.getScreenSize().height);     // CHANGE THE WINDOW SIZE
            gd.setFullScreenWindow(this);       // REQUEST NATIVE FULLSCREEN
        } else if (!config.isFullscreen()) {

            setSize(config.width, config.height);    // RESUME TO ORIGINAL SIZE
            gd.setFullScreenWindow(null);   // EXIT FULLSCREEN
        }

        // SET THE NEW ICON IF IT'S NOT NULL
        if (config.icon != null) {
            setIconImage(config.icon.getImage());
        }

        // BORDERLESS MAYBE?
        dispose();
        setUndecorated(config.isBorderless());

        // THERE REALLY ISN'T MUCH NEED FOR THIS, BUT IT MAKES THE GAME LOOK LIKE IT'S DOING SOMETHING. I GUESS IT ALSO ALLOWS SOME TIME FOR CHANGES TO TAKE EFFECT
        try {
            java.lang.Thread.sleep(500);
        } catch (InterruptedException ex) {

        }

        // SHOW THE WINDOW
        setVisible(true);

    }