Index: trunk/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java	(revision 6152)
+++ trunk/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java	(revision 6155)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.tools;
 
+import java.awt.HeadlessException;
 import java.awt.Toolkit;
 import java.io.UnsupportedEncodingException;
@@ -27,11 +28,12 @@
         if (b != null)
             return b;
-        int i = url.indexOf('?');
+        int i = url.indexOf("#map");
+        if (i >= 0) {
+            // probably it's a URL following the new scheme?
+            return parseHashURLs(url);
+        }
+        i = url.indexOf('?');
         if (i == -1) {
-            //probably it's a URL following the new scheme?
-            if (url.indexOf('#') >= 0)
-                return parseHashURLs(url);
-            else
-                return null;
+            return null;
         }
         String[] args = url.substring(i+1).split("&");
@@ -80,15 +82,15 @@
      * The following function, called by the old parse function if necessary, provides parsing new URLs
      * the new URLs follow the scheme http://www.openstreetmap.org/#map=18/51.71873/8.76164&layers=CN
-     * @param url
-     * @return
+     * @param url string for parsing
+     * @return Bounds if hashurl, {@code null} otherwise
      */
     private static Bounds parseHashURLs(String url) {
-        int startIndex = url.indexOf("=");
+        int startIndex = url.indexOf("#map=");
         if (startIndex == -1) return null;
-        int endIndex = url.indexOf("&");
+        int endIndex = url.indexOf('&', startIndex);
         if (endIndex == -1) endIndex = url.length();
         try
         {
-            String coordPart = url.substring(startIndex+1, endIndex);
+            String coordPart = url.substring(startIndex+5, endIndex);
             String[] parts = coordPart.split("/");
             Bounds b = positionToBounds(Double.parseDouble(parts[1]),
@@ -181,9 +183,17 @@
     public static Bounds positionToBounds(final double lat, final double lon, final int zoom) {
         int tileSizeInPixels = 256;
-        int height = Toolkit.getDefaultToolkit().getScreenSize().height;
-        int width = Toolkit.getDefaultToolkit().getScreenSize().width;
-        if (Main.isDisplayingMapView()) {
-            height = Main.map.mapView.getHeight();
-            width = Main.map.mapView.getWidth();
+        int height;
+        int width;
+        try {
+            height = Toolkit.getDefaultToolkit().getScreenSize().height;
+            width = Toolkit.getDefaultToolkit().getScreenSize().width;
+            if (Main.isDisplayingMapView()) {
+                height = Main.map.mapView.getHeight();
+                width = Main.map.mapView.getWidth();
+            }
+        } catch (HeadlessException he) {
+            // in headless mode, when running tests
+            height = 480;
+            width = 640;
         }
         double scale = (1 << zoom) * tileSizeInPixels / (2 * Math.PI * R);
