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);
     }
 
