Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 12495)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 12496)
@@ -123,8 +123,10 @@
         model = new ConflictListModel();
 
-        lstConflicts = new JList<>(model);
-        lstConflicts.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
-        lstConflicts.setCellRenderer(new OsmPrimitivRenderer());
-        lstConflicts.addMouseListener(new MouseEventHandler());
+        synchronized (this) {
+            lstConflicts = new JList<>(model);
+            lstConflicts.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+            lstConflicts.setCellRenderer(new OsmPrimitivRenderer());
+            lstConflicts.addMouseListener(new MouseEventHandler());
+        }
         addListSelectionListener(e -> Main.map.mapView.repaint());
 
@@ -165,5 +167,5 @@
      * @since 5958
      */
-    public void addListSelectionListener(ListSelectionListener listener) {
+    public synchronized void addListSelectionListener(ListSelectionListener listener) {
         lstConflicts.getSelectionModel().addListSelectionListener(listener);
     }
@@ -174,5 +176,5 @@
      * @since 5958
      */
-    public void removeListSelectionListener(ListSelectionListener listener) {
+    public synchronized void removeListSelectionListener(ListSelectionListener listener) {
         lstConflicts.getSelectionModel().removeListSelectionListener(listener);
     }
@@ -191,19 +193,20 @@
      */
     private void resolve() {
-        if (conflicts == null || model.getSize() == 0)
-            return;
-
-        int index = lstConflicts.getSelectedIndex();
-        if (index < 0) {
-            index = 0;
-        }
-
-        Conflict<? extends OsmPrimitive> c = conflicts.get(index);
-        ConflictResolutionDialog dialog = new ConflictResolutionDialog(Main.parent);
-        dialog.getConflictResolver().populate(c);
-        dialog.showDialog();
-
-        lstConflicts.setSelectedIndex(index);
-
+        synchronized (this) {
+            if (conflicts == null || model.getSize() == 0)
+                return;
+
+            int index = lstConflicts.getSelectedIndex();
+            if (index < 0) {
+                index = 0;
+            }
+
+            Conflict<? extends OsmPrimitive> c = conflicts.get(index);
+            ConflictResolutionDialog dialog = new ConflictResolutionDialog(Main.parent);
+            dialog.getConflictResolver().populate(c);
+            dialog.showDialog();
+
+            lstConflicts.setSelectedIndex(index);
+        }
         Main.map.mapView.repaint();
     }
@@ -214,5 +217,7 @@
     public void refreshView() {
         OsmDataLayer editLayer = Main.getLayerManager().getEditLayer();
-        conflicts = editLayer == null ? new ConflictCollection() : editLayer.getConflicts();
+        synchronized (this) {
+            conflicts = editLayer == null ? new ConflictCollection() : editLayer.getConflicts();
+        }
         GuiHelper.runInEDT(() -> {
             model.fireContentChanged();
@@ -221,5 +226,5 @@
     }
 
-    private void updateTitle() {
+    private synchronized void updateTitle() {
         int conflictsCount = conflicts.size();
         if (conflictsCount > 0) {
@@ -247,9 +252,11 @@
         g.setColor(preferencesColor);
         Visitor conflictPainter = new ConflictPainter(nc, g);
-        for (OsmPrimitive o : lstConflicts.getSelectedValuesList()) {
-            if (conflicts == null || !conflicts.hasConflictForMy(o)) {
-                continue;
-            }
-            conflicts.getConflictForMy(o).getTheir().accept(conflictPainter);
+        synchronized (this) {
+            for (OsmPrimitive o : lstConflicts.getSelectedValuesList()) {
+                if (conflicts == null || !conflicts.hasConflictForMy(o)) {
+                    continue;
+                }
+                conflicts.getConflictForMy(o).getTheir().accept(conflictPainter);
+            }
         }
     }
@@ -281,5 +288,5 @@
      * @return the conflict collection currently held by this dialog; may be null
      */
-    public ConflictCollection getConflicts() {
+    public synchronized ConflictCollection getConflicts() {
         return conflicts;
     }
@@ -290,5 +297,5 @@
      * @return Conflict
      */
-    public Conflict<? extends OsmPrimitive> getSelectedConflict() {
+    public synchronized Conflict<? extends OsmPrimitive> getSelectedConflict() {
         if (conflicts == null || model.getSize() == 0)
             return null;
@@ -299,5 +306,5 @@
     }
 
-    private boolean isConflictSelected() {
+    private synchronized boolean isConflictSelected() {
         final ListSelectionModel selModel = lstConflicts.getSelectionModel();
         return selModel.getMinSelectionIndex() >= 0 && selModel.getMaxSelectionIndex() >= selModel.getMinSelectionIndex();
@@ -316,5 +323,5 @@
 
     @Override
-    public void selectionChanged(SelectionChangeEvent event) {
+    public synchronized void selectionChanged(SelectionChangeEvent event) {
         lstConflicts.setValueIsAdjusting(true);
         lstConflicts.clearSelection();
@@ -416,5 +423,5 @@
 
         @Override
-        public OsmPrimitive getElementAt(int index) {
+        public synchronized OsmPrimitive getElementAt(int index) {
             if (index < 0 || index >= getSize())
                 return null;
@@ -423,9 +430,9 @@
 
         @Override
-        public int getSize() {
+        public synchronized int getSize() {
             return conflicts != null ? conflicts.size() : 0;
         }
 
-        public int indexOf(OsmPrimitive my) {
+        public synchronized int indexOf(OsmPrimitive my) {
             if (conflicts != null) {
                 for (int i = 0; i < conflicts.size(); i++) {
@@ -437,5 +444,5 @@
         }
 
-        public OsmPrimitive get(int idx) {
+        public synchronized OsmPrimitive get(int idx) {
             return conflicts != null ? conflicts.get(idx).getMy() : null;
         }
@@ -469,6 +476,8 @@
         public void actionPerformed(ActionEvent e) {
             Collection<OsmPrimitive> sel = new LinkedList<>();
-            for (OsmPrimitive o : lstConflicts.getSelectedValuesList()) {
-                sel.add(o);
+            synchronized (this) {
+                for (OsmPrimitive o : lstConflicts.getSelectedValuesList()) {
+                    sel.add(o);
+                }
             }
             DataSet ds = Main.getLayerManager().getEditDataSet();
@@ -499,10 +508,12 @@
             final ConflictResolver resolver = new ConflictResolver();
             final List<Command> commands = new ArrayList<>();
-            for (OsmPrimitive osmPrimitive : lstConflicts.getSelectedValuesList()) {
-                Conflict<? extends OsmPrimitive> c = conflicts.getConflictForMy(osmPrimitive);
-                if (c != null) {
-                    resolver.populate(c);
-                    resolver.decideRemaining(type);
-                    commands.add(resolver.buildResolveCommand());
+            synchronized (this) {
+                for (OsmPrimitive osmPrimitive : lstConflicts.getSelectedValuesList()) {
+                    Conflict<? extends OsmPrimitive> c = conflicts.getConflictForMy(osmPrimitive);
+                    if (c != null) {
+                        resolver.populate(c);
+                        resolver.decideRemaining(type);
+                        commands.add(resolver.buildResolveCommand());
+                    }
                 }
             }
