Index: trunk/src/org/openstreetmap/josm/data/Bounds.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Bounds.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/Bounds.java	(revision 5235)
@@ -43,8 +43,21 @@
     }
 
+    public Bounds(LatLon min, LatLon max, boolean roundToOsmPrecision) {
+        this(min.lat(), min.lon(), max.lat(), max.lon(), roundToOsmPrecision);
+    }
+
     public Bounds(LatLon b) {
+        this(b, true);
+    }
+    
+    public Bounds(LatLon b, boolean roundToOsmPrecision) {
         // Do not call this(b, b) to avoid GPX performance issue (see #7028) until roundToOsmPrecision() is improved
-        this.minLat = LatLon.roundToOsmPrecision(b.lat());
-        this.minLon = LatLon.roundToOsmPrecision(b.lon());
+        if (roundToOsmPrecision) {
+            this.minLat = LatLon.roundToOsmPrecision(b.lat());
+            this.minLon = LatLon.roundToOsmPrecision(b.lon());
+        } else {
+            this.minLat = b.lat();
+            this.minLon = b.lon();
+        }
         this.maxLat = this.minLat;
         this.maxLon = this.minLon;
@@ -52,18 +65,40 @@
 
     public Bounds(double minlat, double minlon, double maxlat, double maxlon) {
-        this.minLat = LatLon.roundToOsmPrecision(minlat);
-        this.minLon = LatLon.roundToOsmPrecision(minlon);
-        this.maxLat = LatLon.roundToOsmPrecision(maxlat);
-        this.maxLon = LatLon.roundToOsmPrecision(maxlon);
+        this(minlat, minlon, maxlat, maxlon, true);
+    }
+
+    public Bounds(double minlat, double minlon, double maxlat, double maxlon, boolean roundToOsmPrecision) {
+        if (roundToOsmPrecision) {
+            this.minLat = LatLon.roundToOsmPrecision(minlat);
+            this.minLon = LatLon.roundToOsmPrecision(minlon);
+            this.maxLat = LatLon.roundToOsmPrecision(maxlat);
+            this.maxLon = LatLon.roundToOsmPrecision(maxlon);
+        } else {
+            this.minLat = minlat;
+            this.minLon = minlon;
+            this.maxLat = maxlat;
+            this.maxLon = maxlon;
+        }
     }
 
     public Bounds(double [] coords) {
+        this(coords, true);
+    }
+
+    public Bounds(double [] coords, boolean roundToOsmPrecision) {
         CheckParameterUtil.ensureParameterNotNull(coords, "coords");
         if (coords.length != 4)
             throw new IllegalArgumentException(MessageFormat.format("Expected array of length 4, got {0}", coords.length));
-        this.minLat = LatLon.roundToOsmPrecision(coords[0]);
-        this.minLon = LatLon.roundToOsmPrecision(coords[1]);
-        this.maxLat = LatLon.roundToOsmPrecision(coords[2]);
-        this.maxLon = LatLon.roundToOsmPrecision(coords[3]);
+        if (roundToOsmPrecision) {
+            this.minLat = LatLon.roundToOsmPrecision(coords[0]);
+            this.minLon = LatLon.roundToOsmPrecision(coords[1]);
+            this.maxLat = LatLon.roundToOsmPrecision(coords[2]);
+            this.maxLon = LatLon.roundToOsmPrecision(coords[3]);
+        } else {
+            this.minLat = coords[0];
+            this.minLon = coords[1];
+            this.maxLat = coords[2];
+            this.maxLon = coords[3];
+        }
     }
 
@@ -73,4 +108,8 @@
 
     public Bounds(String asString, String separator, ParseMethod parseMethod) throws IllegalArgumentException {
+        this(asString, separator, parseMethod, true);
+    }
+
+    public Bounds(String asString, String separator, ParseMethod parseMethod, boolean roundToOsmPrecision) throws IllegalArgumentException {
         CheckParameterUtil.ensureParameterNotNull(asString, "asString");
         String[] components = asString.split(separator);
@@ -88,28 +127,28 @@
         switch (parseMethod) {
             case LEFT_BOTTOM_RIGHT_TOP:
-                this.minLat = initLat(values[1]);
-                this.minLon = initLon(values[0]);
-                this.maxLat = initLat(values[3]);
-                this.maxLon = initLon(values[2]);
+                this.minLat = initLat(values[1], roundToOsmPrecision);
+                this.minLon = initLon(values[0], roundToOsmPrecision);
+                this.maxLat = initLat(values[3], roundToOsmPrecision);
+                this.maxLon = initLon(values[2], roundToOsmPrecision);
                 break;
             case MINLAT_MINLON_MAXLAT_MAXLON:
             default:
-                this.minLat = initLat(values[0]);
-                this.minLon = initLon(values[1]);
-                this.maxLat = initLat(values[2]);
-                this.maxLon = initLon(values[3]);
-        }
-    }
-    
-    protected static double initLat(double value) {
+                this.minLat = initLat(values[0], roundToOsmPrecision);
+                this.minLon = initLon(values[1], roundToOsmPrecision);
+                this.maxLat = initLat(values[2], roundToOsmPrecision);
+                this.maxLon = initLon(values[3], roundToOsmPrecision);
+        }
+    }
+    
+    protected static double initLat(double value, boolean roundToOsmPrecision) {
         if (!LatLon.isValidLat(value))
             throw new IllegalArgumentException(tr("Illegal latitude value ''{0}''", value));
-        return LatLon.roundToOsmPrecision(value);
-    }
-
-    protected static double initLon(double value) {
+        return roundToOsmPrecision ? LatLon.roundToOsmPrecision(value) : value;
+    }
+
+    protected static double initLon(double value, boolean roundToOsmPrecision) {
         if (!LatLon.isValidLon(value))
             throw new IllegalArgumentException(tr("Illegal longitude value ''{0}''", value));
-        return LatLon.roundToOsmPrecision(value);
+        return roundToOsmPrecision ? LatLon.roundToOsmPrecision(value) : value;
     }
 
Index: trunk/src/org/openstreetmap/josm/data/coor/LatLon.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 5235)
@@ -45,5 +45,5 @@
         // a comma separated list of coordinates.
         cDdFormatter = (DecimalFormat) NumberFormat.getInstance(Locale.UK);
-        cDdFormatter.applyPattern("###0.0000000");
+        cDdFormatter.applyPattern("###0.0######");
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/BelgianLambert1972.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/BelgianLambert1972.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/BelgianLambert1972.java	(revision 5235)
@@ -47,5 +47,5 @@
         return new Bounds(
                 new LatLon(49.51, 2.54),
-                new LatLon(51.50, 6.40));
+                new LatLon(51.50, 6.40), false);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/BelgianLambert2008.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/BelgianLambert2008.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/BelgianLambert2008.java	(revision 5235)
@@ -46,5 +46,5 @@
         return new Bounds(
                 new LatLon(49.51, 2.54),
-                new LatLon(51.50, 6.40));
+                new LatLon(51.50, 6.40), false);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/CustomProjection.java	(revision 5235)
@@ -343,5 +343,5 @@
                 parseAngle(numStr[0], "minlon (+bounds)"),
                 parseAngle(numStr[3], "maxlat (+bounds)"),
-                parseAngle(numStr[2], "maxlon (+bounds)"));
+                parseAngle(numStr[2], "maxlon (+bounds)"), false);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/Epsg3008.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Epsg3008.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/Epsg3008.java	(revision 5235)
@@ -54,6 +54,6 @@
     public Bounds getWorldBoundsLatLon() {
         return new Bounds(
-                new LatLon(55.2, 12.1),     // new LatLon(-90.0, -180.0),
-                new LatLon(62.26, 14.65));  // new LatLon(90.0, 180.0));
+                new LatLon(55.2, 12.1),
+                new LatLon(62.26, 14.65), false);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/Epsg4326.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Epsg4326.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/Epsg4326.java	(revision 5235)
@@ -44,5 +44,5 @@
         return new Bounds(
                 new LatLon(-90.0, -180.0),
-                new LatLon(90.0, 180.0));
+                new LatLon(90.0, 180.0), false);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/GaussKrueger.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/GaussKrueger.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/GaussKrueger.java	(revision 5235)
@@ -17,8 +17,8 @@
 
     private static Bounds[] bounds = {
-        new Bounds(new LatLon(-5, 3.5), new LatLon(85, 8.5)),
-        new Bounds(new LatLon(-5, 6.5), new LatLon(85, 11.5)),
-        new Bounds(new LatLon(-5, 9.5), new LatLon(85, 14.5)),
-        new Bounds(new LatLon(-5, 12.5), new LatLon(85, 17.5)),
+        new Bounds(new LatLon(-5, 3.5), new LatLon(85, 8.5), false),
+        new Bounds(new LatLon(-5, 6.5), new LatLon(85, 11.5), false),
+        new Bounds(new LatLon(-5, 9.5), new LatLon(85, 14.5), false),
+        new Bounds(new LatLon(-5, 12.5), new LatLon(85, 17.5), false),
     };
 
Index: trunk/src/org/openstreetmap/josm/data/projection/Lambert.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Lambert.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/Lambert.java	(revision 5235)
@@ -143,5 +143,6 @@
         Bounds b= new Bounds(
                 new LatLon(Math.max(zoneLimitsDegree[layoutZone][1] - cMaxOverlappingZonesDegree, Math.toDegrees(cMinLatZone1Radian)), Math.toDegrees(cMinLonZonesRadian)),
-                new LatLon(Math.min(zoneLimitsDegree[layoutZone][0] + cMaxOverlappingZonesDegree, Math.toDegrees(cMaxLatZone1Radian)), Math.toDegrees(cMaxLonZonesRadian)));
+                new LatLon(Math.min(zoneLimitsDegree[layoutZone][0] + cMaxOverlappingZonesDegree, Math.toDegrees(cMaxLatZone1Radian)), Math.toDegrees(cMaxLonZonesRadian)),
+                false);
         return b;
     }
Index: trunk/src/org/openstreetmap/josm/data/projection/Lambert93.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Lambert93.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/Lambert93.java	(revision 5235)
@@ -45,5 +45,5 @@
         return new Bounds(
                 new LatLon(41.0, -5.5),
-                new LatLon(51.0, 10.2));
+                new LatLon(51.0, 10.2), false);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/LambertCC9Zones.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/LambertCC9Zones.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/LambertCC9Zones.java	(revision 5235)
@@ -90,5 +90,6 @@
         return new Bounds(
                 new LatLon(Math.max(medLatZone - 1.0 - cMaxOverlappingZones, cMinLatZonesDegree), -5.5),
-                new LatLon(Math.min(medLatZone + 1.0 + cMaxOverlappingZones, Math.toDegrees(cMaxLatZonesRadian)), 10.2));
+                new LatLon(Math.min(medLatZone + 1.0 + cMaxOverlappingZones, Math.toDegrees(cMaxLatZonesRadian)), 10.2),
+                false);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/LambertEST.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/LambertEST.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/LambertEST.java	(revision 5235)
@@ -63,5 +63,5 @@
         return new Bounds(
                 new LatLon(56.05, 21.64),
-                new LatLon(61.13, 28.58));
+                new LatLon(61.13, 28.58), false);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/Mercator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Mercator.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/Mercator.java	(revision 5235)
@@ -60,5 +60,5 @@
         return new Bounds(
                 new LatLon(-85.05112877980659, -180.0),
-                new LatLon(85.05112877980659, 180.0));
+                new LatLon(85.05112877980659, 180.0), false);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/Puwg.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Puwg.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/Puwg.java	(revision 5235)
@@ -121,5 +121,5 @@
             return new Bounds(
                     new LatLon(49.00, 14.12),
-                    new LatLon(54.84, 24.15));
+                    new LatLon(54.84, 24.15), false);
         }
 
@@ -164,5 +164,5 @@
             return new Bounds(
                     new LatLon(49.00, (3 * getZone()) - 1.5),
-                    new LatLon(54.84, (3 * getZone()) + 1.5));
+                    new LatLon(54.84, (3 * getZone()) + 1.5), false);
         }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/SwissGrid.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/SwissGrid.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/SwissGrid.java	(revision 5235)
@@ -63,5 +63,5 @@
     @Override
     public Bounds getWorldBoundsLatLon() {
-        return new Bounds(new LatLon(45.7, 5.7), new LatLon(47.9, 10.6));
+        return new Bounds(new LatLon(45.7, 5.7), new LatLon(47.9, 10.6), false);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/TransverseMercatorLV.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/TransverseMercatorLV.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/TransverseMercatorLV.java	(revision 5235)
@@ -56,5 +56,5 @@
         return new Bounds(
                 new LatLon(-90.0, -180.0),
-                new LatLon(90.0, 180.0));
+                new LatLon(90.0, 180.0), false);
     }
 }
Index: trunk/src/org/openstreetmap/josm/data/projection/UTM.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/UTM.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/UTM.java	(revision 5235)
@@ -100,9 +100,9 @@
             return new Bounds(
                     new LatLon(-5.0, getUtmCentralMeridianDeg(getzone())-5.0),
-                    new LatLon(85.0, getUtmCentralMeridianDeg(getzone())+5.0));
+                    new LatLon(85.0, getUtmCentralMeridianDeg(getzone())+5.0), false);
         else
             return new Bounds(
                     new LatLon(-85.0, getUtmCentralMeridianDeg(getzone())-5.0),
-                    new LatLon(5.0, getUtmCentralMeridianDeg(getzone())+5.0));
+                    new LatLon(5.0, getUtmCentralMeridianDeg(getzone())+5.0), false);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/UTM_France_DOM.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/UTM_France_DOM.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/data/projection/UTM_France_DOM.java	(revision 5235)
@@ -19,9 +19,9 @@
 public class UTM_France_DOM extends AbstractProjection {
 
-    private final static Bounds FortMarigotBounds = new Bounds( new LatLon(17.6,-63.25), new LatLon(18.5,-62.5));
-    private final static Bounds SainteAnneBounds = new Bounds( new LatLon(15.8,-61.9), new LatLon(16.6,-60.9));
-    private final static Bounds MartiniqueBounds = new Bounds( new LatLon(14.25,-61.25), new LatLon(15.025,-60.725));
-    private final static Bounds ReunionBounds = new Bounds( new LatLon(-25.92,37.58), new LatLon(-10.6, 58.27));
-    private final static Bounds GuyaneBounds = new Bounds( new LatLon(2.16 , -54.0), new LatLon(9.06 , -49.62));
+    private final static Bounds FortMarigotBounds = new Bounds( new LatLon(17.6,-63.25), new LatLon(18.5,-62.5), false);
+    private final static Bounds SainteAnneBounds = new Bounds( new LatLon(15.8,-61.9), new LatLon(16.6,-60.9), false);
+    private final static Bounds MartiniqueBounds = new Bounds( new LatLon(14.25,-61.25), new LatLon(15.025,-60.725), false);
+    private final static Bounds ReunionBounds = new Bounds( new LatLon(-25.92,37.58), new LatLon(-10.6, 58.27), false);
+    private final static Bounds GuyaneBounds = new Bounds( new LatLon(2.16 , -54.0), new LatLon(9.06 , -49.62), false);
     private final static Bounds[] utmBounds = { FortMarigotBounds, SainteAnneBounds, MartiniqueBounds, ReunionBounds, GuyaneBounds };
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java	(revision 5234)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java	(revision 5235)
@@ -198,5 +198,5 @@
         Bounds b = proj.getWorldBoundsLatLon();
         CoordinateFormat cf = CoordinateFormat.getDefaultFormat();
-        bounds.setText(b.getMin().latToString(cf)+"; "+b.getMin().lonToString(cf)+" : "+b.getMax().latToString(cf)+"; "+b.getMax().lonToString(cf));
+        bounds.setText(b.getMin().lonToString(cf)+", "+b.getMin().latToString(cf)+" : "+b.getMax().lonToString(cf)+", "+b.getMax().latToString(cf));
         boolean showCode = true;
         if (pc instanceof SubPrefsOptions) {
