Index: /trunk/src/org/openstreetmap/josm/gui/GettingStarted.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/GettingStarted.java	(revision 7074)
+++ /trunk/src/org/openstreetmap/josm/gui/GettingStarted.java	(revision 7075)
@@ -7,4 +7,5 @@
 import java.awt.BorderLayout;
 import java.awt.EventQueue;
+import java.awt.GraphicsEnvironment;
 import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
@@ -126,5 +127,7 @@
         getMOTD();
 
-        new FileDrop(scroller);
+        if (!GraphicsEnvironment.isHeadless()) {
+            new FileDrop(scroller);
+        }
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/ImageryMenu.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/ImageryMenu.java	(revision 7074)
+++ /trunk/src/org/openstreetmap/josm/gui/ImageryMenu.java	(revision 7075)
@@ -6,4 +6,5 @@
 
 import java.awt.Component;
+import java.awt.GraphicsEnvironment;
 import java.awt.MenuComponent;
 import java.awt.Toolkit;
@@ -104,9 +105,11 @@
         MainMenu.add(subMenu, rectaction);
     }
-    
+
     private void setupMenuScroller() {
-        int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
-        int menuItemHeight = singleOffset.getPreferredSize().height;
-        MenuScroller.setScrollerFor(this, (screenHeight / menuItemHeight)-1);
+        if (!GraphicsEnvironment.isHeadless()) {
+            int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
+            int menuItemHeight = singleOffset.getPreferredSize().height;
+            MenuScroller.setScrollerFor(this, (screenHeight / menuItemHeight)-1);
+        }
     }
 
@@ -234,10 +237,10 @@
 
     /**
-     * Collection to store temporary menu items. They will be deleted 
+     * Collection to store temporary menu items. They will be deleted
      * (and possibly recreated) when refreshImageryMenu() is called.
      * @since 5803
      */
     private List <Object> dynamicItems = new ArrayList<>(20);
-    
+
     /**
      * Remove all the items in @field dynamicItems collection
@@ -264,9 +267,9 @@
         add(s);
     }
-    
+
     private void addDynamic(Action a) {
         dynamicItems.add( this.add(a) );
     }
-    
+
     private void addDynamic(JMenuItem it) {
         dynamicItems.add( this.add(it) );
Index: /trunk/src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 7074)
+++ /trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 7075)
@@ -7,4 +7,5 @@
 
 import java.awt.Component;
+import java.awt.GraphicsEnvironment;
 import java.awt.Toolkit;
 import java.awt.event.KeyEvent;
@@ -567,7 +568,9 @@
     public JMenu addMenu(String name, int mnemonicKey, int position, String relativeHelpTopic) {
         final JMenu menu = new JMenu(tr(name));
-        int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
-        int menuItemHeight = new JMenu().add(newAction).getPreferredSize().height;
-        MenuScroller.setScrollerFor(menu, screenHeight / menuItemHeight);
+        if (!GraphicsEnvironment.isHeadless()) {
+            int screenHeight = Toolkit.getDefaultToolkit().getScreenSize().height;
+            int menuItemHeight = new JMenu().add(newAction).getPreferredSize().height;
+            MenuScroller.setScrollerFor(menu, screenHeight / menuItemHeight);
+        }
         return addMenu(menu, name, mnemonicKey, position, relativeHelpTopic);
     }
Index: /trunk/src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 7074)
+++ /trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 7075)
@@ -9,4 +9,5 @@
 import java.awt.Dimension;
 import java.awt.Font;
+import java.awt.GraphicsEnvironment;
 import java.awt.GridBagLayout;
 import java.awt.Rectangle;
@@ -53,7 +54,7 @@
 import org.openstreetmap.josm.actions.mapmode.ZoomAction;
 import org.openstreetmap.josm.data.Preferences;
-import org.openstreetmap.josm.data.ViewportData;
 import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
 import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
+import org.openstreetmap.josm.data.ViewportData;
 import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
 import org.openstreetmap.josm.gui.dialogs.ChangesetDialog;
@@ -161,5 +162,7 @@
 
         mapView = new MapView(contentPane, viewportData);
-        new FileDrop(mapView);
+        if (!GraphicsEnvironment.isHeadless()) {
+            new FileDrop(mapView);
+        }
 
         splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true);
@@ -599,5 +602,5 @@
 
     /**
-     * Remove panel from top of MapView by class     
+     * Remove panel from top of MapView by class
      */
     public void removeTopPanel(Class<?> type) {
Index: /trunk/src/org/openstreetmap/josm/io/auth/AbstractCredentialsAgent.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/auth/AbstractCredentialsAgent.java	(revision 7074)
+++ /trunk/src/org/openstreetmap/josm/io/auth/AbstractCredentialsAgent.java	(revision 7075)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.io.auth;
 
+import java.awt.GraphicsEnvironment;
 import java.net.Authenticator.RequestorType;
 import java.net.PasswordAuthentication;
@@ -44,21 +45,25 @@
          */
         } else if (noSuccessWithLastResponse || username.isEmpty() || password.isEmpty()) {
-            GuiHelper.runInEDTAndWait(new Runnable() {
-                @Override
-                public void run() {
-                    CredentialDialog dialog = null;
-                    if (requestorType.equals(RequestorType.PROXY))
-                        dialog = CredentialDialog.getHttpProxyCredentialDialog(username, password, host, getSaveUsernameAndPasswordCheckboxText());
-                    else
-                        dialog = CredentialDialog.getOsmApiCredentialDialog(username, password, host, getSaveUsernameAndPasswordCheckboxText());
-                    dialog.setVisible(true);
-                    response.setCanceled(dialog.isCanceled());
-                    if (dialog.isCanceled())
-                        return;
-                    response.setUsername(dialog.getUsername());
-                    response.setPassword(dialog.getPassword());
-                    response.setSaveCredentials(dialog.isSaveCredentials());
-                }
-            });
+            if (!GraphicsEnvironment.isHeadless()) {
+                GuiHelper.runInEDTAndWait(new Runnable() {
+                    @Override
+                    public void run() {
+                        CredentialDialog dialog = null;
+                        if (requestorType.equals(RequestorType.PROXY))
+                            dialog = CredentialDialog.getHttpProxyCredentialDialog(
+                                    username, password, host, getSaveUsernameAndPasswordCheckboxText());
+                        else
+                            dialog = CredentialDialog.getOsmApiCredentialDialog(
+                                    username, password, host, getSaveUsernameAndPasswordCheckboxText());
+                        dialog.setVisible(true);
+                        response.setCanceled(dialog.isCanceled());
+                        if (dialog.isCanceled())
+                            return;
+                        response.setUsername(dialog.getUsername());
+                        response.setPassword(dialog.getPassword());
+                        response.setSaveCredentials(dialog.isSaveCredentials());
+                    }
+                });
+            }
             if (response.isCanceled() || response.getUsername() == null || response.getPassword() == null) {
                 return response;
Index: /trunk/src/org/openstreetmap/josm/tools/ImageProvider.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 7074)
+++ /trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 7075)
@@ -8,5 +8,4 @@
 import java.awt.Graphics;
 import java.awt.Graphics2D;
-import java.awt.GraphicsConfiguration;
 import java.awt.GraphicsEnvironment;
 import java.awt.Image;
@@ -14,5 +13,4 @@
 import java.awt.RenderingHints;
 import java.awt.Toolkit;
-import java.awt.Transparency;
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayInputStream;
@@ -793,4 +791,8 @@
             img = overlay(img, ImageProvider.get("cursor/modifier/" + overlay), OverlayPosition.SOUTHEAST);
         }
+        if (GraphicsEnvironment.isHeadless()) {
+            Main.warn("Cursors are not available in headless mode. Returning null for '"+name+"'");
+            return null;
+        }
         return Toolkit.getDefaultToolkit().createCustomCursor(img.getImage(),
                 "crosshair".equals(name) ? new Point(10, 10) : new Point(3, 2), "Cursor");
@@ -808,11 +810,9 @@
      */
     public static ImageIcon overlay(Icon ground, Icon overlay, OverlayPosition pos) {
-        GraphicsConfiguration conf = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice()
-                .getDefaultConfiguration();
         int w = ground.getIconWidth();
         int h = ground.getIconHeight();
         int wo = overlay.getIconWidth();
         int ho = overlay.getIconHeight();
-        BufferedImage img = conf.createCompatibleImage(w, h, Transparency.TRANSLUCENT);
+        BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
         Graphics g = img.createGraphics();
         ground.paintIcon(null, g, 0, 0);
Index: /trunk/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java	(revision 7074)
+++ /trunk/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java	(revision 7075)
@@ -99,5 +99,6 @@
     @Override
     public boolean canFullscreen() {
-        return GraphicsEnvironment.getLocalGraphicsEnvironment()
+        return !GraphicsEnvironment.isHeadless() &&
+                GraphicsEnvironment.getLocalGraphicsEnvironment()
         .getDefaultScreenDevice().isFullScreenSupported();
     }
@@ -328,5 +329,5 @@
     }
 
-    // Method kept because strings have already been translated. To enable for Java 8 migration somewhere in 2016 
+    // Method kept because strings have already been translated. To enable for Java 8 migration somewhere in 2016
     protected void askUpdateJava(final String version, final String url) {
         GuiHelper.runInEDTAndWait(new Runnable() {
Index: /trunk/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java	(revision 7074)
+++ /trunk/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java	(revision 7075)
@@ -4,5 +4,4 @@
 import java.io.File;
 import java.io.IOException;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -19,4 +18,6 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.preferences.ToolbarPreferences;
+import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
 import org.openstreetmap.josm.tools.MultiMap;
 
@@ -75,5 +76,6 @@
         Main.initApplicationPreferences();
         Main.determinePlatformHook();
-        Main.preConstructorInit(new HashMap<MainApplication.Option, Collection<String>>());
+        ProjectionPreference.setProjection();
+        Main.toolbar = new ToolbarPreferences();
         new MainApplication();
         Main.main.createMapFrame(null, null);
