Index: trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 1927)
+++ trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 1928)
@@ -319,7 +319,5 @@
                         for(Way wayToAdd : newWays)
                         {
-                            RelationMember em = new RelationMember();
-                            em.member = wayToAdd;
-                            em.role = rm.role;
+                            RelationMember em = new RelationMember(rm.role, wayToAdd);
                             if(em.role != null && em.role.length() > 0 && !("multipolygon".equals(type))) {
                                 warnmerole = true;
Index: trunk/src/org/openstreetmap/josm/data/osm/RelationMember.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/RelationMember.java	(revision 1927)
+++ trunk/src/org/openstreetmap/josm/data/osm/RelationMember.java	(revision 1928)
@@ -15,5 +15,8 @@
     /**
      * Default constructor. Does nothing.
+     * @deprecated Use other constructors because RelationMember class will became immutable
+     * in the future
      */
+    @Deprecated
     public RelationMember() { }
 
@@ -38,5 +41,5 @@
     /**
      * Replies true, if this relation member refers to the primitive
-     * 
+     *
      * @param primitive  the primitive to check
      * @return true, if this relation member refers to the primitive
Index: trunk/src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberListMergeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberListMergeModel.java	(revision 1927)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberListMergeModel.java	(revision 1928)
@@ -100,8 +100,5 @@
     @Override
     protected RelationMember cloneEntryForMergedList(RelationMember entry) {
-        RelationMember member = new RelationMember();
-        member.role = entry.role;
-        member.member = entry.member;
-        return member;
+        return new RelationMember(entry.role, entry.member);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 1927)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 1928)
@@ -595,7 +595,5 @@
                                     if (rm.member == osm)
                                     {
-                                        RelationMember mem = new RelationMember();
-                                        mem.role = rm.role;
-                                        mem.member = rm.member;
+                                        RelationMember mem = new RelationMember(rm.role, rm.member);
                                         rel.members.remove(mem);
                                         break;
Index: trunk/src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 1927)
+++ trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 1928)
@@ -122,5 +122,5 @@
         public String type;
         public long id;
-        public RelationMember relationMember;
+        public String role;
     }
 
@@ -204,5 +204,4 @@
                         throw new SAXException(tr("Found <member> element in non-relation."));
                     RelationMemberData emd = new RelationMemberData();
-                    emd.relationMember = new RelationMember();
                     String value = atts.getValue("ref");
                     if (value == null)
@@ -220,5 +219,5 @@
                     emd.type= value;
                     value = atts.getValue("role");
-                    emd.relationMember.role = value;
+                    emd.role = value;
 
                     if (emd.id == 0)
@@ -393,5 +392,5 @@
      * and populate them later.
      */
-    private void createRelations() {
+    private void createRelations() throws SAXException {
 
         // pass 1 - create all relations
@@ -414,30 +413,30 @@
 
             for (RelationMemberData emd : e.getValue()) {
-                RelationMember em = emd.relationMember;
+                OsmPrimitive member;
                 if (emd.type.equals("node")) {
-                    em.member = findNode(emd.id);
-                    if (em.member == null) {
-                        em.member = new Node(emd.id);
-                        ds.addPrimitive(em.member);
+                    member = findNode(emd.id);
+                    if (member == null) {
+                        member = new Node(emd.id);
+                        ds.addPrimitive(member);
                     }
                 } else if (emd.type.equals("way")) {
-                    em.member = hm.get(emd.id);
-                    if (em.member == null) {
-                        em.member = findWay(emd.id);
-                    }
-                    if (em.member == null) {
-                        em.member = new Way(emd.id);
-                        ds.addPrimitive(em.member);
+                    member = hm.get(emd.id);
+                    if (member == null) {
+                        member = findWay(emd.id);
+                    }
+                    if (member == null) {
+                        member = new Way(emd.id);
+                        ds.addPrimitive(member);
                     }
                 } else if (emd.type.equals("relation")) {
-                    em.member = findRelation(emd.id);
-                    if (em.member == null) {
-                        em.member = new Relation(emd.id);
-                        ds.addPrimitive(em.member);
+                    member = findRelation(emd.id);
+                    if (member == null) {
+                        member = new Relation(emd.id);
+                        ds.addPrimitive(member);
                     }
                 } else {
-                    // this is an error.
+                    throw new SAXException(tr("Unknown relation member type {0}", emd.type));
                 }
-                en.members.add(em);
+                en.members.add(new RelationMember(emd.role, member));
             }
         }
Index: trunk/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java
===================================================================
--- trunk/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java	(revision 1927)
+++ trunk/test/functional/org/openstreetmap/josm/io/MultiFetchServerObjectReaderTest.java	(revision 1928)
@@ -95,8 +95,5 @@
                 int idx = (start + j) % 500;
                 Node n = nodes.get(idx);
-                RelationMember member = new RelationMember();
-                member.member = n;
-                member.role = "role-" + j;
-                r.members.add(member);
+                r.members.add(new RelationMember("role-" + j, n));
             }
             int numWaysInRelation = (int)Math.round(Math.random() * 10);
@@ -105,8 +102,5 @@
                 int idx = (start + j) % 500;
                 Way w = ways.get(idx);
-                RelationMember member = new RelationMember();
-                member.member = w;
-                member.role = "role-" + j;
-                r.members.add(member);
+                r.members.add(new RelationMember("role-" + j, w));
             }
             ds.addPrimitive(r);
Index: trunk/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java
===================================================================
--- trunk/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java	(revision 1927)
+++ trunk/test/functional/org/openstreetmap/josm/io/OsmServerBackreferenceReaderTest.java	(revision 1928)
@@ -87,19 +87,14 @@
             r.put("name", "relation-" +i);
             for (int j =0; j < 10; j++) {
-                RelationMember member = new RelationMember();
-                member.role = "node-" + j;
-                member.member = lookupNode(ds, i + j);
+                RelationMember member = new RelationMember("node-" + j, lookupNode(ds, i + j));
+                r.members.add(member);
             }
             for (int j =0; j < 5; j++) {
-                RelationMember member = new RelationMember();
-                member.role = "way-" + j;
-                member.member = lookupWay(ds, i + j);
+                RelationMember member = new RelationMember("way-" + j, lookupWay(ds, i + j));
                 r.members.add(member);
             }
             if (i > 5) {
                 for (int j =0; j < 3; j++) {
-                    RelationMember member = new RelationMember();
-                    member.role = "relation-" + j;
-                    member.member = lookupRelation(ds, j);
+                    RelationMember member = new RelationMember("relation-" + j, lookupRelation(ds, j));
                     logger.info(MessageFormat.format("adding relation {0} to relation {1}", j, i));
                     r.members.add(member);
