Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java	(revision 9520)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java	(revision 9521)
@@ -36,4 +36,5 @@
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.PrimitiveId;
 import org.openstreetmap.josm.data.osm.history.History;
 import org.openstreetmap.josm.data.osm.history.HistoryDataSet;
@@ -45,4 +46,5 @@
 import org.openstreetmap.josm.gui.history.HistoryBrowserDialogManager;
 import org.openstreetmap.josm.gui.history.HistoryLoadTask;
+import org.openstreetmap.josm.gui.io.DownloadPrimitivesWithReferrersTask;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -51,4 +53,5 @@
 import org.openstreetmap.josm.tools.BugReportExceptionHandler;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -70,4 +73,5 @@
 
     private final HeaderPanel pnlHeader = new HeaderPanel();
+    public DownloadObjectAction actDownloadObjectAction;
 
     protected void buildModels() {
@@ -76,4 +80,8 @@
         actDownloadContentAction = new DownloadChangesetContentAction(this);
         actDownloadContentAction.initProperties();
+
+        actDownloadObjectAction = new DownloadObjectAction();
+        model.getSelectionModel().addListSelectionListener(actDownloadObjectAction);
+
         actShowHistory = new ShowHistoryAction();
         model.getSelectionModel().addListSelectionListener(actShowHistory);
@@ -118,5 +126,8 @@
 
         tb.add(actDownloadContentAction);
+        tb.addSeparator();
+        tb.add(actDownloadObjectAction);
         tb.add(actShowHistory);
+        tb.addSeparator();
         tb.add(actSelectInCurrentLayerAction);
         tb.add(actZoomInCurrentLayerAction);
@@ -190,4 +201,6 @@
         ChangesetContentTablePopupMenu() {
             add(actDownloadContentAction);
+            add(new JSeparator());
+            add(actDownloadObjectAction);
             add(actShowHistory);
             add(new JSeparator());
@@ -280,4 +293,35 @@
     }
 
+    class DownloadObjectAction extends AbstractAction implements ListSelectionListener {
+
+        DownloadObjectAction() {
+            putValue(NAME, tr("Download objects"));
+            putValue(SMALL_ICON, ImageProvider.get("downloadprimitive"));
+            putValue(SHORT_DESCRIPTION, tr("Download the current version of the selected objects"));
+            updateEnabledState();
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent arg0) {
+            final List<PrimitiveId> primitiveIds = new ArrayList<>(Utils.transform(
+                    model.getSelectedPrimitives(), new Utils.Function<HistoryOsmPrimitive, PrimitiveId>() {
+                        @Override
+                        public PrimitiveId apply(HistoryOsmPrimitive x) {
+                            return x.getPrimitiveId();
+                        }
+                    }));
+            Main.worker.submit(new DownloadPrimitivesWithReferrersTask(false, primitiveIds, true, true, null, null));
+        }
+
+        protected final void updateEnabledState() {
+            setEnabled(model.hasSelectedPrimitives());
+        }
+
+        @Override
+        public void valueChanged(ListSelectionEvent e) {
+            updateEnabledState();
+        }
+    }
+
     abstract class SelectionBasedAction extends AbstractAction implements ListSelectionListener, EditLayerChangeListener {
 
