Index: trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java	(revision 11090)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java	(revision 11091)
@@ -19,5 +19,7 @@
 import java.util.HashSet;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import javax.swing.AbstractAction;
@@ -47,4 +49,7 @@
 import org.openstreetmap.josm.data.osm.Changeset;
 import org.openstreetmap.josm.data.osm.ChangesetCache;
+import org.openstreetmap.josm.data.osm.ChangesetDataSet;
+import org.openstreetmap.josm.data.osm.PrimitiveId;
+import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.JosmUserIdentityManager;
@@ -53,4 +58,5 @@
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.io.CloseChangesetTask;
+import org.openstreetmap.josm.gui.io.DownloadPrimitivesWithReferrersTask;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
@@ -59,4 +65,5 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
+import org.openstreetmap.josm.tools.StreamUtils;
 import org.openstreetmap.josm.tools.WindowGeometry;
 
@@ -107,4 +114,5 @@
     private DownloadSelectedChangesetsAction actDownloadSelectedChangesets;
     private DownloadSelectedChangesetContentAction actDownloadSelectedContent;
+    private DownloadSelectedChangesetObjectsAction actDownloadSelectedChangesetObjects;
     private JTable tblChangesets;
 
@@ -240,4 +248,8 @@
         model.getSelectionModel().addListSelectionListener(actDownloadSelectedContent);
         tb.add(actDownloadSelectedContent);
+
+        // -- download the objects contained in the selected changesets from the OSM server
+        model.getSelectionModel().addListSelectionListener(actDownloadSelectedChangesetObjects);
+        tb.add(actDownloadSelectedChangesetObjects);
 
         pnl.add(tb, BorderLayout.CENTER);
@@ -282,4 +294,5 @@
         actDownloadSelectedChangesets = new DownloadSelectedChangesetsAction(model);
         actDownloadSelectedContent = new DownloadSelectedChangesetContentAction(model);
+        actDownloadSelectedChangesetObjects = new DownloadSelectedChangesetObjectsAction(model);
 
         cp.add(buildToolbarPanel(), BorderLayout.NORTH);
@@ -538,4 +551,44 @@
     }
 
+    /**
+     * Downloads the objects contained in the selected changesets from the OSM server
+     */
+    private class DownloadSelectedChangesetObjectsAction extends AbstractAction implements ListSelectionListener {
+
+        DownloadSelectedChangesetObjectsAction(ChangesetCacheManagerModel model) {
+            putValue(NAME, tr("Download changed objects"));
+            new ImageProvider("downloadprimitive").getResource().attachImageIcon(this);
+            putValue(SHORT_DESCRIPTION, tr("Download the current version of the changed objects in the selected changesets"));
+            updateEnabledState();
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            if (!GraphicsEnvironment.isHeadless()) {
+                actDownloadSelectedContent.actionPerformed(e);
+                Main.worker.submit(() -> {
+                    final List<PrimitiveId> primitiveIds = model.getSelectedChangesets().stream()
+                            .map(Changeset::getContent)
+                            .filter(Objects::nonNull)
+                            .flatMap(content -> StreamUtils.toStream(content::iterator))
+                            .map(ChangesetDataSet.ChangesetDataSetEntry::getPrimitive)
+                            .map(HistoryOsmPrimitive::getPrimitiveId)
+                            .distinct()
+                            .collect(Collectors.toList());
+                    new DownloadPrimitivesWithReferrersTask(false, primitiveIds, true, true, null, null).run();
+                });
+            }
+        }
+
+        protected void updateEnabledState() {
+            setEnabled(model.hasSelectedChangesets() && !Main.isOffline(OnlineResource.OSM_API));
+        }
+
+        @Override
+        public void valueChanged(ListSelectionEvent e) {
+            updateEnabledState();
+        }
+    }
+
     static class ShowDetailAction extends AbstractAction {
         private final ChangesetCacheManagerModel model;
@@ -619,4 +672,5 @@
             add(actDownloadSelectedChangesets);
             add(actDownloadSelectedContent);
+            add(actDownloadSelectedChangesetObjects);
         }
     }
