Index: src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java	(revision 16211)
+++ src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentPanel.java	(working copy)
@@ -69,7 +69,7 @@
  * @since 2689
  */
 public class ChangesetContentPanel extends JPanel implements PropertyChangeListener, ChangesetAware {
-
+    private JTable tblContent;
     private ChangesetContentTableModel model;
     private transient Changeset currentChangeset;
 
@@ -121,7 +121,7 @@
 
     protected JPanel buildContentPanel() {
         JPanel pnl = new JPanel(new BorderLayout());
-        JTable tblContent = new JTable(
+        tblContent = new JTable(
                 model,
                 new ChangesetContentTableColumnModel(),
                 model.getSelectionModel()
@@ -213,6 +213,10 @@
         );
     }
 
+    private Set<HistoryOsmPrimitive> getSelectedPrimitives() {
+      return model.getSelectedPrimitives(tblContent);
+    }
+
     class ChangesetContentTablePopupMenu extends JPopupMenu {
         ChangesetContentTablePopupMenu() {
             add(actDownloadContentAction);
@@ -287,7 +291,7 @@
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            Set<HistoryOsmPrimitive> selected = model.getSelectedPrimitives();
+            Set<HistoryOsmPrimitive> selected = getSelectedPrimitives();
             if (selected.isEmpty()) return;
             showHistory(selected);
         }
@@ -309,7 +313,7 @@
 
         @Override
         public void actionPerformed(ActionEvent e) {
-            final List<PrimitiveId> primitiveIds = model.getSelectedPrimitives().stream().map(HistoryOsmPrimitive::getPrimitiveId)
+            final List<PrimitiveId> primitiveIds = getSelectedPrimitives().stream().map(HistoryOsmPrimitive::getPrimitiveId)
                     .collect(Collectors.toList());
             MainApplication.worker.submit(new DownloadPrimitivesWithReferrersTask(false, primitiveIds, true, true, null, null));
         }
@@ -329,7 +333,7 @@
         protected Set<OsmPrimitive> getTarget() {
             DataSet ds = MainApplication.getLayerManager().getActiveDataSet();
             if (isEnabled() && ds != null) {
-                return model.getSelectedPrimitives().stream()
+                return getSelectedPrimitives().stream()
                         .map(p -> ds.getPrimitiveById(p.getPrimitiveId())).filter(Objects::nonNull).collect(Collectors.toSet());
             }
             return Collections.emptySet();
@@ -363,7 +367,7 @@
         public void actionPerformed(ActionEvent e) {
             final Set<OsmPrimitive> target = getTarget();
             if (target.isEmpty()) {
-                alertNoPrimitivesTo(model.getSelectedPrimitives(), tr("Nothing to select"),
+                alertNoPrimitivesTo(getSelectedPrimitives(), tr("Nothing to select"),
                         HelpUtil.ht("/Dialog/ChangesetCacheManager#NothingToSelectInLayer"));
                 return;
             }
@@ -384,7 +388,7 @@
         public void actionPerformed(ActionEvent e) {
             final Set<OsmPrimitive> target = getTarget();
             if (target.isEmpty()) {
-                alertNoPrimitivesTo(model.getSelectedPrimitives(), tr("Nothing to zoom to"),
+                alertNoPrimitivesTo(getSelectedPrimitives(), tr("Nothing to zoom to"),
                         HelpUtil.ht("/Dialog/ChangesetCacheManager#NothingToZoomTo"));
                 return;
             }
Index: src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentTableModel.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentTableModel.java	(revision 16211)
+++ src/org/openstreetmap/josm/gui/dialogs/changeset/ChangesetContentTableModel.java	(working copy)
@@ -8,6 +8,7 @@
 import java.util.Set;
 
 import javax.swing.DefaultListSelectionModel;
+import javax.swing.JTable;
 import javax.swing.table.AbstractTableModel;
 
 import org.openstreetmap.josm.data.osm.ChangesetDataSet;
@@ -59,15 +60,16 @@
 
     /**
      * Returns the selected history primitives.
+     * @param table the JTable used with this model
      * @return the selected history primitives
      */
-    public Set<HistoryOsmPrimitive> getSelectedPrimitives() {
+    public Set<HistoryOsmPrimitive> getSelectedPrimitives(JTable table) {
         Set<HistoryOsmPrimitive> ret = new HashSet<>();
-        for (int i = 0; i < data.size(); i++) {
-            if (selectionModel.isSelectedIndex(i)) {
-                ret.add(data.get(i).getPrimitive());
-            }
+        int[] selection = table.getSelectedRows();
+        for (int i = 0; i < selection.length; i++) {
+            ret.add(data.get(table.convertRowIndexToModel(selection[i])).getPrimitive());
         }
+
         return ret;
     }
 
