public void init() {
        JRootPane rootPane = createRootPane();
        // load properties
        defaultPropsURL = getResource("freemind.properties");
        try {
            // load properties
            defaultProps = new Properties();
            InputStream in = defaultPropsURL.openStream();
            defaultProps.load(in);
            in.close();
            userProps = defaultProps;
        } catch (Exception ex) {
            System.err.println("Could not load properties.");
        }

        updateLookAndFeel();

        // try to overload some properties with given command-line (html tag)
        // Arguments
        Enumeration allKeys = userProps.propertyNames();
        while (allKeys.hasMoreElements()) {
            String key = (String) allKeys.nextElement();
            setPropertyByParameter(key);
        }

        // Layout everything
        getContentPane().setLayout(new BorderLayout());

        c = new Controller(this);
        c.init();

        c.optionAntialiasAction
                .changeAntialias(getProperty(FreeMindCommon.RESOURCE_ANTIALIAS));

        // Create the MenuBar
        menuBar = new MenuBar(c); // new MenuBar(c);
        setJMenuBar(menuBar);
        c.setToolbarVisible(false);
        c.setMenubarVisible(false);

        // Create the scroll pane.

        getContentPane().add(scrollPane, BorderLayout.CENTER);
        // taken from Lukasz Pekacki, NodeText version:
        southPanel = new JPanel(new BorderLayout());

        status = new JLabel();
        southPanel.add(status, BorderLayout.SOUTH);

        getContentPane().add(southPanel, BorderLayout.SOUTH);
        // end taken.

        SwingUtilities.updateComponentTreeUI(this); // Propagate LookAndFeel to
        // JComponents

        // wait until AWT thread starts
        Tools.waitForEventQueue();
        c.createNewMode(getProperty("initial_mode"));
        String initialMapName = getProperty("browsemode_initial_map");
        if (initialMapName != null && initialMapName.startsWith(".")) {
			/* new handling for relative urls. fc, 29.10.2003. */
            try {
                URL documentBaseUrl = new URL(getDocumentBase(), initialMapName);
                initialMapName = documentBaseUrl.toString();
            } catch (java.net.MalformedURLException e) {
                getController().errorMessage(
                        "Could not open relative URL " + initialMapName
                                + ". It is malformed.");
                System.err.println(e);
                return;
            }
			/* end: new handling for relative urls. fc, 29.10.2003. */
        }
        if (initialMapName != "") {
            try {
                // get URL:
                URL mapUrl = new URL(initialMapName);
                getController().getModeController().load(mapUrl);
            } catch (Exception e) {
                freemind.main.Resources.getInstance().logException(e);
            }
        }

    }