Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java	(revision 12341)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java	(revision 12342)
@@ -13,5 +13,4 @@
 import java.util.List;
 import java.util.Set;
-import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.swing.ImageIcon;
@@ -35,4 +34,5 @@
 import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ListenerList;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -460,34 +460,41 @@
      *  (get informed when the list of MapPaint StyleSources changes)
      */
-
     public interface MapPaintSylesUpdateListener {
+        /**
+         * Called on any style source changes that are not handled by {@link #mapPaintStyleEntryUpdated(int)}
+         */
         void mapPaintStylesUpdated();
 
-        void mapPaintStyleEntryUpdated(int idx);
-    }
-
-    private static final CopyOnWriteArrayList<MapPaintSylesUpdateListener> listeners
-            = new CopyOnWriteArrayList<>();
-
+        /**
+         * Called whenever a single style source entry was changed.
+         * @param index The index of the entry.
+         */
+        void mapPaintStyleEntryUpdated(int index);
+    }
+
+    private static final ListenerList<MapPaintSylesUpdateListener> listeners = ListenerList.createUnchecked();
+
+    /**
+     * Add a listener that listens to global style changes.
+     * @param listener The listener
+     */
     public static void addMapPaintSylesUpdateListener(MapPaintSylesUpdateListener listener) {
-        if (listener != null) {
-            listeners.addIfAbsent(listener);
-        }
-    }
-
+        listeners.addListener(listener);
+    }
+
+    /**
+     * Removes a listener that listens to global style changes.
+     * @param listener The listener
+     */
     public static void removeMapPaintSylesUpdateListener(MapPaintSylesUpdateListener listener) {
-        listeners.remove(listener);
+        listeners.removeListener(listener);
     }
 
     public static void fireMapPaintSylesUpdated() {
-        for (MapPaintSylesUpdateListener l : listeners) {
-            l.mapPaintStylesUpdated();
-        }
-    }
-
-    public static void fireMapPaintStyleEntryUpdated(int idx) {
-        for (MapPaintSylesUpdateListener l : listeners) {
-            l.mapPaintStyleEntryUpdated(idx);
-        }
+        listeners.fireEvent(MapPaintSylesUpdateListener::mapPaintStylesUpdated);
+    }
+
+    public static void fireMapPaintStyleEntryUpdated(int index) {
+        listeners.fireEvent(l -> l.mapPaintStyleEntryUpdated(index));
     }
 }
