Index: /trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/Main.java	(revision 12126)
+++ /trunk/src/org/openstreetmap/josm/Main.java	(revision 12127)
@@ -203,4 +203,9 @@
 
     /**
+     * The same main panel, required to be static for {@code MapFrameListener} handling.
+     */
+    protected static MainPanel mainPanel;
+
+    /**
      * The file watcher service.
      */
@@ -1153,5 +1158,5 @@
      */
     public static boolean addAndFireMapFrameListener(MapFrameListener listener) {
-        return main.panel.addAndFireMapFrameListener(listener);
+        return mainPanel.addAndFireMapFrameListener(listener);
     }
 
@@ -1164,5 +1169,5 @@
      */
     public static boolean addMapFrameListener(MapFrameListener listener) {
-        return main.panel.addMapFrameListener(listener);
+        return mainPanel.addMapFrameListener(listener);
     }
 
@@ -1174,5 +1179,5 @@
      */
     public static boolean removeMapFrameListener(MapFrameListener listener) {
-        return main.panel.removeMapFrameListener(listener);
+        return mainPanel.removeMapFrameListener(listener);
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 12126)
+++ /trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 12127)
@@ -88,4 +88,7 @@
     private static final List<String> COMMAND_LINE_ARGS = new ArrayList<>();
 
+    private static ProgramArguments args;
+    private static boolean skipLoadingPlugins;
+
     private final MainFrame mainFrame;
 
@@ -110,5 +113,4 @@
     protected void initializeMainWindow() {
         if (mainFrame != null) {
-            mainFrame.preInitialize();
             panel = mainFrame.getPanel();
             mainFrame.initialize();
@@ -208,8 +210,18 @@
      */
     public static void main(final String[] argArray) {
+        // First initializes all stuff that do not require AWT/Swing
+        mainNoGui(argArray);
+        // Then initializes all AWT/Swing stuff
+        mainGui();
+    }
+
+    /**
+     * Initializes all stuff that do not require AWT/Swing.
+     * @param argArray Command-line arguments
+     */
+    private static void mainNoGui(final String[] argArray) {
         I18n.init();
 
         // construct argument table
-        ProgramArguments args = null;
         try {
             args = new ProgramArguments(argArray);
@@ -261,5 +273,5 @@
         COMMAND_LINE_ARGS.addAll(Arrays.asList(argArray));
 
-        boolean skipLoadingPlugins = args.hasOption(Option.SKIP_PLUGINS);
+        skipLoadingPlugins = args.hasOption(Option.SKIP_PLUGINS);
         if (skipLoadingPlugins) {
             Main.info(tr("Plugin loading skipped"));
@@ -286,5 +298,10 @@
 
         Main.platform.afterPrefStartupHook();
-
+    }
+
+    /**
+     * Initializes all AWT/Swing stuff.
+     */
+    private static void mainGui() {
         FontsManager.initialize();
 
@@ -297,4 +314,5 @@
                 !args.hasOption(Option.NO_MAXIMIZE) && Main.pref.getBoolean("gui.maximized", false));
         final MainFrame mainFrame = new MainFrame(contentPanePrivate, geometry);
+        Main.mainPanel = mainFrame.getPanel();
         Main.parent = mainFrame;
 
Index: /trunk/src/org/openstreetmap/josm/gui/MainFrame.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MainFrame.java	(revision 12126)
+++ /trunk/src/org/openstreetmap/josm/gui/MainFrame.java	(revision 12127)
@@ -49,5 +49,5 @@
     protected transient WindowGeometry geometry;
     protected int windowState = JFrame.NORMAL;
-    private MainPanel panel;
+    private final MainPanel panel;
     private MainMenu menu;
 
@@ -68,18 +68,10 @@
         super();
         this.geometry = geometry;
+        this.panel = new MainPanel(Main.getLayerManager());
         setContentPane(contentPanePrivate);
     }
 
     /**
-     * Performs pre-initialization required before the call to {@link #initialize()}.
-     * @since 12125
-     */
-    public void preInitialize() {
-        panel = new MainPanel(Main.getLayerManager());
-    }
-
-    /**
      * Initializes the content of the window and get the current status panel.
-     * {@link #preInitialize()} must have been previously called.
      */
     public void initialize() {
@@ -138,12 +130,7 @@
      * Gets the main panel.
      * @return The main panel.
-     * @throws IllegalStateException if the main frame has not been initialized yet
-     * @see #initialize
      * @since 12125
      */
     public MainPanel getPanel() {
-        if (panel == null) {
-            throw new IllegalStateException("Not initialized.");
-        }
         return panel;
     }
