Index: applications/editors/josm/plugins/reverter/src/reverter/OsmServerMultiObjectReader.java
===================================================================
--- applications/editors/josm/plugins/reverter/src/reverter/OsmServerMultiObjectReader.java	(revision 35579)
+++ applications/editors/josm/plugins/reverter/src/reverter/OsmServerMultiObjectReader.java	(revision 35638)
@@ -43,5 +43,5 @@
         }
     }
-    private List<String> makeQueryStrings(OsmPrimitiveType type, Map<Long,Integer> list) {
+    private static List<String> makeQueryStrings(OsmPrimitiveType type, Map<Long,Integer> list) {
         List<String> result = new ArrayList<>((list.size()+maxQueryIds-1)/maxQueryIds);
         StringBuilder sb = new StringBuilder();
@@ -73,21 +73,19 @@
 
     protected static final int maxQueryIds = 128;
-    public void readMultiObjects(OsmPrimitiveType type, Map<Long,Integer> list, ProgressMonitor progressMonitor) {
+    public void readMultiObjects(OsmPrimitiveType type, Map<Long,Integer> list, ProgressMonitor progressMonitor) throws OsmTransferException {
         for (String query : makeQueryStrings(type,list)) {
             if (progressMonitor.isCanceled()) {
                 return;
             }
-            rdr.callback = new ParseCallback() {
-                @Override
-                public void primitiveParsed(PrimitiveId id) {
-                    if (id.getType() == type && list.remove(id.getUniqueId()) != null) {
-                        progressMonitor.worked(1);
-                    }
+            rdr.callback = id -> {
+                if (id.getType() == type && list.remove(id.getUniqueId()) != null) {
+                    progressMonitor.worked(1);
                 }
             };
             try (InputStream in = getInputStream(query, NullProgressMonitor.INSTANCE)) {
                 rdr.addData(in);
-            } catch (IOException | IllegalDataException | OsmTransferException e) {
+            } catch (IOException | IllegalDataException e) {
                 Logging.warn(e);
+                throw new OsmTransferException(e);
             } finally {
                 rdr.callback = null;
Index: applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java
===================================================================
--- applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java	(revision 35579)
+++ applications/editors/josm/plugins/reverter/src/reverter/RevertChangesetTask.java	(revision 35638)
@@ -98,14 +98,10 @@
                 newLayer = false; // reuse layer for subsequent reverts
             } catch (OsmTransferException e) {
-                if (!allcmds.isEmpty()) {
-                    GuiHelper.runInEDT(() -> UndoRedoHandler.getInstance().undo(allcmds.size()));
-                }
+            	rollback(allcmds);
                 Logging.error(e);
                 throw e;
             } catch (UserCancelException e) {
-                if (!allcmds.isEmpty()) {
-                    GuiHelper.runInEDT(() -> UndoRedoHandler.getInstance().undo(allcmds.size()));
-                }
-                Logging.warn("Revert canceled");
+            	rollback(allcmds);
+                GuiHelper.executeByMainWorkerInEDT(() -> new Notification(tr("Revert was canceled")).show());
                 Logging.trace(e);
                 return;
@@ -120,4 +116,10 @@
                 }
             });
+        }
+    }
+
+    private static void rollback(List<Command> allcmds) {
+        if (!allcmds.isEmpty()) {
+            GuiHelper.runInEDT(() -> UndoRedoHandler.getInstance().undo(allcmds.size()));
         }
     }
@@ -185,16 +187,17 @@
     }
 
-    @Override
-    protected void cancel() {
+	@Override
+	protected void cancel() {
         // nothing to do
-    }
-
-    @Override
-    protected void finish() {
+	}
+
+	@Override
+	protected void finish() {
         // nothing to do
 
-    }
+	}
 
     /**
+     * Return number of conflicts for this changeset.
      * @return number of conflicts for this changeset
      */
