Index: /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 1925)
@@ -93,5 +93,5 @@
                 continue;
             }
-            for (RelationMember rm : r.members) {
+            for (RelationMember rm : r.getMembers()) {
                 if (rm.member instanceof Way) {
                     for(Way w : selectedWays) {
@@ -228,5 +228,5 @@
             newRel.members.clear();
             HashSet<String> rolesToReAdd = new HashSet<String>();
-            for (RelationMember rm : r.members) {
+            for (RelationMember rm : r.getMembers()) {
                 // Don't copy the member if it to one of our ways, just keep a
                 // note to re-add it later on.
Index: /trunk/src/org/openstreetmap/josm/actions/CopyAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/CopyAction.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/actions/CopyAction.java	(revision 1925)
@@ -96,5 +96,5 @@
                 Relation enew = new Relation(e);
                 List<RelationMember> members = new ArrayList<RelationMember>();
-                for (RelationMember m : e.members) {
+                for (RelationMember m : e.getMembers()) {
                     if (! map.containsKey(m.member)) {
                         m.member.visit(this);
Index: /trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 1925)
@@ -130,5 +130,5 @@
                 continue;
             }
-            for (RelationMember rm : r.members) {
+            for (RelationMember rm : r.getMembers()) {
                 if (rm.member instanceof Node) {
                     for (Node n : allNodes) {
@@ -278,5 +278,5 @@
             newRel.members.clear();
             HashSet<String> rolesToReAdd = new HashSet<String>();
-            for (RelationMember rm : r.members) {
+            for (RelationMember rm : r.getMembers()) {
                 // Don't copy the member if it points to one of our nodes,
                 // just keep a note to re-add it later on.
Index: /trunk/src/org/openstreetmap/josm/actions/PasteAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/PasteAction.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/actions/PasteAction.java	(revision 1925)
@@ -91,5 +91,5 @@
             rnew.id = 0;
             List<RelationMember> members = new ArrayList<RelationMember>();
-            for (RelationMember m : r.members) {
+            for (RelationMember m : r.getMembers()) {
                 OsmPrimitive mo = map.get(m.member);
                 if(mo != null) /* TODO - This only prevents illegal data, but kills the relation */
Index: /trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 1925)
@@ -304,5 +304,5 @@
             int i = 0;
 
-            for (RelationMember rm : r.members) {
+            for (RelationMember rm : r.getMembers()) {
                 if (rm.member instanceof Way) {
                     if (rm.member == selectedWay)
Index: /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 1925)
@@ -327,5 +327,5 @@
             newRel = null;
             rolesToReAdd = null;
-            for (RelationMember rm : r.members) {
+            for (RelationMember rm : r.getMembers()) {
                 if (rm.member instanceof Node) {
                     if (rm.member == originalNode) {
@@ -340,5 +340,5 @@
             }
             if (newRel != null) {
-                for (RelationMember rm : r.members) {
+                for (RelationMember rm : r.getMembers()) {
                     //if (rm.member != selectedNode) {
                     newRel.members.add(rm);
Index: /trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 1925)
@@ -445,5 +445,5 @@
                 }
             } else if (osm instanceof Relation) {
-                for (RelationMember member : ((Relation)osm).members) {
+                for (RelationMember member : ((Relation)osm).getMembers()) {
                     if (member.member != null) {
                         isParent |= child.match(member.member);
Index: /trunk/src/org/openstreetmap/josm/command/DeleteCommand.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/command/DeleteCommand.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/command/DeleteCommand.java	(revision 1925)
@@ -164,5 +164,5 @@
         PrimitiveNameFormatter formatter = new PrimitiveNameFormatter();
         String role = new String();
-        for (RelationMember m : ref.members) {
+        for (RelationMember m : ref.getMembers()) {
             if (m.member == osm) {
                 role = m.role;
Index: /trunk/src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java	(revision 1925)
@@ -119,5 +119,5 @@
             } else if (parent instanceof Relation) {
                 Relation r = (Relation)parent;
-                for (RelationMember member : r.members) {
+                for (RelationMember member : r.getMembers()) {
                     if (member.member == child) {
                         OsmParentChildPair pair = new OsmParentChildPair(parent, member.member);
Index: /trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java	(revision 1925)
@@ -117,5 +117,5 @@
         for (Relation relation : Main.main.getCurrentDataSet().relations) {
             int position = 0;
-            for (RelationMember member : relation.members) {
+            for (RelationMember member : relation.getMembers()) {
                 if (!member.member.hasEqualSemanticAttributes(oldway)
                         || member.role.length() == 0) {
Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 1925)
@@ -401,5 +401,5 @@
     public void unlinkPrimitiveFromRelations(OsmPrimitive primitive) {
         for (Relation relation : relations) {
-            Iterator<RelationMember> it = relation.members.iterator();
+            Iterator<RelationMember> it = relation.getMembers().iterator();
             while(it.hasNext()) {
                 RelationMember member = it.next();
@@ -442,5 +442,5 @@
                 continue;
             }
-            for (RelationMember member: parent.members) {
+            for (RelationMember member: parent.getMembers()) {
                 if (member.refersTo(child)) {
                     parents.add(parent);
Index: /trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 1925)
@@ -4,11 +4,12 @@
 import static org.openstreetmap.josm.tools.I18n.trn;
 
+import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.visitor.Visitor;
-import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.tools.CopyList;
 
 /**
@@ -24,4 +25,23 @@
      */
     public final List<RelationMember> members = new ArrayList<RelationMember>();
+
+    /**
+     * @return Members of the relation. Changes made in returned list are not mapped
+     * back to the primitive, use setMembers() to modify the members
+     * @since 1925
+     */
+    public List<RelationMember> getMembers() {
+        return new CopyList<RelationMember>(members.toArray(new RelationMember[members.size()]));
+    }
+
+    /**
+     *
+     * @param members
+     * @since 1925
+     */
+    public void setMembers(List<RelationMember> members) {
+        this.members.clear();
+        this.members.addAll(members);
+    }
 
     final static String[] defnames = {"name", "ref", "restriction", "note"};
@@ -59,5 +79,5 @@
         // we must not add the members themselves, but instead
         // add clones of the members
-        for (RelationMember em : ((Relation)osm).members) {
+        for (RelationMember em : ((Relation)osm).getMembers()) {
             members.add(new RelationMember(em));
         }
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/AllNodesVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/AllNodesVisitor.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/AllNodesVisitor.java	(revision 1925)
@@ -5,8 +5,8 @@
 import java.util.HashSet;
 
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.RelationMember;
-import org.openstreetmap.josm.data.osm.Node;
-import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
 
@@ -43,5 +43,5 @@
      */
     public void visit(Relation e) {
-        for (RelationMember m : e.members)
+        for (RelationMember m : e.getMembers())
             if (m.member instanceof Node) visit((Node)m.member);
     }
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(revision 1925)
@@ -5,6 +5,6 @@
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.ProjectionBounds;
+import org.openstreetmap.josm.data.coor.CachedLatLon;
 import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.data.coor.CachedLatLon;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.Node;
@@ -33,5 +33,5 @@
     public void visit(Relation e) {
         // only use direct members
-        for (RelationMember m : e.members) {
+        for (RelationMember m : e.getMembers()) {
             if (!(m.member instanceof Relation)) {
                 m.member.visit(this);
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/CollectBackReferencesVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/CollectBackReferencesVisitor.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/CollectBackReferencesVisitor.java	(revision 1925)
@@ -73,5 +73,5 @@
         for (Relation r : ds.relations) {
             if (r.incomplete || r.deleted) continue;
-            for (RelationMember m : r.members) {
+            for (RelationMember m : r.getMembers()) {
                 if (m.member == p) {
                     if (!data.contains(r)) {
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 1925)
@@ -485,5 +485,5 @@
         if(selectedCall)
         {
-            for (RelationMember m : r.members)
+            for (RelationMember m : r.getMembers())
             {
                 if (m.member != null && !m.member.incomplete && !m.member.deleted
@@ -507,5 +507,5 @@
         if(r.isSelected()) /* draw ways*/
         {
-            for (RelationMember m : r.members)
+            for (RelationMember m : r.getMembers())
             {
                 if (m.member != null && !m.member.incomplete && !m.member.deleted
@@ -532,5 +532,5 @@
 
         /* find the "from", "via" and "to" elements */
-        for (RelationMember m : r.members)
+        for (RelationMember m : r.getMembers())
         {
             //if(restrictionDebug)
@@ -782,5 +782,5 @@
         r.clearErrors();
 
-        for (RelationMember m : r.members)
+        for (RelationMember m : r.getMembers())
         {
             if(m.member == null)
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitor.java	(revision 1925)
@@ -91,5 +91,5 @@
         }
         clone.members.clear();
-        for (RelationMember member: r.members) {
+        for (RelationMember member: r.getMembers()) {
             RelationMember cloneMember = new RelationMember(member);
             cloneMember.member = mappedPrimitives.get(member.member);
@@ -189,5 +189,5 @@
         //
         rememberRelationPartial(r);
-        for (RelationMember member: r.members) {
+        for (RelationMember member: r.getMembers()) {
             if (isAlreadyRemembered(member.member)) {
                 // referred primitive already remembered
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 1925)
@@ -192,5 +192,5 @@
         boolean replacedSomething = false;
         LinkedList<RelationMember> newMembers = new LinkedList<RelationMember>();
-        for (RelationMember myMember : r.members) {
+        for (RelationMember myMember : r.getMembers()) {
             OsmPrimitive mergedMember = merged.get(myMember.member);
             if (mergedMember == null) {
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 1925)
@@ -348,5 +348,5 @@
         g.setColor(col);
 
-        for (RelationMember m : r.members) {
+        for (RelationMember m : r.getMembers()) {
             if (m.member.incomplete || m.member.deleted) continue;
 
Index: /trunk/src/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModel.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModel.java	(revision 1925)
@@ -570,5 +570,5 @@
 
         HashMap<Long,OsmPrimitive> candidates = new HashMap<Long, OsmPrimitive>();
-        for (RelationMember m : r.members) {
+        for (RelationMember m : r.getMembers()) {
             if (m.member.id > 0 && !candidates.values().contains(m.member)) {
                 candidates.put(m.member.id,m.member);
Index: /trunk/src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberListMergeModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberListMergeModel.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberListMergeModel.java	(revision 1925)
@@ -15,5 +15,5 @@
 /**
  * The model for merging two lists of relation members
- * 
+ *
  *
  */
@@ -63,8 +63,8 @@
     /**
      * populates the model with the relation members in relation my and their
-     * 
+     *
      * @param my my relation. Must not be null.
      * @param their their relation. Must not be null.
-     * 
+     *
      * @throws IllegalArgumentException if my is null
      * @throws IllegalArgumentException if their is null
@@ -80,8 +80,8 @@
         getTheirEntries().clear();
 
-        for (RelationMember n : my.members) {
+        for (RelationMember n : my.getMembers()) {
             getMyEntries().add(n);
         }
-        for (RelationMember n : their.members) {
+        for (RelationMember n : their.getMembers()) {
             getTheirEntries().add(n);
         }
@@ -108,5 +108,5 @@
     /**
      * Builds the command to resolve conflicts in the node list of a way
-     * 
+     *
      * @param my  my relation. Must not be null.
      * @param their  their relation. Must not be null
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 1925)
@@ -190,5 +190,5 @@
             }
             public void visit(Relation e) {
-                for (RelationMember em : e.members) {
+                for (RelationMember em : e.getMembers()) {
                     em.member.visit(this);
                 }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 1925)
@@ -591,5 +591,5 @@
                             Relation rel = new Relation(cur);
                             Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected();
-                            for (RelationMember rm : cur.members) {
+                            for (RelationMember rm : cur.getMembers()) {
                                 for (OsmPrimitive osm : sel) {
                                     if (rm.member == osm)
@@ -802,5 +802,5 @@
             for (Relation r : Main.main.getCurrentDataSet().relations) {
                 if (!r.deleted && !r.incomplete) {
-                    for (RelationMember m : r.members) {
+                    for (RelationMember m : r.getMembers()) {
                         if (newSelection.contains(m.member)) {
                             Collection<RelationMember> value = roles.get(r);
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 1925)
@@ -270,5 +270,5 @@
             Collection<RelationMember> members = new HashSet<RelationMember>();
             Collection<OsmPrimitive> selection = Main.map.mapView.getEditLayer().data.getSelected();
-            for (RelationMember member: r.members) {
+            for (RelationMember member: r.getMembers()) {
                 if (selection.contains(member.member)) {
                     members.add(member);
@@ -368,5 +368,5 @@
     /**
      * Creates a new relation with a copy of the current editor state
-     * 
+     *
      */
     class DuplicateAction extends AbstractAction implements ListSelectionListener {
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ChildRelationBrowser.java	(revision 1925)
@@ -51,5 +51,5 @@
  * ChildRelationBrowser is a UI component which provides a tree-like view on the hierarchical
  * structure of relations
- * 
+ *
  *
  */
@@ -67,5 +67,5 @@
     /**
      * Replies the {@see OsmDataLayer} this editor is related to
-     * 
+     *
      * @return the osm data layer
      */
@@ -88,5 +88,5 @@
     /**
      * builds the panel with the command buttons
-     * 
+     *
      * @return the button panel
      */
@@ -114,5 +114,5 @@
     /**
      * constructor
-     * 
+     *
      * @param layer the {@see OsmDataLayer} this browser is related to. Must not be null.
      * @exception IllegalArgumentException thrown, if layer is null
@@ -128,5 +128,5 @@
     /**
      * constructor
-     * 
+     *
      * @param layer the {@see OsmDataLayer} this browser is related to. Must not be null.
      * @param root the root relation
@@ -140,5 +140,5 @@
     /**
      * populates the browser with a relation
-     * 
+     *
      * @param r the relation
      */
@@ -149,5 +149,5 @@
     /**
      * populates the browser with a list of relation members
-     * 
+     *
      * @param members the list of relation members
      */
@@ -159,5 +159,5 @@
     /**
      * replies the parent dialog this browser is embedded in
-     * 
+     *
      * @return the parent dialog; null, if there is no {@see Dialog} as parent dialog
      */
@@ -172,6 +172,6 @@
     /**
      * Action for editing the currently selected relation
-     * 
-     * 
+     *
+     *
      */
     class EditAction extends AbstractAction implements TreeSelectionListener {
@@ -278,6 +278,6 @@
     /**
      * The asynchronous task for downloading relation members.
-     * 
-     * 
+     *
+     *
      */
     class DownloadAllChildrenTask extends PleaseWaitRunnable {
@@ -338,5 +338,5 @@
          * warns the user if a relation couldn't be loaded because it was deleted on
          * the server (the server replied a HTTP code 410)
-         * 
+         *
          * @param r the relation
          */
@@ -360,10 +360,10 @@
         /**
          * Remembers the child relations to download
-         * 
+         *
          * @param parent the parent relation
          */
         protected void rememberChildRelationsToDownload(Relation parent) {
             downloadedRelationIds.add(parent.id);
-            for (RelationMember member: parent.members) {
+            for (RelationMember member: parent.getMembers()) {
                 if (member.member instanceof Relation) {
                     Relation child = (Relation)member.member;
@@ -378,5 +378,5 @@
          * Merges the primitives in <code>ds</code> to the dataset of the
          * edit layer
-         * 
+         *
          * @param ds the data set
          */
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1925)
@@ -27,10 +27,8 @@
 import java.util.Iterator;
 import java.util.List;
-import java.util.Set;
 import java.util.logging.Logger;
 
 import javax.swing.AbstractAction;
 import javax.swing.BorderFactory;
-import javax.swing.DefaultListSelectionModel;
 import javax.swing.JButton;
 import javax.swing.JComponent;
@@ -42,5 +40,4 @@
 import javax.swing.JTabbedPane;
 import javax.swing.JTable;
-import javax.swing.JTextField;
 import javax.swing.KeyStroke;
 import javax.swing.SwingUtilities;
@@ -87,5 +84,5 @@
 /**
  * This dialog is for editing relations.
- * 
+ *
  */
 public class GenericRelationEditor extends RelationEditor {
@@ -114,7 +111,7 @@
      * Creates a new relation editor for the given relation. The relation will be saved if the user
      * selects "ok" in the editor.
-     * 
+     *
      * If no relation is given, will create an editor for a new relation.
-     * 
+     *
      * @param layer the {@see OsmDataLayer} the new or edited relation belongs to
      * @param relation relation to edit, or null to create a new one.
@@ -206,5 +203,5 @@
     /**
      * builds the panel with the OK and the Cancel button
-     * 
+     *
      * @return the panel with the OK and the Cancel button
      */
@@ -221,5 +218,5 @@
     /**
      * build the panel with the buttons on the left
-     * 
+     *
      * @return
      */
@@ -260,5 +257,5 @@
     /**
      * builds the panel with the tag editor
-     * 
+     *
      * @return the panel with the tag editor
      */
@@ -325,5 +322,5 @@
     /**
      * builds the panel for the relation member editor
-     * 
+     *
      * @return the panel for the relation member editor
      */
@@ -439,5 +436,5 @@
     /**
      * builds the panel with the table displaying the currently selected primitives
-     * 
+     *
      * @return
      */
@@ -454,5 +451,5 @@
     /**
      * builds the {@see JSplitPane} which divides the editor in an upper and a lower half
-     * 
+     *
      * @return the split panel
      */
@@ -475,5 +472,5 @@
     /**
      * build the panel with the buttons on the left
-     * 
+     *
      * @return
      */
@@ -530,5 +527,5 @@
     /**
      * build the panel with the buttons for adding or removing the current selection
-     * 
+     *
      * @return
      */
@@ -659,5 +656,5 @@
      * checks whether the current relation has members referring to itself. If so,
      * warns the users and provides an option for removing these members.
-     * 
+     *
      */
     protected void cleanSelfReferences() {
@@ -1047,5 +1044,5 @@
          * Apply the updates for an existing relation which has not been changed
          * outside of the relation editor.
-         * 
+         *
          */
         protected void applyExistingConflictingRelation() {
@@ -1060,5 +1057,5 @@
          * Apply the updates for an existing relation which has been changed
          * outside of the relation editor.
-         * 
+         *
          */
         protected void applyExistingNonConflictingRelation() {
@@ -1367,5 +1364,5 @@
     /**
      * Creates a new relation with a copy of the current editor state
-     * 
+     *
      */
     class DuplicateRelationAction extends AbstractAction {
@@ -1389,6 +1386,6 @@
     /**
      * Action for editing the currently selected relation
-     * 
-     * 
+     *
+     *
      */
     class EditAction extends AbstractAction implements ListSelectionListener {
@@ -1408,5 +1405,5 @@
             Collection<RelationMember> members = new HashSet<RelationMember>();
             Collection<OsmPrimitive> selection = getLayer().data.getSelected();
-            for (RelationMember member: r.members) {
+            for (RelationMember member: r.getMembers()) {
                 if (selection.contains(member.member)) {
                     members.add(member);
@@ -1485,5 +1482,5 @@
     /**
      * The asynchronous task for downloading relation members.
-     * 
+     *
      */
     class DownloadTask extends PleaseWaitRunnable {
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1925)
@@ -69,8 +69,8 @@
     public void populate(Relation relation) {
         members.clear();
-        if (relation != null && relation.members != null) {
+        if (relation != null) {
             // make sure we work with clones of the relation members
             // in the model.
-            members.addAll(new Relation(relation).members);
+            members.addAll(new Relation(relation).getMembers());
         }
         fireTableDataChanged();
@@ -328,5 +328,5 @@
     /**
      * Replies the number of members which refer to a particular primitive
-     * 
+     *
      * @param primitive the primitive
      * @return the number of members which refer to a particular primitive
@@ -344,5 +344,5 @@
     /**
      * updates the role of the members given by the indices in <code>idx</code>
-     * 
+     *
      * @param idx the array of indices
      * @param role the new role
@@ -362,5 +362,5 @@
     /**
      * Get the currently selected relation members
-     * 
+     *
      * @return a collection with the currently selected relation members
      */
@@ -375,5 +375,5 @@
     /**
      * Replies the set of selected referers. Never null, but may be empty.
-     * 
+     *
      * @return the set of selected referers
      */
@@ -389,5 +389,5 @@
      * Replies true, if the selected {@see OsmPrimitive}s in the layer belonging
      * to this model are in sync with the selected referers in this model.
-     * 
+     *
      * @return
      */
@@ -400,5 +400,5 @@
     /**
      * Selects the members in the collection selectedMembers
-     * 
+     *
      * @param selectedMembers the collection of selected members
      */
@@ -441,5 +441,5 @@
      * to an editable relation, i.e. a relation which is not
      * incomplete.
-     * 
+     *
      * @param index the index
      * @return true, if the index-th relation members referrs
@@ -460,5 +460,5 @@
      * Replies true if there is at least one relation member in this model
      * which refers to at least on the primitives in <code>primitives</code>.
-     * 
+     *
      * @param primitives the collection of primitives
      * @return true if there is at least one relation member in this model
@@ -485,5 +485,5 @@
      * Selects all mebers which refer to {@see OsmPrimitive}s in the collections
      * <code>primitmives</code>. Does nothing is primitives is null.
-     * 
+     *
      * @param primitives the collection of primitives
      */
@@ -507,5 +507,5 @@
      * Replies true if the layer this model belongs to is equal to the active
      * layer
-     * 
+     *
      * @return true if the layer this model belongs to is equal to the active
      * layer
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java	(revision 1925)
@@ -47,5 +47,5 @@
     protected boolean isReferringRelation(Relation parent) {
         if (parent == null) return false;
-        for (RelationMember m: parent.members) {
+        for (RelationMember m: parent.getMembers()) {
             if (m.member instanceof Relation) {
                 Relation child = (Relation)m.member;
@@ -70,5 +70,5 @@
     /**
      * Populates the browser with the list of referring relations in the {@see DataSet} ds.
-     * 
+     *
      * @param ds the data set
      */
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeModel.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeModel.java	(revision 1925)
@@ -17,8 +17,8 @@
  * This is a {@see TreeModel} which provides the hierarchical structure of {@see Relation}s
  * to a  {@see JTree}.
- * 
+ *
  * The model is initialized with a root relation or with a list of {@see RelationMember}s, see
  * {@see #populate(Relation)} and {@see #populate(List)} respectively.
- * 
+ *
  *
  */
@@ -51,5 +51,5 @@
     /**
      * constructor
-     * 
+     *
      * @param members a list of members
      */
@@ -65,5 +65,5 @@
      * Replies the number of children of type relation for a particular
      * relation <code>parent</code>
-     * 
+     *
      * @param parent the parent relation
      * @return the number of children of type relation
@@ -71,7 +71,6 @@
     protected int getNumRelationChildren(Relation parent) {
         if (parent == null) return 0;
-        if (parent.members == null) return 0;
         int count = 0;
-        for(RelationMember member : parent.members) {
+        for(RelationMember member : parent.getMembers()) {
             if (member.member instanceof Relation) {
                 count++;
@@ -84,5 +83,5 @@
      * Replies the i-th child of type relation for a particular relation
      * <code>parent</code>.
-     * 
+     *
      * @param parent the parent relation
      * @param idx the index
@@ -93,5 +92,5 @@
         if (parent == null) return null;
         int count=0;
-        for (RelationMember member : parent.members) {
+        for (RelationMember member : parent.getMembers()) {
             if (!(member.member instanceof Relation)) {
                 continue;
@@ -107,5 +106,5 @@
      * Replies the index of a particular <code>child</code> with respect to its
      * <code>parent</code>.
-     * 
+     *
      * @param parent  the parent relation
      * @param child the child relation
@@ -113,10 +112,10 @@
      * <code>parent</code>; -1 if either parent or child are null or if <code>child</code>
      * isn't a child of <code>parent</code>.
-     * 
+     *
      */
     protected int getIndexForRelationChild(Relation parent, Relation child) {
         if (parent == null || child == null) return -1;
         int idx = 0;
-        for (RelationMember member : parent.members) {
+        for (RelationMember member : parent.getMembers()) {
             if (!(member.member instanceof Relation)) {
                 continue;
@@ -130,8 +129,8 @@
     /**
      * Populates the model with a root relation
-     * 
+     *
      * @param root the root relation
      * @see #populate(List)
-     * 
+     *
      */
     public void populate(Relation root) {
@@ -145,5 +144,5 @@
     /**
      * Populates the model with a list of relation members
-     * 
+     *
      * @param members the relation members
      */
@@ -170,5 +169,5 @@
      * Notifies tree model listeners about an update of the
      * trees nodes.
-     * 
+     *
      * @param path the tree path to the node
      */
@@ -183,5 +182,5 @@
     /**
      * Invoke to notify all listeners about an update of a particular node
-     * 
+     *
      * @param pathToNode the tree path to the node
      */
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ac/AutoCompletionCache.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ac/AutoCompletionCache.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ac/AutoCompletionCache.java	(revision 1925)
@@ -18,5 +18,5 @@
  * AutoCompletionCache temporarily holds a cache of keys with a list of
  * possible auto completion values for each key.
- * 
+ *
  * The cache can initialize itself from the current JOSM data set such that
  * <ol>
@@ -25,5 +25,5 @@
  *     this key</li>
  * </ol>
- * 
+ *
  * Building up auto completion lists should not
  * slow down tabbing from input field to input field. Looping through the complete
@@ -87,5 +87,5 @@
     /**
      * make sure, <code>key</code> is in the cache
-     * 
+     *
      * @param key  the key
      */
@@ -100,5 +100,5 @@
     /**
      * make sure, value is one of the auto completion values allowed for key
-     * 
+     *
      * @param key the key
      * @param value the value
@@ -115,5 +115,5 @@
      * make sure, the keys and values of all tags held by primitive are
      * in the auto completion cache
-     * 
+     *
      * @param primitive an OSM primitive
      */
@@ -127,9 +127,9 @@
     /**
      * Caches all member roles of the relation <code>relation</code>
-     * 
+     *
      * @param relation the relation
      */
     protected void cacheRelationMemberRoles(Relation relation){
-        for (RelationMember m: relation.members) {
+        for (RelationMember m: relation.getMembers()) {
             if (m.role == null || m.role.trim().equals("")) {
                 continue;
@@ -144,5 +144,5 @@
      * initializes the cache from the primitives in the dataset of
      * {@see #layer}
-     * 
+     *
      */
     public void initFromJOSMDataset() {
@@ -165,5 +165,5 @@
     /**
      * replies the keys held by the cache
-     * 
+     *
      * @return the list of keys held by the cache
      */
@@ -175,5 +175,5 @@
      * replies the auto completion values allowed for a specific key. Replies
      * an empty list if key is null or if key is not in {@link #getKeys()}.
-     * 
+     *
      * @param key
      * @return the list of auto completion values
@@ -187,5 +187,5 @@
     /**
      * Replies the list of member roles
-     * 
+     *
      * @return the list of member roles
      */
@@ -197,5 +197,5 @@
      * Populates the an {@see AutoCompletionList} with the currently cached
      * member roles.
-     * 
+     *
      * @param list the list to populate
      */
Index: /trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 1925)
@@ -203,5 +203,5 @@
         if (relation.id == 0) return this;
         remember(relation.id, OsmPrimitiveType.RELATION);
-        for (RelationMember member : relation.members) {
+        for (RelationMember member : relation.getMembers()) {
             appendGeneric(member.member);
         }
Index: /trunk/src/org/openstreetmap/josm/io/OsmWriter.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 1924)
+++ /trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 1925)
@@ -131,5 +131,5 @@
         } else {
             out.println(">");
-            for (RelationMember em : e.members) {
+            for (RelationMember em : e.getMembers()) {
                 out.print("    <member type='");
                 out.print(OsmPrimitiveType.from(em.member).getAPIName());
Index: /trunk/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java
===================================================================
--- /trunk/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java	(revision 1924)
+++ /trunk/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java	(revision 1925)
@@ -381,20 +381,20 @@
         //
         Set<Long> expectedWayIds = new HashSet<Long>();
-        for (RelationMember m : lookupRelation(ds, 6).members) {
-            if (m.member instanceof Way) {
-                expectedWayIds.add(m.member.id);
-            }
-        }
-        for (RelationMember m : lookupRelation(ds, 7).members) {
-            if (m.member instanceof Way) {
-                expectedWayIds.add(m.member.id);
-            }
-        }
-        for (RelationMember m : lookupRelation(ds, 8).members) {
-            if (m.member instanceof Way) {
-                expectedWayIds.add(m.member.id);
-            }
-        }
-        for (RelationMember m : lookupRelation(ds, 9).members) {
+        for (RelationMember m : lookupRelation(ds, 6).getMembers()) {
+            if (m.member instanceof Way) {
+                expectedWayIds.add(m.member.id);
+            }
+        }
+        for (RelationMember m : lookupRelation(ds, 7).getMembers()) {
+            if (m.member instanceof Way) {
+                expectedWayIds.add(m.member.id);
+            }
+        }
+        for (RelationMember m : lookupRelation(ds, 8).getMembers()) {
+            if (m.member instanceof Way) {
+                expectedWayIds.add(m.member.id);
+            }
+        }
+        for (RelationMember m : lookupRelation(ds, 9).getMembers()) {
             if (m.member instanceof Way) {
                 expectedWayIds.add(m.member.id);
@@ -425,5 +425,5 @@
         HashSet<Long> ret = new HashSet<Long>();
         if (r == null) return ret;
-        for (RelationMember m: r.members) {
+        for (RelationMember m: r.getMembers()) {
             if (m.member instanceof Node) {
                 ret.add(m.member.id);
@@ -477,20 +477,20 @@
         //
         Set<Long> expectedWayIds = new HashSet<Long>();
-        for (RelationMember m : lookupRelation(ds, 6).members) {
-            if (m.member instanceof Way) {
-                expectedWayIds.add(m.member.id);
-            }
-        }
-        for (RelationMember m : lookupRelation(ds, 7).members) {
-            if (m.member instanceof Way) {
-                expectedWayIds.add(m.member.id);
-            }
-        }
-        for (RelationMember m : lookupRelation(ds, 8).members) {
-            if (m.member instanceof Way) {
-                expectedWayIds.add(m.member.id);
-            }
-        }
-        for (RelationMember m : lookupRelation(ds, 9).members) {
+        for (RelationMember m : lookupRelation(ds, 6).getMembers()) {
+            if (m.member instanceof Way) {
+                expectedWayIds.add(m.member.id);
+            }
+        }
+        for (RelationMember m : lookupRelation(ds, 7).getMembers()) {
+            if (m.member instanceof Way) {
+                expectedWayIds.add(m.member.id);
+            }
+        }
+        for (RelationMember m : lookupRelation(ds, 8).getMembers()) {
+            if (m.member instanceof Way) {
+                expectedWayIds.add(m.member.id);
+            }
+        }
+        for (RelationMember m : lookupRelation(ds, 9).getMembers()) {
             if (m.member instanceof Way) {
                 expectedWayIds.add(m.member.id);
