Index: /trunk/src/org/openstreetmap/josm/actions/PasteAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/PasteAction.java	(revision 1925)
+++ /trunk/src/org/openstreetmap/josm/actions/PasteAction.java	(revision 1926)
@@ -100,6 +100,5 @@
                 }
             }
-            rnew.members.clear();
-            rnew.members.addAll(members);
+            rnew.setMembers(members);
             map.put(r, rnew);
         }
Index: /trunk/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java	(revision 1925)
+++ /trunk/src/org/openstreetmap/josm/command/ChangeRelationMemberRoleCommand.java	(revision 1926)
@@ -43,11 +43,11 @@
 
     @Override public boolean executeCommand() {
-        if (position < 0 || position >= relation.members.size()) {
+        if (position < 0 || position >= relation.getMembersCount()) {
             Main.debug("error changing the role");
             return false;
         }
 
-        oldRole = relation.members.get(position).role;
-        relation.members.get(position).role = newRole;
+        oldRole = relation.getMember(position).role;
+        relation.getMember(position).role = newRole;
 
         oldModified = relation.modified;
@@ -57,5 +57,5 @@
 
     @Override public void undoCommand() {
-        relation.members.get(position).role = oldRole;
+        relation.getMember(position).role = oldRole;
         relation.modified = oldModified;
     }
Index: /trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 1925)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 1926)
@@ -37,10 +37,30 @@
     /**
      *
-     * @param members
+     * @param members Can be null, in that case all members are removed
      * @since 1925
      */
     public void setMembers(List<RelationMember> members) {
         this.members.clear();
-        this.members.addAll(members);
+        if (members != null) {
+            this.members.addAll(members);
+        }
+    }
+
+    /**
+     *
+     * @since 1926
+     */
+    public int getMembersCount() {
+        return members.size();
+    }
+
+    /**
+     *
+     * @param index
+     * @return
+     * @since 1926
+     */
+    public RelationMember getMember(int index) {
+        return members.get(index);
     }
 
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 1925)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/MergeVisitor.java	(revision 1926)
@@ -206,6 +206,5 @@
         }
         if (replacedSomething) {
-            r.members.clear();
-            r.members.addAll(newMembers);
+            r.setMembers(newMembers);
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1925)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1926)
@@ -18,5 +18,4 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -224,6 +223,5 @@
 
     public void applyToRelation(Relation relation) {
-        relation.members.clear();
-        relation.members.addAll(members);
+        relation.setMembers(members);
     }
 
Index: /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java	(revision 1925)
+++ /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeSourceBuildingVisitorTest.java	(revision 1926)
@@ -2,7 +2,11 @@
 package org.openstreetmap.josm.data.osm.visitor;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
 import java.util.Collection;
 
-import org.junit.Ignore;
 import org.junit.Test;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -13,6 +17,4 @@
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
-
-import static org.junit.Assert.*;
 
 public class MergeSourceBuildingVisitorTest {
@@ -195,5 +197,5 @@
         r = (Relation)hull.getPrimitiveById(1);
         assertNotNull(r);
-        assertEquals(3, r.members.size());
+        assertEquals(3, r.getMembersCount());
         RelationMember m = new RelationMember("node-20", hull.getPrimitiveById(20));
         assertTrue(r.members.contains(m));
@@ -254,5 +256,5 @@
         r = (Relation)hull.getPrimitiveById(1);
         assertNotNull(r);
-        assertEquals(3, r.members.size());
+        assertEquals(3, r.getMembersCount());
         RelationMember m = new RelationMember("node-20", hull.getPrimitiveById(20));
         assertTrue(r.members.contains(m));
@@ -319,5 +321,5 @@
         r = (Relation)lookupByName(hull.relations, "r1");
         assertNotNull(r);
-        assertEquals(3, r.members.size());
+        assertEquals(3, r.getMembersCount());
         RelationMember m = new RelationMember("node-20", lookupByName(hull.nodes, "n20"));
         assertTrue(r.members.contains(m));
@@ -343,5 +345,5 @@
         Relation r = (Relation)hull.getPrimitiveById(1);
         assertNotNull(r);
-        assertEquals(1, r.members.size());
+        assertEquals(1, r.getMembersCount());
         assertTrue(r.members.contains(new RelationMember("relation-1",r)));
     }
@@ -363,5 +365,5 @@
         Relation r = (Relation)lookupByName(hull.relations, "r1");
         assertNotNull(r);
-        assertEquals(1, r.members.size());
+        assertEquals(1, r.getMembersCount());
         assertTrue(r.members.contains(new RelationMember("relation-1",r)));
     }
@@ -387,7 +389,7 @@
         r2 = (Relation)hull.getPrimitiveById(2);
         assertNotNull(r2);
-        assertEquals(1, r1.members.size());
+        assertEquals(1, r1.getMembersCount());
         assertTrue(r1.members.contains(new RelationMember("relation-2",r2)));
-        assertEquals(1, r2.members.size());
+        assertEquals(1, r2.getMembersCount());
         assertTrue(r2.members.contains(new RelationMember("relation-1",r1)));
     }
Index: /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java	(revision 1925)
+++ /trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java	(revision 1926)
@@ -972,5 +972,5 @@
 
         Relation r = (Relation)my.getPrimitiveById(4);
-        assertEquals(2, r.members.size());
+        assertEquals(2, r.getMembersCount());
 
         Node n = (Node)my.getPrimitiveById(1);
