Index: trunk/src/org/openstreetmap/josm/actions/PasteAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/PasteAction.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/actions/PasteAction.java	(revision 1938)
@@ -92,9 +92,9 @@
             List<RelationMember> members = new ArrayList<RelationMember>();
             for (RelationMember m : r.getMembers()) {
-                OsmPrimitive mo = map.get(m.member);
+                OsmPrimitive mo = map.get(m.getMember());
                 if(mo != null) /* TODO - This only prevents illegal data, but kills the relation */
                 {
                     RelationMember mnew = new RelationMember(m);
-                    mnew.member = map.get(m.member);
+                    mnew.member = map.get(m.getMember());
                     members.add(mnew);
                 }
Index: trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/actions/SplitWayAction.java	(revision 1938)
@@ -305,6 +305,6 @@
 
             for (RelationMember rm : r.getMembers()) {
-                if (rm.member instanceof Way) {
-                    if (rm.member == selectedWay)
+                if (rm.isWay()) {
+                    if (rm.getMember() == selectedWay)
                     {
                         if(!("route".equals(type)) && !("multipolygon".equals(type))) {
Index: trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 1938)
@@ -328,6 +328,6 @@
             rolesToReAdd = null;
             for (RelationMember rm : r.getMembers()) {
-                if (rm.member instanceof Node) {
-                    if (rm.member == originalNode) {
+                if (rm.isNode()) {
+                    if (rm.getMember() == originalNode) {
                         if (newRel == null) {
                             newRel = new Relation(r);
Index: trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 1938)
@@ -446,6 +446,7 @@
             } else if (osm instanceof Relation) {
                 for (RelationMember member : ((Relation)osm).getMembers()) {
-                    if (member.member != null) {
-                        isParent |= child.match(member.member);
+                    if (member.getMember() != null) {
+                        // TODO Nullable member will not be allowed
+                        isParent |= child.match(member.getMember());
                     }
                 }
Index: trunk/src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/command/PurgePrimitivesCommand.java	(revision 1938)
@@ -120,6 +120,6 @@
                 Relation r = (Relation)parent;
                 for (RelationMember member : r.getMembers()) {
-                    if (member.member == child) {
-                        OsmParentChildPair pair = new OsmParentChildPair(parent, member.member);
+                    if (member.getMember() == child) {
+                        OsmParentChildPair pair = new OsmParentChildPair(parent, member.getMember());
                         if (! pairs.contains(pair)) {
                             pairs.add(pair);
Index: trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/corrector/ReverseWayTagCorrector.java	(revision 1938)
@@ -118,5 +118,5 @@
             int position = 0;
             for (RelationMember member : relation.getMembers()) {
-                if (!member.member.hasEqualSemanticAttributes(oldway)
+                if (!member.getMember().hasEqualSemanticAttributes(oldway)
                         || !member.hasRole()) {
                     position++;
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 1938)
@@ -349,17 +349,17 @@
 
         for (RelationMember m : r.getMembers()) {
-            if (m.member.incomplete || m.member.deleted) continue;
-
-            if (m.member instanceof Node) {
-                Point p = nc.getPoint((Node) m.member);
+            if (m.getMember().incomplete || m.getMember().deleted) continue;
+
+            if (m.isNode()) {
+                Point p = nc.getPoint(m.getNode());
                 if (p.x < 0 || p.y < 0
                     || p.x > nc.getWidth() || p.y > nc.getHeight()) continue;
 
                 g.drawOval(p.x-3, p.y-3, 6, 6);
-            } else if (m.member instanceof Way) {
+            } else if (m.isWay()) {
                 GeneralPath path = new GeneralPath();
 
                 boolean first = true;
-                for (Node n : ((Way) m.member).getNodes()) {
+                for (Node n : m.getWay().getNodes()) {
                     if (n.incomplete || n.deleted) continue;
                     Point p = nc.getPoint(n);
Index: trunk/src/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModel.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModel.java	(revision 1938)
@@ -571,6 +571,6 @@
         HashMap<Long,OsmPrimitive> candidates = new HashMap<Long, OsmPrimitive>();
         for (RelationMember m : r.getMembers()) {
-            if (m.member.id > 0 && !candidates.values().contains(m.member)) {
-                candidates.put(m.member.id,m.member);
+            if (m.getMember().id > 0 && !candidates.values().contains(m.getMember())) {
+                candidates.put(m.getMember().id, m.getMember());
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberListMergeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberListMergeModel.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberListMergeModel.java	(revision 1938)
@@ -25,6 +25,6 @@
     public boolean isEqualEntry(RelationMember e1, RelationMember e2) {
         boolean ret = e1.getRole().equals(e2.getRole());
-        if (e1.member.id > 0 ) {
-            ret = ret && (e1.member.id == e2.member.id);
+        if (e1.getMember().id > 0 ) {
+            ret = ret && (e1.getMember().id == e2.getMember().id);
         } else {
             ret = ret && (e1 == e2);
Index: trunk/src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberTableCellRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberTableCellRenderer.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/relation/RelationMemberTableCellRenderer.java	(revision 1938)
@@ -17,7 +17,5 @@
 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.Way;
 import org.openstreetmap.josm.gui.conflict.ListMergeModel;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -158,12 +156,12 @@
 
     protected void renderPrimitive(RelationMember member) {
-        String displayName = member.member.getName();
+        String displayName = member.getMember().getName();
         setText(displayName);
-        setToolTipText(buildToolTipText(member.member));
-        if (member.member instanceof Node) {
+        setToolTipText(buildToolTipText(member.getMember()));
+        if (member.isNode()) {
             setIcon(nodeIcon);
-        } else if (member.member instanceof Way) {
+        } else if (member.isWay()) {
             setIcon(wayIcon);
-        } else if (member.member instanceof Relation) {
+        } else if (member.isRelation()) {
             setIcon(relationIcon);
         } else {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 1938)
@@ -593,5 +593,5 @@
                             for (RelationMember rm : cur.getMembers()) {
                                 for (OsmPrimitive osm : sel) {
-                                    if (rm.member == osm)
+                                    if (rm.getMember() == osm)
                                     {
                                         rel.members.remove(rm);
@@ -800,5 +800,5 @@
                 if (!r.deleted && !r.incomplete) {
                     for (RelationMember m : r.getMembers()) {
-                        if (newSelection.contains(m.member)) {
+                        if (newSelection.contains(m.getMember())) {
                             Collection<RelationMember> value = roles.get(r);
                             if (value == null) {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 1938)
@@ -271,5 +271,5 @@
             Collection<OsmPrimitive> selection = Main.map.mapView.getEditLayer().data.getSelected();
             for (RelationMember member: r.getMembers()) {
-                if (selection.contains(member.member)) {
+                if (selection.contains(member.getMember())) {
                     members.add(member);
                 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/ReferringRelationsBrowserModel.java	(revision 1938)
@@ -48,6 +48,6 @@
         if (parent == null) return false;
         for (RelationMember m: parent.getMembers()) {
-            if (m.member instanceof Relation) {
-                Relation child = (Relation)m.member;
+            if (m.isRelation()) {
+                Relation child = m.getRelation();
                 if (child.equals(relation)) return true;
             }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationNodeMap.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationNodeMap.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationNodeMap.java	(revision 1938)
@@ -9,7 +9,7 @@
 /**
  * A mapping from Node positions to elements in a Relation (currently Nodes and Ways only)
- * 
+ *
  * @author Christiaan Welvaart <cjw@time4t.net>
- * 
+ *
  */
 public class RelationNodeMap {
@@ -29,5 +29,5 @@
         for (i = 0; i < members.size(); ++i) {
             RelationMember m = members.get(i);
-            if (m.member.incomplete)
+            if (m.getMember().incomplete)
             {
                 remaining.add(Integer.valueOf(i));
@@ -47,5 +47,5 @@
             if (result == null) {
                 result = points.get(node).first();
-                if (members.get(current).member == members.get(result).member) {
+                if (members.get(current).getMember() == members.get(result).getMember()) {
                     result = points.get(node).last();
                 }
@@ -59,6 +59,6 @@
 
     void add(int n, RelationMember m) {
-        if (m.member instanceof Way) {
-            Way w = (Way) m.member;
+        if (m.isWay()) {
+            Way w = m.getWay();
             if (w.lastNode() == w.firstNode())
             {
@@ -77,6 +77,6 @@
                 points.get(w.lastNode()).add(Integer.valueOf(n));
             }
-        } else if (m.member instanceof Node) {
-            Node node = (Node) m.member;
+        } else if (m.isNode()) {
+            Node node = m.getNode();
             nodes.put(node, Integer.valueOf(n));
         } else {
@@ -87,6 +87,6 @@
     boolean remove(int n, RelationMember a) {
         boolean result;
-        if (a.member instanceof Way) {
-            Way w = (Way) a.member;
+        if (a.isWay()) {
+            Way w = a.getWay();
             if (w.firstNode() == w.lastNode())
             {
@@ -99,5 +99,5 @@
             }
         } else {
-            result = (nodes.remove(a.member) != null);
+            result = (nodes.remove(a.getMember()) != null);
         }
         return result;
@@ -135,5 +135,5 @@
                 if (!set.isEmpty()) {
                     result = set.first();
-                    Way w = (Way) members.get(result).member;
+                    Way w = members.get(result).getWay();
                     points.get(w.firstNode()).remove(result);
                     points.get(w.lastNode()).remove(result);
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeModel.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationTreeModel.java	(revision 1938)
@@ -73,5 +73,5 @@
         int count = 0;
         for(RelationMember member : parent.getMembers()) {
-            if (member.member instanceof Relation) {
+            if (member.isRelation()) {
                 count++;
             }
@@ -93,9 +93,9 @@
         int count=0;
         for (RelationMember member : parent.getMembers()) {
-            if (!(member.member instanceof Relation)) {
+            if (!(member.isRelation())) {
                 continue;
             }
             if (count == idx)
-                return (Relation)member.member;
+                return member.getRelation();
             count++;
         }
@@ -118,8 +118,8 @@
         int idx = 0;
         for (RelationMember member : parent.getMembers()) {
-            if (!(member.member instanceof Relation)) {
+            if (!(member.isRelation())) {
                 continue;
             }
-            if (member.member == child) return idx;
+            if (member.getMember() == child) return idx;
             idx++;
         }
Index: trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 1938)
@@ -204,5 +204,5 @@
         remember(relation.id, OsmPrimitiveType.RELATION);
         for (RelationMember member : relation.getMembers()) {
-            appendGeneric(member.member);
+            appendGeneric(member.getMember());
         }
         return this;
Index: trunk/src/org/openstreetmap/josm/io/OsmWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 1937)
+++ trunk/src/org/openstreetmap/josm/io/OsmWriter.java	(revision 1938)
@@ -133,6 +133,6 @@
             for (RelationMember em : e.getMembers()) {
                 out.print("    <member type='");
-                out.print(OsmPrimitiveType.from(em.member).getAPIName());
-                out.println("' ref='"+getUsedId(em.member)+"' role='" +
+                out.print(OsmPrimitiveType.from(em.getMember()).getAPIName());
+                out.println("' ref='"+getUsedId(em.getMember())+"' role='" +
                         XmlWriter.encode(em.getRole()) + "' />");
             }
