Index: trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 2969)
+++ trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 2970)
@@ -344,5 +344,11 @@
     }
 
-    private void fireMembersChanged() {
+    @Override
+    public void setDataset(DataSet dataSet) {
+        super.setDataset(dataSet);
+        checkMembers();
+    }
+
+    private void checkMembers() {
         DataSet dataSet = getDataSet();
         if (dataSet != null) {
@@ -351,5 +357,11 @@
                     throw new DataIntegrityProblemException("Relation member must be part of the same dataset as relation");
             }
-            dataSet.fireRelationMembersChanged(this);
+        }
+    }
+
+    private void fireMembersChanged() {
+        checkMembers();
+        if (getDataSet() != null) {
+            getDataSet().fireRelationMembersChanged(this);
         }
     }
Index: trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 2969)
+++ trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 2970)
@@ -364,5 +364,5 @@
     }
 
-    private void fireNodesChanged() {
+    private void checkNodes() {
         DataSet dataSet = getDataSet();
         if (dataSet != null) {
@@ -371,6 +371,18 @@
                     throw new DataIntegrityProblemException("Nodes in way must be in the same dataset");
             }
+        }
+    }
+
+    private void fireNodesChanged() {
+        checkNodes();
+        if (getDataSet() != null) {
             getDataSet().fireWayNodesChanged(this);
         }
+    }
+
+    @Override
+    public void setDataset(DataSet dataSet) {
+        super.setDataset(dataSet);
+        checkNodes();
     }
 
