Index: trunk/src/org/openstreetmap/josm/data/projection/Epsg4326.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Epsg4326.java	(revision 2515)
+++ trunk/src/org/openstreetmap/josm/data/projection/Epsg4326.java	(revision 2516)
@@ -31,4 +31,9 @@
     }
 
+    @Override
+    public int hashCode() {
+        return getClass().getName().hashCode(); // we have no variables
+    }
+
     public String getCacheDirectoryName() {
         return "epsg4326";
Index: trunk/src/org/openstreetmap/josm/data/projection/GaussLaborde_Reunion.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/GaussLaborde_Reunion.java	(revision 2515)
+++ trunk/src/org/openstreetmap/josm/data/projection/GaussLaborde_Reunion.java	(revision 2516)
@@ -212,4 +212,9 @@
     }
 
+    @Override
+    public int hashCode() {
+        return getClass().getName().hashCode(); // we have no variables
+    }
+
     @Override public String toString() {
         return tr("Gauss-Laborde R\u00E9union 1947");
Index: trunk/src/org/openstreetmap/josm/data/projection/Lambert.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Lambert.java	(revision 2515)
+++ trunk/src/org/openstreetmap/josm/data/projection/Lambert.java	(revision 2516)
@@ -136,4 +136,9 @@
     public String toCode() {
         return "EPSG:"+(27561+layoutZone);
+    }
+
+    @Override
+    public int hashCode() {
+        return getClass().getName().hashCode()+layoutZone; // our only real variable
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/LambertCC9Zones.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/LambertCC9Zones.java	(revision 2515)
+++ trunk/src/org/openstreetmap/josm/data/projection/LambertCC9Zones.java	(revision 2516)
@@ -143,4 +143,9 @@
     public String toCode() {
         return "EPSG:"+(3942+layoutZone); //CC42 is EPSG:3942 (up to EPSG:3950 for CC50)
+    }
+
+    @Override
+    public int hashCode() {
+        return getClass().getName().hashCode()+layoutZone; // our only real variable
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/LambertEST.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/LambertEST.java	(revision 2515)
+++ trunk/src/org/openstreetmap/josm/data/projection/LambertEST.java	(revision 2516)
@@ -101,4 +101,9 @@
     }
 
+    @Override
+    public int hashCode() {
+        return getClass().getName().hashCode(); // we have no variables
+    }
+
     public String getCacheDirectoryName() {
         return "lambertest";
Index: trunk/src/org/openstreetmap/josm/data/projection/Mercator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Mercator.java	(revision 2515)
+++ trunk/src/org/openstreetmap/josm/data/projection/Mercator.java	(revision 2516)
@@ -42,4 +42,9 @@
     }
 
+    @Override
+    public int hashCode() {
+        return getClass().getName().hashCode(); // we have no variables
+    }
+
     public String getCacheDirectoryName() {
         return "mercator";
Index: trunk/src/org/openstreetmap/josm/data/projection/Puwg.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/Puwg.java	(revision 2515)
+++ trunk/src/org/openstreetmap/josm/data/projection/Puwg.java	(revision 2516)
@@ -65,4 +65,9 @@
     public String toCode() {
         return Zones[zone].toCode();
+    }
+
+    @Override
+    public int hashCode() {
+        return getClass().getName().hashCode()+zone; // our only real variable
     }
 
Index: trunk/src/org/openstreetmap/josm/data/projection/SwissGrid.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/SwissGrid.java	(revision 2515)
+++ trunk/src/org/openstreetmap/josm/data/projection/SwissGrid.java	(revision 2516)
@@ -93,4 +93,9 @@
     }
 
+    @Override
+    public int hashCode() {
+        return getClass().getName().hashCode(); // we have no variables
+    }
+
     public String getCacheDirectoryName() {
         return "swissgrid";
Index: trunk/src/org/openstreetmap/josm/data/projection/UTM.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/UTM.java	(revision 2515)
+++ trunk/src/org/openstreetmap/josm/data/projection/UTM.java	(revision 2516)
@@ -361,4 +361,9 @@
     }
 
+    @Override
+    public int hashCode() {
+        return getClass().getName().hashCode()+zone; // our only real variable
+    }
+
     public String getCacheDirectoryName() {
         return "epsg"+ (325800 + getzone());
Index: trunk/src/org/openstreetmap/josm/data/projection/UTM_20N_France_DOM.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/UTM_20N_France_DOM.java	(revision 2515)
+++ trunk/src/org/openstreetmap/josm/data/projection/UTM_20N_France_DOM.java	(revision 2516)
@@ -378,4 +378,9 @@
     }
 
+    @Override
+    public int hashCode() {
+        return getClass().getName().hashCode()+currentGeodesic; // our only real variable
+    }
+
     @Override public String toString() {
         return (tr("UTM 20N (France)"));
Index: trunk/src/org/openstreetmap/josm/gui/preferences/ProjectionPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/ProjectionPreference.java	(revision 2515)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/ProjectionPreference.java	(revision 2516)
@@ -164,9 +164,4 @@
             name = Main.proj.getClass().getName();
         }
-        if(!Main.proj.equals(oldProj) && b != null)
-        {
-            Main.map.mapView.zoomTo(b);
-            /* TODO - remove layers with fixed projection */
-        }
         Main.pref.putCollection("projection.sub", coll);
         String sname = name.substring(name.lastIndexOf(".")+1);
@@ -174,4 +169,9 @@
         if(projHasPrefs(Main.proj))
             ((ProjectionSubPrefs) Main.proj).setPreferences(coll);
+        if(b != null && (!Main.proj.getClass().getName().equals(oldProj.getClass().getName()) || Main.proj.hashCode() != oldProj.hashCode()))
+        {
+            Main.map.mapView.zoomTo(b);
+            /* TODO - remove layers with fixed projection */
+        }
     }
 
