Index: applications/editors/josm/plugins/reverter/src/reverter/ChangesetReverter.java
===================================================================
--- applications/editors/josm/plugins/reverter/src/reverter/ChangesetReverter.java	(revision 35309)
+++ applications/editors/josm/plugins/reverter/src/reverter/ChangesetReverter.java	(revision 35310)
@@ -74,4 +74,6 @@
     private final DataSet ds; // DataSet associated with reverter
     private final ChangesetDataSet cds; // Current changeset data
+    /** original DataSet, used if a new layer is requested */
+    private final DataSet ods;
     private DataSet nds; // Dataset that contains new objects downloaded by reverter
 
@@ -118,5 +120,7 @@
             return true;
         }
-        OsmPrimitive p = ds.getPrimitiveById(entry.getPrimitive().getPrimitiveId());
+        if (ods == null)
+            return false; // should not happen
+        OsmPrimitive p = ods.getPrimitiveById(entry.getPrimitive().getPrimitiveId());
         if (p == null) return false;
         return p.isSelected();
@@ -128,19 +132,27 @@
      * @param revertType type of revert
      * @param newLayer set to true if a new layer should be created
+     * @param ods original dataset to search for selected primitives, can be null
      * @param monitor progress monitor
      * @throws OsmTransferException if data transfer errors occur
      * @throws RevertRedactedChangesetException if a redacted changeset is requested
      */
-    public ChangesetReverter(int changesetId, RevertType revertType, boolean newLayer, ProgressMonitor monitor)
+    public ChangesetReverter(int changesetId, RevertType revertType, boolean newLayer, DataSet ods, ProgressMonitor monitor)
             throws OsmTransferException, RevertRedactedChangesetException {
         this.changesetId = changesetId;
+        OsmDataLayer editLayer = MainApplication.getLayerManager().getEditLayer();
         if (newLayer) {
             this.ds = new DataSet();
             this.layer = new OsmDataLayer(this.ds, tr("Reverted changeset") + tr(" [id: {0}]", String.valueOf(changesetId)), null);
+            this.ods = ods;
         } else {
-            this.layer = MainApplication.getLayerManager().getEditLayer();
-            this.ds = layer.data;
+            this.layer = editLayer;
+            this.ds = editLayer.data;
+            this.ods = ods;
         }
         this.revertType = revertType;
+        if ((revertType == RevertType.SELECTION || revertType == RevertType.SELECTION_WITH_UNDELETE)
+                && (ods == null || ods.getAllSelected().isEmpty())) {
+            throw new IllegalArgumentException("No selected elements with revert type " + revertType);
+        }
 
         OsmServerChangesetReader csr = new OsmServerChangesetReader(true);
Index: applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java
===================================================================
--- applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java	(revision 35309)
+++ applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java	(revision 35310)
@@ -18,7 +18,9 @@
 import org.openstreetmap.josm.command.conflict.ConflictAddCommand;
 import org.openstreetmap.josm.data.UndoRedoHandler;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -33,4 +35,5 @@
     private final RevertType revertType;
     private boolean newLayer;
+    private final DataSet oldDataSet;
 
     private ChangesetReverter rev;
@@ -56,4 +59,6 @@
         this.downloadConfirmed = autoConfirmDownload;
         this.newLayer = newLayer;
+        OsmDataLayer editLayer = MainApplication.getLayerManager().getEditLayer();
+        this.oldDataSet = editLayer == null ? null : editLayer.data;
     }
 
@@ -116,5 +121,5 @@
         progressMonitor.indeterminateSubTask(tr("Reverting changeset {0}", Long.toString(changesetId)));
         try {
-            rev = new ChangesetReverter(changesetId, revertType, newLayer, progressMonitor.createSubTaskMonitor(0, true));
+            rev = new ChangesetReverter(changesetId, revertType, newLayer, oldDataSet, progressMonitor.createSubTaskMonitor(0, true));
         } catch (final RevertRedactedChangesetException e) {
             GuiHelper.runInEDT(() -> new Notification(
