Index: trunk/src/org/openstreetmap/josm/data/projection/Epsg4326.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Epsg4326.java	(revision 2113)
+++ trunk/src/org/openstreetmap/josm/data/projection/Epsg4326.java	(revision 2114)
@@ -38,6 +38,11 @@
     {
         return new Bounds(
-        new LatLon(-90.0, -180.0),
-        new LatLon(90.0, 180.0));
+                new LatLon(-90.0, -180.0),
+                new LatLon(90.0, 180.0));
+    }
+
+    public double getDefaultZoomInPPD() {
+        // This will set the scale bar to about 100 km
+        return 0.009;
     }
 }
Index: trunk/src/org/openstreetmap/josm/data/projection/GaussLaborde_Reunion.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/GaussLaborde_Reunion.java	(revision 2113)
+++ trunk/src/org/openstreetmap/josm/data/projection/GaussLaborde_Reunion.java	(revision 2114)
@@ -216,3 +216,7 @@
     }
 
+    public double getDefaultZoomInPPD() {
+        // this will set the map scaler to about 1000 m
+        return 10.02;
+    }
 }
Index: trunk/src/org/openstreetmap/josm/data/projection/Lambert.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Lambert.java	(revision 2113)
+++ trunk/src/org/openstreetmap/josm/data/projection/Lambert.java	(revision 2114)
@@ -289,3 +289,8 @@
                 new LatLon(57.0, 10.2));*/
     }
+
+    public double getDefaultZoomInPPD() {
+        // TODO FIXME
+        return 0;
+    }
 }
Index: trunk/src/org/openstreetmap/josm/data/projection/LambertEST.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/LambertEST.java	(revision 2113)
+++ trunk/src/org/openstreetmap/josm/data/projection/LambertEST.java	(revision 2114)
@@ -48,5 +48,5 @@
         double t = Math.tan(Math.PI / 4.0 - Math.toRadians(p.lat()) / 2.0)
         / Math.pow(( (1.0 - ee * Math.sin(Math.toRadians(p.lat()))) / (1.0
-        + ee * Math.sin(Math.toRadians(p.lat())))) ,(ee / 2.0));
+                + ee * Math.sin(Math.toRadians(p.lat())))) ,(ee / 2.0));
         double r = a * f * Math.pow(t, n);
         double theta = n * (Math.toRadians(p.lon()) - lonf);
@@ -64,18 +64,17 @@
         double a = 1.5707963267948966;
         double b = 1.5707963267948966 - (2.0 * Math.atan(t * Math.pow((1.0
-        - (e * Math.sin(a))) / (1.0 + (e * Math.sin(a))), e / 2.0)));
+                - (e * Math.sin(a))) / (1.0 + (e * Math.sin(a))), e / 2.0)));
         while (Math.abs(a-b) > epsilon)
         {
             a = a1 + ((a2 - a1) / 2.0);
             b = 1.5707963267948966 - (2.0 * Math.atan(t * Math.pow((1.0
-            - (e * Math.sin(a))) / (1.0 + (e * Math.sin(a))), e / 2.0)));
+                    - (e * Math.sin(a))) / (1.0 + (e * Math.sin(a))), e / 2.0)));
             if (a1 == a2)
-            {
                 return 0.0;
+            if (b > a) {
+                a1 = a;
+            } else {
+                a2 = a;
             }
-            if (b > a)
-                a1 = a;
-            else
-                a2 = a;
         }
         return b;
@@ -85,5 +84,5 @@
     {
         double r = Math.sqrt(Math.pow((p.getX() - ef), 2.0) + Math.pow((rf
-        - p.getY() + nf), 2.0) ) * Math.signum(n);
+                - p.getY() + nf), 2.0) ) * Math.signum(n);
         double T = Math.pow((r / (a * f)), (1.0/ n)) ;
         double theta = Math.atan((p.getX() - ef) / (rf - p.getY() + nf));
@@ -109,6 +108,11 @@
     {
         return new Bounds(
-        new LatLon(-90.0, -180.0),
-        new LatLon(90.0, 180.0));
+                new LatLon(-90.0, -180.0),
+                new LatLon(90.0, 180.0));
+    }
+
+    public double getDefaultZoomInPPD() {
+        // TODO FIXME
+        return 0;
     }
 }
Index: trunk/src/org/openstreetmap/josm/data/projection/Mercator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Mercator.java	(revision 2113)
+++ trunk/src/org/openstreetmap/josm/data/projection/Mercator.java	(revision 2114)
@@ -24,12 +24,12 @@
     public EastNorth latlon2eastNorth(LatLon p) {
         return new EastNorth(
-            p.lon()*Math.PI/180,
-            Math.log(Math.tan(Math.PI/4+p.lat()*Math.PI/360)));
+                p.lon()*Math.PI/180,
+                Math.log(Math.tan(Math.PI/4+p.lat()*Math.PI/360)));
     }
 
     public LatLon eastNorth2latlon(EastNorth p) {
         return new LatLon(
-            Math.atan(Math.sinh(p.north()))*180/Math.PI,
-            p.east()*180/Math.PI);
+                Math.atan(Math.sinh(p.north()))*180/Math.PI,
+                p.east()*180/Math.PI);
     }
 
@@ -49,6 +49,11 @@
     {
         return new Bounds(
-        new LatLon(-85.05112877980659, -180.0),
-        new LatLon(85.05112877980659, 180.0));
+                new LatLon(-85.05112877980659, -180.0),
+                new LatLon(85.05112877980659, 180.0));
+    }
+
+    public double getDefaultZoomInPPD() {
+        // This will set the scale bar to about 100 km
+        return 0.000158;
     }
 }
Index: trunk/src/org/openstreetmap/josm/data/projection/Projection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Projection.java	(revision 2113)
+++ trunk/src/org/openstreetmap/josm/data/projection/Projection.java	(revision 2114)
@@ -24,6 +24,6 @@
         new Epsg4326(),
         new Mercator(),
-        new LambertEST(),
-        new Lambert(),
+        new LambertEST(), // Still needs proper default zoom
+        new Lambert(),    // Still needs proper default zoom
         new SwissGrid(),
         new UTM(),
@@ -33,4 +33,9 @@
         new GaussLaborde_Reunion()
     };
+
+    /**
+     * Returns the default zoom scale in pixel per degree ({@see #NavigatableComponent#scale}))
+     */
+    double getDefaultZoomInPPD();
 
     /**
Index: trunk/src/org/openstreetmap/josm/data/projection/SwissGrid.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/SwissGrid.java	(revision 2113)
+++ trunk/src/org/openstreetmap/josm/data/projection/SwissGrid.java	(revision 2114)
@@ -102,6 +102,11 @@
     {
         return new Bounds(
-        new LatLon(45.7, 5.7),
-        new LatLon(47.9, 10.6));
+                new LatLon(45.7, 5.7),
+                new LatLon(47.9, 10.6));
+    }
+
+    public double getDefaultZoomInPPD() {
+        // This will set the scale bar to about 100 m
+        return 1.01;
     }
 }
Index: trunk/src/org/openstreetmap/josm/data/projection/UTM.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/UTM.java	(revision 2113)
+++ trunk/src/org/openstreetmap/josm/data/projection/UTM.java	(revision 2114)
@@ -342,5 +342,5 @@
     public int getzone()
     {
-      return 33;
+        return 33;
     }
 
@@ -356,6 +356,11 @@
     {
         return new Bounds(
-        new LatLon(-85.0, UTMCentralMeridianDeg(getzone())-5.0),
-        new LatLon(85.0, UTMCentralMeridianDeg(getzone())+5.0));
+                new LatLon(-85.0, UTMCentralMeridianDeg(getzone())-5.0),
+                new LatLon(85.0, UTMCentralMeridianDeg(getzone())+5.0));
+    }
+
+    public double getDefaultZoomInPPD() {
+        // this will set the map scaler to about 1000 m
+        return 10;
     }
 }
Index: trunk/src/org/openstreetmap/josm/data/projection/UTM_20N_Guadeloupe_Fort_Marigot.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/UTM_20N_Guadeloupe_Fort_Marigot.java	(revision 2113)
+++ trunk/src/org/openstreetmap/josm/data/projection/UTM_20N_Guadeloupe_Fort_Marigot.java	(revision 2114)
@@ -36,3 +36,7 @@
     }
 
+    public double getDefaultZoomInPPD() {
+        // this will set the map scaler to about 1000 m
+        return 10;
+    }
 }
Index: trunk/src/org/openstreetmap/josm/data/projection/UTM_20N_Guadeloupe_Ste_Anne.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/UTM_20N_Guadeloupe_Ste_Anne.java	(revision 2113)
+++ trunk/src/org/openstreetmap/josm/data/projection/UTM_20N_Guadeloupe_Ste_Anne.java	(revision 2114)
@@ -36,3 +36,7 @@
     }
 
+    public double getDefaultZoomInPPD() {
+        // this will set the map scaler to about 1000 m
+        return 10.01;
+    }
 }
Index: trunk/src/org/openstreetmap/josm/data/projection/UTM_20N_Martinique_Fort_Desaix.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/UTM_20N_Martinique_Fort_Desaix.java	(revision 2113)
+++ trunk/src/org/openstreetmap/josm/data/projection/UTM_20N_Martinique_Fort_Desaix.java	(revision 2114)
@@ -35,3 +35,8 @@
         return tr("UTM20N Martinique Fort Desaix 1952");
     }
+
+    public double getDefaultZoomInPPD() {
+        // this will set the map scaler to about 1000 m
+        return 10.01;
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/MapSlider.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapSlider.java	(revision 2113)
+++ trunk/src/org/openstreetmap/josm/gui/MapSlider.java	(revision 2114)
@@ -23,4 +23,6 @@
         mv.addPropertyChangeListener("scale", this);
         addChangeListener(this);
+        // Call this manually once so it gets setup correctly
+        propertyChange(null);
     }
 
@@ -40,6 +42,7 @@
             e /= 1.1;
             n /= 1.1;
-            if(e < cur_e && n < cur_n)
+            if(e < cur_e && n < cur_n) {
                 break;
+            }
             ++zoom;
         }
Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 2113)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 2114)
@@ -44,9 +44,9 @@
      * northing/easting space of the projection.
      */
-    private double scale;
+    private double scale = Main.proj.getDefaultZoomInPPD();
     /**
      * Center n/e coordinate of the desired screen center.
      */
-    protected EastNorth center = new EastNorth(0, 0);
+    protected EastNorth center = calculateDefaultCenter();
 
     public NavigatableComponent() {
@@ -56,4 +56,12 @@
     protected DataSet getCurrentDataSet() {
         return Main.main.getCurrentDataSet();
+    }
+
+    private EastNorth calculateDefaultCenter() {
+        Bounds b = Main.proj.getWorldBoundsLatLon();
+        double lat = (b.max.lat() + b.min.lat())/2;
+        double lon = (b.max.lon() + b.min.lon())/2;
+
+        return Main.proj.latlon2eastNorth(new LatLon(lat, lon));
     }
 
@@ -115,5 +123,5 @@
                                 center.east() + getWidth()/2.0*scale,
                                 center.north() + getHeight()/2.0*scale));
-    };
+    }
 
     /* FIXME: replace with better method - used by MapSlider */
@@ -122,5 +130,5 @@
         return new ProjectionBounds(getProjection().latlon2eastNorth(b.min),
                 getProjection().latlon2eastNorth(b.max));
-    };
+    }
 
     /* FIXME: replace with better method - used by Main to reset Bounds when projection changes, don't use otherwise */
@@ -133,5 +141,5 @@
                                 center.east() + getWidth()/2.0*scale,
                                 center.north() + getHeight()/2.0*scale)));
-    };
+    }
 
     /**
@@ -182,5 +190,5 @@
         Bounds b = getProjection().getWorldBoundsLatLon();
         CachedLatLon cl = new CachedLatLon(newCenter);
-        boolean changed = false;;
+        boolean changed = false;
         double lat = cl.lat();
         double lon = cl.lon();
