Index: /applications/editors/josm/plugins/reverter/build.xml
===================================================================
--- /applications/editors/josm/plugins/reverter/build.xml	(revision 35408)
+++ /applications/editors/josm/plugins/reverter/build.xml	(revision 35409)
@@ -4,5 +4,5 @@
     <property name="commit.message" value="Reverter: fix deleted/redacted relation members"/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
-    <property name="plugin.main.version" value="15520"/>
+    <property name="plugin.main.version" value="16205"/>
 
     <!-- Configure these properties (replace "..." accordingly).
Index: /applications/editors/josm/plugins/reverter/src/reverter/DataSetCommandMerger.java
===================================================================
--- /applications/editors/josm/plugins/reverter/src/reverter/DataSetCommandMerger.java	(revision 35408)
+++ /applications/editors/josm/plugins/reverter/src/reverter/DataSetCommandMerger.java	(revision 35409)
@@ -53,7 +53,7 @@
 
     private void addChangeCommandIfNotEquals(OsmPrimitive target, OsmPrimitive newTarget, boolean nominal) {
-        if (target.isIncomplete() != newTarget.isIncomplete() || target.isDeleted() != newTarget.isDeleted()
-                || target.isVisible() != newTarget.isVisible()
-                || !getNonDiscardableTags(target).equals(getNonDiscardableTags(newTarget))) {
+		if (!target.hasEqualSemanticAttributes(newTarget) || target.isDeleted() != newTarget.isDeleted()
+				|| target.isVisible() != newTarget.isVisible()
+				|| !getNonDiscardableTags(target).equals(getNonDiscardableTags(newTarget))) {
             cmds.add(new ChangeCommand(target, newTarget));
             if (nominal) {
Index: /applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetCommand.java
===================================================================
--- /applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetCommand.java	(revision 35408)
+++ /applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetCommand.java	(revision 35409)
@@ -19,9 +19,10 @@
      * Create the command by specifying the list of commands to execute.
      * @param name The description text
-     * @param sequenz The sequence that should be executed.
+     * @param sequenz The sequence that was already executed.
      */
     public RevertChangesetCommand(String name, Collection<Command> sequenz) {
         super(name, sequenz);
         ReverterPlugin.reverterUsed = true;
+        setSequenceComplete(true);
     }
 
@@ -36,3 +37,13 @@
     }
 
+    @Override
+    public void undoCommand() {
+        getAffectedDataSet().update(super::undoCommand);
+    }
+
+    @Override
+    public boolean executeCommand() {
+        return getAffectedDataSet().update(super::executeCommand);
+    }
+
 }
Index: /applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java
===================================================================
--- /applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java	(revision 35408)
+++ /applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java	(revision 35409)
@@ -15,5 +15,4 @@
 
 import org.openstreetmap.josm.command.Command;
-import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.command.conflict.ConflictAddCommand;
 import org.openstreetmap.josm.data.UndoRedoHandler;
@@ -99,7 +98,13 @@
                 newLayer = false; // reuse layer for subsequent reverts
             } catch (OsmTransferException e) {
-                Logging.error(e);
+				if (!allcmds.isEmpty()) {
+					GuiHelper.runInEDT(() -> UndoRedoHandler.getInstance().undo(allcmds.size()));
+				}
+				Logging.error(e);
                 throw e;
             } catch (UserCancelException e) {
+				if (!allcmds.isEmpty()) {
+					GuiHelper.runInEDT(() -> UndoRedoHandler.getInstance().undo(allcmds.size()));
+				}
                 Logging.warn("Revert canceled");
                 Logging.trace(e);
@@ -108,7 +113,7 @@
         }
         if (!allcmds.isEmpty()) {
-            Command cmd = allcmds.size() == 1 ? allcmds.get(0) : new SequenceCommand(tr("Revert changesets"), allcmds);
+            Command cmd = allcmds.size() == 1 ? allcmds.get(0) : new RevertChangesetCommand(tr("Revert changesets"), allcmds);
             GuiHelper.runInEDT(() -> {
-                UndoRedoHandler.getInstance().add(cmd);
+                UndoRedoHandler.getInstance().add(cmd, false);
                 if (numberOfConflicts > 0) {
                     MainApplication.getMap().conflictDialog.warnNumNewConflicts(numberOfConflicts);
@@ -169,4 +174,5 @@
                 numberOfConflicts++;
             }
+            c.executeCommand();
         }
         final String desc;
