Index: /trunk/src/org/openstreetmap/josm/tools/GeoUrlToBounds.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/GeoUrlToBounds.java	(revision 10634)
+++ /trunk/src/org/openstreetmap/josm/tools/GeoUrlToBounds.java	(revision 10635)
@@ -15,5 +15,5 @@
 public final class GeoUrlToBounds {
 
-    public static final Pattern PATTERN = Pattern.compile("geo:(?<lat>[0-9.]+),(?<lon>[0-9.]+)(\\?z=(?<zoom>[0-9]+))?");
+    public static final Pattern PATTERN = Pattern.compile("geo:(?<lat>[+-]?[0-9.]+),(?<lon>[+-]?[0-9.]+)(\\?z=(?<zoom>[0-9]+))?");
 
     private GeoUrlToBounds() {
Index: /trunk/test/unit/org/openstreetmap/josm/tools/GeoUrlToBoundsTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/tools/GeoUrlToBoundsTest.java	(revision 10634)
+++ /trunk/test/unit/org/openstreetmap/josm/tools/GeoUrlToBoundsTest.java	(revision 10635)
@@ -33,4 +33,8 @@
                 is(OsmUrlToBounds.positionToBounds(12.34, 56.78, 18))
         );
+        assertThat(
+                GeoUrlToBounds.parse("geo:-37.786971,-122.399677"),
+                is(OsmUrlToBounds.positionToBounds(-37.786971, -122.399677, 18))
+        );
     }
 
