Index: applications/editors/josm/plugins/DirectUpload/src/org/openstreetmap/josm/plugins/DirectUpload/UploadDataGui.java
===================================================================
--- applications/editors/josm/plugins/DirectUpload/src/org/openstreetmap/josm/plugins/DirectUpload/UploadDataGui.java	(revision 29631)
+++ applications/editors/josm/plugins/DirectUpload/src/org/openstreetmap/josm/plugins/DirectUpload/UploadDataGui.java	(revision 29718)
@@ -39,4 +39,5 @@
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
 import org.openstreetmap.josm.io.GpxWriter;
@@ -242,18 +243,30 @@
             if (canceled) {
                 conn.disconnect();
-                OutputDisplay.setText(tr("Upload canceled"));
-                buttons.get(0).setEnabled(true);
+                GuiHelper.runInEDT(new Runnable() {
+                    @Override public void run() {
+                        OutputDisplay.setText(tr("Upload canceled"));
+                        buttons.get(0).setEnabled(true);
+                    }
+                });
                 canceled = false;
             }
             else {
-                boolean success = finishUpConnection(conn);
-                buttons.get(0).setEnabled(!success);
-                if (success) {
-                    buttons.get(1).setText(tr("Close"));
+                final boolean success = finishUpConnection(conn);
+                GuiHelper.runInEDT(new Runnable() {
+                    @Override public void run() {
+                        buttons.get(0).setEnabled(!success);
+                        if (success) {
+                            buttons.get(1).setText(tr("Close"));
+                        }
+                    }
+                });
+            }
+        }
+        catch (Exception e) {
+            GuiHelper.runInEDT(new Runnable() {
+                @Override public void run() {
+                    OutputDisplay.setText(tr("Error while uploading"));
                 }
-            }
-        }
-        catch (Exception e) {
-            OutputDisplay.setText(tr("Error while uploading"));
+            });
             e.printStackTrace();
         }
@@ -300,5 +313,5 @@
     private boolean finishUpConnection(HttpURLConnection c) throws Exception {
         String returnMsg = c.getResponseMessage();
-        boolean success = returnMsg.equals("OK");
+        final boolean success = returnMsg.equals("OK");
 
         if (c.getResponseCode() != 200) {
@@ -306,8 +319,14 @@
                 returnMsg += "\n" + c.getHeaderField("Error");
         }
-
-        OutputDisplay.setText(success
-            ? tr("GPX upload was successful")
-            : tr("Upload failed. Server returned the following message: ") + returnMsg);
+        
+        final String returnMsgEDT = returnMsg;
+
+        GuiHelper.runInEDT(new Runnable() {
+            @Override public void run() {
+                OutputDisplay.setText(success
+                        ? tr("GPX upload was successful")
+                        : tr("Upload failed. Server returned the following message: ") + returnMsgEDT);
+            }
+        });
 
         c.disconnect();
@@ -385,5 +404,12 @@
             errors += tr("No GPX layer selected. Cannot upload a trace.");
 
-        OutputDisplay.setText(errors);
+        final String errorsEDT = errors;
+        
+        GuiHelper.runInEDT(new Runnable() {
+            @Override public void run() {
+                OutputDisplay.setText(errorsEDT);
+            }
+        });
+        
         return errors.length() > 0;
     }
