Index: trunk/src/org/openstreetmap/josm/data/osm/IPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/IPrimitive.java	(revision 13662)
+++ trunk/src/org/openstreetmap/josm/data/osm/IPrimitive.java	(revision 13664)
@@ -119,4 +119,66 @@
 
     /**
+     * Determines if this object is selectable.
+     * <p>
+     * A primitive can be selected if all conditions are met:
+     * <ul>
+     * <li>it is drawable
+     * <li>it is not disabled (greyed out) by a filter.
+     * </ul>
+     * @return {@code true} if this object is selectable
+     * @since 13664
+     */
+    default boolean isSelectable() {
+        return true;
+    }
+
+    /**
+     * Determines if this object is drawable.
+     * <p>
+     * A primitive is complete if all conditions are met:
+     * <ul>
+     * <li>type and id is known
+     * <li>tags are known
+     * <li>it is not deleted
+     * <li>it is not hidden by a filter
+     * <li>for nodes: lat/lon are known
+     * <li>for ways: all nodes are known and complete
+     * <li>for relations: all members are known and complete
+     * </ul>
+     * @return {@code true} if this object is drawable
+     * @since xxx
+     */
+    default boolean isDrawable() {
+        return true;
+    }
+
+    /**
+     * Determines whether the primitive is selected
+     * @return whether the primitive is selected
+     * @since xxx
+     */
+    default boolean isSelected() {
+        return false;
+    }
+
+    /**
+     * Determines if this primitive is a member of a selected relation.
+     * @return {@code true} if this primitive is a member of a selected relation, {@code false} otherwise
+     * @since xxx
+     */
+    default boolean isMemberOfSelected() {
+        return false;
+    }
+
+    /**
+     * Determines if this primitive is an outer member of a selected multipolygon relation.
+     * @return {@code true} if this primitive is an outer member of a selected multipolygon relation, {@code false} otherwise
+     * @since xxx
+     */
+    default boolean isOuterMemberOfSelected() {
+        return false;
+    }
+
+    /**
      * Replies the id of this primitive.
      *
@@ -271,4 +333,18 @@
 
     /**
+     * Updates the highlight flag for this primitive.
+     * @param highlighted The new highlight flag.
+     * @since 13664
+     */
+    void setHighlighted(boolean highlighted);
+
+    /**
+     * Checks if the highlight flag for this primitive was set
+     * @return The highlight flag.
+     * @since 13664
+     */
+    boolean isHighlighted();
+
+    /**
      * Determines if this object is considered "tagged". To be "tagged", an object
      * must have one or more "interesting" tags. "created_by" and "source"
Index: trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 13662)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 13664)
@@ -480,14 +480,5 @@
     }
 
-    /**
-     * Determines if this object is selectable.
-     * <p>
-     * A primitive can be selected if all conditions are met:
-     * <ul>
-     * <li>it is drawable
-     * <li>it is not disabled (greyed out) by a filter.
-     * </ul>
-     * @return {@code true} if this object is selectable
-     */
+    @Override
     public boolean isSelectable() {
         // not synchronized -> check disabled twice just to be sure we did not have a race condition.
@@ -495,19 +486,5 @@
     }
 
-    /**
-     * Determines if this object is drawable.
-     * <p>
-     * A primitive is complete if all conditions are met:
-     * <ul>
-     * <li>type and id is known
-     * <li>tags are known
-     * <li>it is not deleted
-     * <li>it is not hidden by a filter
-     * <li>for nodes: lat/lon are known
-     * <li>for ways: all nodes are known and complete
-     * <li>for relations: all members are known and complete
-     * </ul>
-     * @return {@code true} if this object is drawable
-     */
+    @Override
     public boolean isDrawable() {
         return (flags & (FLAG_DELETED + FLAG_INCOMPLETE + FLAG_HIDE_IF_DISABLED)) == 0;
@@ -578,17 +555,10 @@
     }
 
-    /**
-     * Determines whether the primitive is selected
-     * @return whether the primitive is selected
-     * @see DataSet#isSelected(OsmPrimitive)
-     */
+    @Override
     public boolean isSelected() {
         return dataSet != null && dataSet.isSelected(this);
     }
 
-    /**
-     * Determines if this primitive is a member of a selected relation.
-     * @return {@code true} if this primitive is a member of a selected relation, {@code false} otherwise
-     */
+    @Override
     public boolean isMemberOfSelected() {
         if (referrers == null)
@@ -603,9 +573,5 @@
     }
 
-    /**
-     * Determines if this primitive is an outer member of a selected multipolygon relation.
-     * @return {@code true} if this primitive is an outer member of a selected multipolygon relation, {@code false} otherwise
-     * @since 7621
-     */
+    @Override
     public boolean isOuterMemberOfSelected() {
         if (referrers == null)
@@ -632,8 +598,5 @@
     }
 
-    /**
-     * Updates the highlight flag for this primitive.
-     * @param highlighted The new highlight flag.
-     */
+    @Override
     public void setHighlighted(boolean highlighted) {
         if (isHighlighted() != highlighted) {
@@ -645,8 +608,5 @@
     }
 
-    /**
-     * Checks if the highlight flag for this primitive was set
-     * @return The highlight flag.
-     */
+    @Override
     public boolean isHighlighted() {
         return (flags & FLAG_HIGHLIGHTED) != 0;
Index: trunk/src/org/openstreetmap/josm/data/osm/PrimitiveData.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/PrimitiveData.java	(revision 13662)
+++ trunk/src/org/openstreetmap/josm/data/osm/PrimitiveData.java	(revision 13664)
@@ -154,4 +154,14 @@
 
     @Override
+    public void setHighlighted(boolean highlighted) {
+        // Override if needed
+    }
+
+    @Override
+    public boolean isHighlighted() {
+        return false;
+    }
+
+    @Override
     public StyleCache getCachedStyle() {
         return null;
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java	(revision 13662)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java	(revision 13664)
@@ -33,4 +33,5 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.OsmUtils;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Tagged;
@@ -641,5 +642,5 @@
             matchingRuleIndex = nodeRules;
         } else if (osm instanceof Way) {
-            if (osm.isKeyFalse("area")) {
+            if (OsmUtils.isFalse(osm.get("area"))) {
                 matchingRuleIndex = wayNoAreaRules;
             } else {
