Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/MultiCascade.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/MultiCascade.java	(revision 6560)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/MultiCascade.java	(revision 6561)
@@ -21,5 +21,5 @@
     public MultiCascade() {
         layers = new HashMap<String, Cascade>();
-        range = new Range();
+        range = Range.ZERO_TO_INFINITY;
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/Range.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/Range.java	(revision 6560)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/Range.java	(revision 6561)
@@ -11,8 +11,5 @@
     private double upper;
 
-    public Range() {
-        this.lower = 0;
-        this.upper = Double.POSITIVE_INFINITY;
-    }
+    public static final Range ZERO_TO_INFINITY = new Range(0.0, Double.POSITIVE_INFINITY);
 
     public Range(double lower, double upper) {
@@ -77,3 +74,27 @@
         return String.format("|s%s-%s", lower, upper);
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        Range range = (Range) o;
+
+        if (Double.compare(range.lower, lower) != 0) return false;
+        if (Double.compare(range.upper, upper) != 0) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result;
+        long temp;
+        temp = Double.doubleToLongBits(lower);
+        result = (int) (temp ^ (temp >>> 32));
+        temp = Double.doubleToLongBits(upper);
+        result = 31 * result + (int) (temp ^ (temp >>> 32));
+        return result;
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj	(revision 6560)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParser.jj	(revision 6561)
@@ -463,10 +463,12 @@
     (
         (
-        <SET> w() key=<IDENT> w()
-        ( <EQUAL> val=expression() )?
-        { ins.add(new Instruction.AssignmentInstruction(key.image, val == null ? true : val)); }
-        ( <RBRACE> { return ins; } | <SEMICOLON> w() )
+            <SET> w()
+            (<FULLSTOP>)? // specification allows "set .class" to set "class". we also support "set class"
+            key=<IDENT> w()
+            ( <EQUAL> val=expression() )?
+            { ins.add(new Instruction.AssignmentInstruction(key.image, val == null ? true : val)); }
+            ( <RBRACE> { return ins; } | <SEMICOLON> w() )
         )
-        |
+    |
         key=<IDENT> w() <COLON> w()
         (
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java	(revision 6560)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java	(revision 6561)
@@ -267,7 +267,7 @@
 
     public static class GeneralSelector extends AbstractSelector {
-        private String base;
-        public Range range;
-        private String subpart;
+        public final String base;
+        public final Range range;
+        public final String subpart;
 
         public GeneralSelector(String base, Pair<Integer, Integer> zoom, List<Condition> conds, String subpart) {
@@ -279,8 +279,9 @@
                 if (a <= b) {
                     range = fromLevel(a, b);
-                }
-            }
-            if (range == null) {
-                range = new Range();
+                } else {
+                    range = Range.ZERO_TO_INFINITY;
+                }
+            } else {
+                range = Range.ZERO_TO_INFINITY;
             }
             this.subpart = subpart;
@@ -348,5 +349,5 @@
         @Override
         public String toString() {
-            return base + (range == null ? "" : range) + Utils.join("", conds) + (subpart != null ? ("::" + subpart) : "");
+            return base + (Range.ZERO_TO_INFINITY.equals(range) ? "" : range) + Utils.join("", conds) + (subpart != null ? ("::" + subpart) : "");
         }
     }
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/xml/AreaPrototype.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/xml/AreaPrototype.java	(revision 6560)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/xml/AreaPrototype.java	(revision 6561)
@@ -23,5 +23,5 @@
     {
         priority = 0;
-        range = new Range();
+        range = Range.ZERO_TO_INFINITY;
         closed = false;
         color = null;
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/xml/IconPrototype.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/xml/IconPrototype.java	(revision 6560)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/xml/IconPrototype.java	(revision 6561)
@@ -22,5 +22,5 @@
     public void init() {
         priority = 0;
-        range = new Range();
+        range = Range.ZERO_TO_INFINITY;
         icon = null;
         annotate = null;
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/xml/LinePrototype.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/xml/LinePrototype.java	(revision 6560)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/xml/LinePrototype.java	(revision 6561)
@@ -35,5 +35,5 @@
     {
         priority = 0;
-        range = new Range();
+        range = Range.ZERO_TO_INFINITY;
         width = -1;
         realWidth = null;
Index: /trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.groovy
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.groovy	(revision 6560)
+++ /trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSParserTest.groovy	(revision 6561)
@@ -10,4 +10,7 @@
 import org.openstreetmap.josm.gui.mappaint.MultiCascade
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.MapCSSParser
+import org.openstreetmap.josm.tools.Utils
+
+import java.awt.Color
 
 class MapCSSParserTest {
@@ -60,5 +63,5 @@
         def css = new MapCSSStyleSource("")
         getParser("" +
-                "way[highway=footway] { set path; color: #FF6644; width: 2; }\n" +
+                "way[highway=footway] { set .path; color: #FF6644; width: 2; }\n" +
                 "way[highway=path]    { set path; color: brown; width: 2; }\n" +
                 "way[\"set\"=escape]  {  }\n" +
@@ -75,4 +78,7 @@
         assert "orange".equals(mc2.getCascade("default").get("color", null, String.class))
         assert mc2.getCascade("default").get("text-color", null, String.class) == null
+        def mc3 = new MultiCascade()
+        css.apply(mc3, getPrimitive("highway", "footway"), 1, null, false);
+        assert Utils.hexToColor("#FF6644").equals(mc3.getCascade("default").get("color", null, Color.class))
     }
 
