Index: /trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java	(revision 1909)
+++ /trunk/src/org/openstreetmap/josm/actions/CreateCircleAction.java	(revision 1910)
@@ -6,4 +6,5 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedList;
@@ -134,12 +135,5 @@
 
             // build a way for the circle
-            Way wayToAdd;
-            if (existingWay == null) {
-                wayToAdd = new Way();
-            } else {
-                // re-use existing way if it was selected
-                wayToAdd = new Way(existingWay);
-                wayToAdd.nodes.clear();
-            }
+            List<Node> wayToAdd = new ArrayList<Node>();
 
             for (int i = 1; i <= numberOfNodesInCircle; i++) {
@@ -148,9 +142,9 @@
                 // insert existing nodes if they fit before this new node (999 means "already added this node")
                 if ((a1 < 999) && (a1 > a - 1E-9) && (a1 < a + 1E-9)) {
-                    wayToAdd.nodes.add(n1);
+                    wayToAdd.add(n1);
                     a1 = 999;
                 }
                 else if ((a2 < 999) && (a2 > a - 1E-9) && (a2 < a + 1E-9)) {
-                    wayToAdd.nodes.add(n2);
+                    wayToAdd.add(n2);
                     a2 = 999;
                 }
@@ -160,13 +154,17 @@
                     double y = yc + r*Math.sin(a);
                     Node n = new Node(Main.proj.eastNorth2latlon(new EastNorth(x,y)));
-                    wayToAdd.nodes.add(n);
+                    wayToAdd.add(n);
                     cmds.add(new AddCommand(n));
                 }
             }
-            wayToAdd.nodes.add(wayToAdd.nodes.get(0)); // close the circle
+            wayToAdd.add(wayToAdd.get(0)); // close the circle
             if (existingWay == null) {
-                cmds.add(new AddCommand(wayToAdd));
+                Way newWay = new Way();
+                newWay.setNodes(wayToAdd);
+                cmds.add(new AddCommand(newWay));
             } else {
-                cmds.add(new ChangeCommand(existingWay, wayToAdd));
+                Way newWay = new Way(existingWay);
+                newWay.setNodes(wayToAdd);
+                cmds.add(new ChangeCommand(existingWay, newWay));
             }
 
@@ -229,25 +227,18 @@
 
             // build a way for the circle
-            Way wayToAdd;
-            if (existingWay == null) {
-                wayToAdd = new Way();
-            } else {
-                // re-use existing way if it was selected
-                wayToAdd = new Way(existingWay);
-                wayToAdd.nodes.clear();
-            }
+            List<Node> wayToAdd = new ArrayList<Node>();
             for (int i = 1; i <= numberOfNodesInCircle; i++) {
                 double a = 2*Math.PI*(1.0 - i/(double)numberOfNodesInCircle); // "1-" to get it clock-wise
                 // insert existing nodes if they fit before this new node (999 means "already added this node")
                 if (a1 < 999 && a1 > a) {
-                    wayToAdd.nodes.add(n1);
+                    wayToAdd.add(n1);
                     a1 = 999;
                 }
                 if (a2 < 999 && a2 > a) {
-                    wayToAdd.nodes.add(n2);
+                    wayToAdd.add(n2);
                     a2 = 999;
                 }
                 if (a3 < 999 && a3 > a) {
-                    wayToAdd.nodes.add(n3);
+                    wayToAdd.add(n3);
                     a3 = 999;
                 }
@@ -256,12 +247,16 @@
                 double y = yc + r*Math.sin(a);
                 Node n = new Node(Main.proj.eastNorth2latlon(new EastNorth(x,y)));
-                wayToAdd.nodes.add(n);
+                wayToAdd.add(n);
                 cmds.add(new AddCommand(n));
             }
-            wayToAdd.nodes.add(wayToAdd.nodes.get(0)); // close the circle
+            wayToAdd.add(wayToAdd.get(0)); // close the circle
             if (existingWay == null) {
-                cmds.add(new AddCommand(wayToAdd));
+                Way newWay = new Way();
+                newWay.setNodes(wayToAdd);
+                cmds.add(new AddCommand(newWay));
             } else {
-                cmds.add(new ChangeCommand(existingWay, wayToAdd));
+                Way newWay = new Way(existingWay);
+                newWay.setNodes(wayToAdd);
+                cmds.add(new ChangeCommand(existingWay, newWay));
             }
 
Index: /trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java	(revision 1909)
+++ /trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java	(revision 1910)
@@ -59,10 +59,12 @@
         for (Map.Entry<Way, List<Integer>> insertPoint : insertPoints.entrySet()) {
             Way w = insertPoint.getKey();
-            Way wnew = new Way(w);
+            List<Node> nodesToAdd = new ArrayList<Node>();
             List<Integer> is = insertPoint.getValue();
             pruneSuccsAndReverse(is);
             for (int i : is) {
-                wnew.nodes.add(i+1, node);
+                nodesToAdd.add(i+1, node);
             }
+            Way wnew = new Way(w);
+            wnew.setNodes(nodesToAdd);
             cmds.add(new ChangeCommand(w, wnew));
         }
Index: /trunk/src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java	(revision 1909)
+++ /trunk/src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java	(revision 1910)
@@ -186,5 +186,7 @@
                 Way w = (Way)pair.getParent();
                 System.out.println(tr("removing reference from way {0}",w.id));
-                w.nodes.remove(primitive);
+                List<Node> wayNodes = w.getNodes();
+                wayNodes.remove(primitive);
+                w.setNodes(wayNodes);
                 // if a way ends up with less than two node we
                 // remember it on the "hive"
Index: /trunk/src/org/openstreetmap/josm/command/WayNodesConflictResolverCommand.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/command/WayNodesConflictResolverCommand.java	(revision 1909)
+++ /trunk/src/org/openstreetmap/josm/command/WayNodesConflictResolverCommand.java	(revision 1910)
@@ -37,5 +37,5 @@
 
     /**
-     * 
+     *
      * @param my my may
      * @param their their way
@@ -68,12 +68,10 @@
         // nodes
         //
-        conflict.getMy().nodes.clear();
-        for (int i=0; i<mergedNodeList.size();i++) {
-            Node n = mergedNodeList.get(i);
-            conflict.getMy().nodes.add(n);
+        for (Node n:mergedNodeList) {
             if (! getLayer().data.nodes.contains(n)) {
                 logger.warning(tr("Main dataset does not include node {0}", n.toString()));
             }
         }
+        conflict.getMy().setNodes(mergedNodeList);
         rememberConflict(conflict);
         return true;
Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 1909)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 1910)
@@ -372,5 +372,5 @@
 
     protected void deleteWay(Way way) {
-        way.nodes.clear();
+        way.setNodes(null);
         way.delete(true);
     }
@@ -383,8 +383,10 @@
     public void unlinkNodeFromWays(Node node) {
         for (Way way: ways) {
-            if (way.nodes.contains(node)) {
-                way.nodes.remove(node);
-                if (way.nodes.size() < 2) {
+            List<Node> nodes = way.getNodes();
+            if (nodes.remove(node)) {
+                if (nodes.size() < 2) {
                     deleteWay(way);
+                } else {
+                    way.setNodes(nodes);
                 }
             }
Index: /trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 1909)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 1910)
@@ -24,5 +24,5 @@
     /**
      * All way nodes in this way
-     * 
+     *
      * @deprecated This public field will become private or protected in the future.
      *  Use the new public API instead.
@@ -43,10 +43,13 @@
 
     /**
-     * @param nodes
+     * @param nodes New way nodes. Can be null, in that case all way nodes are removed
      * @since 1862
      */
     public void setNodes(List<Node> nodes) {
         this.nodes.clear();
-        this.nodes.addAll(nodes);
+        if (nodes != null) {
+            this.nodes.addAll(nodes);
+        }
+        clearCached();
     }
 
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java	(revision 1909)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java	(revision 1910)
@@ -136,5 +136,5 @@
             return;
         Way clone = new Way(w);
-        clone.nodes.clear();
+        clone.setNodes(null);
         clone.incomplete = true;
         mappedPrimitives.put(w, clone);
Index: /trunk/src/org/openstreetmap/josm/gui/SelectionManager.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 1909)
+++ /trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 1910)
@@ -289,5 +289,5 @@
                         continue;
                 if (alt) {
-                    for (Node n : w.nodes) {
+                    for (Node n : w.getNodes()) {
                         if (!n.incomplete && r.contains(nc.getPoint(n))) {
                             selection.add(w);
@@ -297,5 +297,5 @@
                 } else {
                     boolean allIn = true;
-                    for (Node n : w.nodes) {
+                    for (Node n : w.getNodes()) {
                         if (!n.incomplete && !r.contains(nc.getPoint(n))) {
                             allIn = false;
Index: /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 1909)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 1910)
@@ -710,5 +710,5 @@
             for (GpxTrack trk : data.tracks) {
                 for (Collection<WayPoint> segment : trk.trackSegs) {
-                    Way w = new Way();
+                    List<Node> nodes = new ArrayList<Node>();
                     for (WayPoint p : segment) {
                         Node n = new Node(p.getCoor());
@@ -718,6 +718,8 @@
                         }
                         ds.nodes.add(n);
-                        w.nodes.add(n);
-                    }
+                        nodes.add(n);
+                    }
+                    Way w = new Way();
+                    w.setNodes(nodes);
                     ds.ways.add(w);
                 }
@@ -741,5 +743,5 @@
     /**
      * Action that issues a series of download requests to the API, following the GPX track.
-     * 
+     *
      * @author fred
      */
@@ -842,5 +844,5 @@
              * can only download rectangles, so the following is an attempt at finding a number of
              * rectangles to download.
-             * 
+             *
              * The idea is simply: Start out with the full bounding box. If it is too large, then
              * split it in half and repeat recursively for each half until you arrive at something
@@ -1141,5 +1143,5 @@
      * Makes a WayPoint at the projection of point P onto the track providing P is less than
      * tolerance away from the track
-     * 
+     *
      * @param P : the point to determine the projection for
      * @param tolerance : must be no further than this from the track
@@ -1151,21 +1153,21 @@
          * assume the coordinates of P are xp,yp, and those of a section of track between two
          * trackpoints are R=xr,yr and S=xs,ys. Let N be the projected point.
-         * 
+         *
          * The equation of RS is Ax + By + C = 0 where A = ys - yr B = xr - xs C = - Axr - Byr
-         * 
+         *
          * Also, note that the distance RS^2 is A^2 + B^2
-         * 
+         *
          * If RS^2 == 0.0 ignore the degenerate section of track
-         * 
+         *
          * PN^2 = (Axp + Byp + C)^2 / RS^2 that is the distance from P to the line
-         * 
+         *
          * so if PN^2 is less than PNmin^2 (initialized to tolerance) we can reject the line;
          * otherwise... determine if the projected poijnt lies within the bounds of the line: PR^2 -
          * PN^2 <= RS^2 and PS^2 - PN^2 <= RS^2
-         * 
+         *
          * where PR^2 = (xp - xr)^2 + (yp-yr)^2 and PS^2 = (xp - xs)^2 + (yp-ys)^2
-         * 
+         *
          * If so, calculate N as xn = xr + (RN/RS) B yn = y1 + (RN/RS) A
-         * 
+         *
          * where RN = sqrt(PR^2 - PN^2)
          */
Index: /trunk/src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java	(revision 1909)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java	(revision 1910)
@@ -14,5 +14,7 @@
 import java.awt.event.ActionListener;
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import javax.swing.AbstractAction;
@@ -73,10 +75,12 @@
             DataSet ds = new DataSet();
             for (Collection<GpsPoint> c : data) {
-                Way w = new Way();
+                List<Node> nodes = new ArrayList<Node>();
                 for (GpsPoint p : c) {
                     Node n = new Node(p.latlon);
                     ds.nodes.add(n);
-                    w.nodes.add(n);
-                }
+                    nodes.add(n);
+                }
+                Way w = new Way();
+                w.setNodes(nodes);
                 ds.ways.add(w);
             }
Index: /trunk/src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 1909)
+++ /trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 1910)
@@ -12,4 +12,5 @@
 import java.util.HashMap;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -330,4 +331,5 @@
             Way w = new Way(e.getKey().id);
             boolean incomplete = false;
+            List<Node> wayNodes = new ArrayList<Node>();
             for (long id : e.getValue()) {
                 Node n = findNode(id);
@@ -337,8 +339,10 @@
                     incomplete = true;
                 }
-                w.nodes.add(n);
-            }
+                wayNodes.add(n);
+            }
+            w.setNodes(wayNodes);
             if (incomplete) {
-                logger.warning(tr("marked way {0} with {1} nodes incomplete because at least one node was missing in the loaded data and is therefore incomplete too", e.getKey().id, w.nodes.size()));
+                logger.warning(tr("marked way {0} with {1} nodes incomplete because at least one node was missing in the " +
+                		"loaded data and is therefore incomplete too", e.getKey().id, w.getNodesCount()));
                 e.getKey().copyTo(w);
                 w.incomplete = true;
Index: /trunk/test/functional/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergerTest.java
===================================================================
--- /trunk/test/functional/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergerTest.java	(revision 1909)
+++ /trunk/test/functional/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergerTest.java	(revision 1910)
@@ -17,5 +17,5 @@
         Way w1 = new Way();
         Node n1;
-        w1.nodes.add(n1 = new Node(1));
+        w1.addNode(n1 = new Node(1));
         for (int i=0; i < 20; i++) {
             n1.put("key" + i, "value" + i);
@@ -26,11 +26,11 @@
         }
         n1.put("note", note);
-        w1.nodes.add(new Node(2));
-        w1.nodes.add(new Node(3));
+        w1.addNode(new Node(2));
+        w1.addNode(new Node(3));
 
         Way w2 = new Way();
-        w2.nodes.add(new Node(4));
-        w2.nodes.add(new Node(5));
-        w2.nodes.add(new Node(6));
+        w2.addNode(new Node(4));
+        w2.addNode(new Node(5));
+        w2.addNode(new Node(6));
 
         nodeListMerger.populate(w1, w2);
@@ -41,10 +41,10 @@
         Way w1 = new Way();
         for (int i = 0; i < 100; i++) {
-            w1.nodes.add(new Node(i));
+            w1.addNode(new Node(i));
         }
 
         Way w2 = new Way();
         for (int i = 1; i < 200; i+=2) {
-            w2.nodes.add(new Node(i));
+            w2.addNode(new Node(i));
         }
         nodeListMerger.populate(w1, w2);
Index: /trunk/test/functional/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialogTest.java
===================================================================
--- /trunk/test/functional/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialogTest.java	(revision 1909)
+++ /trunk/test/functional/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialogTest.java	(revision 1910)
@@ -10,32 +10,32 @@
 
     private ConflictResolutionDialog dialog;
-    
+
     protected void build() {
         setSize(100,100);
         dialog = new ConflictResolutionDialog(this);
         dialog.setSize(600,600);
-        
-        
+
+
     }
     protected void populate() {
         Way w1 = new Way(1);
-          w1.nodes.add(new Node(10));
-          w1.nodes.add(new Node(11));
-        
+          w1.addNode(new Node(10));
+          w1.addNode(new Node(11));
+
         Way w2 = new Way(1);
-          w2.nodes.add(new Node(10));
-          w2.nodes.add(new Node(11));
-    
+          w2.addNode(new Node(10));
+          w2.addNode(new Node(11));
+
        dialog.getConflictResolver().populate(w1, w2);
     }
-    
+
     public void showDialog() {
         dialog.setVisible(true);
     }
-    
+
     public ConflictResolutionDialogTest() {
         build();
     }
-    
+
     static public void main(String args[]) {
         ConflictResolutionDialogTest test = new ConflictResolutionDialogTest();
Index: /trunk/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java
===================================================================
--- /trunk/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java	(revision 1909)
+++ /trunk/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java	(revision 1910)
@@ -76,5 +76,5 @@
                 int idx = (start + j) % numNodes;
                 Node n = nodes.get(idx);
-                w.nodes.add(n);
+                w.addNode(n);
             }
             w.put("name", "way-"+i);
Index: /trunk/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java
===================================================================
--- /trunk/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java	(revision 1909)
+++ /trunk/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java	(revision 1910)
@@ -74,5 +74,5 @@
             w.incomplete = false;
             for (int j = 0; j < 10;j++) {
-                w.nodes.add(lookupNode(ds, i+j));
+                w.addNode(lookupNode(ds, i+j));
             }
             w.put("name", "way-"+i);
Index: /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java	(revision 1909)
+++ /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java	(revision 1910)
@@ -2,7 +2,11 @@
 package org.openstreetmap.josm.data.osm.visitor;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
 import java.util.Collection;
 
-import org.junit.Ignore;
 import org.junit.Test;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -13,6 +17,4 @@
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
-
-import static org.junit.Assert.*;
 
 public class MergeSourceBuildingVisitorTest {
@@ -69,6 +71,6 @@
         Node n2 = new Node(2);
         Way w1 = new Way(3);
-        w1.nodes.add(n1);
-        w1.nodes.add(n2);
+        w1.addNode(n1);
+        w1.addNode(n2);
         source.nodes.add(n1);
         source.nodes.add(n2);
@@ -101,6 +103,6 @@
         Node n2 = new Node(2);
         Way w1 = new Way(3);
-        w1.nodes.add(n1);
-        w1.nodes.add(n2);
+        w1.addNode(n1);
+        w1.addNode(n2);
         source.nodes.add(n1);
         source.nodes.add(n2);
@@ -154,7 +156,7 @@
         Way w30 = new Way(30);
         Node n21;
-        w30.nodes.add(n21 = new Node(21));
+        w30.addNode(n21 = new Node(21));
         Node n22;
-        w30.nodes.add(n22 = new Node(22));
+        w30.addNode(n22 = new Node(22));
         r1.members.add(new RelationMember("way-30",w30));
         Relation r40 = new Relation(40);
@@ -181,12 +183,12 @@
         Way w = (Way)hull.getPrimitiveById(30);
         assertNotNull(w);
-        assertEquals(2, w.nodes.size());
+        assertEquals(2, w.getNodesCount());
         Node n = (Node)hull.getPrimitiveById(21);
         assertNotNull(n);
-        assertTrue(w.nodes.contains(n));
+        assertTrue(w.getNodes().contains(n));
 
         n = (Node)hull.getPrimitiveById(22);
         assertNotNull(n);
-        assertTrue(w.nodes.contains(n));
+        assertTrue(w.getNodes().contains(n));
 
         Relation r = (Relation)hull.getPrimitiveById(40);
@@ -212,7 +214,7 @@
         Way w30 = new Way(30);
         Node n21;
-        w30.nodes.add(n21 = new Node(21));
+        w30.addNode(n21 = new Node(21));
         Node n22;
-        w30.nodes.add(n22 = new Node(22));
+        w30.addNode(n22 = new Node(22));
         r1.members.add(new RelationMember("way-30",w30));
         Relation r40 = new Relation(40);
@@ -274,8 +276,8 @@
         w30.put("name", "w30");
         Node n21;
-        w30.nodes.add(n21 = new Node(new LatLon(21.0,21.0)));
+        w30.addNode(n21 = new Node(new LatLon(21.0,21.0)));
         n21.put("name","n21");
         Node n22;
-        w30.nodes.add(n22 = new Node(new LatLon(22.0,22.0)));
+        w30.addNode(n22 = new Node(new LatLon(22.0,22.0)));
         n22.put("name","n22");
         r1.members.add(new RelationMember("way-30",w30));
@@ -304,13 +306,13 @@
         Way w = (Way)lookupByName(hull.ways, "w30");
         assertNotNull(w);
-        assertEquals(2, w.nodes.size());
+        assertEquals(2, w.getNodesCount());
 
         Node n = (Node)lookupByName(hull.nodes, "n21");
         assertNotNull(n);
-        assertTrue(w.nodes.contains(n));
+        assertTrue(w.getNodes().contains(n));
 
         n = (Node)lookupByName(hull.nodes, "n22");
         assertNotNull(n);
-        assertTrue(w.nodes.contains(n));
+        assertTrue(w.getNodes().contains(n));
 
         Relation r = (Relation)lookupByName(hull.relations, "r40");
Index: /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java	(revision 1909)
+++ /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java	(revision 1910)
@@ -489,6 +489,6 @@
         myWay.version = 1;
         myWay.put("key1", "value1");
-        myWay.nodes.add(n1);
-        myWay.nodes.add(n2);
+        myWay.addNode(n1);
+        myWay.addNode(n2);
         my.addPrimitive(myWay);
 
@@ -511,6 +511,6 @@
         theirWay.put("key1", "value1");
         theirWay.put("key2", "value2");
-        theirWay.nodes.add(n3);
-        theirWay.nodes.add(n4);
+        theirWay.addNode(n3);
+        theirWay.addNode(n4);
         their.addPrimitive(theirWay);
 
@@ -525,7 +525,7 @@
         assertEquals(3,merged.id);
         assertEquals(2,merged.version);
-        assertEquals(2,merged.nodes.size());
-        assertEquals(1,merged.nodes.get(0).id);
-        assertEquals(2,merged.nodes.get(1).id);
+        assertEquals(2,merged.getNodesCount());
+        assertEquals(1,merged.getNode(0).id);
+        assertEquals(2,merged.getNode(1).id);
 
     }
@@ -557,6 +557,6 @@
         myWay.id = 3;
         myWay.version = 1;
-        myWay.nodes.add(n1);
-        myWay.nodes.add(n2);
+        myWay.addNode(n1);
+        myWay.addNode(n2);
         my.addPrimitive(myWay);
 
@@ -586,7 +586,7 @@
         theirWay.id = 3;
         theirWay.version = 2;
-        theirWay.nodes.add(n3);
-        theirWay.nodes.add(n5); // insert a node
-        theirWay.nodes.add(n4); // this one is updated
+        theirWay.addNode(n3);
+        theirWay.addNode(n5); // insert a node
+        theirWay.addNode(n4); // this one is updated
         their.addPrimitive(theirWay);
 
@@ -599,9 +599,9 @@
         assertEquals(3,merged.id);
         assertEquals(2,merged.version);
-        assertEquals(3,merged.nodes.size());
-        assertEquals(1,merged.nodes.get(0).id);
-        assertEquals(4,merged.nodes.get(1).id);
-        assertEquals(2,merged.nodes.get(2).id);
-        assertEquals("value1",merged.nodes.get(2).get("key1"));
+        assertEquals(3,merged.getNodesCount());
+        assertEquals(1,merged.getNode(0).id);
+        assertEquals(4,merged.getNode(1).id);
+        assertEquals(2,merged.getNode(2).id);
+        assertEquals("value1",merged.getNode(2).get("key1"));
     }
 
@@ -631,6 +631,6 @@
         myWay.id = 3;
         myWay.version = 1;
-        myWay.nodes.add(n1);
-        myWay.nodes.add(n2);
+        myWay.addNode(n1);
+        myWay.addNode(n2);
         myWay.modified = true;
         myWay.put("key1", "value1");
@@ -662,7 +662,7 @@
         theirWay.id = 3;
         theirWay.version = 2;
-        theirWay.nodes.add(n3);
-        theirWay.nodes.add(n5); // insert a node
-        theirWay.nodes.add(n4); // this one is updated
+        theirWay.addNode(n3);
+        theirWay.addNode(n5); // insert a node
+        theirWay.addNode(n4); // this one is updated
         their.addPrimitive(theirWay);
 
@@ -675,7 +675,7 @@
         assertEquals(3,merged.id);
         assertEquals(1,merged.version);
-        assertEquals(2,merged.nodes.size());
-        assertEquals(1,merged.nodes.get(0).id);
-        assertEquals(2,merged.nodes.get(1).id);
+        assertEquals(2,merged.getNodesCount());
+        assertEquals(1,merged.getNode(0).id);
+        assertEquals(2,merged.getNode(1).id);
         assertEquals("value1",merged.get("key1"));
     }
@@ -707,6 +707,6 @@
         myWay.id = 3;
         myWay.version = 1;
-        myWay.nodes.add(n1);
-        myWay.nodes.add(n2);
+        myWay.addNode(n1);
+        myWay.addNode(n2);
         my.addPrimitive(myWay);
 
@@ -757,6 +757,6 @@
         myWay.id = 0;
         myWay.version = -1;
-        myWay.nodes.add(n1);
-        myWay.nodes.add(n2);
+        myWay.addNode(n1);
+        myWay.addNode(n2);
         my.addPrimitive(myWay);
 
@@ -777,6 +777,6 @@
         theirWay.id = 0;
         theirWay.version = -1;
-        theirWay.nodes.add(n3);
-        theirWay.nodes.add(n4);
+        theirWay.addNode(n3);
+        theirWay.addNode(n4);
         theirWay.user = User.get("their");
         theirWay.user.uid = "1111";
@@ -819,6 +819,6 @@
         myWay.id = 0;
         myWay.version = -1;
-        myWay.nodes.add(n1);
-        myWay.nodes.add(n2);
+        myWay.addNode(n1);
+        myWay.addNode(n2);
         my.addPrimitive(myWay);
 
@@ -839,6 +839,6 @@
         theirWay.id = 0;
         theirWay.version = -1;
-        theirWay.nodes.add(n3);
-        theirWay.nodes.add(n4);
+        theirWay.addNode(n3);
+        theirWay.addNode(n4);
         theirWay.user = User.get("their");
         theirWay.user.uid = "1111";
@@ -899,7 +899,7 @@
         theirWay.id = 4;
         theirWay.version = 1;
-        theirWay.nodes.add(n3);
-        theirWay.nodes.add(n4);
-        theirWay.nodes.add(n5);
+        theirWay.addNode(n3);
+        theirWay.addNode(n4);
+        theirWay.addNode(n5);
         theirWay.user = User.get("their");
         theirWay.user.uid = "1111";
@@ -913,5 +913,5 @@
 
         Way myWay = (Way)my.getPrimitiveById(4);
-        assertEquals(2, myWay.nodes.size());
+        assertEquals(2, myWay.getNodesCount());
 
         Node n = (Node)my.getPrimitiveById(1);
Index: /trunk/test/unit/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergeModelTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergeModelTest.java	(revision 1909)
+++ /trunk/test/unit/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergeModelTest.java	(revision 1910)
@@ -64,6 +64,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(2));
-        myWay.nodes.add(new Node(3));
+        myWay.addNode(new Node(2));
+        myWay.addNode(new Node(3));
         Way theirWay = new Way(1);
 
@@ -88,6 +88,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(2));
-        myWay.nodes.add(new Node(3));
+        myWay.addNode(new Node(2));
+        myWay.addNode(new Node(3));
         Way theirWay = new Way(1);
 
@@ -119,6 +119,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(2));
-        myWay.nodes.add(new Node(3));
+        myWay.addNode(new Node(2));
+        myWay.addNode(new Node(3));
         Way theirWay = new Way(1);
 
@@ -145,7 +145,7 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(2));
-        myWay.nodes.add(new Node(3));
-        myWay.nodes.add(new Node(4));
+        myWay.addNode(new Node(2));
+        myWay.addNode(new Node(3));
+        myWay.addNode(new Node(4));
         Way theirWay = new Way(1);
 
@@ -173,6 +173,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(2));
-        myWay.nodes.add(new Node(3));
+        myWay.addNode(new Node(2));
+        myWay.addNode(new Node(3));
         Way theirWay = new Way(1);
 
@@ -194,6 +194,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(2));
-        myWay.nodes.add(new Node(3));
+        myWay.addNode(new Node(2));
+        myWay.addNode(new Node(3));
         Way theirWay = new Way(1);
 
@@ -220,6 +220,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(2));
-        myWay.nodes.add(new Node(3));
+        myWay.addNode(new Node(2));
+        myWay.addNode(new Node(3));
         Way theirWay = new Way(1);
 
@@ -247,7 +247,7 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(2));
-        myWay.nodes.add(new Node(3));
-        myWay.nodes.add(new Node(4));
+        myWay.addNode(new Node(2));
+        myWay.addNode(new Node(3));
+        myWay.addNode(new Node(4));
         Way theirWay = new Way(1);
 
@@ -279,6 +279,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(1));
-        myWay.nodes.add(new Node(2));
+        myWay.addNode(new Node(1));
+        myWay.addNode(new Node(2));
         Way theirWay = new Way(1);
 
@@ -307,6 +307,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(1));
-        myWay.nodes.add(new Node(2));
+        myWay.addNode(new Node(1));
+        myWay.addNode(new Node(2));
         Way theirWay = new Way(1);
 
@@ -335,6 +335,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(1));
-        myWay.nodes.add(new Node(2));
+        myWay.addNode(new Node(1));
+        myWay.addNode(new Node(2));
         Way theirWay = new Way(1);
 
@@ -368,6 +368,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(1));
-        myWay.nodes.add(new Node(2));
+        myWay.addNode(new Node(1));
+        myWay.addNode(new Node(2));
         Way theirWay = new Way(1);
 
@@ -396,7 +396,7 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(1));
-        myWay.nodes.add(new Node(2));
-        myWay.nodes.add(new Node(3));
+        myWay.addNode(new Node(1));
+        myWay.addNode(new Node(2));
+        myWay.addNode(new Node(3));
         Way theirWay = new Way(1);
 
@@ -426,7 +426,7 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(1));
-        myWay.nodes.add(new Node(2));
-        myWay.nodes.add(new Node(3));
+        myWay.addNode(new Node(1));
+        myWay.addNode(new Node(2));
+        myWay.addNode(new Node(3));
         Way theirWay = new Way(1);
 
@@ -455,6 +455,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(1));
-        myWay.nodes.add(new Node(2));
+        myWay.addNode(new Node(1));
+        myWay.addNode(new Node(2));
         Way theirWay = new Way(1);
 
@@ -488,6 +488,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(1));
-        myWay.nodes.add(new Node(2));
+        myWay.addNode(new Node(1));
+        myWay.addNode(new Node(2));
         Way theirWay = new Way(1);
 
@@ -514,6 +514,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(1));
-        myWay.nodes.add(new Node(2));
+        myWay.addNode(new Node(1));
+        myWay.addNode(new Node(2));
         Way theirWay = new Way(1);
 
@@ -544,6 +544,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(1));
-        myWay.nodes.add(new Node(2));
+        myWay.addNode(new Node(1));
+        myWay.addNode(new Node(2));
         Way theirWay = new Way(1);
 
@@ -577,6 +577,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(1));
-        myWay.nodes.add(new Node(2));
+        myWay.addNode(new Node(1));
+        myWay.addNode(new Node(2));
         Way theirWay = new Way(1);
 
@@ -603,6 +603,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(1));
-        myWay.nodes.add(new Node(2));
+        myWay.addNode(new Node(1));
+        myWay.addNode(new Node(2));
         Way theirWay = new Way(1);
 
@@ -633,6 +633,6 @@
 
         Way myWay = new Way(1);
-        myWay.nodes.add(new Node(1));
-        myWay.nodes.add(new Node(2));
+        myWay.addNode(new Node(1));
+        myWay.addNode(new Node(2));
         Way theirWay = new Way(1);
 
