Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java	(revision 8140)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/MapCSSStyleSource.java	(revision 8141)
@@ -13,5 +13,4 @@
 import java.text.MessageFormat;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -20,4 +19,5 @@
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.PriorityQueue;
 import java.util.Set;
 import java.util.concurrent.locks.ReadWriteLock;
@@ -137,5 +137,5 @@
         public final Map<String,Map<String,Set<MapCSSRule>>> index = new HashMap<>();
         /* rules without SimpleKeyValueCondition */
-        public final Set<MapCSSRule> remaining = new HashSet<>();
+        public final ArrayList<MapCSSRule> remaining = new ArrayList<>();
 
         public void add(MapCSSRule rule) {
@@ -178,4 +178,5 @@
                 rulesWithMatchingKeyValue.add(r);
             }
+            Collections.sort(remaining);
         }
 
@@ -188,6 +189,6 @@
          * You must have a read lock of STYLE_SOURCE_LOCK when calling this method.
          */
-        public Collection<MapCSSRule> getRuleCandidates(OsmPrimitive osm) {
-            List<MapCSSRule> ruleCandidates = new ArrayList<>(remaining);
+        public PriorityQueue<MapCSSRule> getRuleCandidates(OsmPrimitive osm) {
+            PriorityQueue<MapCSSRule> ruleCandidates = new PriorityQueue<>(remaining);
             for (Map.Entry<String,String> e : osm.getKeys().entrySet()) {
                 Map<String,Set<MapCSSRule>> v = index.get(e.getKey());
@@ -199,5 +200,4 @@
                 }
             }
-            Collections.sort(ruleCandidates);
             return ruleCandidates;
         }
@@ -489,5 +489,7 @@
         int lastDeclUsed = -1;
 
-        for (MapCSSRule r : matchingRuleIndex.getRuleCandidates(osm)) {
+        PriorityQueue<MapCSSRule> candidates = matchingRuleIndex.getRuleCandidates(osm);
+        MapCSSRule r;
+        while ((r = candidates.poll()) != null) {
             env.clearSelectorMatchingInformation();
             env.layer = null;
