Index: trunk/test/unit/org/openstreetmap/josm/data/osm/APIDataSetTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/osm/APIDataSetTest.java	(revision 2990)
+++ trunk/test/unit/org/openstreetmap/josm/data/osm/APIDataSetTest.java	(revision 3025)
@@ -37,15 +37,14 @@
     @Test
     public void newParentChildPair() {
+        DataSet ds = new DataSet();
         Relation r1 = new Relation();
+        ds.addPrimitive(r1);
         r1.put("name", "r1");
 
         Relation r2 = new Relation();
+        ds.addPrimitive(r2);
         r2.put("name", "r2");
 
         r1.addMember(new RelationMember("", r2));
-
-        DataSet ds = new DataSet();
-        ds.addPrimitive(r1);
-        ds.addPrimitive(r2);
 
         APIDataSet apiDataSet = new APIDataSet();
@@ -65,14 +64,20 @@
     @Test
     public void oneExistingAndThreNewInAChain() {
+        DataSet ds = new DataSet();
+
         Relation r1 = new Relation();
+        ds.addPrimitive(r1);
         r1.put("name", "r1");
 
         Relation r2 = new Relation();
+        ds.addPrimitive(r2);
         r2.put("name", "r2");
 
         Relation r3 = new Relation();
+        ds.addPrimitive(r3);
         r3.put("name", "r3");
 
         Relation r4 = new Relation(1, 1);
+        ds.addPrimitive(r4);
         r4.put("name", "r4");
         r4.setModified(true);
@@ -80,10 +85,4 @@
         r1.addMember(new RelationMember("", r2));
         r2.addMember(new RelationMember("", r3));
-
-        DataSet ds = new DataSet();
-        ds.addPrimitive(r1);
-        ds.addPrimitive(r2);
-        ds.addPrimitive(r3);
-        ds.addPrimitive(r4);
 
         APIDataSet apiDataSet = new APIDataSet();
@@ -108,11 +107,15 @@
     @Test
     public void oneParentTwoNewChildren() {
+        DataSet ds = new DataSet();
         Relation r1 = new Relation();
+        ds.addPrimitive(r1);
         r1.put("name", "r1");
 
         Relation r2 = new Relation();
+        ds.addPrimitive(r2);
         r2.put("name", "r2");
 
         Relation r3 = new Relation();
+        ds.addPrimitive(r3);
         r3.put("name", "r3");
 
@@ -120,8 +123,4 @@
         r1.addMember(new RelationMember("", r3));
 
-        DataSet ds = new DataSet();
-        ds.addPrimitive(r1);
-        ds.addPrimitive(r2);
-        ds.addPrimitive(r3);
 
         APIDataSet apiDataSet = new APIDataSet();
@@ -141,11 +140,15 @@
     @Test
     public void oneCycle() {
+        DataSet ds = new DataSet();
         Relation r1 = new Relation();
+        ds.addPrimitive(r1);
         r1.put("name", "r1");
 
         Relation r2 = new Relation();
+        ds.addPrimitive(r2);
         r2.put("name", "r2");
 
         Relation r3 = new Relation();
+        ds.addPrimitive(r3);
         r3.put("name", "r3");
 
@@ -153,9 +156,4 @@
         r2.addMember(new RelationMember("", r3));
         r3.addMember(new RelationMember("", r1));
-
-        DataSet ds = new DataSet();
-        ds.addPrimitive(r1);
-        ds.addPrimitive(r2);
-        ds.addPrimitive(r3);
 
         APIDataSet apiDataSet = new APIDataSet();
Index: trunk/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java	(revision 2990)
+++ trunk/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java	(revision 3025)
@@ -7,4 +7,5 @@
 import static org.junit.Assert.assertTrue;
 
+import java.io.StringWriter;
 import java.util.Arrays;
 import java.util.Calendar;
@@ -12,4 +13,5 @@
 import java.util.GregorianCalendar;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -55,7 +57,34 @@
     }*/
 
+    private DataSet my;
+    private DataSet their;
+
     @Before
     public void setUp() {
         User.clearUserMap();
+        my = new DataSet();
+        my.setVersion("0.6");
+        their = new DataSet();
+        their.setVersion("0.6");
+    }
+
+    private void runConsistencyTests(DataSet ds) throws Exception {
+        StringWriter writer = new StringWriter();
+        DatasetConsistencyTest test =  new DatasetConsistencyTest(ds, writer);
+        test.checkReferrers();
+        test.checkCompleteWaysWithIncompleteNodes();
+        test.searchNodes();
+        test.searchWays();
+        test.referredPrimitiveNotInDataset();
+        test.checkZeroNodesWays();
+        String result = writer.toString();
+        if (result.length() > 0)
+            throw new RuntimeException(result);
+    }
+
+    @After
+    public void checkDatasets() throws Exception {
+        runConsistencyTests(my);
+        runConsistencyTests(their);
     }
 
@@ -68,6 +97,4 @@
     @Test
     public void nodeSimple_IdenticalNoConflict() {
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
         Node n = new Node(new LatLon(0,0));
         n.setOsmId(1,1);
@@ -76,6 +103,4 @@
         my.addPrimitive(n);
 
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
         Node n1 = new Node(new LatLon(0,0));
         n1.setOsmId(1,1);
@@ -107,6 +132,4 @@
     @Test
     public void nodeSimple_locallyUnmodifiedNoConflict() {
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
         Node n = new Node(new LatLon(0,0));
         n.setOsmId(1,1);
@@ -115,6 +138,4 @@
         my.addPrimitive(n);
 
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
         Node n1 = new Node(new LatLon(0,0));
         n1.setOsmId(1,2);
@@ -151,6 +172,4 @@
     @Test
     public void nodeSimple_TagConflict() {
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
         Node n = new Node(new LatLon(0,0));
         n.setOsmId(1,1);
@@ -160,6 +179,4 @@
         my.addPrimitive(n);
 
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
         Node n1 = new Node(new LatLon(0,0));
         n1.setOsmId(1,2);
@@ -189,6 +206,4 @@
     @Test
     public void nodeSimple_DeleteConflict() {
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
         Node n = new Node(1, 1);
         n.setCoor(new LatLon(0,0));
@@ -197,6 +212,4 @@
         my.addPrimitive(n);
 
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
         Node n1 = new Node(new LatLon(0,0));
         n1.setOsmId(1,2);
@@ -224,6 +237,4 @@
     @Test
     public void nodeSimple_VisibleConflict() {
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
         Node n = new Node(new LatLon(0,0));
         n.setOsmId(1,1);
@@ -232,6 +243,4 @@
         my.addPrimitive(n);
 
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
         Node n1 = new Node(new LatLon(0,0));
         n1.setOsmId(1,2);
@@ -260,6 +269,4 @@
     @Test
     public void nodeSimple_DeleteConflict_2() {
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
         Node n = new Node(new LatLon(0,0));
         n.setOsmId(1,1);
@@ -267,6 +274,4 @@
         my.addPrimitive(n);
 
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
         Node n1 = new Node(new LatLon(0,0));
         n1.setOsmId(1,1);
@@ -293,12 +298,8 @@
     @Test
     public void nodeSimple_DeleteConflict_3() {
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
         Node n = new Node(new LatLon(1,1));
         n.setDeleted(true);
         my.addPrimitive(n);
 
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
         Node n1 = new Node(new LatLon(1,1));
         their.addPrimitive(n1);
@@ -321,12 +322,8 @@
     @Test
     public void nodeSimple_DeleteConflict_4() {
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
         Node n = new Node(new LatLon(1,1));
         n.setDeleted(true);
         my.addPrimitive(n);
 
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
         Node n1 = new Node(new LatLon(1,1));
         n1.setDeleted(true);
@@ -351,6 +348,4 @@
     @Test
     public void nodeSimple_InvisibleNodeInTheirDataset() {
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
         Node n = new Node(new LatLon(0,0));
         n.setOsmId(1,1);
@@ -358,6 +353,4 @@
         my.addPrimitive(n);
 
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
         Node n1 = new Node(new LatLon(0,0));
         n1.setOsmId(2,1);
@@ -390,6 +383,4 @@
         User theirUser = User.createOsmUser(222, "their");
 
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
         Node n = new Node();
         n.setCoor(new LatLon(0,0));
@@ -400,6 +391,4 @@
         my.addPrimitive(n);
 
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
         Node n1 = new Node();
         n1.setCoor(new LatLon(0,0));
@@ -434,11 +423,7 @@
     public void nodeSimple_IncompleteNode() {
 
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
         Node n = new Node(1);
         my.addPrimitive(n);
 
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
         Node n1 = new Node();
         n1.setCoor(new LatLon(0,0));
@@ -472,11 +457,9 @@
 
         // -- the target dataset
-        DataSet target = new DataSet();
-        target.setVersion("0.6");
 
         Node n1 = new Node();
         n1.setCoor(new LatLon(0,0));
         n1.setOsmId(1,1);
-        target.addPrimitive(n1);
+        my.addPrimitive(n1);
 
         Node n2 = new Node();
@@ -484,5 +467,5 @@
         n2.setOsmId(2,1);
 
-        target.addPrimitive(n2);
+        my.addPrimitive(n2);
 
         Way myWay = new Way();
@@ -491,17 +474,15 @@
         myWay.addNode(n1);
         myWay.addNode(n2);
-        target.addPrimitive(myWay);
+        my.addPrimitive(myWay);
 
         // -- the source data set
-        DataSet source = new DataSet();
-        source.setVersion("0.6");
 
         Node n3 = new Node(new LatLon(0,0));
         n3.setOsmId(1,1);
-        source.addPrimitive(n3);
+        their.addPrimitive(n3);
 
         Node n4 = new Node(new LatLon(1,1));
         n4.setOsmId(2,1);
-        source.addPrimitive(n4);
+        their.addPrimitive(n4);
 
         Way theirWay = new Way();
@@ -511,12 +492,12 @@
         theirWay.addNode(n3);
         theirWay.addNode(n4);
-        source.addPrimitive(theirWay);
-
-
-        DataSetMerger visitor = new DataSetMerger(target,source);
+        their.addPrimitive(theirWay);
+
+
+        DataSetMerger visitor = new DataSetMerger(my,their);
         visitor.merge();
 
         // -- tests
-        Way merged = (Way)target.getPrimitiveById(3, OsmPrimitiveType.WAY);
+        Way merged = (Way)my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertEquals(0,visitor.getConflicts().size());
         assertEquals("value1",merged.get("key1"));
@@ -528,9 +509,9 @@
         assertEquals(2,merged.getNode(1).getId());
         assertTrue(merged == myWay);
-        assertTrue(merged.getDataSet() == target);
-
-        Node mergedNode = (Node)target.getPrimitiveById(1, OsmPrimitiveType.NODE);
+        assertTrue(merged.getDataSet() == my);
+
+        Node mergedNode = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertTrue(mergedNode == n1);
-        mergedNode = (Node)target.getPrimitiveById(2, OsmPrimitiveType.NODE);
+        mergedNode = (Node)my.getPrimitiveById(2, OsmPrimitiveType.NODE);
         assertTrue(mergedNode == n2);
 
@@ -549,6 +530,4 @@
 
         // -- my data set
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
 
         Node n1 = new Node(new LatLon(0,0));
@@ -567,6 +546,4 @@
 
         // --- their data set
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
 
         Node n3 = new Node(new LatLon(0,0));
@@ -624,14 +601,12 @@
 
         // -- the target dataset
-        DataSet target = new DataSet();
-        target.setVersion("0.6");
 
         Node n1 = new Node(new LatLon(0,0));
         n1.setOsmId(1,1);
-        target.addPrimitive(n1);
+        my.addPrimitive(n1);
 
         Node n2 = new Node(new LatLon(1,1));
         n2.setOsmId(2,1);
-        target.addPrimitive(n2);
+        my.addPrimitive(n2);
 
         Way myWay = new Way();
@@ -642,22 +617,20 @@
         myWay.setModified(true);
         myWay.put("key1", "value1");
-        target.addPrimitive(myWay);
+        my.addPrimitive(myWay);
 
         // -- the source dataset
-        DataSet source = new DataSet();
-        source.setVersion("0.6");
 
         Node n3 = new Node(new LatLon(0,0));
         n3.setOsmId(1,1);
-        source.addPrimitive(n3);
+        their.addPrimitive(n3);
 
         Node n5 = new Node(new LatLon(1,1));
         n5.setOsmId(4,1);
-        source.addPrimitive(n5);
+        their.addPrimitive(n5);
 
         Node n4 = new Node(new LatLon(2,2));
         n4.setOsmId(2,1);
         n4.put("key1", "value1");
-        source.addPrimitive(n4);
+        their.addPrimitive(n4);
 
 
@@ -668,11 +641,11 @@
         theirWay.addNode(n5); // insert a node
         theirWay.addNode(n4); // this one is updated
-        source.addPrimitive(theirWay);
-
-
-        DataSetMerger visitor = new DataSetMerger(target,source);
-        visitor.merge();
-
-        Way merged = (Way)target.getPrimitiveById(3, OsmPrimitiveType.WAY);
+        their.addPrimitive(theirWay);
+
+
+        DataSetMerger visitor = new DataSetMerger(my, their);
+        visitor.merge();
+
+        Way merged = (Way)my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertEquals(1,visitor.getConflicts().size());
         assertEquals(3,merged.getId());
@@ -694,23 +667,19 @@
     public void waySimple_TheirVersionNotVisible() {
 
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
-
-        Node n1 = new Node(new LatLon(0,0));
-        n1.setOsmId(1,1);
-        my.addPrimitive(n1);
-
-        Node n2 = new Node(new LatLon(1,1));
-        n2.setOsmId(2,1);
-        my.addPrimitive(n2);
+
+        Node mn1 = new Node(new LatLon(0,0));
+        mn1.setOsmId(1,1);
+        my.addPrimitive(mn1);
+
+        Node mn2 = new Node(new LatLon(1,1));
+        mn2.setOsmId(2,1);
+        my.addPrimitive(mn2);
 
         Way myWay = new Way();
         myWay.setOsmId(3,1);
-        myWay.addNode(n1);
-        myWay.addNode(n2);
+        myWay.addNode(mn1);
+        myWay.addNode(mn2);
         my.addPrimitive(myWay);
 
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
 
         Way theirWay = new Way();
@@ -739,6 +708,4 @@
 
         // -- my data set
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
 
         Node n1 = new Node(new LatLon(0,0));
@@ -756,6 +723,4 @@
 
         // -- their data set
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
 
         Node n3 = new Node(new LatLon(0,0));
@@ -801,6 +766,4 @@
 
         // -- my data set
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
 
         Node n1 = new Node(new LatLon(0,0));
@@ -816,6 +779,4 @@
 
         // -- their data set
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
 
         Node n3 = new Node(new LatLon(0,0));
@@ -855,5 +816,5 @@
      *
      * => the merged way should include two nodes only. the deleted node should still be
-     * in the data set
+     * in the data set.
      *
      */
@@ -862,33 +823,29 @@
 
         // -- my dataset
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
-
-        Node n1 = new Node(new LatLon(0,0));
-        n1.setOsmId(1,1);
-        n1.setDeleted(true);
-        my.addPrimitive(n1);
-
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
-
-        Node n3 = new Node(new LatLon(0,0));
-        n3.setOsmId(1,1);
-        their.addPrimitive(n3);
-
-        Node n4 = new Node(new LatLon(1,1));
-        n4.setOsmId(2,1);
-        their.addPrimitive(n4);
-
-        Node n5 = new Node(new LatLon(2,2));
-        n5.setOsmId(3,1);
-        their.addPrimitive(n5);
+
+        Node mn1 = new Node(new LatLon(0,0));
+        mn1.setOsmId(1,1);
+        mn1.setDeleted(true);
+        my.addPrimitive(mn1);
+
+
+        Node tn1 = new Node(new LatLon(0,0));
+        tn1.setOsmId(1,1);
+        their.addPrimitive(tn1);
+
+        Node tn2 = new Node(new LatLon(1,1));
+        tn2.setOsmId(2,1);
+        their.addPrimitive(tn2);
+
+        Node tn3 = new Node(new LatLon(2,2));
+        tn3.setOsmId(3,1);
+        their.addPrimitive(tn3);
 
         // -- their data set
         Way theirWay = new Way();
         theirWay.setOsmId(4,1);
-        theirWay.addNode(n3);
-        theirWay.addNode(n4);
-        theirWay.addNode(n5);
+        theirWay.addNode(tn1);
+        theirWay.addNode(tn2);
+        theirWay.addNode(tn3);
         User user = User.getById(1111);
         if (user == null) {
@@ -902,8 +859,8 @@
         visitor.merge();
 
-        assertEquals(0,visitor.getConflicts().size());
-
-        Way myWay = (Way)my.getPrimitiveById(4,OsmPrimitiveType.WAY);
-        assertEquals(2, myWay.getNodesCount());
+        assertEquals(1, visitor.getConflicts().size());
+
+        Way myWay = (Way)my.getPrimitiveById(4, OsmPrimitiveType.WAY);
+        assertEquals(3, myWay.getNodesCount());
 
         Node n = (Node)my.getPrimitiveById(1,OsmPrimitiveType.NODE);
@@ -926,6 +883,4 @@
     public void relationComplex_mergingADeletedNode() {
 
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
 
         Node n1 = new Node(new LatLon(0,0));
@@ -934,6 +889,4 @@
         my.addPrimitive(n1);
 
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
 
         Node n3 = new Node(new LatLon(0,0));
@@ -979,37 +932,33 @@
     @Test
     public void newIncompleteWay() {
-        DataSet source = new DataSet();
-        source.setVersion("0.6");
 
         Node n1 = new Node(1);
-        source.addPrimitive(n1);
+        their.addPrimitive(n1);
 
         Node n2 = new Node(2);
-        source.addPrimitive(n2);
+        their.addPrimitive(n2);
 
         Way w3 = new Way(3);
         w3.setNodes(Arrays.asList(n1,n2));
-        source.addPrimitive(w3);
+        their.addPrimitive(w3);
         assertTrue(w3.isIncomplete());
 
-        DataSet target = new DataSet();
-        target.setVersion("0.6");
-
-        DataSetMerger visitor = new DataSetMerger(target,source);
-        visitor.merge();
-
-        assertEquals(0,visitor.getConflicts().size());
-
-        OsmPrimitive p= target.getPrimitiveById(1, OsmPrimitiveType.NODE);
+
+        DataSetMerger visitor = new DataSetMerger(my, their);
+        visitor.merge();
+
+        assertEquals(0,visitor.getConflicts().size());
+
+        OsmPrimitive p= my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertTrue(p.isIncomplete());
-        p= target.getPrimitiveById(2, OsmPrimitiveType.NODE);
+        p= my.getPrimitiveById(2, OsmPrimitiveType.NODE);
         assertNotNull(p);
         assertTrue(p.isIncomplete());
-        p= target.getPrimitiveById(3, OsmPrimitiveType.WAY);
+        p= my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertNotNull(p);
         assertTrue(p.isIncomplete());
 
-        Way w = (Way)target.getPrimitiveById(3, OsmPrimitiveType.WAY);
+        Way w = (Way)my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertNotNull(w);
         assertTrue(p.isIncomplete());
@@ -1026,6 +975,4 @@
     @Test
     public void incompleteWayOntoCompleteWay() {
-        DataSet their = new DataSet();
-        their.setVersion("0.6");
 
         // an incomplete node
@@ -1042,6 +989,4 @@
         their.addPrimitive(w3);
 
-        DataSet my = new DataSet();
-        my.setVersion("0.6");
 
         Node n4 = new Node(new LatLon(0,0));
@@ -1088,34 +1033,30 @@
 
         // -- source dataset
-        DataSet source = new DataSet();
-        source.setVersion("0.6");
 
         // an complete node
         Node n1 = new Node(1, 1);
         n1.setCoor(new LatLon(1,1));
-        source.addPrimitive(n1);
+        their.addPrimitive(n1);
 
         // another complete node
         Node n2 = new Node(2, 1);
         n2.setCoor(new LatLon(2,2));
-        source.addPrimitive(n2);
+        their.addPrimitive(n2);
 
         // --- target dataset
-        DataSet target = new DataSet();
-        target.setVersion("0.6");
 
         Node n4 = new Node(1);
-        target.addPrimitive(n4);
+        my.addPrimitive(n4);
 
         Node n5 = new Node(2);
-        target.addPrimitive(n5);
+        my.addPrimitive(n5);
 
         Way w6 = new Way(3, 1);
         w6.addNode(n4);
         w6.addNode(n5);
-        target.addPrimitive(w6);
+        my.addPrimitive(w6);
 
         //-- merge it
-        DataSetMerger visitor = new DataSetMerger(target,source);
+        DataSetMerger visitor = new DataSetMerger(my, their);
         visitor.merge();
 
@@ -1123,13 +1064,13 @@
         assertEquals(0,visitor.getConflicts().size());
 
-        Node n = (Node)target.getPrimitiveById(1, OsmPrimitiveType.NODE);
+        Node n = (Node)my.getPrimitiveById(1, OsmPrimitiveType.NODE);
         assertNotNull(n);
         assertFalse(n.isIncomplete());
 
-        n = (Node)target.getPrimitiveById(2, OsmPrimitiveType.NODE);
+        n = (Node)my.getPrimitiveById(2, OsmPrimitiveType.NODE);
         assertNotNull(n);
         assertFalse(n.isIncomplete());
 
-        Way w = (Way)target.getPrimitiveById(3, OsmPrimitiveType.WAY);
+        Way w = (Way)my.getPrimitiveById(3, OsmPrimitiveType.WAY);
         assertNotNull(w);
         assertFalse(w.hasIncompleteNodes());
Index: trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java	(revision 2990)
+++ trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java	(revision 3025)
@@ -151,12 +151,13 @@
     public void test_OneRelation_ExistingMembersSelected() {
         DataSet source = new DataSet();
-        Relation r1 = new Relation(1);
+        Relation r1 = new Relation(1, 1);
         Node n20 = new Node(20, 1);
+        n20.setCoor(new LatLon(0, 0));
         r1.addMember(new RelationMember("node-20",n20));
         Way w30 = new Way(30, 1);
-        Node n21;
-        w30.addNode(n21 = new Node(21));
-        Node n22;
-        w30.addNode(n22 = new Node(22));
+        Node n21  = new Node(21);
+        w30.addNode(n21);
+        Node n22 = new Node(22);
+        w30.addNode(n22);
         r1.addMember(new RelationMember("way-30",w30));
         Relation r40 = new Relation(40);
@@ -166,6 +167,6 @@
         source.addPrimitive(n22);
         source.addPrimitive(w30);
-        source.addPrimitive(r1);
         source.addPrimitive(r40);
+        source.addPrimitive(r1);
         source.setSelected(r1,n20,w30,r40);
 
@@ -209,5 +210,5 @@
     public void test_OneRelation_ExistingMembersNotSelected() {
         DataSet source = new DataSet();
-        Relation r1 = new Relation(1);
+        Relation r1 = new Relation(1, 1);
         Node n20 = new Node(20);
         r1.addMember(new RelationMember("node-20",n20));
@@ -224,6 +225,6 @@
         source.addPrimitive(n22);
         source.addPrimitive(w30);
-        source.addPrimitive(r1);
         source.addPrimitive(r40);
+        source.addPrimitive(r1);
         source.setSelected(r1);
 
@@ -291,6 +292,6 @@
         source.addPrimitive(n22);
         source.addPrimitive(w30);
-        source.addPrimitive(r1);
         source.addPrimitive(r40);
+        source.addPrimitive(r1);
         source.setSelected(r1);
 
@@ -335,5 +336,5 @@
     public void test_OneRelation_Existing_Recursive() {
         DataSet source = new DataSet();
-        Relation r1 = new Relation(1);
+        Relation r1 = new Relation(1, 1);
         r1.addMember(new RelationMember("relation-1",r1));
         source.addPrimitive(r1);
@@ -374,10 +375,10 @@
     public void test_TwoRelation_Existing_Circular() {
         DataSet source = new DataSet();
-        Relation r1 = new Relation(1);
-        Relation r2 = new Relation(2);
+        Relation r1 = new Relation(1, 1);
+        source.addPrimitive(r1);
+        Relation r2 = new Relation(2, 3);
+        source.addPrimitive(r2);
         r1.addMember(new RelationMember("relation-2",r2));
         r2.addMember(new RelationMember("relation-1",r1));
-        source.addPrimitive(r1);
-        source.addPrimitive(r2);
         source.setSelected(r1,r2);
 
Index: trunk/test/unit/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergeModelTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergeModelTest.java	(revision 2990)
+++ trunk/test/unit/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergeModelTest.java	(revision 3025)
@@ -17,4 +17,5 @@
 
 import org.junit.Test;
+import org.openstreetmap.josm.data.osm.DatasetFactory;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.Way;
@@ -23,4 +24,8 @@
 public class NodeListMergeModelTest {
 
+    private DatasetFactory my = new DatasetFactory();
+    private DatasetFactory their = new DatasetFactory();
+
+    @SuppressWarnings("unchecked")
     protected List<Node> inspectNodeList(NodeListMergeModel model, String name) {
         return method("get" + name + "Entries")
@@ -46,5 +51,5 @@
             try {
                 int rows[] = (int[])idx[i];
-                if (rows == null || rows.length != 2) {
+                if (rows.length != 2) {
                     fail("illegal selection range. Either null or not length 2: " + Arrays.toString(rows));
                 }
@@ -65,8 +70,9 @@
         NodeListMergeModel model = new NodeListMergeModel();
 
-        Way myWay = new Way(1, 1);
-        myWay.addNode(new Node(2));
-        myWay.addNode(new Node(3));
-        Way theirWay = new Way(1);
+        Way myWay = my.addWay(1, 1);
+        myWay.addNode(my.addNode(2));
+        myWay.addNode(my.addNode(3));
+
+        Way theirWay = their.addWay(1);
 
         model.populate(myWay, theirWay);
@@ -88,9 +94,9 @@
         NodeListMergeModel model = new NodeListMergeModel();
 
-
-        Way myWay = new Way(1, 1);
-        myWay.addNode(new Node(2));
-        myWay.addNode(new Node(3));
-        Way theirWay = new Way(1);
+        Way myWay = my.addWay(1, 1);
+        myWay.addNode(my.addNode(2));
+        myWay.addNode(my.addNode(3));
+
+        Way theirWay = their.addWay(1);
 
         model.populate(myWay, theirWay);
@@ -111,17 +117,12 @@
     }
 
-
-
-
-
     @Test
     public void test_copyMyNodesToTop_3() {
         NodeListMergeModel model = new NodeListMergeModel();
 
-
-        Way myWay = new Way(1, 1);
-        myWay.addNode(new Node(2));
-        myWay.addNode(new Node(3));
-        Way theirWay = new Way(1);
+        Way myWay = my.addWay(1, 1);
+        myWay.addNode(my.addNode(2));
+        myWay.addNode(my.addNode(3));
+        Way theirWay = their.addWay(1);
 
 
@@ -146,10 +147,9 @@
         NodeListMergeModel model = new NodeListMergeModel();
 
-
-        Way myWay = new Way(1, 1);
-        myWay.addNode(new Node(2));
-        myWay.addNode(new Node(3));
-        myWay.addNode(new Node(4));
-        Way theirWay = new Way(1);
+        Way myWay = my.addWay(1, 1);
+        myWay.addNode(my.addNode(2));
+        myWay.addNode(my.addNode(3));
+        myWay.addNode(my.addNode(4));
+        Way theirWay = their.addWay(1);
 
         model.populate(myWay, theirWay);
@@ -175,8 +175,8 @@
         NodeListMergeModel model = new NodeListMergeModel();
 
-        Way myWay = new Way(1, 1);
-        myWay.addNode(new Node(2));
-        myWay.addNode(new Node(3));
-        Way theirWay = new Way(1);
+        Way myWay = my.addWay(1, 1);
+        myWay.addNode(my.addNode(2));
+        myWay.addNode(my.addNode(3));
+        Way theirWay = their.addWay(1);
 
         model.populate(myWay, theirWay);
@@ -196,8 +196,8 @@
         NodeListMergeModel model = new NodeListMergeModel();
 
-        Way myWay = new Way(1, 1);
-        myWay.addNode(new Node(2));
-        myWay.addNode(new Node(3));
-        Way theirWay = new Way(1);
+        Way myWay = my.addWay(1, 1);
+        myWay.addNode(my.addNode(2));
+        myWay.addNode(my.addNode(3));
+        Way theirWay = their.addWay(1);
 
         model.populate(myWay, theirWay);
@@ -222,8 +222,8 @@
 
 
-        Way myWay = new Way(1, 1);
-        myWay.addNode(new Node(2));
-        myWay.addNode(new Node(3));
-        Way theirWay = new Way(1);
+        Way myWay = my.addWay(1, 1);
+        myWay.addNode(my.addNode(2));
+        myWay.addNode(my.addNode(3));
+        Way theirWay = their.addWay(1);
 
         model.populate(myWay, theirWay);
@@ -249,9 +249,9 @@
 
 
-        Way myWay = new Way(1, 1);
-        myWay.addNode(new Node(2));
-        myWay.addNode(new Node(3));
-        myWay.addNode(new Node(4));
-        Way theirWay = new Way(1);
+        Way myWay = my.addWay(1, 1);
+        myWay.addNode(my.addNode(2));
+        myWay.addNode(my.addNode(3));
+        myWay.addNode(my.addNode(4));
+        Way theirWay = their.addWay(1);
 
         model.populate(myWay, theirWay);
@@ -281,8 +281,8 @@
         NodeListMergeModel model = new NodeListMergeModel();
 
-        Way myWay = new Way(1, 1);
-        myWay.addNode(new Node(1));
-        myWay.addNode(new Node(2));
-        Way theirWay = new Way(1);
+        Way myWay = my.addWay(1, 1);
+        myWay.addNode(my.addNode(1));
+        myWay.addNode(my.addNode(2));
+        Way theirWay = their.addWay(1);
 
         model.populate(myWay, theirWay);
@@ -309,8 +309,8 @@
         NodeListMergeModel model = new NodeListMergeModel();
 
-        Way myWay = new Way(1, 1);
-        myWay.addNode(new Node(1));
-        myWay.addNode(new Node(2));
-        Way theirWay = new Way(1);
+        Way myWay = my.addWay(1, 1);
+        myWay.addNode(my.addNode(1));
+        myWay.addNode(my.addNode(2));
+        Way theirWay = their.addWay(1);
 
         model.populate(myWay, theirWay);
@@ -337,8 +337,8 @@
         NodeListMergeModel model = new NodeListMergeModel();
 
-        Way myWay = new Way(1, 1);
-        myWay.addNode(new Node(1));
-        myWay.addNode(new Node(2));
-        Way theirWay = new Way(1);
+        Way myWay = my.addWay(1, 1);
+        myWay.addNode(my.addNode(1));
+        myWay.addNode(my.addNode(2));
+        Way theirWay = their.addWay(1);
 
         model.populate(myWay, theirWay);
@@ -356,5 +356,5 @@
 
         try {
-            model.copyMyBeforeCurrent(new int[]{0,1}, 3);
+            model.copyMyBeforeCurrent(new int[]{0,1}, 4);
             fail("expected IllegalArgumentException");
         } catch(IllegalArgumentException e) {
@@ -370,8 +370,8 @@
         NodeListMergeModel model = new NodeListMergeModel();
 
-        Way myWay = new Way(1, 1);
-        myWay.addNode(new Node(1));
-        myWay.addNode(new Node(2));
-        Way theirWay = new Way(1);
+        Way myWay = my.addWay(1, 1);
+        myWay.addNode(my.addNode(1));
+        myWay.addNode(my.addNode(2));
+        Way theirWay = their.addWay(1);
 
         model.populate(myWay, theirWay);
@@ -398,9 +398,9 @@
         NodeListMergeModel model = new NodeListMergeModel();
 
-        Way myWay = new Way(1, 1);
-        myWay.addNode(new Node(1));
-        myWay.addNode(new Node(2));
-        myWay.addNode(new Node(3));
-        Way theirWay = new Way(1);
+        Way myWay = my.addWay(1, 1);
+        myWay.addNode(my.addNode(1));
+        myWay.addNode(my.addNode(2));
+        myWay.addNode(my.addNode(3));
+        Way theirWay = their.addWay(1);
 
         model.populate(myWay, theirWay);
@@ -428,9 +428,9 @@
         NodeListMergeModel model = new NodeListMergeModel();
 
-        Way myWay = new Way(1, 1);
-        myWay.addNode(new Node(1));
-        myWay.addNode(new Node(2));
-        myWay.addNode(new Node(3));
-        Way theirWay = new Way(1);
+        Way myWay = my.addWay(1, 1);
+        myWay.addNode(my.addNode(1));
+        myWay.addNode(my.addNode(2));
+        myWay.addNode(my.addNode(3));
+        Way theirWay = their.addWay(1);
 
         model.populate(myWay, theirWay);
@@ -453,33 +453,4 @@
     }
 
-    @Test
-    public void test_copyMyNodesAfterCurrent_4() {
-        NodeListMergeModel model = new NodeListMergeModel();
-
-        Way myWay = new Way(1, 1);
-        myWay.addNode(new Node(1));
-        myWay.addNode(new Node(2));
-        Way theirWay = new Way(1);
-
-        model.populate(myWay, theirWay);
-        List<Node> mergedNodes = inspectNodeList(model, "Merged");
-        mergedNodes.add(new Node(10));
-        mergedNodes.add(new Node(11));
-        mergedNodes.add(new Node(12));
-
-        try {
-            model.copyMyAfterCurrent(new int[]{0,1}, -1);
-            fail("expected IllegalArgumentException");
-        } catch(IllegalArgumentException e) {
-            // OK
-        }
-
-        try {
-            model.copyMyAfterCurrent(new int[]{0,1}, 3);
-            fail("expected IllegalArgumentException");
-        } catch(IllegalArgumentException e) {
-            // OK
-        }
-    }
 
     /* ----------------------------------------------------------------------------- */
@@ -664,4 +635,5 @@
     /* PropertyChangeListener                                                        */
     /* ----------------------------------------------------------------------------- */
+    @SuppressWarnings("unchecked")
     @Test
     public void addPropertyChangeListener() {
@@ -676,6 +648,6 @@
         model.addPropertyChangeListener(listener);
 
-        ArrayList<PropertyChangeListener> listeners = field("listeners")
-        .ofType(ArrayList.class)
+        List<PropertyChangeListener> listeners = field("listeners")
+        .ofType(List.class)
         .in(model)
         .get();
@@ -685,4 +657,5 @@
     }
 
+    @SuppressWarnings("unchecked")
     @Test
     public void removePropertyChangeListener() {
@@ -698,6 +671,6 @@
         model.removePropertyChangeListener(listener);
 
-        ArrayList<PropertyChangeListener> listeners = field("listeners")
-        .ofType(ArrayList.class)
+        List<PropertyChangeListener> listeners = field("listeners")
+        .ofType(List.class)
         .in(model)
         .get();
Index: trunk/test/unit/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModelTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModelTest.java	(revision 2990)
+++ trunk/test/unit/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModelTest.java	(revision 3025)
@@ -2,7 +2,7 @@
 package org.openstreetmap.josm.gui.conflict.properties;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.*;
 
 import java.util.Observable;
@@ -13,4 +13,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.Relation;
@@ -48,14 +49,22 @@
     @Test
     public void populate() {
+        DataSet d1 = new DataSet();
+        DataSet d2 = new DataSet();
         Node n1 = new Node(1);
         Node n2 = new Node(1);
+        d1.addPrimitive(n1);
+        d2.addPrimitive(n2);
         model.populate(n1, n2);
 
         Way w1 = new Way(1);
         Way w2 = new Way(1);
+        d1.addPrimitive(w1);
+        d2.addPrimitive(w2);
         model.populate(w2, w2);
 
         Relation r1 = new Relation(1);
         Relation r2 = new Relation(1);
+        d1.addPrimitive(r1);
+        d2.addPrimitive(r2);
         model.populate(r1, r2);
     }
@@ -63,6 +72,11 @@
     @Test
     public void decidingAboutCoords() {
+        DataSet d1 = new DataSet();
+        DataSet d2 = new DataSet();
+
         Node n1 = new Node(1);
         Node n2 = new Node(1);
+        d1.addPrimitive(n1);
+        d2.addPrimitive(n2);
         model.populate(n1, n2);
         assertFalse(model.hasCoordConflict());
@@ -73,5 +87,5 @@
 
 
-        n1 = new Node(1);
+        n1.cloneFrom(new Node(1));
         n2.setCoor(new LatLon(2,2));
         model.populate(n1, n2);
Index: trunk/test/unit/org/openstreetmap/josm/gui/conflict/tags/TagMergeModelTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/conflict/tags/TagMergeModelTest.java	(revision 2990)
+++ trunk/test/unit/org/openstreetmap/josm/gui/conflict/tags/TagMergeModelTest.java	(revision 3025)
@@ -8,5 +8,5 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
-import java.util.ArrayList;
+import java.util.List;
 
 import org.junit.Test;
@@ -29,5 +29,5 @@
         model.addPropertyChangeListener(listener);
 
-        ArrayList<?> list = field("listeners").ofType(ArrayList.class)
+        List<?> list = field("listeners").ofType(List.class)
         .in(model)
         .get();
@@ -48,6 +48,6 @@
         model.removePropertyChangeListener(listener);
 
-        ArrayList<?> list = field("listeners")
-        .ofType(ArrayList.class)
+        List<?> list = field("listeners")
+        .ofType(List.class)
         .in(model)
         .get();
@@ -63,6 +63,6 @@
         model.populate(my, their);
 
-        ArrayList<TagMergeItem> list = field("tagMergeItems")
-        .ofType(ArrayList.class)
+        List<TagMergeItem> list = field("tagMergeItems")
+        .ofType(List.class)
         .in(model)
         .get();
@@ -80,6 +80,6 @@
         model.populate(my, their);
 
-        ArrayList<TagMergeItem> list = field("tagMergeItems")
-        .ofType(ArrayList.class)
+        List<TagMergeItem> list = field("tagMergeItems")
+        .ofType(List.class)
         .in(model)
         .get();
@@ -96,6 +96,6 @@
         model.populate(my, their);
 
-        ArrayList<TagMergeItem> list = field("tagMergeItems")
-        .ofType(ArrayList.class)
+        List<TagMergeItem> list = field("tagMergeItems")
+        .ofType(List.class)
         .in(model)
         .get();
@@ -117,6 +117,6 @@
         model.populate(my, their);
 
-        ArrayList<TagMergeItem> list = field("tagMergeItems")
-        .ofType(ArrayList.class)
+        List<TagMergeItem> list = field("tagMergeItems")
+        .ofType(List.class)
         .in(model)
         .get();
@@ -139,6 +139,6 @@
         model.populate(my, their);
 
-        ArrayList<TagMergeItem> list = field("tagMergeItems")
-        .ofType(ArrayList.class)
+        List<TagMergeItem> list = field("tagMergeItems")
+        .ofType(List.class)
         .in(model)
         .get();
@@ -158,6 +158,6 @@
         model.addItem(item);
 
-        ArrayList<TagMergeItem> list = field("tagMergeItems")
-        .ofType(ArrayList.class)
+        List<TagMergeItem> list = field("tagMergeItems")
+        .ofType(List.class)
         .in(model)
         .get();
@@ -177,6 +177,6 @@
         model.addItem(item);
 
-        ArrayList<TagMergeItem> list = field("tagMergeItems")
-        .ofType(ArrayList.class)
+        List<TagMergeItem> list = field("tagMergeItems")
+        .ofType(List.class)
         .in(model)
         .get();
@@ -207,6 +207,6 @@
         }
 
-        ArrayList<TagMergeItem> list = field("tagMergeItems")
-        .ofType(ArrayList.class)
+        List<TagMergeItem> list = field("tagMergeItems")
+        .ofType(List.class)
         .in(model)
         .get();
