Index: /applications/editors/josm/plugins/reverter/build.xml
===================================================================
--- /applications/editors/josm/plugins/reverter/build.xml	(revision 35083)
+++ /applications/editors/josm/plugins/reverter/build.xml	(revision 35084)
@@ -2,5 +2,5 @@
 <project name="reverter" default="dist" basedir=".">
     <!-- enter the SVN commit message -->
-    <property name="commit.message" value="Reverter: fix possible NPE"/>
+    <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="14946"/>
Index: /applications/editors/josm/plugins/reverter/src/reverter/DataSetCommandMerger.java
===================================================================
--- /applications/editors/josm/plugins/reverter/src/reverter/DataSetCommandMerger.java	(revision 35083)
+++ /applications/editors/josm/plugins/reverter/src/reverter/DataSetCommandMerger.java	(revision 35084)
@@ -50,5 +50,5 @@
 
     private void addChangeCommandIfNotEquals(OsmPrimitive target, OsmPrimitive newTarget, boolean nominal) {
-        if (!target.hasEqualSemanticAttributes(newTarget)) {
+        if (!target.hasEqualSemanticAttributes(newTarget) || target.isDeleted() != newTarget.isDeleted() || target.isVisible() != newTarget.isVisible()) {
             cmds.add(new ChangeCommand(target, newTarget));
             if (nominal) {
@@ -149,18 +149,23 @@
         for (RelationMember sourceMember : source.getMembers()) {
             OsmPrimitive targetMember = getMergeTarget(sourceMember.getMember());
-            if (targetMember.isDeleted() && sourceMember.getMember().isIncomplete()
-                    && !conflicts.hasConflictForMy(targetMember)) {
-                conflicts.add(new Conflict<>(targetMember, sourceMember.getMember(), true));
-                OsmPrimitive undeletedTargetMember;
-                switch(targetMember.getType()) {
-                case NODE: undeletedTargetMember = new Node((Node) targetMember); break;
-                case WAY: undeletedTargetMember = new Way((Way) targetMember); break;
-                case RELATION: undeletedTargetMember = new Relation((Relation) targetMember); break;
-                default: throw new AssertionError();
+            if (!targetMember.isDeleted() || nominalRevertedPrimitives.contains(targetMember)) {
+                newMembers.add(new RelationMember(sourceMember.getRole(), targetMember));
+            } else {
+                if (!sourceMember.getMember().isIncomplete() && !conflicts.hasConflictForMy(targetMember)) {
+                    conflicts.add(new Conflict<>(targetMember, sourceMember.getMember(), true));
+                    OsmPrimitive undeletedTargetMember;
+                    switch(targetMember.getType()) {
+                    case NODE: undeletedTargetMember = new Node((Node) sourceMember.getMember()); break;
+                    case WAY: undeletedTargetMember = new Way((Way) sourceMember.getMember()); break;
+                    case RELATION: undeletedTargetMember = new Relation((Relation) sourceMember.getMember()); break;
+                    default: throw new AssertionError();
+                    }
+                    undeletedTargetMember.setDeleted(false);
+                    addChangeCommandIfNotEquals(targetMember, undeletedTargetMember, false);
+                    newMembers.add(new RelationMember(sourceMember.getRole(), targetMember));
+                } else {
+                    Logging.info("Skipping target relation member "+targetMember+" for source member "+sourceMember.getMember()+" while reverting relation "+source);
                 }
-                undeletedTargetMember.setDeleted(false);
-                addChangeCommandIfNotEquals(targetMember, undeletedTargetMember, false);
-            }
-            newMembers.add(new RelationMember(sourceMember.getRole(), targetMember));
+            }
         }
         Relation newRelation = new Relation(target);
Index: /applications/editors/josm/plugins/reverter/src/reverter/OsmServerMultiObjectReader.java
===================================================================
--- /applications/editors/josm/plugins/reverter/src/reverter/OsmServerMultiObjectReader.java	(revision 35083)
+++ /applications/editors/josm/plugins/reverter/src/reverter/OsmServerMultiObjectReader.java	(revision 35084)
@@ -90,5 +90,5 @@
                 rdr.addData(in);
             } catch (IOException | IllegalDataException | OsmTransferException e) {
-                Logging.error(e);
+                Logging.warn(e);
             } finally {
                 rdr.callback = null;
