Index: trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java	(revision 14469)
+++ trunk/src/org/openstreetmap/josm/actions/SessionSaveAsAction.java	(revision 14470)
@@ -86,4 +86,10 @@
     }
 
+    @Override
+    public void destroy() {
+        MainApplication.removeMapFrameListener(this);
+        super.destroy();
+    }
+
     /**
      * Attempts to save the session.
Index: trunk/src/org/openstreetmap/josm/gui/MainPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainPanel.java	(revision 14469)
+++ trunk/src/org/openstreetmap/josm/gui/MainPanel.java	(revision 14470)
@@ -9,4 +9,5 @@
 
 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;
@@ -66,4 +67,5 @@
             MainApplication.map = map;
             add(getGettingStarted(), BorderLayout.CENTER);
+            UndoRedoHandler.getInstance().clean();
         }
         setVisible(true);
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java	(revision 14469)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/NotesDialog.java	(revision 14470)
@@ -221,4 +221,10 @@
     public Note getSelectedNote() {
         return noteData != null ? noteData.getSelectedNote() : null;
+    }
+
+    @Override
+    public void destroy() {
+        MainApplication.getLayerManager().removeLayerChangeListener(this);
+        super.destroy();
     }
 
@@ -437,3 +443,4 @@
         }
     }
+
 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 14469)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 14470)
@@ -46,4 +46,5 @@
 import org.openstreetmap.josm.actions.relation.SelectMembersAction;
 import org.openstreetmap.josm.actions.relation.SelectRelationAction;
+import org.openstreetmap.josm.data.UndoRedoHandler;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DefaultNameFormatter;
@@ -209,4 +210,5 @@
     @Override
     public void destroy() {
+        UndoRedoHandler.getInstance().removeCommandQueueListener(recentRelationsAction);
         recentRelationsAction.destroy();
         model.clear();
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 14469)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 14470)
@@ -456,4 +456,5 @@
     @Override
     public void destroy() {
+        dialogsPanel = null;
         rememberHeight();
         closeDetachedDialog();
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 14469)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 14470)
@@ -552,4 +552,5 @@
     @Override
     public void destroy() {
+        taginfoAction.destroy();
         super.destroy();
         Config.getPref().removeKeyPreferenceChangeListener("display.discardable-keys", preferenceListener);
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 14469)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 14470)
@@ -830,4 +830,10 @@
     }
 
+    @Override
+    public void dispose() {
+        refreshAction.destroy();
+        super.dispose();
+    }
+
     /**
      * Exception thrown when user aborts add operation.
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RefreshAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RefreshAction.java	(revision 14469)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/actions/RefreshAction.java	(revision 14470)
@@ -138,3 +138,10 @@
         updateEnabledState();
     }
+
+    /**
+     * Allow GC to do its work
+     */
+    public void destroy() {
+        UndoRedoHandler.getInstance().removeCommandQueueListener(this);
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java	(revision 14469)
+++ trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java	(revision 14470)
@@ -135,4 +135,5 @@
                 }
             }
+            dialog.closeDialog();
         }
 
@@ -348,4 +349,5 @@
     public void closeDialog() {
         setVisible(false);
+        saveSessionAction.destroy();
         dispose();
     }
Index: trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 14469)
+++ trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 14470)
@@ -1903,4 +1903,5 @@
     public synchronized void destroy() {
         super.destroy();
+        MapView.removeZoomChangeListener(this);
         adjustAction.destroy();
     }
