Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/Cascade.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/Cascade.java	(revision 7245)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/Cascade.java	(revision 7246)
@@ -146,5 +146,5 @@
             return !(s.isEmpty() || "false".equals(s) || "no".equals(s) || "0".equals(s) || "0.0".equals(s));
         if (o instanceof Number)
-            return ((Number) o).floatValue() == 0.0f;
+            return ((Number) o).floatValue() != 0.0f;
         if (o instanceof List)
             return !((List) o).isEmpty();
Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java	(revision 7245)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java	(revision 7246)
@@ -431,14 +431,7 @@
          */
         public static boolean equal(Object a, Object b) {
-            // make sure the casts are done in a meaningful way, so
-            // the 2 objects really can be considered equal
-            for (Class<?> klass : new Class<?>[]{Float.class, Boolean.class, Color.class, float[].class, String.class}) {
-                Object a2 = Cascade.convertTo(a, klass);
-                Object b2 = Cascade.convertTo(b, klass);
-                if (a2 != null && b2 != null && a2.equals(b2)) {
-                    return true;
-                }
-            }
-            return false;
+            if (a.getClass() == b.getClass()) return a.equals(b);
+            if (a.equals(Cascade.convertTo(b, a.getClass()))) return true;
+            return b.equals(Cascade.convertTo(a, b.getClass()));
         }
 
