Index: /trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java	(revision 6964)
+++ /trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java	(revision 6965)
@@ -48,4 +48,5 @@
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.progress.SwingRenderingProgressMonitor;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.WindowGeometry;
@@ -53,11 +54,7 @@
 public class SaveLayersDialog extends JDialog implements TableModelListener {
     public static enum UserAction {
-        /**
-         * save/upload layers was successful, proceed with operation
-         */
+        /** save/upload layers was successful, proceed with operation */
         PROCEED,
-        /**
-         * save/upload of layers was not successful or user canceled operation
-         */
+        /** save/upload of layers was not successful or user canceled operation */
         CANCEL
     }
@@ -286,4 +283,7 @@
     }
 
+    /**
+     * Closes this dialog and frees all native screen resources.
+     */
     public void closeDialog() {
         setVisible(false);
@@ -556,25 +556,30 @@
         @Override
         public void run() {
-            model.setMode(SaveLayersModel.Mode.UPLOADING_AND_SAVING);
-            List<SaveLayerInfo> toUpload = model.getLayersToUpload();
-            if (!toUpload.isEmpty()) {
-                uploadLayers(toUpload);
-            }
-            List<SaveLayerInfo> toSave = model.getLayersToSave();
-            if (!toSave.isEmpty()) {
-                saveLayers(toSave);
-            }
-            model.setMode(SaveLayersModel.Mode.EDITING_DATA);
-            if (model.hasUnsavedData()) {
-                warnBecauseOfUnsavedData();
-                model.setMode(Mode.EDITING_DATA);
-                if (canceled) {
-                    setUserAction(UserAction.CANCEL);
-                    closeDialog();
-                }
-            } else {
-                setUserAction(UserAction.PROCEED);
-                closeDialog();
-            }
+            GuiHelper.runInEDTAndWait(new Runnable() {
+                @Override
+                public void run() {
+                    model.setMode(SaveLayersModel.Mode.UPLOADING_AND_SAVING);
+                    List<SaveLayerInfo> toUpload = model.getLayersToUpload();
+                    if (!toUpload.isEmpty()) {
+                        uploadLayers(toUpload);
+                    }
+                    List<SaveLayerInfo> toSave = model.getLayersToSave();
+                    if (!toSave.isEmpty()) {
+                        saveLayers(toSave);
+                    }
+                    model.setMode(SaveLayersModel.Mode.EDITING_DATA);
+                    if (model.hasUnsavedData()) {
+                        warnBecauseOfUnsavedData();
+                        model.setMode(Mode.EDITING_DATA);
+                        if (canceled) {
+                            setUserAction(UserAction.CANCEL);
+                            closeDialog();
+                        }
+                    } else {
+                        setUserAction(UserAction.PROCEED);
+                        closeDialog();
+                    }
+                }
+            });
         }
 
