@Override
    public void start(Stage ps) {
        primaryStage = ps;

        longStart();

        ready.addListener(new ChangeListener<Boolean>() {
            @Override
            public void changed(ObservableValue<? extends Boolean> ov,
                    Boolean t, Boolean t1) {
                if (Boolean.TRUE.equals(t1)) {
                    Platform.runLater(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                primaryStage.setTitle("Super Mario Paint " + Settings.version);
                                setupCloseBehaviour(primaryStage);
                                primaryStage.setResizable(false);
                                primaryStage.setHeight(Values.DEFAULT_HEIGHT);
                                primaryStage.setWidth(Values.DEFAULT_WIDTH);
                                primaryScene = new Scene(root, 800, 600);
                                primaryStage.setScene(primaryScene);
                                makeKeyboardListeners(primaryScene);
                                notifyPreloader(new ProgressNotification(1));
                                notifyPreloader(new StateChangeNotification(
                                        StateChangeNotification.Type.BEFORE_START));
                                primaryStage.show();
                            } catch (Exception e) {
                                e.printStackTrace();
                                System.exit(1);
                            }
                        }
                    });
                }
            }
        });
        ;
    }