Index: trunk/src/org/openstreetmap/josm/gui/mappaint/DividedScale.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/DividedScale.java	(revision 17804)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/DividedScale.java	(revision 17805)
@@ -177,5 +177,5 @@
     @Override
     public int hashCode() {
-        return Objects.hash(ranges, data);
+        return 31 * ranges.hashCode() + data.hashCode();
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/Range.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/Range.java	(revision 17804)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/Range.java	(revision 17805)
@@ -1,6 +1,4 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.mappaint;
-
-import java.util.Objects;
 
 /**
@@ -117,5 +115,5 @@
     @Override
     public int hashCode() {
-        return Objects.hash(lower, upper);
+        return 31 * Double.hashCode(lower) + Double.hashCode(upper);
     }
 }
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java	(revision 17804)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/StyleCache.java	(revision 17805)
@@ -2,7 +2,6 @@
 package org.openstreetmap.josm.gui.mappaint;
 
-import java.util.Arrays;
 import java.util.Map;
-import java.util.Optional;
+import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Function;
@@ -25,13 +24,10 @@
     public static final StyleCache EMPTY_STYLECACHE = new StyleCache().intern();
 
-    private static final int PLAIN = 0;
-    private static final int SELECTED = 1;
-
-    @SuppressWarnings("unchecked")
-    private final DividedScale<StyleElementList>[] states = new DividedScale[2];
+    private DividedScale<StyleElementList> plainStyle;
+    private DividedScale<StyleElementList> selectedStyle;
 
     private StyleCache(StyleCache sc) {
-        states[0] = sc.states[0];
-        states[1] = sc.states[1];
+        plainStyle = sc.plainStyle;
+        selectedStyle = sc.selectedStyle;
     }
 
@@ -49,6 +45,15 @@
         StyleCache s = new StyleCache(this);
 
-        int idx = getIndex(selected);
-        s.states[idx] = Optional.ofNullable(s.states[idx]).orElseGet(DividedScale::new).put(o, r);
+        if (selected) {
+            if (s.selectedStyle == null) {
+                s.selectedStyle = new DividedScale<>();
+            }
+            s.selectedStyle.put(o, r);
+        } else {
+            if (s.plainStyle == null) {
+                s.plainStyle = new DividedScale<>();
+            }
+            s.plainStyle.put(o, r);
+        }
         return s.intern();
     }
@@ -61,23 +66,16 @@
      */
     public Pair<StyleElementList, Range> getWithRange(double scale, boolean selected) {
-        int idx = getIndex(selected);
-        if (states[idx] == null) {
-            return Pair.create(null, Range.ZERO_TO_INFINITY);
-        }
-        return states[idx].getWithRange(scale);
-    }
-
-    private static int getIndex(boolean selected) {
-        return selected ? SELECTED : PLAIN;
+        DividedScale<StyleElementList> style = selected ? selectedStyle : plainStyle;
+        return style != null ? style.getWithRange(scale) : Pair.create(null, Range.ZERO_TO_INFINITY);
     }
 
     @Override
     public String toString() {
-        return "StyleCache{PLAIN: " + this.states[PLAIN] + " SELECTED: " + this.states[SELECTED] + "}";
+        return "StyleCache{PLAIN: " + plainStyle + " SELECTED: " + selectedStyle + "}";
     }
 
     @Override
     public int hashCode() {
-        return Arrays.deepHashCode(this.states);
+        return 31 * Objects.hashCode(plainStyle) + Objects.hashCode(selectedStyle);
     }
 
@@ -91,5 +89,5 @@
         }
         final StyleCache other = (StyleCache) obj;
-        return Arrays.deepEquals(this.states, other.states);
+        return Objects.equals(plainStyle, other.plainStyle) && Objects.equals(selectedStyle, other.selectedStyle);
     }
 
