Index: src/org/openstreetmap/josm/gui/MainPanel.java
===================================================================
--- src/org/openstreetmap/josm/gui/MainPanel.java	(revision 14466)
+++ src/org/openstreetmap/josm/gui/MainPanel.java	(working copy)
@@ -8,6 +8,7 @@
 import javax.swing.JPanel;
 
 import org.openstreetmap.josm.actions.mapmode.MapMode;
+import org.openstreetmap.josm.data.UndoRedoHandler; 
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.MainLayerManager;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.LayerAvailabilityEvent;
@@ -65,6 +66,7 @@
             map = null;
             MainApplication.map = map;
             add(getGettingStarted(), BorderLayout.CENTER);
+            UndoRedoHandler.getInstance().clean();
         }
         setVisible(true);
 
Index: src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- src/org/openstreetmap/josm/gui/MapView.java	(revision 14466)
+++ src/org/openstreetmap/josm/gui/MapView.java	(working copy)
@@ -807,6 +807,7 @@
         }
         nonChangedLayersBuffer = null;
         offscreenBuffer = null;
+        removeAllZoomChangeListeners();
     }
 
     /**
Index: src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 14466)
+++ src/org/openstreetmap/josm/gui/NavigatableComponent.java	(working copy)
@@ -128,6 +128,16 @@
     }
 
     /**
+     * Removes a zoom change listener
+     *
+     * @param listener the listener. Ignored if null or already absent
+     */
+    protected static void removeAllZoomChangeListeners() {
+        zoomChangeListeners.clear();
+    }
+
+
+    /**
      * Adds a zoom change listener
      *
      * @param listener the listener. Ignored if null or already registered.
Index: src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java	(revision 14466)
+++ src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java	(working copy)
@@ -222,6 +222,12 @@
         return noteData != null ? noteData.getSelectedNote() : null;
     }
 
+    @Override
+    public void destroy() {
+        MainApplication.getLayerManager().removeLayerChangeListener(this);
+        super.destroy();
+    }
+
     private static class NoteRenderer implements ListCellRenderer<Note> {
 
         private final DefaultListCellRenderer defaultListCellRenderer = new DefaultListCellRenderer();
@@ -436,4 +442,6 @@
             }
         }
     }
+    
+    
 }
Index: src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 14466)
+++ src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(working copy)
@@ -455,6 +455,7 @@
 
     @Override
     public void destroy() {
+        dialogsPanel = null;
         rememberHeight();
         closeDetachedDialog();
         if (isShowing) {
Index: src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 14466)
+++ src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(working copy)
@@ -551,6 +551,7 @@
 
     @Override
     public void destroy() {
+        taginfoAction.destroy();
         super.destroy();
         Config.getPref().removeKeyPreferenceChangeListener("display.discardable-keys", preferenceListener);
         Container parent = pluginHook.getParent();
