Index: trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java	(revision 13916)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java	(revision 13917)
@@ -12,8 +12,9 @@
 import java.util.Optional;
 
+import org.openstreetmap.josm.data.osm.INode;
 import org.openstreetmap.josm.data.osm.IPrimitive;
-import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.IRelation;
+import org.openstreetmap.josm.data.osm.IWay;
 import org.openstreetmap.josm.data.osm.Relation;
-import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon;
@@ -157,5 +158,5 @@
         }
         Pair<StyleElementList, Range> p = getImpl(osm, scale, nc);
-        if (osm instanceof Node && isDefaultNodes()) {
+        if (osm instanceof INode && isDefaultNodes()) {
             if (p.a.isEmpty()) {
                 if (TextLabel.AUTO_LABEL_COMPOSITION_STRATEGY.compose(osm) != null) {
@@ -183,5 +184,5 @@
                 }
             }
-        } else if (osm instanceof Way && isDefaultLines()) {
+        } else if (osm instanceof IWay && isDefaultLines()) {
             boolean hasProperLineStyle = false;
             for (StyleElement s : p.a) {
@@ -235,7 +236,7 @@
      */
     private Pair<StyleElementList, Range> getImpl(IPrimitive osm, double scale, NavigatableComponent nc) {
-        if (osm instanceof Node)
+        if (osm instanceof INode)
             return generateStyles(osm, scale, false);
-        else if (osm instanceof Way) {
+        else if (osm instanceof IWay) {
             Pair<StyleElementList, Range> p = generateStyles(osm, scale, false);
 
@@ -245,9 +246,9 @@
             // FIXME: Maybe in the future outer way styles apply to outers ignoring the multipolygon?
             for (IPrimitive referrer : osm.getReferrers()) {
-                Relation r = (Relation) referrer;
-                if (!drawMultipolygon || !r.isMultipolygon() || !r.isUsable()) {
+                IRelation<?> r = (IRelation<?>) referrer;
+                if (!drawMultipolygon || !r.isMultipolygon() || !r.isUsable() || !(r instanceof Relation)) {
                     continue;
                 }
-                Multipolygon multipolygon = MultipolygonCache.getInstance().get(r);
+                Multipolygon multipolygon = MultipolygonCache.getInstance().get((Relation) r);
 
                 if (multipolygon.getOuterWays().contains(osm)) {
@@ -313,9 +314,9 @@
 
             for (IPrimitive referrer : osm.getReferrers()) {
-                Relation ref = (Relation) referrer;
-                if (!drawMultipolygon || !ref.isMultipolygon() || !ref.isUsable()) {
+                IRelation<?> ref = (IRelation<?>) referrer;
+                if (!drawMultipolygon || !ref.isMultipolygon() || !ref.isUsable() || !(ref instanceof Relation)) {
                     continue;
                 }
-                final Multipolygon multipolygon = MultipolygonCache.getInstance().get(ref);
+                final Multipolygon multipolygon = MultipolygonCache.getInstance().get((Relation) ref);
 
                 if (multipolygon.getInnerWays().contains(osm)) {
@@ -346,5 +347,5 @@
             }
             return p;
-        } else if (osm instanceof Relation) {
+        } else if (osm instanceof IRelation) {
             return generateStyles(osm, scale, true);
         }
@@ -383,5 +384,5 @@
             }
             env.layer = e.getKey();
-            if (osm instanceof Way) {
+            if (osm instanceof IWay) {
                 AreaElement areaStyle = AreaElement.create(env);
                 addIfNotNull(sl, areaStyle);
@@ -397,5 +398,5 @@
                     addIfNotNull(sl, TextElement.createForContent(env));
                 }
-            } else if (osm instanceof Node) {
+            } else if (osm instanceof INode) {
                 NodeElement nodeStyle = NodeElement.create(env);
                 if (nodeStyle != null) {
@@ -405,6 +406,6 @@
                     addIfNotNull(sl, BoxTextElement.create(env, NodeElement.SIMPLE_NODE_ELEMSTYLE_BOXPROVIDER));
                 }
-            } else if (osm instanceof Relation) {
-                if (((Relation) osm).isMultipolygon()) {
+            } else if (osm instanceof IRelation) {
+                if (((IRelation<?>) osm).isMultipolygon()) {
                     AreaElement areaStyle = AreaElement.create(env);
                     addIfNotNull(sl, areaStyle);
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java	(revision 13916)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java	(revision 13917)
@@ -30,11 +30,12 @@
 
 import org.openstreetmap.josm.data.Version;
+import org.openstreetmap.josm.data.osm.INode;
 import org.openstreetmap.josm.data.osm.IPrimitive;
+import org.openstreetmap.josm.data.osm.IRelation;
+import org.openstreetmap.josm.data.osm.IWay;
 import org.openstreetmap.josm.data.osm.KeyValueVisitor;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmUtils;
-import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Tagged;
-import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.preferences.sources.SourceEntry;
 import org.openstreetmap.josm.gui.mappaint.Cascade;
@@ -647,7 +648,7 @@
     public void apply(MultiCascade mc, IPrimitive osm, double scale, boolean pretendWayIsClosed) {
         MapCSSRuleIndex matchingRuleIndex;
-        if (osm instanceof Node) {
+        if (osm instanceof INode) {
             matchingRuleIndex = nodeRules;
-        } else if (osm instanceof Way) {
+        } else if (osm instanceof IWay) {
             if (OsmUtils.isFalse(osm.get("area"))) {
                 matchingRuleIndex = wayNoAreaRules;
@@ -655,6 +656,6 @@
                 matchingRuleIndex = wayRules;
             }
-        } else if (osm instanceof Relation) {
-            if (((Relation) osm).isMultipolygon()) {
+        } else if (osm instanceof IRelation) {
+            if (((IRelation<?>) osm).isMultipolygon()) {
                 matchingRuleIndex = multipolygonRules;
             } else if (osm.hasKey("#canvas")) {
