Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 10092)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 10093)
@@ -52,4 +52,5 @@
 import org.openstreetmap.josm.data.CustomConfigurator;
 import org.openstreetmap.josm.data.Version;
+import org.openstreetmap.josm.gui.SplashScreen.SplashProgressMonitor;
 import org.openstreetmap.josm.gui.download.DownloadDialog;
 import org.openstreetmap.josm.gui.preferences.server.OAuthAccessTokenHolder;
@@ -446,17 +447,6 @@
         Collection<PluginInformation> pluginsToLoad = null;
 
-
         if (!skipLoadingPlugins) {
-            pluginsToLoad = PluginHandler.buildListOfPluginsToLoad(splash, monitor.createSubTaskMonitor(1, false));
-            if (!pluginsToLoad.isEmpty() && PluginHandler.checkAndConfirmPluginUpdate(splash)) {
-                monitor.subTask(tr("Updating plugins"));
-                pluginsToLoad = PluginHandler.updatePlugins(splash, null, monitor.createSubTaskMonitor(1, false), false);
-            }
-
-            monitor.indeterminateSubTask(tr("Installing updated plugins"));
-            PluginHandler.installDownloadedPlugins(true);
-
-            monitor.indeterminateSubTask(tr("Loading early plugins"));
-            PluginHandler.loadEarlyPlugins(splash, pluginsToLoad, monitor.createSubTaskMonitor(1, false));
+            pluginsToLoad = updateAndLoadEarlyPlugins(splash, monitor);
         }
 
@@ -468,7 +458,5 @@
 
         if (!skipLoadingPlugins) {
-            monitor.indeterminateSubTask(tr("Loading plugins"));
-            PluginHandler.loadLatePlugins(splash, pluginsToLoad,  monitor.createSubTaskMonitor(1, false));
-            toolbar.refreshToolbarControl();
+            loadLatePlugins(splash, monitor, pluginsToLoad);
         }
 
@@ -525,4 +513,26 @@
             RepaintManager.setCurrentManager(new CheckThreadViolationRepaintManager());
         }
+    }
+
+    static Collection<PluginInformation> updateAndLoadEarlyPlugins(SplashScreen splash, SplashProgressMonitor monitor) {
+        Collection<PluginInformation> pluginsToLoad;
+        pluginsToLoad = PluginHandler.buildListOfPluginsToLoad(splash, monitor.createSubTaskMonitor(1, false));
+        if (!pluginsToLoad.isEmpty() && PluginHandler.checkAndConfirmPluginUpdate(splash)) {
+            monitor.subTask(tr("Updating plugins"));
+            pluginsToLoad = PluginHandler.updatePlugins(splash, null, monitor.createSubTaskMonitor(1, false), false);
+        }
+
+        monitor.indeterminateSubTask(tr("Installing updated plugins"));
+        PluginHandler.installDownloadedPlugins(true);
+
+        monitor.indeterminateSubTask(tr("Loading early plugins"));
+        PluginHandler.loadEarlyPlugins(splash, pluginsToLoad, monitor.createSubTaskMonitor(1, false));
+        return pluginsToLoad;
+    }
+
+    static void loadLatePlugins(SplashScreen splash, SplashProgressMonitor monitor, Collection<PluginInformation> pluginsToLoad) {
+        monitor.indeterminateSubTask(tr("Loading plugins"));
+        PluginHandler.loadLatePlugins(splash, pluginsToLoad, monitor.createSubTaskMonitor(1, false));
+        toolbar.refreshToolbarControl();
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/SplashScreen.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/SplashScreen.java	(revision 10092)
+++ trunk/src/org/openstreetmap/josm/gui/SplashScreen.java	(revision 10093)
@@ -197,4 +197,9 @@
         private SplashProgressMonitor latestSubtask;
 
+        /**
+         * Constructs a new {@code SplashProgressMonitor}.
+         * @param name name
+         * @param listener change listener
+         */
         public SplashProgressMonitor(String name, ChangeListener listener) {
             this.name = name;
Index: trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 10092)
+++ trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 10093)
@@ -8,4 +8,5 @@
 import java.awt.Component;
 import java.awt.Font;
+import java.awt.GraphicsEnvironment;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
@@ -276,5 +277,5 @@
      * @param plugins the collection of plugins
      */
-    private static void filterDeprecatedPlugins(Component parent, Collection<String> plugins) {
+    static void filterDeprecatedPlugins(Component parent, Collection<String> plugins) {
         Set<DeprecatedPlugin> removedPlugins = new TreeSet<>();
         for (DeprecatedPlugin depr : DEPRECATED_PLUGINS) {
@@ -305,10 +306,12 @@
         }
         sb.append("</ul></html>");
-        JOptionPane.showMessageDialog(
-                parent,
-                sb.toString(),
-                tr("Warning"),
-                JOptionPane.WARNING_MESSAGE
-        );
+        if (!GraphicsEnvironment.isHeadless()) {
+            JOptionPane.showMessageDialog(
+                    parent,
+                    sb.toString(),
+                    tr("Warning"),
+                    JOptionPane.WARNING_MESSAGE
+            );
+        }
     }
 
@@ -323,5 +326,5 @@
      * @param plugins the collection of plugins
      */
-    private static void filterUnmaintainedPlugins(Component parent, Collection<String> plugins) {
+    static void filterUnmaintainedPlugins(Component parent, Collection<String> plugins) {
         for (String unmaintained : UNMAINTAINED_PLUGINS) {
             if (!plugins.contains(unmaintained)) {
