Index: trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java	(revision 3441)
+++ trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java	(revision 3443)
@@ -24,6 +24,6 @@
 public abstract class AbstractInfoAction extends JosmAction {
 
-    public AbstractInfoAction() {
-        super();
+    public AbstractInfoAction(boolean installAdapters) {
+        super(installAdapters);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/JosmAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/JosmAction.java	(revision 3441)
+++ trunk/src/org/openstreetmap/josm/actions/JosmAction.java	(revision 3443)
@@ -66,4 +66,17 @@
      */
     public JosmAction(String name, String iconName, String tooltip, Shortcut shortcut, boolean register) {
+        this(name, iconName, tooltip, shortcut, register, true);
+    }
+
+    /**
+     * Even newer super for all actions. Use if you don't want to install layer changed and selection changed adapters
+     * @param name
+     * @param iconName
+     * @param tooltip
+     * @param shortcut
+     * @param register
+     * @param installAdapters
+     */
+    public JosmAction(String name, String iconName, String tooltip, Shortcut shortcut, boolean register, boolean installAdapters) {
         super(name, iconName == null ? null : ImageProvider.get(iconName));
         setHelpId();
@@ -77,5 +90,7 @@
             Main.toolbar.register(this);
         }
-        installAdapters();
+        if (installAdapters) {
+            installAdapters();
+        }
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/ZoomAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/ZoomAction.java	(revision 3441)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/ZoomAction.java	(revision 3443)
@@ -7,4 +7,5 @@
 import java.awt.event.KeyEvent;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapView;
@@ -30,8 +31,4 @@
 
     /**
-     * Shortcut to the mapview.
-     */
-    private final MapView mv;
-    /**
      * Manager that manages the selection rectangle with the aspect ratio of the
      * MapView.
@@ -47,6 +44,5 @@
                 Shortcut.registerShortcut("mapmode:zoom", tr("Mode: {0}", tr("Zoom")), KeyEvent.VK_Z, Shortcut.GROUP_EDIT),
                 mapFrame, ImageProvider.getCursor("normal", "zoom"));
-        mv = mapFrame.mapView;
-        selectionManager = new SelectionManager(this, true, mv);
+        selectionManager = new SelectionManager(this, true, mapFrame.mapView);
     }
 
@@ -55,5 +51,6 @@
      */
     public void selectionEnded(Rectangle r, boolean alt, boolean shift, boolean ctrl) {
-        if (r.width >= 3 && r.height >= 3) {
+        if (r.width >= 3 && r.height >= 3 && Main.isDisplayingMapView()) {
+            MapView mv = Main.map.mapView;
             mv.zoomToFactor(mv.getEastNorth(r.x+r.width/2, r.y+r.height/2), r.getWidth()/mv.getWidth());
         }
@@ -62,10 +59,10 @@
     @Override public void enterMode() {
         super.enterMode();
-        selectionManager.register(mv);
+        selectionManager.register(Main.map.mapView);
     }
 
     @Override public void exitMode() {
         super.exitMode();
-        selectionManager.unregister(mv);
+        selectionManager.unregister(Main.map.mapView);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 3441)
+++ trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 3443)
@@ -214,4 +214,5 @@
             }
         }
+        mapView.destroy();
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 3441)
+++ trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 3443)
@@ -222,9 +222,5 @@
 
         // listend to selection changes to redraw the map
-        DataSet.addSelectionListener(new SelectionChangedListener(){
-            public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
-                repaint();
-            }
-        });
+        DataSet.addSelectionListener(repaintSelectionChangedListener);
 
         //store the last mouse action
@@ -805,3 +801,14 @@
     }
 
+    private SelectionChangedListener repaintSelectionChangedListener = new SelectionChangedListener(){
+        public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+            repaint();
+        }
+    };
+
+    public void destroy() {
+        Main.pref.removePreferenceChangeListener(this);
+        DataSet.removeSelectionListener(repaintSelectionChangedListener);
+    }
+
 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java	(revision 3441)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/CommandStackDialog.java	(revision 3443)
@@ -12,5 +12,4 @@
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseEvent;
-
 import java.util.ArrayList;
 import java.util.LinkedHashSet;
@@ -74,6 +73,4 @@
         super(tr("Command Stack"), "commandstack", tr("Open a list of all commands (undo buffer)."),
                 Shortcut.registerShortcut("subwindow:commandstack", tr("Toggle: {0}", tr("Command Stack")), KeyEvent.VK_O, Shortcut.GROUP_LAYER, Shortcut.SHIFT_DEFAULT), 100, true);
-        Main.main.undoRedo.listenerCommands.add(this);
-
         undoTree.addMouseListener(new PopupMenuHandler());
         undoTree.setRootVisible(false);
@@ -212,4 +209,5 @@
             listener.updateEnabledState();
         }
+        Main.main.undoRedo.listenerCommands.add(this);
     }
 
@@ -227,4 +225,5 @@
         undoTreeModel.setRoot(new DefaultMutableTreeNode());
         redoTreeModel.setRoot(new DefaultMutableTreeNode());
+        Main.main.undoRedo.listenerCommands.remove(this);
     }
 
@@ -263,24 +262,24 @@
         // if one tree is empty, move selection to the other
         switch (lastOperation) {
-            case UNDO:
-                if (undoCommands.isEmpty()) {
-                    lastOperation = UndoRedoType.REDO;
-                }
-                break;
-            case REDO:
-                if (redoCommands.isEmpty()) {
-                    lastOperation = UndoRedoType.UNDO;
-                }
-                break;
+        case UNDO:
+            if (undoCommands.isEmpty()) {
+                lastOperation = UndoRedoType.REDO;
+            }
+            break;
+        case REDO:
+            if (redoCommands.isEmpty()) {
+                lastOperation = UndoRedoType.UNDO;
+            }
+            break;
         }
 
         // select the next command to undo/redo
         switch (lastOperation) {
-            case UNDO:
-                undoTree.setSelectionRow(undoTree.getRowCount()-1);
-                break;
-            case REDO:
-                redoTree.setSelectionRow(0);
-                break;
+        case UNDO:
+            undoTree.setSelectionRow(undoTree.getRowCount()-1);
+            break;
+        case REDO:
+            redoTree.setSelectionRow(0);
+            break;
         }
     }
@@ -370,16 +369,16 @@
             this.type = type;
             switch (type) {
-                case UNDO:
-                    tree = undoTree;
-                    putValue(NAME,tr("Undo"));
-                    putValue(SHORT_DESCRIPTION, tr("Undo the selected and all later commands"));
-                    putValue(SMALL_ICON, ImageProvider.get("undo"));
-                    break;
-                case REDO:
-                    tree = redoTree;
-                    putValue(NAME,tr("Redo"));
-                    putValue(SHORT_DESCRIPTION, tr("Redo the selected and all earlier commands"));
-                    putValue(SMALL_ICON, ImageProvider.get("redo"));
-                    break;
+            case UNDO:
+                tree = undoTree;
+                putValue(NAME,tr("Undo"));
+                putValue(SHORT_DESCRIPTION, tr("Undo the selected and all later commands"));
+                putValue(SMALL_ICON, ImageProvider.get("undo"));
+                break;
+            case REDO:
+                tree = redoTree;
+                putValue(NAME,tr("Redo"));
+                putValue(SHORT_DESCRIPTION, tr("Redo the selected and all earlier commands"));
+                putValue(SMALL_ICON, ImageProvider.get("redo"));
+                break;
             }
         }
@@ -397,12 +396,12 @@
             // calculate the number of commands to undo/redo; then do it
             switch (type) {
-                case UNDO:
-                    int numUndo = ((DefaultMutableTreeNode) undoTreeModel.getRoot()).getChildCount() - idx;
-                    Main.main.undoRedo.undo(numUndo);
-                    break;
-                case REDO:
-                    int numRedo = idx+1;
-                    Main.main.undoRedo.redo(numRedo);
-                    break;
+            case UNDO:
+                int numUndo = ((DefaultMutableTreeNode) undoTreeModel.getRoot()).getChildCount() - idx;
+                Main.main.undoRedo.undo(numUndo);
+                break;
+            case REDO:
+                int numRedo = idx+1;
+                Main.main.undoRedo.redo(numRedo);
+                break;
             }
             Main.map.repaint();
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java	(revision 3441)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java	(revision 3443)
@@ -188,4 +188,5 @@
 
         public ShowUserInfoAction() {
+            super(false);
             putValue(NAME, tr("Show info"));
             putValue(SHORT_DESCRIPTION, tr("Launches a browser with information about the user"));
Index: trunk/src/org/openstreetmap/josm/gui/history/VersionTable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/VersionTable.java	(revision 3441)
+++ trunk/src/org/openstreetmap/josm/gui/history/VersionTable.java	(revision 3443)
@@ -117,4 +117,5 @@
 
         public ChangesetInfoAction() {
+            super(true);
             putValue(NAME, tr("Changeset info"));
             putValue(SHORT_DESCRIPTION, tr("Launch browser with information about the changeset"));
