private void create(String[] args) {
        boolean clientOnlyMode = false;
        boolean useAWT = false;

        System.setErr(System.out);

        SplashScreen splashScreen = new SplashScreen("/images/welcome.gif");
        splashScreen.setVisible(true);

        for (String arg : args) {
            if (arg.equals("-client")) {
                clientOnlyMode = true;
            }
            if (arg.equals("-awt")) {
                useAWT = true;
            }
        }
        MeetingProtocol meetingProtocol = MeetingProtocol.getInstance();
        MBProtocol mbProtocol = MBProtocol.getInstance();

        addDispatchers(meetingProtocol, mbProtocol);

        Frame mainFrame = useAWT ? new msgtool.awt.MainFrame()
                : new msgtool.swing.MainFrame();
        SwingWrapper.setSwingMode(!useAWT);

        if (!clientOnlyMode) {
            if (!MessageProtocol.getInstance().initializeServerSocket()
                    || !MiscProtocol.getInstance().initializeServerSocket()) {
                splashScreen.setVisible(false);
                showInUseWarningDialog(useAWT, mainFrame);
                System.exit(1);
            }
            MBProtocol.getInstance().startServer();
        }

        MainFrameFeatures frameFeature = (MainFrameFeatures) mainFrame;
        frameFeature.showMyAddress();
        frameFeature.checkIfIPAddressChanged();

        startThreads();

        frameFeature.joinMeetingRooms();

        splashScreen.setVisible(false);
        mainFrame.setVisible(true);
    }