Index: trunk/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java	(revision 11298)
+++ trunk/src/org/openstreetmap/josm/tools/OsmUrlToBounds.java	(revision 11299)
@@ -10,6 +10,9 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.projection.Ellipsoid;
+import org.openstreetmap.josm.data.projection.Projection;
+import org.openstreetmap.josm.data.projection.Projections;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 
@@ -33,10 +36,9 @@
         if (b != null)
             return b;
-        int i = url.indexOf("#map");
-        if (i >= 0) {
+        if (url.contains("#map")) {
             // probably it's a URL following the new scheme?
             return parseHashURLs(url);
         }
-        i = url.indexOf('?');
+        final int i = url.indexOf('?');
         if (i == -1) {
             return null;
@@ -201,17 +203,9 @@
         double deltaX = width / 2.0 / scale;
         double deltaY = height / 2.0 / scale;
-        double x = Math.toRadians(lon) * Ellipsoid.WGS84.a;
-        double y = mercatorY(lat);
+        final Projection mercator = Projections.getProjectionByCode("EPSG:3857");
+        final EastNorth projected = mercator.latlon2eastNorth(new LatLon(lat, lon));
         return new Bounds(
-                invMercatorY(y - deltaY), Math.toDegrees(x - deltaX) / Ellipsoid.WGS84.a,
-                invMercatorY(y + deltaY), Math.toDegrees(x + deltaX) / Ellipsoid.WGS84.a);
-    }
-
-    public static double mercatorY(double lat) {
-        return Math.log(Math.tan(Math.PI/4 + Math.toRadians(lat)/2)) * Ellipsoid.WGS84.a;
-    }
-
-    public static double invMercatorY(double north) {
-        return Math.toDegrees(Math.atan(Math.sinh(north / Ellipsoid.WGS84.a)));
+                mercator.eastNorth2latlon(projected.add(-deltaX, -deltaY)),
+                mercator.eastNorth2latlon(projected.add(deltaX, deltaY)));
     }
 
