Index: src/org/openstreetmap/josm/data/projection/UTM_20N_Guadeloupe_Fort_Marigot.java
===================================================================
--- src/org/openstreetmap/josm/data/projection/UTM_20N_Guadeloupe_Fort_Marigot.java	(revision 2110)
+++ src/org/openstreetmap/josm/data/projection/UTM_20N_Guadeloupe_Fort_Marigot.java	(working copy)
@@ -35,4 +35,9 @@
         return tr("UTM20N Guadeloupe Fort-Marigot 1949");
     }
 
+    public double getDefaultZoomInPPD() {
+        // this will set the map scaler to about 1000 m
+        return 10;
+    }
+
 }
Index: src/org/openstreetmap/josm/data/projection/GaussLaborde_Reunion.java
===================================================================
--- src/org/openstreetmap/josm/data/projection/GaussLaborde_Reunion.java	(revision 2110)
+++ src/org/openstreetmap/josm/data/projection/GaussLaborde_Reunion.java	(working copy)
@@ -215,4 +215,9 @@
         return tr("Gauss-Laborde R\u00E9union 1947");
     }
 
+    public double getDefaultZoomInPPD() {
+        // this will set the map scaler to about 1000 m
+        return 10.02;
+    }
+
 }
Index: src/org/openstreetmap/josm/data/projection/UTM_20N_Martinique_Fort_Desaix.java
===================================================================
--- src/org/openstreetmap/josm/data/projection/UTM_20N_Martinique_Fort_Desaix.java	(revision 2110)
+++ src/org/openstreetmap/josm/data/projection/UTM_20N_Martinique_Fort_Desaix.java	(working copy)
@@ -34,4 +34,9 @@
     @Override public String toString() {
         return tr("UTM20N Martinique Fort Desaix 1952");
     }
+
+    public double getDefaultZoomInPPD() {
+        // this will set the map scaler to about 1000 m
+        return 10.01;
+    }
 }
Index: src/org/openstreetmap/josm/data/projection/Epsg4326.java
===================================================================
--- src/org/openstreetmap/josm/data/projection/Epsg4326.java	(revision 2110)
+++ src/org/openstreetmap/josm/data/projection/Epsg4326.java	(working copy)
@@ -37,7 +37,12 @@
     public Bounds getWorldBoundsLatLon()
     {
         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: src/org/openstreetmap/josm/data/projection/UTM.java
===================================================================
--- src/org/openstreetmap/josm/data/projection/UTM.java	(revision 2110)
+++ src/org/openstreetmap/josm/data/projection/UTM.java	(working copy)
@@ -341,7 +341,7 @@
     /* TODO - support all UTM's not only zone 33 */
     public int getzone()
     {
-      return 33;
+        return 33;
     }
 
     public String toCode() {
@@ -355,7 +355,12 @@
     public Bounds getWorldBoundsLatLon()
     {
         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: src/org/openstreetmap/josm/data/projection/UTM_20N_Guadeloupe_Ste_Anne.java
===================================================================
--- src/org/openstreetmap/josm/data/projection/UTM_20N_Guadeloupe_Ste_Anne.java	(revision 2110)
+++ src/org/openstreetmap/josm/data/projection/UTM_20N_Guadeloupe_Ste_Anne.java	(working copy)
@@ -35,4 +35,9 @@
         return tr("UTM20N Guadeloupe Ste-Anne 1948");
     }
 
+    public double getDefaultZoomInPPD() {
+        // this will set the map scaler to about 1000 m
+        return 10.01;
+    }
+
 }
Index: src/org/openstreetmap/josm/data/projection/Lambert.java
===================================================================
--- src/org/openstreetmap/josm/data/projection/Lambert.java	(revision 2110)
+++ src/org/openstreetmap/josm/data/projection/Lambert.java	(working copy)
@@ -288,4 +288,9 @@
                 new LatLon(45.0, -4.9074074074074059),
                 new LatLon(57.0, 10.2));*/
     }
+
+    public double getDefaultZoomInPPD() {
+        // TODO FIXME
+        return 0;
+    }
 }
Index: src/org/openstreetmap/josm/data/projection/Mercator.java
===================================================================
--- src/org/openstreetmap/josm/data/projection/Mercator.java	(revision 2110)
+++ src/org/openstreetmap/josm/data/projection/Mercator.java	(working copy)
@@ -23,14 +23,14 @@
 
     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);
     }
 
     @Override public String toString() {
@@ -48,7 +48,12 @@
     public Bounds getWorldBoundsLatLon()
     {
         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: src/org/openstreetmap/josm/data/projection/LambertEST.java
===================================================================
--- src/org/openstreetmap/josm/data/projection/LambertEST.java	(revision 2110)
+++ src/org/openstreetmap/josm/data/projection/LambertEST.java	(working copy)
@@ -47,7 +47,7 @@
 
         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);
 
@@ -63,20 +63,19 @@
         double a2 = 3.1415926535897931;
         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)
+            if (b > a) {
                 a1 = a;
-            else
+            } else {
                 a2 = a;
+            }
         }
         return b;
     }
@@ -84,7 +83,7 @@
     public LatLon eastNorth2latlon(EastNorth p)
     {
         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));
         double y = (theta / n + lonf) ;
@@ -108,7 +107,12 @@
     public Bounds getWorldBoundsLatLon()
     {
         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: src/org/openstreetmap/josm/data/projection/Projection.java
===================================================================
--- src/org/openstreetmap/josm/data/projection/Projection.java	(revision 2110)
+++ src/org/openstreetmap/josm/data/projection/Projection.java	(working copy)
@@ -23,8 +23,8 @@
     public static Projection[] allProjections = new Projection[]{
         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(),
         new UTM_20N_Guadeloupe_Ste_Anne(),
@@ -34,6 +34,11 @@
     };
 
     /**
+     * Returns the default zoom scale in pixel per degree ({@see #NavigatableComponent#scale}))
+     */
+    double getDefaultZoomInPPD();
+
+    /**
      * Convert from lat/lon to northing/easting.
      *
      * @param p     The geo point to convert. x/y members of the point are filled.
Index: src/org/openstreetmap/josm/data/projection/SwissGrid.java
===================================================================
--- src/org/openstreetmap/josm/data/projection/SwissGrid.java	(revision 2110)
+++ src/org/openstreetmap/josm/data/projection/SwissGrid.java	(working copy)
@@ -101,7 +101,12 @@
     public Bounds getWorldBoundsLatLon()
     {
         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: src/org/openstreetmap/josm/gui/MapSlider.java
===================================================================
--- src/org/openstreetmap/josm/gui/MapSlider.java	(revision 2110)
+++ src/org/openstreetmap/josm/gui/MapSlider.java	(working copy)
@@ -22,6 +22,8 @@
         this.mv = mv;
         mv.addPropertyChangeListener("scale", this);
         addChangeListener(this);
+        // Call this manually once so it gets setup correctly
+        propertyChange(null);
     }
 
     public void propertyChange(PropertyChangeEvent evt) {
@@ -39,8 +41,9 @@
         while(zoom <= 150) {
             e /= 1.1;
             n /= 1.1;
-            if(e < cur_e && n < cur_n)
+            if(e < cur_e && n < cur_n) {
                 break;
+            }
             ++zoom;
         }
         preventChange=true;
Index: src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 2110)
+++ src/org/openstreetmap/josm/gui/NavigatableComponent.java	(working copy)
@@ -43,11 +43,11 @@
      * every physical pixel on screen are 10 x or 10 y units in the
      * 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() {
         setLayout(null);
@@ -57,6 +57,14 @@
         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));
+    }
+
     /**
      * Return a ID which is unique as long as viewport dimensions are the same
      */
@@ -114,14 +122,14 @@
                         new EastNorth(
                                 center.east() + getWidth()/2.0*scale,
                                 center.north() + getHeight()/2.0*scale));
-    };
+    }
 
     /* FIXME: replace with better method - used by MapSlider */
     public ProjectionBounds getMaxProjectionBounds() {
         Bounds b = getProjection().getWorldBoundsLatLon();
         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 */
     public Bounds getRealBounds() {
@@ -132,7 +140,7 @@
                         getProjection().eastNorth2latlon(new EastNorth(
                                 center.east() + getWidth()/2.0*scale,
                                 center.north() + getHeight()/2.0*scale)));
-    };
+    }
 
     /**
      * @param x X-Pixelposition to get coordinate from
@@ -181,7 +189,7 @@
 
         Bounds b = getProjection().getWorldBoundsLatLon();
         CachedLatLon cl = new CachedLatLon(newCenter);
-        boolean changed = false;;
+        boolean changed = false;
         double lat = cl.lat();
         double lon = cl.lon();
         if(lat < b.min.lat()) {changed = true; lat = b.min.lat(); }
