Index: trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 3843)
+++ trunk/src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 3844)
@@ -1216,7 +1216,5 @@
 
         for (Relation r : CombineWayAction.getParentRelations(selectedWays)) {
-            if (r.isDeleted() ||
-                    r.get("type") == null ||
-                    !r.get("type").equalsIgnoreCase("multipolygon")) {
+            if (r.isDeleted() || !r.isMultipolygon()) {
                 continue;
             }
@@ -1390,8 +1388,5 @@
 
         for (RelationRole r : rels) {
-            if (r.rel.get("type") != null &&
-                    r.rel.get("type").equalsIgnoreCase("multipolygon") &&
-                    r.role.equalsIgnoreCase("outer")
-            ) {
+            if (r.rel.isMultipolygon() && r.role.equalsIgnoreCase("outer")) {
                 multiouters.add(r);
                 continue;
Index: trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 3843)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 3844)
@@ -560,4 +560,8 @@
     public PrimitiveId getPrimitiveId() {
         return new SimplePrimitiveId(getUniqueId(), getType());
+    }
+
+    public OsmPrimitiveType getDisplayType() {
+        return getType();
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitiveType.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitiveType.java	(revision 3843)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitiveType.java	(revision 3844)
@@ -10,5 +10,9 @@
     NODE (marktr("node"), Node.class, NodeData.class),
     WAY  (marktr("way"), Way.class, WayData.class),
-    RELATION (marktr("relation"), Relation.class, RelationData.class);
+    RELATION (marktr("relation"), Relation.class, RelationData.class),
+
+    /* only for display, no real type */
+    CLOSEDWAY  (marktr("closedway"), Way.class, WayData.class),
+    MULTIPOLYGON (marktr("multipolygon"), Relation.class, RelationData.class);
 
     private final String apiTypeName;
Index: trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 3843)
+++ trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 3844)
@@ -371,4 +371,13 @@
     }
 
+    public OsmPrimitiveType getDisplayType() {
+        return isMultipolygon() ? OsmPrimitiveType.MULTIPOLYGON
+        : OsmPrimitiveType.RELATION;
+    }
+
+    public boolean isMultipolygon() {
+        return "multipolygon".equals(get("type"));
+    }
+
     @Override
     public BBox getBBox() {
Index: trunk/src/org/openstreetmap/josm/data/osm/RelationMember.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/RelationMember.java	(revision 3843)
+++ trunk/src/org/openstreetmap/josm/data/osm/RelationMember.java	(revision 3844)
@@ -54,4 +54,13 @@
     public boolean isWay() {
         return member instanceof Way;
+    }
+
+    /**
+     *
+     * @return type of member for icon display
+     * @since 3844
+     */
+    public OsmPrimitiveType getDisplayType() {
+        return member.getDisplayType();
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/Way.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 3843)
+++ trunk/src/org/openstreetmap/josm/data/osm/Way.java	(revision 3844)
@@ -429,4 +429,9 @@
     }
 
+    @Override
+    public OsmPrimitiveType getDisplayType() {
+        return isClosed() ? OsmPrimitiveType.CLOSEDWAY : OsmPrimitiveType.WAY;
+    }
+
     private void checkNodes() {
         DataSet dataSet = getDataSet();
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java	(revision 3843)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/MultipolygonTest.java	(revision 3844)
@@ -128,5 +128,5 @@
     public void visit(Relation r) {
         nonClosedWays.clear();
-        if ("multipolygon".equals(r.get("type"))) {
+        if (r.isMultipolygon()) {
             checkMembersAndRoles(r);
 
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java	(revision 3843)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/UnclosedWays.java	(revision 3844)
@@ -111,5 +111,5 @@
         if (type != null && !w.isClosed()) {
             for (OsmPrimitive parent: w.getReferrers()) {
-                if (parent instanceof Relation && "multipolygon".equals(parent.get("type")))
+                if (parent instanceof Relation && ((Relation)parent).isMultipolygon())
                     return;
             }
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/UntaggedWay.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/UntaggedWay.java	(revision 3843)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/UntaggedWay.java	(revision 3844)
@@ -114,5 +114,5 @@
         multipolygonways = new LinkedList<Way>();
         for (Relation r : Main.main.getCurrentDataSet().getRelations()) {
-            if (r.isUsable() && "multipolygon".equals(r.get("type"))) {
+            if (r.isUsable() && r.isMultipolygon()) {
                 for (RelationMember m : r.getMembers()) {
                     if (m.getMember() != null && m.getMember() instanceof Way &&
Index: trunk/src/org/openstreetmap/josm/gui/OsmPrimitivRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/OsmPrimitivRenderer.java	(revision 3843)
+++ trunk/src/org/openstreetmap/josm/gui/OsmPrimitivRenderer.java	(revision 3844)
@@ -68,5 +68,5 @@
         if (def != null && value != null && def instanceof JLabel) {
             ((JLabel)def).setText(getComponentText(value));
-            ((JLabel)def).setIcon(ImageProvider.get(value.getType()));
+            ((JLabel)def).setIcon(ImageProvider.get(value.getDisplayType()));
             ((JLabel)def).setToolTipText(getComponentToolTipText(value));
         }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java	(revision 3843)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/pair/relation/RelationMemberTableCellRenderer.java	(revision 3844)
@@ -38,19 +38,5 @@
     public final static Color BGCOLOR_FROZEN = new Color(234,234,234);
 
-    private ImageIcon nodeIcon;
-    private ImageIcon wayIcon;
-    private ImageIcon relationIcon;
     private  Border rowNumberBorder = null;
-
-    /**
-     * Load the image icon for an OSM primitive of type node
-     *
-     * @return the icon; null, if not found
-     */
-    protected void loadIcons() {
-        nodeIcon = ImageProvider.get("data", "node");
-        wayIcon = ImageProvider.get("data", "way");
-        relationIcon = ImageProvider.get("data", "relation");
-    }
 
     /**
@@ -60,5 +46,4 @@
         setIcon(null);
         setOpaque(true);
-        loadIcons();
         rowNumberBorder = BorderFactory.createEmptyBorder(0,4,0,0);
     }
@@ -156,14 +141,5 @@
         setText(displayName);
         setToolTipText(buildToolTipText(member.getMember()));
-        if (member.isNode()) {
-            setIcon(nodeIcon);
-        } else if (member.isWay()) {
-            setIcon(wayIcon);
-        } else if (member.isRelation()) {
-            setIcon(relationIcon);
-        } else {
-            // should not happen
-            setIcon(null);
-        }
+        setIcon(ImageProvider.get(member.getDisplayType()));
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java	(revision 3843)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java	(revision 3844)
@@ -103,5 +103,5 @@
             for (OsmPrimitive referrer : osm.getReferrers()) {
                 Relation r = (Relation) referrer;
-                if (!drawMultipolygon || !"multipolygon".equals(r.get("type"))  || !r.isUsable()) {
+                if (!drawMultipolygon || !r.isMultipolygon()  || !r.isUsable()) {
                     continue;
                 }
@@ -150,5 +150,5 @@
             for (OsmPrimitive referrer : osm.getReferrers()) {
                 Relation ref = (Relation) referrer;
-                if (!drawMultipolygon || !"multipolygon".equals(ref.get("type"))  || !ref.isUsable()) {
+                if (!drawMultipolygon || !ref.isMultipolygon() || !ref.isUsable()) {
                     continue;
                 }
@@ -184,5 +184,5 @@
         {
             Pair<StyleList, Range> p = generateStyles(osm, scale, null, true);
-            if (drawMultipolygon && "multipolygon".equals(osm.get("type"))) {
+            if (drawMultipolygon && ((Relation)osm).isMultipolygon()) {
                 if (!Utils.exists(p.a, AreaElemStyle.class)) {
                     // look at outer ways to find area style
@@ -235,5 +235,5 @@
                 addIfNotNull(sl, NodeElemStyle.create(c));
             } else if (osm instanceof Relation) {
-                if ("multipolygon".equals(osm.get("type"))) {
+                if (((Relation)osm).isMultipolygon()) {
                     addIfNotNull(sl, AreaElemStyle.create(c));
                     addIfNotNull(sl, LineElemStyle.createLine(c));
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java	(revision 3843)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/xml/XmlStyleSource.java	(revision 3844)
@@ -67,5 +67,5 @@
             while(parser.hasNext()) {
             }
-            
+
         } catch(IOException e) {
             System.err.println(tr("Warning: failed to load Mappaint styles from ''{0}''. Exception was: {1}", url, e.toString()));
@@ -278,5 +278,5 @@
                 }
             }
-        } else if (osm instanceof Way || (osm instanceof Relation && "multipolygon".equals(osm.get("type")))) {
+        } else if (osm instanceof Way || (osm instanceof Relation && ((Relation)osm).isMultipolygon())) {
             WayPrototypesRecord p = new WayPrototypesRecord();
             get(osm, pretendWayIsClosed || !(osm instanceof Way) || ((Way) osm).isClosed(), p, (useMinMaxScale ? scale : null), mc);
