diff --git a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
index cad3bae..d3950b8 100644
--- a/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
+++ b/src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetCacheManager.java
@@ -18,7 +18,9 @@
 import java.util.Collection;
 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;
 import javax.swing.DefaultListSelectionModel;
@@ -46,18 +48,23 @@
 import org.openstreetmap.josm.actions.downloadtasks.PostDownloadHandler;
 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;
 import org.openstreetmap.josm.gui.dialogs.changeset.query.ChangesetQueryDialog;
 import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
 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;
 import org.openstreetmap.josm.io.ChangesetQuery;
 import org.openstreetmap.josm.io.OnlineResource;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.InputMapUtils;
+import org.openstreetmap.josm.tools.StreamUtils;
 import org.openstreetmap.josm.tools.WindowGeometry;
 
 /**
@@ -106,6 +113,7 @@ public static void destroyInstance() {
     private CloseSelectedChangesetsAction actCloseSelectedChangesetsAction;
     private DownloadSelectedChangesetsAction actDownloadSelectedChangesets;
     private DownloadSelectedChangesetContentAction actDownloadSelectedContent;
+    private DownloadSelectedChangesetObjectsAction actDownloadSelectedChangesetObjects;
     private JTable tblChangesets;
 
     /**
@@ -240,6 +248,10 @@ protected JPanel buildChangesetTableActionPanel() {
         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);
         return pnl;
     }
@@ -281,6 +293,7 @@ protected void build() {
         actCloseSelectedChangesetsAction = new CloseSelectedChangesetsAction(model);
         actDownloadSelectedChangesets = new DownloadSelectedChangesetsAction(model);
         actDownloadSelectedContent = new DownloadSelectedChangesetContentAction(model);
+        actDownloadSelectedChangesetObjects = new DownloadSelectedChangesetObjectsAction(model);
 
         cp.add(buildToolbarPanel(), BorderLayout.NORTH);
         cp.add(buildContentPanel(), BorderLayout.CENTER);
@@ -537,6 +550,55 @@ public void valueChanged(ListSelectionEvent e) {
         }
     }
 
+    /**
+     * Downloads the objects contained in the selected changesets from the OSM server
+     */
+    static class DownloadSelectedChangesetObjectsAction extends AbstractAction implements ListSelectionListener {
+        private final ChangesetCacheManagerModel model;
+
+        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"));
+            this.model = model;
+            updateEnabledState();
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            if (!GraphicsEnvironment.isHeadless()) {
+                final List<Integer> changesetsWithoutContent = model.getSelectedChangesets().stream()
+                        .filter(cs -> !cs.hasContent())
+                        .map(Changeset::getId)
+                        .collect(Collectors.toList());
+                final ChangesetContentDownloadTask contentDownloadTask =
+                        new ChangesetContentDownloadTask(GuiHelper.getWindowAncestorFor(e), changesetsWithoutContent);
+                Main.worker.submit(
+                        new PostDownloadHandler(contentDownloadTask, contentDownloadTask.download()));
+
+                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());
+                Main.worker.submit(
+                        new DownloadPrimitivesWithReferrersTask(false, primitiveIds, true, true, null, null));
+            }
+        }
+
+        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;
 
@@ -618,6 +680,7 @@ public void mouseClicked(MouseEvent evt) {
             add(actCloseSelectedChangesetsAction);
             add(actDownloadSelectedChangesets);
             add(actDownloadSelectedContent);
+            add(actDownloadSelectedChangesetObjects);
         }
     }
 
