Index: src/org/openstreetmap/josm/actions/ChangesetManagerToggleAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/ChangesetManagerToggleAction.java	(revision 14927)
+++ src/org/openstreetmap/josm/actions/ChangesetManagerToggleAction.java	(working copy)
@@ -45,7 +45,6 @@
             ChangesetCacheManager.getInstance().addWindowListener(changesetCacheManagerClosedHandler);
             ChangesetCacheManager.getInstance().setVisible(true);
         } else {
-            ChangesetCacheManager.getInstance().removeWindowListener(changesetCacheManagerClosedHandler);
             ChangesetCacheManager.destroyInstance();
         }
     }
@@ -55,7 +54,6 @@
         public void windowClosed(WindowEvent e) {
             setSelected(false);
             notifySelectedState();
-            ChangesetCacheManager.getInstance().removeWindowListener(changesetCacheManagerClosedHandler);
         }
     }
 }
Index: src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java	(revision 14927)
+++ src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java	(working copy)
@@ -484,13 +484,10 @@
             ChangesetCacheManager cm = ChangesetCacheManager.getInstance();
             if (cm.isVisible()) {
                 cm.setExtendedState(Frame.NORMAL);
-                cm.toFront();
-                cm.requestFocus();
             } else {
                 cm.setVisible(true);
-                cm.toFront();
-                cm.requestFocus();
             }
+            cm.toFront();
             cm.setSelectedChangesetsById(toSelect);
         }
 
Index: src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java	(revision 14927)
+++ src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java	(working copy)
@@ -64,7 +64,6 @@
 import org.openstreetmap.josm.io.ChangesetQuery;
 import org.openstreetmap.josm.io.NetworkManager;
 import org.openstreetmap.josm.io.OnlineResource;
-import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
 import org.openstreetmap.josm.tools.Logging;
@@ -103,12 +102,8 @@
     public static void destroyInstance() {
         if (instance != null) {
             instance.setVisible(false);
+            GuiHelper.destroyComponents(instance, false);
             instance.dispose();
-            for (Component c : instance.pnlChangesetDetailTabs.getComponents()) {
-                if (c instanceof Destroyable) {
-                    ((Destroyable) c).destroy();
-                }
-            }
             instance = null;
         }
     }
@@ -351,7 +346,7 @@
     class WindowEventHandler extends WindowAdapter {
         @Override
         public void windowClosing(WindowEvent e) {
-            new CancelAction().cancelAndClose();
+            destroyInstance();
         }
 
         @Override
