Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetAware.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetAware.java	(revision 9493)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetAware.java	(revision 9493)
@@ -0,0 +1,17 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.dialogs.changeset;
+
+import org.openstreetmap.josm.data.osm.Changeset;
+
+/**
+ * Super interface of changeset-aware components.
+ * @since 9493
+ */
+public interface ChangesetAware {
+
+    /**
+     * Returns the current changeset.
+     * @return the current changeset
+     */
+    Changeset getCurrentChangeset();
+}
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java	(revision 9492)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java	(revision 9493)
@@ -59,5 +59,5 @@
  *
  */
-public class ChangesetContentPanel extends JPanel implements PropertyChangeListener {
+public class ChangesetContentPanel extends JPanel implements PropertyChangeListener, ChangesetAware {
 
     private ChangesetContentTableModel model;
@@ -74,6 +74,6 @@
         DefaultListSelectionModel selectionModel = new DefaultListSelectionModel();
         model = new ChangesetContentTableModel(selectionModel);
-        actDownloadContentAction = new DownloadChangesetContentAction();
-        actDownloadContentAction.initProperties(currentChangeset);
+        actDownloadContentAction = new DownloadChangesetContentAction(this);
+        actDownloadContentAction.initProperties();
         actShowHistory = new ShowHistoryAction();
         model.getSelectionModel().addListSelectionListener(actShowHistory);
@@ -158,5 +158,5 @@
             model.populate(cs.getContent());
         }
-        actDownloadContentAction.initProperties(cs);
+        actDownloadContentAction.initProperties();
         pnlHeader.setChangeset(cs);
     }
@@ -185,41 +185,4 @@
                 title, JOptionPane.WARNING_MESSAGE, helpTopic
         );
-    }
-
-    /**
-     * Downloads/Updates the content of the changeset
-     *
-     */
-    class DownloadChangesetContentAction extends AbstractAction {
-        DownloadChangesetContentAction() {
-            putValue(NAME, tr("Download content"));
-            putValue(SMALL_ICON, ChangesetCacheManager.DOWNLOAD_CONTENT_ICON);
-            putValue(SHORT_DESCRIPTION, tr("Download the changeset content from the OSM server"));
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent evt) {
-            if (currentChangeset == null) return;
-            ChangesetContentDownloadTask task = new ChangesetContentDownloadTask(ChangesetContentPanel.this, currentChangeset.getId());
-            ChangesetCacheManager.getInstance().runDownloadTask(task);
-        }
-
-        public void initProperties(Changeset cs) {
-            if (cs == null) {
-                setEnabled(false);
-                return;
-            } else {
-                setEnabled(true);
-            }
-            if (cs.getContent() == null) {
-                putValue(NAME, tr("Download content"));
-                putValue(SMALL_ICON, ChangesetCacheManager.DOWNLOAD_CONTENT_ICON);
-                putValue(SHORT_DESCRIPTION, tr("Download the changeset content from the OSM server"));
-            } else {
-                putValue(NAME, tr("Update content"));
-                putValue(SMALL_ICON, ChangesetCacheManager.UPDATE_CONTENT_ICON);
-                putValue(SHORT_DESCRIPTION, tr("Update the changeset content from the OSM server"));
-            }
-        }
     }
 
@@ -457,3 +420,8 @@
         }
     }
+
+    @Override
+    public Changeset getCurrentChangeset() {
+        return currentChangeset;
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java	(revision 9492)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetDetailPanel.java	(revision 9493)
@@ -48,5 +48,5 @@
  *
  */
-public class ChangesetDetailPanel extends JPanel implements PropertyChangeListener {
+public class ChangesetDetailPanel extends JPanel implements PropertyChangeListener, ChangesetAware {
 
     private final JosmTextField tfID        = new JosmTextField(10);
@@ -57,5 +57,5 @@
     private final JosmTextField tfClosedOn  = new JosmTextField(20);
 
-    private final DownloadChangesetContentAction actDownloadChangesetContent = new DownloadChangesetContentAction();
+    private final DownloadChangesetContentAction actDownloadChangesetContent = new DownloadChangesetContentAction(this);
     private final UpdateChangesetAction          actUpdateChangesets         = new UpdateChangesetAction();
     private final RemoveFromCacheAction          actRemoveFromCache          = new RemoveFromCacheAction();
@@ -63,5 +63,5 @@
     private final ZoomInCurrentLayerAction       actZoomInCurrentLayerAction = new ZoomInCurrentLayerAction();
 
-    private transient Changeset current;
+    private transient Changeset currentChangeset;
 
     protected JPanel buildActionButtonPanel() {
@@ -73,13 +73,13 @@
         // -- remove from cache action
         tb.add(actRemoveFromCache);
-        actRemoveFromCache.initProperties(current);
+        actRemoveFromCache.initProperties(currentChangeset);
 
         // -- changeset update
         tb.add(actUpdateChangesets);
-        actUpdateChangesets.initProperties(current);
+        actUpdateChangesets.initProperties(currentChangeset);
 
         // -- changeset content download
         tb.add(actDownloadChangesetContent);
-        actDownloadChangesetContent.initProperties(current);
+        actDownloadChangesetContent.initProperties();
 
         tb.add(actSelectInCurrentLayer);
@@ -240,5 +240,5 @@
 
     protected void setCurrentChangeset(Changeset cs) {
-        current = cs;
+        currentChangeset = cs;
         if (cs == null) {
             clearView();
@@ -246,7 +246,7 @@
             updateView(cs);
         }
-        actDownloadChangesetContent.initProperties(current);
-        actUpdateChangesets.initProperties(current);
-        actRemoveFromCache.initProperties(current);
+        actDownloadChangesetContent.initProperties();
+        actUpdateChangesets.initProperties(currentChangeset);
+        actRemoveFromCache.initProperties(currentChangeset);
         actSelectInCurrentLayer.updateEnabledState();
         actZoomInCurrentLayerAction.updateEnabledState();
@@ -275,48 +275,11 @@
         @Override
         public void actionPerformed(ActionEvent evt) {
-            if (current == null)
-                return;
-            ChangesetCache.getInstance().remove(current);
+            if (currentChangeset == null)
+                return;
+            ChangesetCache.getInstance().remove(currentChangeset);
         }
 
         public void initProperties(Changeset cs) {
             setEnabled(cs != null);
-        }
-    }
-
-    /**
-     * Removes the selected changesets from the local changeset cache
-     *
-     */
-    class DownloadChangesetContentAction extends AbstractAction {
-        DownloadChangesetContentAction() {
-            putValue(NAME, tr("Download content"));
-            putValue(SMALL_ICON, ChangesetCacheManager.DOWNLOAD_CONTENT_ICON);
-            putValue(SHORT_DESCRIPTION, tr("Download the changeset content from the OSM server"));
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent evt) {
-            if (current == null) return;
-            ChangesetContentDownloadTask task = new ChangesetContentDownloadTask(ChangesetDetailPanel.this, current.getId());
-            ChangesetCacheManager.getInstance().runDownloadTask(task);
-        }
-
-        public void initProperties(Changeset cs) {
-            if (cs == null) {
-                setEnabled(false);
-                return;
-            } else {
-                setEnabled(true);
-            }
-            if (cs.getContent() == null) {
-                putValue(NAME, tr("Download content"));
-                putValue(SMALL_ICON, ChangesetCacheManager.DOWNLOAD_CONTENT_ICON);
-                putValue(SHORT_DESCRIPTION, tr("Download the changeset content from the OSM server"));
-            } else {
-                putValue(NAME, tr("Update content"));
-                putValue(SMALL_ICON, ChangesetCacheManager.UPDATE_CONTENT_ICON);
-                putValue(SHORT_DESCRIPTION, tr("Update the changeset content from the OSM server"));
-            }
         }
     }
@@ -335,9 +298,9 @@
         @Override
         public void actionPerformed(ActionEvent evt) {
-            if (current == null) return;
+            if (currentChangeset == null) return;
             Main.worker.submit(
                     new ChangesetHeaderDownloadTask(
                             ChangesetDetailPanel.this,
-                            Collections.singleton(current.getId())
+                            Collections.singleton(currentChangeset.getId())
                     )
             );
@@ -368,5 +331,5 @@
                     tr("<html>None of the objects in the content of changeset {0} is available in the current<br>"
                             + "edit layer ''{1}''.</html>",
-                            current.getId(),
+                            currentChangeset.getId(),
                             Main.main.getEditLayer().getName()
                     ),
@@ -385,5 +348,5 @@
             Set<OsmPrimitive> target = new HashSet<>();
             for (OsmPrimitive p: layer.data.allPrimitives()) {
-                if (p.isUsable() && p.getChangesetId() == current.getId()) {
+                if (p.isUsable() && p.getChangesetId() == currentChangeset.getId()) {
                     target.add(p);
                 }
@@ -401,5 +364,5 @@
                 return;
             }
-            setEnabled(current != null);
+            setEnabled(currentChangeset != null);
         }
 
@@ -429,5 +392,5 @@
                     tr("<html>None of the objects in the content of changeset {0} is available in the current<br>"
                             + "edit layer ''{1}''.</html>",
-                            current.getId(),
+                            currentChangeset.getId(),
                             Main.main.getEditLayer().getName()
                     ),
@@ -446,5 +409,5 @@
             Set<OsmPrimitive> target = new HashSet<>();
             for (OsmPrimitive p: layer.data.allPrimitives()) {
-                if (p.isUsable() && p.getChangesetId() == current.getId()) {
+                if (p.isUsable() && p.getChangesetId() == currentChangeset.getId()) {
                     target.add(p);
                 }
@@ -463,5 +426,5 @@
                 return;
             }
-            setEnabled(current != null);
+            setEnabled(currentChangeset != null);
         }
 
@@ -471,3 +434,8 @@
         }
     }
+
+    @Override
+    public Changeset getCurrentChangeset() {
+        return currentChangeset;
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/DownloadChangesetContentAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/DownloadChangesetContentAction.java	(revision 9493)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/DownloadChangesetContentAction.java	(revision 9493)
@@ -0,0 +1,60 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.dialogs.changeset;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+
+import org.openstreetmap.josm.tools.CheckParameterUtil;
+
+/**
+ * Downloads/Updates the content of the changeset.
+ * @since 9493
+ */
+public class DownloadChangesetContentAction extends AbstractAction {
+    private final transient ChangesetAware component;
+
+    /**
+     * Constructs a new {@code DownloadChangesetContentAction}.
+     * @param component changeset-aware component
+     */
+    public DownloadChangesetContentAction(ChangesetAware component) {
+        CheckParameterUtil.ensureParameterNotNull(component, "component");
+        putValue(NAME, tr("Download content"));
+        putValue(SMALL_ICON, ChangesetCacheManager.DOWNLOAD_CONTENT_ICON);
+        putValue(SHORT_DESCRIPTION, tr("Download the changeset content from the OSM server"));
+        this.component = component;
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent evt) {
+        if (component.getCurrentChangeset() != null) {
+            ChangesetCacheManager.getInstance().runDownloadTask(new ChangesetContentDownloadTask(
+                    (Component) component, component.getCurrentChangeset().getId()));
+        }
+    }
+
+    /**
+     * Init properties.
+     */
+    public void initProperties() {
+        if (component.getCurrentChangeset() == null) {
+            setEnabled(false);
+            return;
+        } else {
+            setEnabled(true);
+        }
+        if (component.getCurrentChangeset().getContent() == null) {
+            putValue(NAME, tr("Download content"));
+            putValue(SMALL_ICON, ChangesetCacheManager.DOWNLOAD_CONTENT_ICON);
+            putValue(SHORT_DESCRIPTION, tr("Download the changeset content from the OSM server"));
+        } else {
+            putValue(NAME, tr("Update content"));
+            putValue(SMALL_ICON, ChangesetCacheManager.UPDATE_CONTENT_ICON);
+            putValue(SHORT_DESCRIPTION, tr("Update the changeset content from the OSM server"));
+        }
+    }
+}
