Index: trunk/src/org/openstreetmap/josm/Main.java
===================================================================
--- trunk/src/org/openstreetmap/josm/Main.java	(revision 12118)
+++ trunk/src/org/openstreetmap/josm/Main.java	(revision 12119)
@@ -1078,8 +1078,4 @@
         if ((newValue == null ^ oldValue == null)
                 || (newValue != null && oldValue != null && !Objects.equals(newValue.toCode(), oldValue.toCode()))) {
-            if (Main.map != null) {
-                // This needs to be called first
-                Main.map.mapView.fixProjection();
-            }
             synchronized (Main.class) {
                 Iterator<WeakReference<ProjectionChangeListener>> it = listeners.iterator();
@@ -1103,4 +1099,5 @@
     /**
      * Register a projection change listener.
+     * The listener is registered to be weak, so keep a reference of it if you want it to be preserved.
      *
      * @param listener the listener. Ignored if <code>null</code>.
Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 12118)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 12119)
@@ -52,4 +52,5 @@
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
 import org.openstreetmap.josm.data.projection.Projection;
+import org.openstreetmap.josm.data.projection.ProjectionChangeListener;
 import org.openstreetmap.josm.data.projection.Projections;
 import org.openstreetmap.josm.gui.help.Helpful;
@@ -171,4 +172,9 @@
 
     /**
+     * Main uses weak link to store this, so we need to keep a reference.
+     */
+    private final ProjectionChangeListener projectionChangeListener = (oldValue, newValue) -> fixProjection();
+
+    /**
      * Constructs a new {@code NavigatableComponent}.
      */
@@ -176,6 +182,5 @@
         setLayout(null);
         state = MapViewState.createDefaultState(getWidth(), getHeight());
-        // uses weak link.
-        Main.addProjectionChangeListener((oldValue, newValue) -> fixProjection());
+        Main.addProjectionChangeListener(projectionChangeListener);
     }
 
