Index: /trunk/src/org/openstreetmap/josm/tools/GeoUrlToBounds.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/GeoUrlToBounds.java	(revision 15183)
+++ /trunk/src/org/openstreetmap/josm/tools/GeoUrlToBounds.java	(revision 15184)
@@ -19,5 +19,6 @@
      * The pattern of a geo: url, having named match groups.
      */
-    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.]+)(?<crs>;crs=wgs84)?(?<uncertainty>;u=[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 15183)
+++ /trunk/test/unit/org/openstreetmap/josm/tools/GeoUrlToBoundsTest.java	(revision 15184)
@@ -40,4 +40,23 @@
 
     /**
+     * Tests parsing Geo URLs with a CRS and/or uncertainty.
+     */
+    @Test
+    public void testParseCrsUncertainty() {
+        assertThat(
+                GeoUrlToBounds.parse("geo:60.00000,17.000000;crs=wgs84"),
+                is(OsmUrlToBounds.positionToBounds(60.0, 17.0, 18))
+        );
+        assertThat(
+                GeoUrlToBounds.parse("geo:60.00000,17.000000;crs=wgs84;u=0"),
+                is(OsmUrlToBounds.positionToBounds(60.0, 17.0, 18))
+        );
+        assertThat(
+                GeoUrlToBounds.parse("geo:60.00000,17.000000;u=20"),
+                is(OsmUrlToBounds.positionToBounds(60.0, 17.0, 18))
+        );
+    }
+
+    /**
      * Tests parsing invalid Geo URL.
      */
