Index: /applications/editors/josm/plugins/undelete/src/org/openstreetmap/josm/plugins/undelete/UndeleteAction.java
===================================================================
--- /applications/editors/josm/plugins/undelete/src/org/openstreetmap/josm/plugins/undelete/UndeleteAction.java	(revision 30270)
+++ /applications/editors/josm/plugins/undelete/src/org/openstreetmap/josm/plugins/undelete/UndeleteAction.java	(revision 30271)
@@ -9,4 +9,6 @@
 import java.util.Collections;
 import java.util.List;
+
+import javax.swing.JOptionPane;
 
 import org.openstreetmap.josm.Main;
@@ -28,7 +30,9 @@
 import org.openstreetmap.josm.data.osm.history.HistoryRelation;
 import org.openstreetmap.josm.data.osm.history.HistoryWay;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.history.HistoryLoadTask;
 import org.openstreetmap.josm.gui.io.DownloadPrimitivesTask;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -105,5 +109,7 @@
         
                                     HistoryNode hNode = (HistoryNode) hPrimitive2;
-                                    node.setCoor(hNode.getCoords());
+                                    if (hNode != null) {
+                                    	node.setCoor(hNode.getCoords());
+                                    }
         
                                     primitive = node;
@@ -121,6 +127,8 @@
                                     // hWay.getNumNodes()));
                                     List<PrimitiveId> nodeIds = new ArrayList<PrimitiveId>();
-                                    for (Long i : hWay.getNodes()) {
-                                        nodeIds.add(new SimplePrimitiveId(i, OsmPrimitiveType.NODE));
+                                    if (hWay != null) {
+	                                    for (Long i : hWay.getNodes()) {
+	                                        nodeIds.add(new SimplePrimitiveId(i, OsmPrimitiveType.NODE));
+	                                    }
                                     }
                                     undelete(false, nodeIds, way);
@@ -136,39 +144,52 @@
                                     HistoryRelation hRel = (HistoryRelation) hPrimitive2;
         
-                                    List<RelationMember> members = new ArrayList<RelationMember>(hRel.getNumMembers());
-                                    for (RelationMemberData m : hRel.getMembers()) {
-                                        OsmPrimitive p = layer.data.getPrimitiveById(m.getMemberId(), m.getMemberType());
-                                        if (p == null) {
-                                            switch (m.getMemberType()) {
-                                            case NODE:
-                                                p = new Node(m.getMemberId());
-                                                break;
-                                            case CLOSEDWAY:
-                                            case WAY:
-                                                p = new Way(m.getMemberId());
-                                                break;
-                                            case MULTIPOLYGON:
-                                            case RELATION:
-                                                p = new Relation(m.getMemberId());
-                                                break;
-                                            }
-                                            layer.data.addPrimitive(p);
-                                        }
-                                        members.add(new RelationMember(m.getRole(), p));
+                                    if (hRel != null) {
+	                                    List<RelationMember> members = new ArrayList<RelationMember>(hRel.getNumMembers());
+	                                    for (RelationMemberData m : hRel.getMembers()) {
+	                                        OsmPrimitive p = layer.data.getPrimitiveById(m.getMemberId(), m.getMemberType());
+	                                        if (p == null) {
+	                                            switch (m.getMemberType()) {
+	                                            case NODE:
+	                                                p = new Node(m.getMemberId());
+	                                                break;
+	                                            case CLOSEDWAY:
+	                                            case WAY:
+	                                                p = new Way(m.getMemberId());
+	                                                break;
+	                                            case MULTIPOLYGON:
+	                                            case RELATION:
+	                                                p = new Relation(m.getMemberId());
+	                                                break;
+	                                            }
+	                                            layer.data.addPrimitive(p);
+	                                        }
+	                                        members.add(new RelationMember(m.getRole(), p));
+	                                    }
+	        
+	                                    rel.setMembers(members);
                                     }
-        
-                                    rel.setMembers(members);
         
                                     primitive = rel;
                                 }
         
-                                primitive.setChangesetId((int) hPrimitive1.getChangesetId());
-                                primitive.setTimestamp(hPrimitive1.getTimestamp());
-                                primitive.setUser(hPrimitive1.getUser());
-                                primitive.setVisible(hPrimitive1.isVisible());
-                                primitive.setKeys(hPrimitive2.getTags());
-                                primitive.setModified(true);
-        
-                                layer.data.addPrimitive(primitive);
+                                if (hPrimitive2 != null) {
+                                    primitive.setChangesetId((int) hPrimitive1.getChangesetId());
+                                    primitive.setTimestamp(hPrimitive1.getTimestamp());
+                                    primitive.setUser(hPrimitive1.getUser());
+                                    primitive.setVisible(hPrimitive1.isVisible());
+                                    primitive.setKeys(hPrimitive2.getTags());
+                                    primitive.setModified(true);
+            
+                                    layer.data.addPrimitive(primitive);
+                                } else {
+                                	final String msg = tr("Unable to undelete {0} {1}. Object has likely been redacted", type, id);
+                                	GuiHelper.runInEDT(new Runnable() {
+										@Override
+										public void run() {
+		                                	new Notification(msg).setIcon(JOptionPane.WARNING_MESSAGE).show();
+										}
+									});
+                                	Main.warn(msg);
+                                }
                             }
                         } catch (Throwable t) {
