Index: trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 2381)
@@ -250,5 +250,5 @@
          */
         public void build(DataSet ds) {
-            for (Relation r: ds.relations) {
+            for (Relation r : ds.getRelations()) {
                 if (!r.isUsable()) {
                     continue;
Index: trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 2381)
@@ -103,10 +103,10 @@
             HashMap<Way, Integer> wayOccurenceCounter = new HashMap<Way, Integer>();
             for (Node n : selectedNodes) {
-                for (Way w : getCurrentDataSet().ways) {
+                for (Way w : getCurrentDataSet().getWays()) {
                     if (!w.isUsable()) {
                         continue;
                     }
-                    int last = w.getNodesCount()-1;
-                    if(last <= 0) {
+                    int last = w.getNodesCount() - 1;
+                    if (last <= 0) {
                         continue; // zero or one node ways
                     }
@@ -116,5 +116,5 @@
                         if ((circular || (i > 0 && i < last)) && n.equals(wn)) {
                             Integer old = wayOccurenceCounter.get(w);
-                            wayOccurenceCounter.put(w, (old == null) ? 1 : old+1);
+                            wayOccurenceCounter.put(w, (old == null) ? 1 : old + 1);
                             break;
                         }
@@ -248,5 +248,5 @@
 
         if (wayChunks.size() < 2) {
-            if(wayChunks.get(0).get(0) == wayChunks.get(0).get(wayChunks.get(0).size()-1)) {
+            if (wayChunks.get(0).get(0) == wayChunks.get(0).get(wayChunks.get(0).size() - 1)) {
                 JOptionPane.showMessageDialog(
                         Main.parent,
@@ -290,9 +290,9 @@
 
         }
-        Boolean warnmerole=false;
-        Boolean warnme=false;
+        Boolean warnmerole = false;
+        Boolean warnme = false;
         // now copy all relations to new way also
 
-        for (Relation r : getCurrentDataSet().relations) {
+        for (Relation r : getCurrentDataSet().getRelations()) {
             if (!r.isUsable()) {
                 continue;
@@ -307,7 +307,6 @@
             for (RelationMember rm : r.getMembers()) {
                 if (rm.isWay()) {
-                    if (rm.getMember() == selectedWay)
-                    {
-                        if(!("route".equals(type)) && !("multipolygon".equals(type))) {
+                    if (rm.getMember() == selectedWay) {
+                        if (!("route".equals(type)) && !("multipolygon".equals(type))) {
                             warnme = true;
                         }
@@ -318,8 +317,7 @@
                         int j = i;
                         boolean backwards = "backward".equals(rm.getRole());
-                        for(Way wayToAdd : newWays)
-                        {
+                        for (Way wayToAdd : newWays) {
                             RelationMember em = new RelationMember(rm.getRole(), wayToAdd);
-                            if(em.hasRole() && !("multipolygon".equals(type))) {
+                            if (em.hasRole() && !("multipolygon".equals(type))) {
                                 warnmerole = true;
                             }
@@ -342,5 +340,5 @@
             }
         }
-        if(warnmerole) {
+        if (warnmerole) {
             JOptionPane.showMessageDialog(
                     Main.parent,
@@ -348,5 +346,5 @@
                     tr("Warning"),
                     JOptionPane.WARNING_MESSAGE);
-        } else if(warnme) {
+        } else if (warnme) {
             JOptionPane.showMessageDialog(
                     Main.parent,
Index: trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 2381)
@@ -67,5 +67,5 @@
         if (checkSelection(selection)) {
             int count = 0;
-            for (Way w : getCurrentDataSet().ways) {
+            for (Way w : getCurrentDataSet().getWays()) {
                 if (!w.isUsable() || w.getNodesCount() < 1) {
                     continue;
@@ -79,5 +79,5 @@
                 // If there aren't enough ways, maybe the user wanted to unglue the nodes
                 // (= copy tags to a new node)
-                if(checkForUnglueNode(selection)) {
+                if (checkForUnglueNode(selection)) {
                     unglueNode(e);
                 } else {
@@ -92,5 +92,5 @@
             for (Node n : selectedNodes) {
                 int count = 0;
-                for (Way w : getCurrentDataSet().ways) {
+                for (Way w : getCurrentDataSet().getWays()) {
                     if (w.isDeleted() || w.incomplete || w.getNodesCount() < 1) {
                         continue;
@@ -185,21 +185,21 @@
      */
     private boolean checkForUnglueNode(Collection<? extends OsmPrimitive> selection) {
-        if(selection.size() != 1)
+        if (selection.size() != 1)
             return false;
         OsmPrimitive n = (OsmPrimitive) selection.toArray()[0];
-        if(!(n instanceof Node))
+        if (!(n instanceof Node))
             return false;
         boolean isPartOfWay = false;
-        for(Way w : getCurrentDataSet().ways) {
-            if(w.containsNode((Node)n)) {
+        for (Way w : getCurrentDataSet().getWays()) {
+            if (w.containsNode((Node) n)) {
                 isPartOfWay = true;
                 break;
             }
         }
-        if(!isPartOfWay)
-            return false;
-
-        selectedNode = (Node)n;
-        return  selectedNode.isTagged();
+        if (!isPartOfWay)
+            return false;
+
+        selectedNode = (Node) n;
+        return selectedNode.isTagged();
     }
 
@@ -322,5 +322,5 @@
         Relation newRel = null;
         HashSet<String> rolesToReAdd = null;
-        for (Relation r : getCurrentDataSet().relations) {
+        for (Relation r : getCurrentDataSet().getRelations()) {
             if (r.isDeleted() || r.incomplete) {
                 continue;
@@ -367,5 +367,5 @@
             boolean firstway = true;
             // modify all ways containing the nodes
-            for (Way w : getCurrentDataSet().ways) {
+            for (Way w : getCurrentDataSet().getWays()) {
                 if (w.isDeleted() || w.incomplete || w.getNodesCount() < 1) {
                     continue;
Index: trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(revision 2381)
@@ -219,5 +219,5 @@
                 // incomplete ways.
                 //
-                for (Way w: ds.ways) {
+                for (Way w : ds.getWays()) {
                     if (w.incomplete) {
                         OsmServerObjectReader reader = new OsmServerObjectReader(w.getId(), OsmPrimitiveType.WAY, true /* full */);
Index: trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java	(revision 2381)
@@ -68,15 +68,15 @@
     protected Set<OsmPrimitive> getDeletedPrimitives(DataSet ds) {
         HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>();
-        for (OsmPrimitive p : ds.nodes) {
+        for (OsmPrimitive p : ds.getNodes()) {
             if (p.isDeleted() && !p.isNew() && p.isVisible() && p.isModified()) {
                 ret.add(p);
             }
         }
-        for (OsmPrimitive p : ds.ways) {
+        for (OsmPrimitive p : ds.getWays()) {
             if (p.isDeleted() && !p.isNew() && p.isVisible() && p.isModified()) {
                 ret.add(p);
             }
         }
-        for (OsmPrimitive p : ds.relations) {
+        for (OsmPrimitive p : ds.getRelations()) {
             if (p.isDeleted() && !p.isNew() && p.isVisible() && p.isModified()) {
                 ret.add(p);
Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskList.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskList.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskList.java	(revision 2381)
@@ -2,6 +2,6 @@
 package org.openstreetmap.josm.actions.downloadtasks;
 
+import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.tr;
-import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 
 import java.awt.EventQueue;
@@ -106,15 +106,15 @@
     protected Set<OsmPrimitive> getCompletePrimitives(DataSet ds) {
         HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>();
-        for (OsmPrimitive primitive : ds.nodes) {
+        for (OsmPrimitive primitive : ds.getNodes()) {
             if (!primitive.incomplete && !primitive.isNew()) {
                 ret.add(primitive);
             }
         }
-        for (OsmPrimitive primitive : ds.ways) {
+        for (OsmPrimitive primitive : ds.getWays()) {
             if (!primitive.incomplete && !primitive.isNew()) {
                 ret.add(primitive);
             }
         }
-        for (OsmPrimitive primitive : ds.relations) {
+        for (OsmPrimitive primitive : ds.getRelations()) {
             if (!primitive.incomplete && !primitive.isNew()) {
                 ret.add(primitive);
@@ -155,13 +155,13 @@
         ButtonSpec[] options = new ButtonSpec[] {
                 new ButtonSpec(
-                        tr("Check on the server"), 
+                        tr("Check on the server"),
                         ImageProvider.get("ok"),
-                        tr("Click to check whether objects in your local dataset are deleted on the server"), 
+                        tr("Click to check whether objects in your local dataset are deleted on the server"),
                         null  /* no specific help topic */
-                ), 
+                ),
                 new ButtonSpec(
-                        tr("Ignore"), 
-                        ImageProvider.get("cancel"), 
-                        tr("Click to abort and to resume editing"), 
+                        tr("Ignore"),
+                        ImageProvider.get("cancel"),
+                        tr("Click to abort and to resume editing"),
                         null /* no specific help topic */
                 ),
@@ -172,17 +172,17 @@
                 + "update them the server is likely to report a<br>" + "conflict.<br>" + "<br>"
                 + "Click <strong>{1}</strong> to check the state of these primitives<br>" + "on the server.<br>"
-                + "Click <strong>{2}</strong> to ignore.<br>" + "</html>", 
-                potentiallyDeleted.size(), 
+                + "Click <strong>{2}</strong> to ignore.<br>" + "</html>",
+                potentiallyDeleted.size(),
                 options[0].text,
                 options[1].text
-                );
+        );
 
         int ret = HelpAwareOptionPane.showOptionDialog(
-                Main.parent, 
-                message, 
+                Main.parent,
+                message,
                 tr("Deleted or moved primitives"),
-                JOptionPane.WARNING_MESSAGE, 
-                null, 
-                options, 
+                JOptionPane.WARNING_MESSAGE,
+                null,
+                options,
                 options[0],
                 ht("/Action/UpdateData#SyncPotentiallyDeletedObjects")
@@ -190,6 +190,6 @@
         if (ret != 0 /* OK */)
             return;
-        
-        updatePotentiallyDeletedPrimitives(potentiallyDeleted);        
+
+        updatePotentiallyDeletedPrimitives(potentiallyDeleted);
     }
 
@@ -205,7 +205,7 @@
                 DataSet ds = ((DownloadOsmTask) task).getDownloadedData();
                 if (ds != null) {
-                    ret.addAll(ds.nodes);
-                    ret.addAll(ds.ways);
-                    ret.addAll(ds.relations);
+                    ret.addAll(ds.getNodes());
+                    ret.addAll(ds.getWays());
+                    ret.addAll(ds.getRelations());
                 }
             }
@@ -242,5 +242,5 @@
                     } else if (error instanceof Exception) {
                         sb.append("<li>").append(ExceptionUtil.explainException((Exception) error)).append("</li>")
-                                .append("<br>");
+                        .append("<br>");
                     }
                 }
@@ -272,7 +272,7 @@
                         DataSet ds = ((DownloadOsmTask) task).getDownloadedData();
                         if (ds != null) {
-                            myPrimitives.removeAll(ds.nodes);
-                            myPrimitives.removeAll(ds.ways);
-                            myPrimitives.removeAll(ds.relations);
+                            myPrimitives.removeAll(ds.getNodes());
+                            myPrimitives.removeAll(ds.getWays());
+                            myPrimitives.removeAll(ds.getRelations());
                         }
                     }
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 2381)
@@ -779,5 +779,5 @@
     public Way getWayForNode(Node n) {
         Way way = null;
-        for (Way w : getCurrentDataSet().ways) {
+        for (Way w : getCurrentDataSet().getWays()) {
             if (!w.isUsable() || w.getNodesCount() < 1) {
                 continue;
Index: trunk/src/org/openstreetmap/josm/command/WayNodesConflictResolverCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/WayNodesConflictResolverCommand.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/command/WayNodesConflictResolverCommand.java	(revision 2381)
@@ -69,5 +69,5 @@
         //
         for (Node n:mergedNodeList) {
-            if (! getLayer().data.nodes.contains(n)) {
+            if (! getLayer().data.getNodes().contains(n)) {
                 logger.warning(tr("Main dataset does not include node {0}", n.toString()));
             }
Index: trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java	(revision 2381)
@@ -72,5 +72,5 @@
     public Collection<Command> execute(Way oldway, Way way) throws UserCancelException {
         Map<OsmPrimitive, List<TagCorrection>> tagCorrectionsMap =
-            new HashMap<OsmPrimitive, List<TagCorrection>>();
+                new HashMap<OsmPrimitive, List<TagCorrection>>();
 
         ArrayList<OsmPrimitive> primitives = new ArrayList<OsmPrimitive>();
@@ -112,8 +112,8 @@
 
         Map<OsmPrimitive, List<RoleCorrection>> roleCorrectionMap =
-            new HashMap<OsmPrimitive, List<RoleCorrection>>();
+                new HashMap<OsmPrimitive, List<RoleCorrection>>();
         roleCorrectionMap.put(way, new ArrayList<RoleCorrection>());
 
-        for (Relation relation : Main.main.getCurrentDataSet().relations) {
+        for (Relation relation : Main.main.getCurrentDataSet().getRelations()) {
             int position = 0;
             for (RelationMember member : relation.getMembers()) {
Index: trunk/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java	(revision 2381)
@@ -54,7 +54,6 @@
 
     protected void fireConflictAdded() {
-        Iterator<IConflictListener> it = listeners.iterator();
-        while(it.hasNext()) {
-            it.next().onConflictsAdded(this);
+        for (IConflictListener listener : listeners) {
+            listener.onConflictsAdded(this);
         }
     }
Index: trunk/src/org/openstreetmap/josm/data/osm/BackreferencedDataSet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/BackreferencedDataSet.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/data/osm/BackreferencedDataSet.java	(revision 2381)
@@ -105,5 +105,5 @@
             throw new IllegalArgumentException(tr("Parameter ''{0}'' must not be null."));
         this.source = source;
-        int size = source.ways.size() + source.relations.size();
+        int size = source.getWays().size() + source.getRelations().size();
         referers = new HashMap<OsmPrimitive, Set<OsmPrimitive>>(size, 0.75f);
     }
@@ -131,11 +131,11 @@
      */
     public void build() {
-        for (Way w: source.ways) {
-            for (Node n: w.getNodes()) {
-                remember(w,n);
-            }
-        }
-        for (Relation r: source.relations) {
-            for (RelationMember m: r.getMembers()) {
+        for (Way w : source.getWays()) {
+            for (Node n : w.getNodes()) {
+                remember(w, n);
+            }
+        }
+        for (Relation r : source.getRelations()) {
+            for (RelationMember m : r.getMembers()) {
                 remember(r, m.getMember());
             }
Index: trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 2381)
@@ -1,8 +1,10 @@
 // License: GPL. Copyright 2007 by Immanuel Scholz and others
 package org.openstreetmap.josm.data.osm;
+
 import java.awt.geom.Area;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
@@ -26,5 +28,5 @@
  */
 public class DataSet implements Cloneable {
-    
+
     /**
      * A list of listeners to selection changed events. The list is static, as listeners register
@@ -33,5 +35,5 @@
      */
     public static Collection<SelectionChangedListener> selListeners = new LinkedList<SelectionChangedListener>();
-    
+
     /**
      * notifies all registered selection change listeners about the current selection of
@@ -54,24 +56,42 @@
      * All nodes goes here, even when included in other data (ways etc). This enables the instant
      * conversion of the whole DataSet by iterating over this data structure.
-     */
+     * @deprecated Use getNodes() for read-only operations, addPrimitive() and removePrimitive() for modifications
+     */
+    @Deprecated
     public QuadBuckets<Node> nodes = new QuadBuckets<Node>();
 
+    public Collection<Node> getNodes() {
+        return Collections.unmodifiableCollection(nodes);
+    }
+
     /**
      * All ways (Streets etc.) in the DataSet.
      *
      * The way nodes are stored only in the way list.
-     */
+     * @deprecated Use getWays() for read-only operations, addPrimitive() and removePrimitive() for modifications
+     */
+    @Deprecated
     public QuadBuckets<Way> ways = new QuadBuckets<Way>();
 
+    public Collection<Way> getWays() {
+        return Collections.unmodifiableCollection(ways);
+    }
+
     /**
      * All relations/relationships
-     */
+     * @deprecated Use getRelations() for read-only operations, addPrimitive() and removePrimitive() for modifications
+     */
+    @Deprecated
     public Collection<Relation> relations = new LinkedList<Relation>();
 
+    public Collection<Relation> getRelations() {
+        return Collections.unmodifiableCollection(relations);
+    }
+
     /**
      * All data sources of this DataSet.
      */
     public Collection<DataSource> dataSources = new LinkedList<DataSource>();
-    
+
     /**
      * @return A collection containing all primitives of the dataset. The data is ordered after:
@@ -255,6 +275,7 @@
 
     public boolean toggleSelected(Collection<OsmPrimitive> osm) {
-        for (OsmPrimitive o : osm)
+        for (OsmPrimitive o : osm) {
             this.__toggleSelected(o);
+        }
         fireSelectionChanged();
         return true;
@@ -405,5 +426,5 @@
 
     /**
-     * Notifies all registered {@see SelectionChangedListener} about the current selection in 
+     * Notifies all registered {@see SelectionChangedListener} about the current selection in
      * this dataset.
      * 
@@ -491,7 +512,7 @@
         Collection<? extends OsmPrimitive> primitives = null;
         switch(type) {
-            case NODE: primitives = nodes; break;
-            case WAY: primitives = ways; break;
-            case RELATION: primitives = relations; break;
+        case NODE: primitives = nodes; break;
+        case WAY: primitives = ways; break;
+        case RELATION: primitives = relations; break;
         }
         for (OsmPrimitive primitive : primitives) {
@@ -502,7 +523,7 @@
             OsmPrimitive result = null;
             switch (type) {
-                case NODE: result = new Node(id, true); break;
-                case WAY: result = new Way(id, true); break;
-                case RELATION: result = new Relation(id, true); break;
+            case NODE: result = new Node(id, true); break;
+            case WAY: result = new Way(id, true); break;
+            case RELATION: result = new Relation(id, true); break;
             }
             addPrimitive(result);
Index: trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 2381)
@@ -158,5 +158,5 @@
         super.load(data, dataSet);
 
-        RelationData relationData = (RelationData)data;
+        RelationData relationData = (RelationData) data;
 
         // TODO Make this faster
@@ -169,29 +169,29 @@
         Map<Long, Relation> relations = new HashMap<Long, Relation>();
 
-        for (RelationMemberData member:relationData.getMembers()) {
+        for (RelationMemberData member : relationData.getMembers()) {
             switch (member.getMemberType()) {
-            case NODE:
-                nodes.put(member.getMemberId(), nodeMarker);
-                break;
-            case WAY:
-                ways.put(member.getMemberId(), wayMarker);
-                break;
-            case RELATION:
-                relations.put(member.getMemberId(), relationMarker);
-                break;
-            }
-        }
-
-        for (Node node:dataSet.nodes) {
+                case NODE:
+                    nodes.put(member.getMemberId(), nodeMarker);
+                    break;
+                case WAY:
+                    ways.put(member.getMemberId(), wayMarker);
+                    break;
+                case RELATION:
+                    relations.put(member.getMemberId(), relationMarker);
+                    break;
+            }
+        }
+
+        for (Node node : dataSet.getNodes()) {
             if (nodes.get(node.getUniqueId()) == nodeMarker) {
                 nodes.put(node.getUniqueId(), node);
             }
         }
-        for (Way way:dataSet.ways) {
+        for (Way way : dataSet.getWays()) {
             if (ways.get(way.getUniqueId()) == wayMarker) {
                 ways.put(way.getUniqueId(), way);
             }
         }
-        for (Relation relation:dataSet.relations) {
+        for (Relation relation : dataSet.getRelations()) {
             if (relations.get(relation.getUniqueId()) == relationMarker) {
                 relations.put(relation.getUniqueId(), relation);
@@ -200,22 +200,22 @@
 
         List<RelationMember> newMembers = new ArrayList<RelationMember>();
-        for (RelationMemberData member:relationData.getMembers()) {
+        for (RelationMemberData member : relationData.getMembers()) {
             OsmPrimitive foundMember = null;
             switch (member.getMemberType()) {
-            case NODE:
-                foundMember = nodes.get(member.getMemberId());
-                if (foundMember == nodeMarker)
-                    throw new AssertionError("Data consistency problem - relation with missing member detected");
-                break;
-            case WAY:
-                foundMember = ways.get(member.getMemberId());
-                if (foundMember == wayMarker)
-                    throw new AssertionError("Data consistency problem - relation with missing member detected");
-                break;
-            case RELATION:
-                foundMember = relations.get(member.getMemberId());
-                if (foundMember == relationMarker)
-                    throw new AssertionError("Data consistency problem - relation with missing member detected");
-                break;
+                case NODE:
+                    foundMember = nodes.get(member.getMemberId());
+                    if (foundMember == nodeMarker)
+                        throw new AssertionError("Data consistency problem - relation with missing member detected");
+                    break;
+                case WAY:
+                    foundMember = ways.get(member.getMemberId());
+                    if (foundMember == wayMarker)
+                        throw new AssertionError("Data consistency problem - relation with missing member detected");
+                    break;
+                case RELATION:
+                    foundMember = relations.get(member.getMemberId());
+                    if (foundMember == relationMarker)
+                        throw new AssertionError("Data consistency problem - relation with missing member detected");
+                    break;
             }
             newMembers.add(new RelationMember(member.getRole(), foundMember));
Index: trunk/src/org/openstreetmap/josm/data/osm/TagCollection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/TagCollection.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/data/osm/TagCollection.java	(revision 2381)
@@ -111,7 +111,7 @@
         TagCollection tags = new TagCollection();
         if (ds == null) return tags;
-        tags.add(TagCollection.unionOfAllPrimitives(ds.nodes));
-        tags.add(TagCollection.unionOfAllPrimitives(ds.ways));
-        tags.add(TagCollection.unionOfAllPrimitives(ds.relations));
+        tags.add(TagCollection.unionOfAllPrimitives(ds.getNodes()));
+        tags.add(TagCollection.unionOfAllPrimitives(ds.getWays()));
+        tags.add(TagCollection.unionOfAllPrimitives(ds.getRelations()));
         return tags;
     }
Index: trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 2381)
@@ -177,13 +177,13 @@
         super.load(data, dataSet);
 
-        WayData wayData = (WayData)data;
+        WayData wayData = (WayData) data;
 
         // TODO We should have some lookup by id mechanism in future to speed this up
         Node marker = new Node(0);
         Map<Long, Node> foundNodes = new HashMap<Long, Node>();
-        for (Long nodeId:wayData.getNodes()) {
+        for (Long nodeId : wayData.getNodes()) {
             foundNodes.put(nodeId, marker);
         }
-        for (Node node:dataSet.nodes) {
+        for (Node node : dataSet.getNodes()) {
             if (foundNodes.get(node.getUniqueId()) == marker) {
                 foundNodes.put(node.getUniqueId(), node);
@@ -192,5 +192,5 @@
 
         List<Node> newNodes = new ArrayList<Node>(wayData.getNodes().size());
-        for (Long nodeId:wayData.getNodes()) {
+        for (Long nodeId : wayData.getNodes()) {
             Node node = foundNodes.get(nodeId);
             if (node != marker) {
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/CollectBackReferencesVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/CollectBackReferencesVisitor.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/CollectBackReferencesVisitor.java	(revision 2381)
@@ -52,18 +52,18 @@
     }
     
-    private void makeLookupTable(){
-       for (Way w : ds.ways) {
-          for (Node n : w.getNodes()) {
-             if(!lookupTable.containsKey(n)) lookupTable.put(n, new HashSet<OsmPrimitive>());
-             lookupTable.get(n).add(w);
-          }
-       }
-       for (Relation r : ds.relations) {
-          for (RelationMember m : r.getMembers()) {
-             OsmPrimitive o = m.getMember();
-             if(!lookupTable.containsKey(o)) lookupTable.put(o, new HashSet<OsmPrimitive>());
-             lookupTable.get(o).add(r);
-          }
-       }
+    private void makeLookupTable() {
+        for (Way w : ds.getWays()) {
+            for (Node n : w.getNodes()) {
+                if (!lookupTable.containsKey(n)) lookupTable.put(n, new HashSet<OsmPrimitive>());
+                lookupTable.get(n).add(w);
+            }
+        }
+        for (Relation r : ds.getRelations()) {
+            for (RelationMember m : r.getMembers()) {
+                OsmPrimitive o = m.getMember();
+                if (!lookupTable.containsKey(o)) lookupTable.put(o, new HashSet<OsmPrimitive>());
+                lookupTable.get(o).add(r);
+            }
+        }
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 2381)
@@ -24,9 +24,8 @@
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
-import java.util.TreeSet;
-import java.util.Comparator;
 
 import javax.swing.ImageIcon;
@@ -532,4 +531,5 @@
     }
 
+    @Override
     public void visit(Relation r) {};
     public void paintUnselectedRelation(Relation r) {
@@ -1031,6 +1031,7 @@
                 for (PolyData pd : outerPoly) {
                     Polygon p = pd.get();
-                    if(!isPolygonVisible(p))
+                    if(!isPolygonVisible(p)) {
                         continue;
+                    }
 
                     boolean selected = pd.selected || data.isSelected(pd.way) || data.isSelected(r);
@@ -1055,6 +1056,7 @@
                 if(innerStyle == null)
                 {
-                    if (data.isSelected(wInner))
+                    if (data.isSelected(wInner)) {
                         continue;
+                    }
                     if(zoomok && (wInner.mappaintDrawnCode != paintid
                             || outer.size() == 0))
@@ -1089,6 +1091,7 @@
                 {
                     // Selected ways are drawn at the very end
-                    if (data.isSelected(wOuter))
+                    if (data.isSelected(wOuter)) {
                         continue;
+                    }
                     if(zoomok)
                     {
@@ -1134,28 +1137,28 @@
     protected Point2D getCentroid(Polygon p)
     {
-	double cx = 0.0, cy = 0.0, a = 0.0;
-
-	// usually requires points[0] == points[npoints] and can then use i+1 instead of j.
-	// Faked it slowly using j.  If this is really gets used, this should be fixed.
-	for (int i = 0;  i < p.npoints;  i++) {
-	    int j = i+1 == p.npoints ? 0 : i+1;
-	    a += (p.xpoints[i] * p.ypoints[j]) - (p.ypoints[i] * p.xpoints[j]);
-	    cx += (p.xpoints[i] + p.xpoints[j]) * (p.xpoints[i] * p.ypoints[j] - p.ypoints[i] * p.xpoints[j]);
-	    cy += (p.ypoints[i] + p.ypoints[j]) * (p.xpoints[i] * p.ypoints[j] - p.ypoints[i] * p.xpoints[j]);
-	}
-	return new Point2D.Double(cx / (3.0*a), cy / (3.0*a));
+        double cx = 0.0, cy = 0.0, a = 0.0;
+
+        // usually requires points[0] == points[npoints] and can then use i+1 instead of j.
+        // Faked it slowly using j.  If this is really gets used, this should be fixed.
+        for (int i = 0;  i < p.npoints;  i++) {
+            int j = i+1 == p.npoints ? 0 : i+1;
+            a += (p.xpoints[i] * p.ypoints[j]) - (p.ypoints[i] * p.xpoints[j]);
+            cx += (p.xpoints[i] + p.xpoints[j]) * (p.xpoints[i] * p.ypoints[j] - p.ypoints[i] * p.xpoints[j]);
+            cy += (p.ypoints[i] + p.ypoints[j]) * (p.xpoints[i] * p.ypoints[j] - p.ypoints[i] * p.xpoints[j]);
+        }
+        return new Point2D.Double(cx / (3.0*a), cy / (3.0*a));
     }
 
     protected double getArea(Polygon p)
     {
-	double sum = 0.0;
-
-	// usually requires points[0] == points[npoints] and can then use i+1 instead of j.
-	// Faked it slowly using j.  If this is really gets used, this should be fixed.
-	for (int i = 0;  i < p.npoints;  i++) {
-	    int j = i+1 == p.npoints ? 0 : i+1;
-	    sum = sum + (p.xpoints[i] * p.ypoints[j]) - (p.ypoints[i] * p.xpoints[j]);
-	}
-	return Math.abs(sum/2.0);
+        double sum = 0.0;
+
+        // usually requires points[0] == points[npoints] and can then use i+1 instead of j.
+        // Faked it slowly using j.  If this is really gets used, this should be fixed.
+        for (int i = 0;  i < p.npoints;  i++) {
+            int j = i+1 == p.npoints ? 0 : i+1;
+            sum = sum + (p.xpoints[i] * p.ypoints[j]) - (p.ypoints[i] * p.xpoints[j]);
+        }
+        return Math.abs(sum/2.0);
     }
 
@@ -1168,62 +1171,62 @@
         g.fillPolygon(polygon);
 
-	if (showNames > dist) {
-	    String name = getWayName(w);
-	    if (name!=null /* && annotate */) {
-		Rectangle pb = polygon.getBounds();
-		FontMetrics fontMetrics = g.getFontMetrics(orderFont); // if slow, use cache
-		Rectangle2D nb = fontMetrics.getStringBounds(name, g); // if slow, approximate by strlen()*maxcharbounds(font)
-
-		// Point2D c = getCentroid(polygon);
-		// Using the Centroid is Nicer for buildings like: +--------+
-		// but this needs to be fast.  As most houses are  |   42   |
-		// boxes anyway, the center of the bounding box    +---++---+
-		// will have to do.                                    ++
-		// Centroids are not optimal either, just imagine a U-shaped house.
-		// Point2D c = new Point2D.Double(pb.x + pb.width / 2.0, pb.y + pb.height / 2.0);
-		// Rectangle2D.Double centeredNBounds =
-		//     new Rectangle2D.Double(c.getX() - nb.getWidth()/2,
-		//                            c.getY() - nb.getHeight()/2,
-		//                            nb.getWidth(),
-		//                            nb.getHeight());
-
-		Rectangle centeredNBounds = new Rectangle(pb.x + (int)((pb.width - nb.getWidth())/2.0),
-							  pb.y + (int)((pb.height - nb.getHeight())/2.0),
-							  (int)nb.getWidth(),
-							  (int)nb.getHeight());
-
-		//// Draw name bounding box for debugging:
-		// g.setColor(new Color(255,255,0,128));
-		// g.drawRect((int)centeredNBounds.getMinX(),
-		//	   (int)centeredNBounds.getMinY(),
-		//	   (int)centeredNBounds.getWidth(),
-		//	   (int)centeredNBounds.getHeight());
-
-		if ((pb.width >= nb.getWidth() && pb.height >= nb.getHeight()) && // quick check
-		    polygon.contains(centeredNBounds) // slow but nice
-		    ) {
-		    g.setColor(areaTextColor);
-		    Font defaultFont = g.getFont();
-		    g.setFont (orderFont);
-		    g.drawString (name,
-				  (int)(centeredNBounds.getMinX() - nb.getMinX()),
-				  (int)(centeredNBounds.getMinY() - nb.getMinY()));
-		    g.setFont(defaultFont);
-		}
-	    }
-	}
+        if (showNames > dist) {
+            String name = getWayName(w);
+            if (name!=null /* && annotate */) {
+                Rectangle pb = polygon.getBounds();
+                FontMetrics fontMetrics = g.getFontMetrics(orderFont); // if slow, use cache
+                Rectangle2D nb = fontMetrics.getStringBounds(name, g); // if slow, approximate by strlen()*maxcharbounds(font)
+
+                // Point2D c = getCentroid(polygon);
+                // Using the Centroid is Nicer for buildings like: +--------+
+                // but this needs to be fast.  As most houses are  |   42   |
+                // boxes anyway, the center of the bounding box    +---++---+
+                // will have to do.                                    ++
+                // Centroids are not optimal either, just imagine a U-shaped house.
+                // Point2D c = new Point2D.Double(pb.x + pb.width / 2.0, pb.y + pb.height / 2.0);
+                // Rectangle2D.Double centeredNBounds =
+                //     new Rectangle2D.Double(c.getX() - nb.getWidth()/2,
+                //                            c.getY() - nb.getHeight()/2,
+                //                            nb.getWidth(),
+                //                            nb.getHeight());
+
+                Rectangle centeredNBounds = new Rectangle(pb.x + (int)((pb.width - nb.getWidth())/2.0),
+                        pb.y + (int)((pb.height - nb.getHeight())/2.0),
+                        (int)nb.getWidth(),
+                        (int)nb.getHeight());
+
+                //// Draw name bounding box for debugging:
+                // g.setColor(new Color(255,255,0,128));
+                // g.drawRect((int)centeredNBounds.getMinX(),
+                //	   (int)centeredNBounds.getMinY(),
+                //	   (int)centeredNBounds.getWidth(),
+                //	   (int)centeredNBounds.getHeight());
+
+                if ((pb.width >= nb.getWidth() && pb.height >= nb.getHeight()) && // quick check
+                        polygon.contains(centeredNBounds) // slow but nice
+                ) {
+                    g.setColor(areaTextColor);
+                    Font defaultFont = g.getFont();
+                    g.setFont (orderFont);
+                    g.drawString (name,
+                            (int)(centeredNBounds.getMinX() - nb.getMinX()),
+                            (int)(centeredNBounds.getMinY() - nb.getMinY()));
+                    g.setFont(defaultFont);
+                }
+            }
+        }
     }
 
     protected String getWayName(Way w) {
-	String name = null;
-	if (w.hasKeys()) {
-	    for (String rn : regionalNameOrder) {
-		name = w.get(rn);
-		if (name != null) {
-		    break;
-		}
-	    }
-	}
-	return name;
+        String name = null;
+        if (w.hasKeys()) {
+            for (String rn : regionalNameOrder) {
+                name = w.get(rn);
+                if (name != null) {
+                    break;
+                }
+            }
+        }
+        return name;
     }
 
@@ -1410,15 +1413,15 @@
         ArrayList<T> sorted = new ArrayList<T>(prims);
         Collections.sort(sorted,
-            new Comparator<T>() {
-                public int compare(T o1, T o2) {
-                    boolean s1 = data.isSelected(o1);
-                    boolean s2 = data.isSelected(o2);
-                    if (s1 && !s2)
-                        return 1;
-                    if (!s1 && s2)
-                        return -1;
-                    return o1.compareTo(o2);
-                }
-            });
+                new Comparator<T>() {
+            public int compare(T o1, T o2) {
+                boolean s1 = data.isSelected(o1);
+                boolean s2 = data.isSelected(o2);
+                if (s1 && !s2)
+                    return 1;
+                if (!s1 && s2)
+                    return -1;
+                return o1.compareTo(o2);
+            }
+        });
         return sorted;
     }
@@ -1431,5 +1434,5 @@
         //profilerOmitDraw = Main.pref.getBoolean("mappaint.profiler.omitdraw",false);
 
-        useStyleCache = Main.pref.getBoolean("mappaint.cache",true);
+        useStyleCache = Main.pref.getBoolean("mappaint.cache", true);
         int fillAreas = Main.pref.getInteger("mappaint.fillareas", 10000000);
         fillAlpha = Math.min(255, Math.max(0, Integer.valueOf(Main.pref.getInteger("mappaint.fillalpha", 50))));
@@ -1437,6 +1440,6 @@
         showIcons = Main.pref.getInteger("mappaint.showicons", 10000000);
         useStrokes = Main.pref.getInteger("mappaint.strokes", 10000000);
-        LatLon ll1 = nc.getLatLon(0,0);
-        LatLon ll2 = nc.getLatLon(100,0);
+        LatLon ll1 = nc.getLatLon(0, 0);
+        LatLon ll2 = nc.getLatLon(100, 0);
         dist = ll1.greatCircleDistance(ll2);
 
@@ -1452,17 +1455,17 @@
 
         getSettings(virtual);
-        useRealWidth = Main.pref.getBoolean("mappaint.useRealWidth",false);
-        zoomLevelDisplay = Main.pref.getBoolean("mappaint.zoomLevelDisplay",false);
+        useRealWidth = Main.pref.getBoolean("mappaint.useRealWidth", false);
+        zoomLevelDisplay = Main.pref.getBoolean("mappaint.zoomLevelDisplay", false);
         circum = Main.map.mapView.getDist100Pixel();
         styles = MapPaintStyles.getStyles().getStyleSet();
-        drawMultipolygon = Main.pref.getBoolean("mappaint.multipolygon",true);
-        drawRestriction = Main.pref.getBoolean("mappaint.restriction",true);
+        drawMultipolygon = Main.pref.getBoolean("mappaint.multipolygon", true);
+        drawRestriction = Main.pref.getBoolean("mappaint.restriction", true);
         //restrictionDebug = Main.pref.getBoolean("mappaint.restriction.debug",false);
-        leftHandTraffic = Main.pref.getBoolean("mappaint.lefthandtraffic",false);
-        orderFont = new Font(Main.pref.get("mappaint.font","Helvetica"), Font.PLAIN, Main.pref.getInteger("mappaint.fontsize", 8));
-        String[] names = {"name:"+LanguageInfo.getJOSMLocaleCode(), "name", "int_name", "ref", "operator", "brand","addr:housenumber"};
+        leftHandTraffic = Main.pref.getBoolean("mappaint.lefthandtraffic", false);
+        orderFont = new Font(Main.pref.get("mappaint.font", "Helvetica"), Font.PLAIN, Main.pref.getInteger("mappaint.fontsize", 8));
+        String[] names = {"name:" + LanguageInfo.getJOSMLocaleCode(), "name", "int_name", "ref", "operator", "brand", "addr:housenumber"};
         regionalNameOrder = Main.pref.getCollection("mappaint.nameOrder", Arrays.asList(names));
-        minEN = nc.getEastNorth(0,nc.getHeight()-1);
-        maxEN = nc.getEastNorth(nc.getWidth()-1,0);
+        minEN = nc.getEastNorth(0, nc.getHeight() - 1);
+        maxEN = nc.getEastNorth(nc.getWidth() - 1, 0);
 
 
@@ -1487,8 +1490,6 @@
             /*** RELATIONS ***/
             //    profilerN = 0;
-            for (final Relation osm : data.relations)
-            {
-                if(drawable(osm) && osm.mappaintVisibleCode != viewid)
-                {
+            for (final Relation osm: data.getRelations()) {
+                if (drawable(osm) && osm.mappaintVisibleCode != viewid) {
                     paintUnselectedRelation(osm);
                     //            profilerN++;
@@ -1504,14 +1505,12 @@
             /*** AREAS ***/
             //    profilerN = 0;
-            for (final Way osm : selectedLast(data, data.ways)) {
+            for (final Way osm : selectedLast(data, data.getWays())) {
                 if (drawable(osm)
-                        && osm.mappaintVisibleCode != viewid && osm.mappaintDrawnCode != paintid)
-                {
-                    if(isPrimitiveArea(osm) && osm.mappaintDrawnAreaCode != paintid)
-                    {
+                        && osm.mappaintVisibleCode != viewid && osm.mappaintDrawnCode != paintid) {
+                    if (isPrimitiveArea(osm) && osm.mappaintDrawnAreaCode != paintid) {
                         drawWay(osm, fillAreas);
                         //                profilerN++;
                     }// else {
-                        noAreaWays.add(osm);
+                    noAreaWays.add(osm);
                     //}
                 }
@@ -1527,6 +1526,5 @@
             /*** WAYS ***/
             //    profilerN = 0;
-            for (final Way osm : noAreaWays)
-            {
+            for (final Way osm : noAreaWays) {
                 drawWay(osm, 0);
                 //        profilerN++;
@@ -1539,16 +1537,14 @@
             //        profilerLast = java.lang.System.currentTimeMillis();
             //    }
-        }
-        else
-        {
+        } else {
             /*** WAYS (filling disabled)  ***/
             //    profilerN = 0;
-            for (final Way way : data.ways)
+            for (final Way way: data.getWays()) {
                 if (drawable(way) && !data.isSelected(way)
-                        && way.mappaintVisibleCode != viewid )
-                {
+                        && way.mappaintVisibleCode != viewid) {
                     drawWay(way, 0);
                     //            profilerN++;
                 }
+            }
 
             //    if(profiler)
@@ -1565,13 +1561,14 @@
             if (!osm.incomplete && !osm.isDeleted() && !(osm instanceof Node)
                     && osm.mappaintVisibleCode != viewid && osm.mappaintDrawnCode != paintid
-                    )
-            {
+            ) {
                 osm.visit(new AbstractVisitor() {
                     public void visit(Way w) {
                         drawWay(w, 0);
                     }
+
                     public void visit(Node n) {
                         drawNode(n);
                     }
+
                     public void visit(Relation r) {
                         /* TODO: is it possible to do this like the nodes/ways code? */
@@ -1601,5 +1598,5 @@
         /*** NODES ***/
         //profilerN = 0;
-        for (final Node osm : data.nodes)
+        for (final Node osm: data.getNodes()) {
             if (!osm.incomplete && !osm.isDeleted() && (data.isSelected(osm) || !osm.isFiltered())
                     && osm.mappaintVisibleCode != viewid && osm.mappaintDrawnCode != paintid)
@@ -1608,4 +1605,5 @@
                 //        profilerN++;
             }
+        }
 
         //if(profiler)
@@ -1617,9 +1615,8 @@
 
         /*** VIRTUAL  ***/
-        if (virtualNodeSize != 0)
-        {
+        if (virtualNodeSize != 0) {
             //    profilerN = 0;
             currentColor = nodeColor;
-            for (final OsmPrimitive osm : data.ways)
+            for (final OsmPrimitive osm: data.getWays()) {
                 if (osm.isUsable() && !osm.isFiltered()
                         && osm.mappaintVisibleCode != viewid )
@@ -1630,4 +1627,5 @@
                     //            profilerN++;
                 }
+            }
 
             //    if(profiler)
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java	(revision 2381)
@@ -228,11 +228,5 @@
         for (OsmPrimitive primitive : mappedPrimitives.keySet()) {
             OsmPrimitive clone = mappedPrimitives.get(primitive);
-            if (clone instanceof Node) {
-                hull.nodes.add((Node)clone);
-            } else if (clone instanceof Way) {
-                hull.ways.add((Way)clone);
-            } else if (clone instanceof Relation) {
-                hull.relations.add((Relation)clone);
-            }
+            hull.addPrimitive(clone);
         }
     }
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 2381)
@@ -1,3 +1,2 @@
-// License: GPL. Copyright 2007 by Immanuel Scholz and others
 package org.openstreetmap.josm.data.osm.visitor;
 
@@ -60,12 +59,18 @@
         this.theirDataSet = theirDataSet;
 
-        for (Node n : myDataSet.nodes) if (!n.isNew()) {
-            nodeshash.put(n.getId(), n);
-        }
-        for (Way w : myDataSet.ways) if (!w.isNew()) {
-            wayshash.put(w.getId(), w);
-        }
-        for (Relation r : myDataSet.relations) if (!r.isNew()) {
-            relshash.put(r.getId(), r);
+        for (Node n : myDataSet.getNodes()) {
+            if (!n.isNew()) {
+                nodeshash.put(n.getId(), n);
+            }
+        }
+        for (Way w : myDataSet.getWays()) {
+            if (!w.isNew()) {
+                wayshash.put(w.getId(), w);
+            }
+        }
+        for (Relation r : myDataSet.getRelations()) {
+            if (!r.isNew()) {
+                relshash.put(r.getId(), r);
+            }
         }
         conflicts = new ConflictCollection();
@@ -162,14 +167,14 @@
      */
     public void fixReferences() {
-        for (Way w : myDataSet.ways) {
+        for (Way w : myDataSet.getWays()) {
             fixWay(w);
             fixIncomplete(w);
         }
-        for (Relation r : myDataSet.relations) {
+        for (Relation r : myDataSet.getRelations()) {
             fixRelation(r);
         }
         for (OsmPrimitive osm : conflicts.getMyConflictParties())
             if (osm instanceof Way) {
-                fixWay((Way)osm);
+                fixWay((Way) osm);
             } else if (osm instanceof Relation) {
                 fixRelation((Relation) osm);
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 2381)
@@ -150,5 +150,57 @@
            require changing the colour while painting... */
         //profilerN = 0;
-        for (final OsmPrimitive osm : data.relations)
+        for (final OsmPrimitive osm: data.getRelations()) {
+            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isFiltered()) {
+                osm.visit(this);
+                //        profilerN++;
+            }
+        }
+
+        //if(profiler)
+        //{
+        //    System.out.format("Relations: %4dms, n=%5d\n", (java.lang.System.currentTimeMillis()-profilerLast), profilerN);
+        //    profilerLast = java.lang.System.currentTimeMillis();
+        //}
+
+        //profilerN = 0;
+        for (final OsmPrimitive osm:data.getWays()){
+            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isFiltered() && osm.isTagged()) {
+                osm.visit(this);
+                //        profilerN++;
+            }
+        }
+        displaySegments();
+
+        for (final OsmPrimitive osm:data.getWays()){
+            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isFiltered() && !osm.isTagged()) {
+                osm.visit(this);
+                //        profilerN++;
+            }
+        }
+        displaySegments();
+
+        //if(profiler)
+        //{
+        //    System.out.format("Ways     : %4dms, n=%5d\n",
+        //        (java.lang.System.currentTimeMillis()-profilerLast), profilerN);
+        //    profilerLast = java.lang.System.currentTimeMillis();
+        //}
+
+        //profilerN = 0;
+        for (final OsmPrimitive osm : data.getSelected())
+            if (!osm.isDeleted()) {
+                osm.visit(this);
+                //        profilerN++;
+            }
+        displaySegments();
+
+        //if(profiler)
+        //{
+        //    System.out.format("Selected : %4dms, n=%5d\n", (java.lang.System.currentTimeMillis()-profilerLast), profilerN);
+        //    profilerLast = java.lang.System.currentTimeMillis();
+        //}
+
+        //profilerN = 0;
+        for (final OsmPrimitive osm: data.getNodes()) {
             if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isFiltered())
             {
@@ -156,57 +208,5 @@
                 //        profilerN++;
             }
-
-        //if(profiler)
-        //{
-        //    System.out.format("Relations: %4dms, n=%5d\n", (java.lang.System.currentTimeMillis()-profilerLast), profilerN);
-        //    profilerLast = java.lang.System.currentTimeMillis();
-        //}
-
-        //profilerN = 0;
-        for (final OsmPrimitive osm : data.ways)
-            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isFiltered() && osm.isTagged())
-            {
-                osm.visit(this);
-                //        profilerN++;
-            }
-        displaySegments();
-
-        for (final OsmPrimitive osm : data.ways)
-            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isFiltered() && !osm.isTagged())
-            {
-                osm.visit(this);
-                //        profilerN++;
-            }
-        displaySegments();
-
-        //if(profiler)
-        //{
-        //    System.out.format("Ways     : %4dms, n=%5d\n",
-        //        (java.lang.System.currentTimeMillis()-profilerLast), profilerN);
-        //    profilerLast = java.lang.System.currentTimeMillis();
-        //}
-
-        //profilerN = 0;
-        for (final OsmPrimitive osm : data.getSelected())
-            if (!osm.isDeleted())
-            {
-                osm.visit(this);
-                //        profilerN++;
-            }
-        displaySegments();
-
-        //if(profiler)
-        //{
-        //    System.out.format("Selected : %4dms, n=%5d\n", (java.lang.System.currentTimeMillis()-profilerLast), profilerN);
-        //    profilerLast = java.lang.System.currentTimeMillis();
-        //}
-
-        //profilerN = 0;
-        for (final OsmPrimitive osm : data.nodes)
-            if (!osm.isDeleted() && !ds.isSelected(osm) && !osm.isFiltered())
-            {
-                osm.visit(this);
-                //        profilerN++;
-            }
+        }
 
         //if(profiler)
@@ -217,14 +217,13 @@
         //}
 
-        if(virtualNodeSize != 0)
-        {
+        if (virtualNodeSize != 0) {
             //    profilerN = 0;
             currentColor = nodeColor;
-            for (final OsmPrimitive osm : data.ways)
-                if (!osm.isDeleted() && !osm.isDisabled() && !osm.isFiltered())
-                {
-                    visitVirtual((Way)osm);
+            for (final OsmPrimitive osm:data.getWays()){
+                if (!osm.isDeleted() && !osm.isDisabled() && !osm.isFiltered()) {
+                    visitVirtual((Way) osm);
                     //                profilerN++;
                 }
+            }
             displaySegments();
 
Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 2381)
@@ -304,7 +304,7 @@
         Node minPrimitive = null;
         DataSet ds = getCurrentDataSet();
-        if(ds == null)
+        if (ds == null)
             return null;
-        for (Node n : ds.nodes) {
+        for (Node n : ds.getNodes()) {
             if (!n.isUsable()) {
                 continue;
@@ -317,7 +317,7 @@
             }
             // when multiple nodes on one point, prefer new or selected nodes
-            else if(dist == minDistanceSq && minPrimitive != null
+            else if (dist == minDistanceSq && minPrimitive != null
                     && ((n.isNew() && ds.isSelected(n))
-                            || (!ds.isSelected(minPrimitive) && (ds.isSelected(n) || n.isNew())))) {
+                    || (!ds.isSelected(minPrimitive) && (ds.isSelected(n) || n.isNew())))) {
                 minPrimitive = n;
             }
@@ -335,7 +335,7 @@
         TreeMap<Double, List<WaySegment>> nearest = new TreeMap<Double, List<WaySegment>>();
         DataSet ds = getCurrentDataSet();
-        if(ds == null)
+        if (ds == null)
             return null;
-        for (Way w : ds.ways) {
+        for (Way w : ds.getWays()) {
             if (!w.isUsable()) {
                 continue;
@@ -358,7 +358,7 @@
                 double a = p.distanceSq(B);
                 double b = p.distanceSq(A);
-                double perDist = a-(a-b+c)*(a-b+c)/4/c; // perpendicular distance squared
-                if (perDist < snapDistance && a < c+snapDistance && b < c+snapDistance) {
-                    if(ds.isSelected(w)) {
+                double perDist = a - (a - b + c) * (a - b + c) / 4 / c; // perpendicular distance squared
+                if (perDist < snapDistance && a < c + snapDistance && b < c + snapDistance) {
+                    if (ds.isSelected(w)) {
                         perDist -= 0.00001;
                     }
@@ -459,7 +459,7 @@
         Collection<OsmPrimitive> nearest = new HashSet<OsmPrimitive>();
         DataSet ds = getCurrentDataSet();
-        if(ds == null)
+        if (ds == null)
             return null;
-        for (Way w : ds.ways) {
+        for (Way w : ds.getWays()) {
             if (!w.isUsable()) {
                 continue;
@@ -479,6 +479,6 @@
                 double a = p.distanceSq(B);
                 double b = p.distanceSq(A);
-                double perDist = a-(a-b+c)*(a-b+c)/4/c; // perpendicular distance squared
-                if (perDist < snapDistance && a < c+snapDistance && b < c+snapDistance) {
+                double perDist = a - (a - b + c) * (a - b + c) / 4 / c; // perpendicular distance squared
+                if (perDist < snapDistance && a < c + snapDistance && b < c + snapDistance) {
                     nearest.add(w);
                     break;
@@ -487,5 +487,5 @@
             }
         }
-        for (Node n : ds.nodes) {
+        for (Node n : ds.getNodes()) {
             if (n.isUsable()
                     && getPoint(n).distanceSq(p) < snapDistance) {
@@ -507,7 +507,7 @@
         Collection<Node> nearest = new HashSet<Node>();
         DataSet ds = getCurrentDataSet();
-        if(ds == null)
+        if (ds == null)
             return null;
-        for (Node n : ds.nodes) {
+        for (Node n : ds.getNodes()) {
             if (n.isUsable()
                     && getPoint(n).distanceSq(p) < snapDistance) {
Index: trunk/src/org/openstreetmap/josm/gui/SelectionManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 2381)
@@ -285,5 +285,5 @@
         } else {
             // nodes
-            for (Node n : nc.getCurrentDataSet().nodes) {
+            for (Node n : nc.getCurrentDataSet().getNodes()) {
                 if (n.isUsable() && r.contains(nc.getPoint(n))) {
                     selection.add(n);
@@ -292,6 +292,6 @@
 
             // ways
-            for (Way w : nc.getCurrentDataSet().ways) {
-                if (!w.isUsable() || w.getNodesCount() == 0){
+            for (Way w : nc.getCurrentDataSet().getWays()) {
+                if (!w.isUsable() || w.getNodesCount() == 0) {
                     continue;
                 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 2381)
@@ -754,5 +754,5 @@
         Map<Relation, Collection<RelationMember>> roles = new HashMap<Relation, Collection<RelationMember>>();
         if (Main.main.getCurrentDataSet() != null) {
-            for (Relation r : Main.main.getCurrentDataSet().relations) {
+            for (Relation r : Main.main.getCurrentDataSet().getRelations()) {
                 if (!r.isFiltered() && !r.incomplete && !r.isDeleted()) {
                     for (RelationMember m : r.getMembers()) {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 2381)
@@ -147,5 +147,5 @@
     protected int getNumRelations() {
         if (Main.main.getCurrentDataSet() == null) return 0;
-        return Main.main.getCurrentDataSet().relations.size();
+        return Main.main.getCurrentDataSet().getRelations().size();
     }
 
@@ -158,6 +158,6 @@
      */
     protected ArrayList<Relation> getDisplayedRelationsInSortOrder(DataSet ds) {
-        ArrayList<Relation> relations = new ArrayList<Relation>(ds.relations.size());
-        for (Relation r: ds.relations ){
+        ArrayList<Relation> relations = new ArrayList<Relation>(ds.getRelations().size());
+        for (Relation r : ds.getRelations()) {
             if (!r.isUsable() || !r.isVisible()) {
                 continue;
@@ -170,4 +170,5 @@
                 new Comparator<Relation>() {
                     NameFormatter formatter = DefaultNameFormatter.getInstance();
+
                     public int compare(Relation r1, Relation r2) {
                         return r1.getDisplayName(formatter).compareTo(r2.getDisplayName(formatter));
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java	(revision 2381)
@@ -258,6 +258,6 @@
                 return;
             HashSet<Relation> relations = new HashSet<Relation>();
-            for (int i=0; i < selection.length;i++) {
-                relations.add((Relation)selection[i].getLastPathComponent());
+            for (TreePath aSelection : selection) {
+                relations.add((Relation) aSelection.getLastPathComponent());
             }
             Main.worker.submit(new DownloadRelationSetTask(getParentDialog(),relations));
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 2381)
@@ -138,5 +138,5 @@
             //this.tagEditorModel.initFromPrimitive(relation);
             this.memberTableModel.populate(relation);
-            if (!getLayer().data.relations.contains(relation)) {
+            if (!getLayer().data.getRelations().contains(relation)) {
                 // treat it as a new relation if it doesn't exist in the
                 // data set yet.
@@ -597,10 +597,10 @@
             );
             switch(ret) {
-                case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return;
-                case JOptionPane.CLOSED_OPTION: return;
-                case JOptionPane.NO_OPTION: return;
-                case JOptionPane.YES_OPTION:
-                    memberTableModel.removeMembersReferringTo(toCheck);
-                    break;
+            case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return;
+            case JOptionPane.CLOSED_OPTION: return;
+            case JOptionPane.NO_OPTION: return;
+            case JOptionPane.YES_OPTION:
+                memberTableModel.removeMembersReferringTo(toCheck);
+                break;
             }
         }
@@ -633,9 +633,9 @@
             );
             switch(ret) {
-                case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION : return true;
-                case JOptionPane.YES_OPTION: return true;
-                case JOptionPane.NO_OPTION: return false;
-                case JOptionPane.CLOSED_OPTION: return false;
-                case JOptionPane.CANCEL_OPTION: throw new AddAbortException();
+            case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION : return true;
+            case JOptionPane.YES_OPTION: return true;
+            case JOptionPane.NO_OPTION: return false;
+            case JOptionPane.CLOSED_OPTION: return false;
+            case JOptionPane.CANCEL_OPTION: throw new AddAbortException();
             }
             // should not happen
@@ -1255,8 +1255,8 @@
             );
             switch(ret) {
-                case JOptionPane.YES_OPTION: return true;
-                case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return true;
-                default:
-                    return false;
+            case JOptionPane.YES_OPTION: return true;
+            case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return true;
+            default:
+                return false;
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ParentRelationLoadingTask.java	(revision 2381)
@@ -150,6 +150,6 @@
         }
         parents.clear();
-        for (Relation parent : referrers.relations) {
-            parents.add((Relation)getLayer().data.getPrimitiveById(parent.getId(),OsmPrimitiveType.RELATION));
+        for (Relation parent : referrers.getRelations()) {
+            parents.add((Relation) getLayer().data.getPrimitiveById(parent.getId(), OsmPrimitiveType.RELATION));
         }
         if (continuation != null) {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java	(revision 2381)
@@ -79,5 +79,5 @@
             return;
         }
-        for (Relation parent : ds.relations) {
+        for (Relation parent : ds.getRelations()) {
             if (isReferringRelation(parent)) {
                 referrers.add(parent);
Index: trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 2381)
@@ -776,10 +776,10 @@
                             n.setTimestamp(DateUtils.fromString(timestr));
                         }
-                        ds.nodes.add(n);
+                        ds.addPrimitive(n);
                         nodes.add(n);
                     }
                     Way w = new Way();
                     w.setNodes(nodes);
-                    ds.ways.add(w);
+                    ds.addPrimitive(w);
                 }
             }
Index: trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 2381)
@@ -3,6 +3,6 @@
 package org.openstreetmap.josm.gui.layer;
 
+import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.marktr;
-import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
@@ -19,5 +19,4 @@
 import java.awt.TexturePaint;
 import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 import java.awt.geom.Area;
 import java.awt.image.BufferedImage;
@@ -32,6 +31,4 @@
 import javax.swing.AbstractAction;
 import javax.swing.Icon;
-import javax.swing.JButton;
-import javax.swing.JDialog;
 import javax.swing.JLabel;
 import javax.swing.JMenuItem;
@@ -68,10 +65,7 @@
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
 import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
-import org.openstreetmap.josm.gui.help.HelpBrowser;
-import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.tools.DateUtils;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
-import org.openstreetmap.josm.tools.WindowGeometry;
 
 /**
@@ -256,6 +250,6 @@
     @Override public String getToolTipText() {
         String tool = "";
-        tool += undeletedSize(data.nodes)+" "+trn("node", "nodes", undeletedSize(data.nodes))+", ";
-        tool += undeletedSize(data.ways)+" "+trn("way", "ways", undeletedSize(data.ways));
+        tool += undeletedSize(data.getNodes())+" "+trn("node", "nodes", undeletedSize(data.getNodes()))+", ";
+        tool += undeletedSize(data.getWays())+" "+trn("way", "ways", undeletedSize(data.getWays()));
         if (data.version != null) {
             tool += ", " + tr("version {0}", data.version);
@@ -350,7 +344,7 @@
                     numRemainingConflicts,
                     numRemainingConflicts
-            );            
-        }
-        
+            );
+        }
+
         StringBuffer sb = new StringBuffer();
         sb.append("<html>").append(msg1);
@@ -369,5 +363,5 @@
                             tr("Click to close this dialog and continue editing"),
                             null /* no specific help */
-                            )
+                    )
             };
             HelpAwareOptionPane.showOptionDialog(
@@ -380,5 +374,5 @@
                     options[0],
                     ht("/Concepts/Conflict#WarningAboutDetectedConflicts")
-             );            
+            );
         }
     }
@@ -435,8 +429,9 @@
 
     @Override public void visitBoundingBox(final BoundingXYVisitor v) {
-        for (final Node n : data.nodes)
+        for (final Node n: data.getNodes()) {
             if (n.isUsable()) {
                 v.visit(n);
             }
+        }
     }
 
@@ -558,5 +553,5 @@
         gpxData.storageFile = file;
         HashSet<Node> doneNodes = new HashSet<Node>();
-        for (Way w : data.ways) {
+        for (Way w : data.getWays()) {
             if (!w.isUsable()) {
                 continue;
@@ -583,6 +578,5 @@
                 }
                 WayPoint wpt = new WayPoint(n.getCoor());
-                if (!n.isTimestampEmpty())
-                {
+                if (!n.isTimestampEmpty()) {
                     wpt.attr.put("time", DateUtils.fromDate(n.getTimestamp()));
                     wpt.setTime();
@@ -594,5 +588,5 @@
         // what is this loop meant to do? it creates waypoints but never
         // records them?
-        for (Node n : data.nodes) {
+        for (Node n : data.getNodes()) {
             if (n.incomplete || n.isDeleted() || doneNodes.contains(n)) {
                 continue;
@@ -607,4 +601,5 @@
                 wpt.attr.put("name", name);
             }
+            ;
         }
         return gpxData;
Index: trunk/src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java	(revision 2381)
@@ -78,10 +78,10 @@
                 for (GpsPoint p : c) {
                     Node n = new Node(p.latlon);
-                    ds.nodes.add(n);
+                    ds.addPrimitive(n);
                     nodes.add(n);
                 }
                 Way w = new Way();
                 w.setNodes(nodes);
-                ds.ways.add(w);
+                ds.addPrimitive(w);
             }
             Main.main.addLayer(new OsmDataLayer(ds, tr("Converted from: {0}", RawGpsLayer.this.getName()), null));
Index: trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionCache.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionCache.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionCache.java	(revision 2381)
@@ -150,5 +150,5 @@
             cachePrimitive(primitive);
         }
-        for (Relation relation : layer.data.relations) {
+        for (Relation relation : layer.data.getRelations()) {
             if (relation.incomplete || relation.isDeleted()) {
                 continue;
Index: trunk/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerBackreferenceReader.java	(revision 2381)
@@ -221,5 +221,5 @@
         progressMonitor.beginTask(null, 2);
         try {
-            Collection<Way> waysToCheck = new ArrayList<Way>(ds.ways);
+            Collection<Way> waysToCheck = new ArrayList<Way>(ds.getWays());
             if (isReadFull() ||primitiveType.equals(OsmPrimitiveType.NODE)) {
                 for (Way way: waysToCheck) {
@@ -233,5 +233,5 @@
             }
             if (isReadFull()) {
-                Collection<Relation> relationsToCheck  = new ArrayList<Relation>(ds.relations);
+                Collection<Relation> relationsToCheck  = new ArrayList<Relation>(ds.getRelations());
                 for (Relation relation: relationsToCheck) {
                     if (!relation.isNew() && relation.incomplete) {
Index: trunk/src/org/openstreetmap/josm/io/OsmWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 2380)
+++ trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 2381)
@@ -72,16 +72,19 @@
 
     public void writeContent(DataSet ds) {
-        for (Node n : ds.nodes)
+        for (Node n : ds.getNodes()) {
             if (shouldWrite(n)) {
                 visit(n);
             }
-        for (Way w : ds.ways)
+        }
+        for (Way w : ds.getWays()) {
             if (shouldWrite(w)) {
                 visit(w);
             }
-        for (Relation e : ds.relations)
+        }
+        for (Relation e : ds.getRelations()) {
             if (shouldWrite(e)) {
                 visit(e);
             }
+        }
     }
 
