Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java	(revision 13080)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/MultipolygonCache.java	(revision 13082)
@@ -43,11 +43,9 @@
     private static final MultipolygonCache INSTANCE = new MultipolygonCache();
 
-    private final Map<DataSet, Map<Relation, Multipolygon>> cache;
-
-    private final Collection<PolyData> selectedPolyData;
+    private final Map<DataSet, Map<Relation, Multipolygon>> cache = new ConcurrentHashMap<>(); // see ticket 11833
+
+    private final Collection<PolyData> selectedPolyData = new ArrayList<>();
 
     private MultipolygonCache() {
-        this.cache = new ConcurrentHashMap<>(); // see ticket 11833
-        this.selectedPolyData = new ArrayList<>();
         Main.addProjectionChangeListener(this);
         DataSet.addSelectionListener(this);
@@ -92,7 +90,9 @@
                 multipolygon = new Multipolygon(r);
                 map2.put(r, multipolygon);
-                for (PolyData pd : multipolygon.getCombinedPolygons()) {
-                    if (pd.isSelected()) {
-                        selectedPolyData.add(pd);
+                synchronized (this) {
+                    for (PolyData pd : multipolygon.getCombinedPolygons()) {
+                        if (pd.isSelected()) {
+                            selectedPolyData.add(pd);
+                        }
                     }
                 }
@@ -294,5 +294,5 @@
 
     @Override
-    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+    public synchronized void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
 
         for (Iterator<PolyData> it = selectedPolyData.iterator(); it.hasNext();) {
