Index: trunk/src/org/openstreetmap/josm/data/osm/DatasetConsistencyTest.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DatasetConsistencyTest.java	(revision 2500)
+++ trunk/src/org/openstreetmap/josm/data/osm/DatasetConsistencyTest.java	(revision 2501)
@@ -82,10 +82,42 @@
     }
 
+    private void checkReferredPrimitive(OsmPrimitive primitive, OsmPrimitive parent) {
+        if (dataSet.getPrimitiveById(primitive) == null) {
+            writer.println(String.format("%s is referenced by %s but not found in dataset", primitive, parent));
+        }
+        if (dataSet.getPrimitiveById(primitive) != primitive) {
+            writer.println(String.format("%s is different instance that reffered by %s", primitive, parent));
+        }
+        if (primitive.isDeleted()) {
+            writer.println(String.format("%s reffers to deleted primitive %s", parent, primitive));
+        }
+    }
+
+    private void refferedPrimitiveNotInDataset() {
+        for (Way way:dataSet.getWays()) {
+            for (Node node:way.getNodes()) {
+                checkReferredPrimitive(node, way);
+            }
+        }
+
+        for (Relation relation:dataSet.getRelations()) {
+            for (RelationMember member:relation.getMembers()) {
+                checkReferredPrimitive(member.getMember(), relation);
+            }
+        }
+    }
+
     public void runTest() {
-        checkReferrers();
-        checkCompleteWaysWithIncompleteNodes();
-        checkCompleteNodesWithoutCoordinates();
-        searchNodes();
-        searchWays();
+        try {
+            checkReferrers();
+            checkCompleteWaysWithIncompleteNodes();
+            checkCompleteNodesWithoutCoordinates();
+            searchNodes();
+            searchWays();
+            refferedPrimitiveNotInDataset();
+        } catch (Exception e) {
+            writer.println("Exception during dataset integrity test:");
+            e.printStackTrace(writer);
+        }
     }
 
