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;
