Index: src/reverter/RevertChangesetTask.java
===================================================================
--- src/reverter/RevertChangesetTask.java	(revision 35095)
+++ src/reverter/RevertChangesetTask.java	(working copy)
@@ -88,22 +88,33 @@
                 Logging.info("Reverting changeset {0}", Long.toString(changesetId));
                 RevertChangesetCommand cmd = revertChangeset(changesetId);
                 if (cmd != null) {
+                    GuiHelper.runInEDT(() -> {
+                        UndoRedoHandler.getInstance().add(cmd);
+                    });
                     allcmds.add(cmd);
                 }
                 Logging.info("Reverted changeset {0}", Long.toString(changesetId));
                 newLayer = false; // reuse layer for subsequent reverts
             } catch (OsmTransferException e) {
+                if (!allcmds.isEmpty()) {
+                    GuiHelper.runInEDT(() -> UndoRedoHandler.getInstance().undo(allcmds.size()));
+                }
                 Logging.error(e);
                 throw e;
             } catch (UserCancelException e) {
                 Logging.warn("Revert canceled");
                 Logging.trace(e);
+                if (!allcmds.isEmpty()) {
+                    GuiHelper.runInEDT(() -> UndoRedoHandler.getInstance().undo(allcmds.size()));
+                }
                 return;
             }
         }
-        if (!allcmds.isEmpty()) {
+        if (allcmds.size() > 1) {
+            // combine previously added commands for multiple reverts into a single command
             Command cmd = allcmds.size() == 1 ? allcmds.get(0) : new SequenceCommand(tr("Revert changesets"), allcmds);
             GuiHelper.runInEDT(() -> {
+                UndoRedoHandler.getInstance().undo(allcmds.size());
                 UndoRedoHandler.getInstance().add(cmd);
                 if (numberOfConflicts > 0) {
                     MainApplication.getMap().conflictDialog.warnNumNewConflicts(numberOfConflicts);
