Index: src/reverter/RevertChangesetCommand.java
===================================================================
--- src/reverter/RevertChangesetCommand.java	(revision 35395)
+++ src/reverter/RevertChangesetCommand.java	(working copy)
@@ -18,11 +18,12 @@
     /**
      * 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);
     }
 
     @Override
@@ -35,4 +36,14 @@
         return ImageProvider.get("revert-changeset");
     }
 
+    @Override
+    public void undoCommand() {
+        getAffectedDataSet().update(super::undoCommand);
+    }
+
+    @Override
+    public boolean executeCommand() {
+        return getAffectedDataSet().update(super::executeCommand);
+    }
+
 }
Index: src/reverter/RevertChangesetTask.java
===================================================================
--- src/reverter/RevertChangesetTask.java	(revision 35395)
+++ src/reverter/RevertChangesetTask.java	(working copy)
@@ -14,7 +14,6 @@
 import javax.swing.JOptionPane;
 
 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;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -98,9 +97,15 @@
                 Logging.info("Reverted changeset {0}", Long.toString(changesetId));
                 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);
                 return;
@@ -107,9 +112,9 @@
             }
         }
         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);
                 }
@@ -168,6 +173,7 @@
             if (c instanceof ConflictAddCommand) {
                 numberOfConflicts++;
             }
+            c.executeCommand();
         }
         final String desc;
         if (revertType == RevertType.FULL) {
