Index: trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 1393)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 1395)
@@ -227,9 +227,7 @@
             }
             if (retCode != 200 && retCode != 412) {
-
                 if (retries >= 0) {
                     retries--;
-                    System.out.print("backing off for 10 seconds...");
-                    Thread.sleep(10000);
+                    if(sleepAndListen()) return false;
                     System.out.println("retrying ("+retries+" left)");
                     return startChangeset(retries, comment);
@@ -332,6 +330,5 @@
                 if (retries >= 0) {
                     retries--;
-                    System.out.print("backing off for 10 seconds...");
-                    Thread.sleep(10000);
+                    if(sleepAndListen()) return;
                     System.out.println("retrying ("+retries+" left)");
                     stopChangeset(retries);
@@ -414,6 +411,5 @@
                 if (retries >= 0) {
                     retries--;
-                    System.out.print("backing off for 10 seconds...");
-                    Thread.sleep(10000);
+                    if(sleepAndListen()) return;
                     System.out.println("retrying ("+retries+" left)");
                     stopChangeset(retries);
@@ -456,4 +452,18 @@
             throw new RuntimeException(e.getMessage()+ " " + e.getClass().getCanonicalName(), e);
         }
+    }
+
+    private boolean sleepAndListen() {
+        // System.out.print("backing off for 10 seconds...");
+        for(int i=0; i < 10; i++) {
+            if(cancel || isAuthCancelled()) {
+                if(!cancel) cancel();
+                return true;
+            }
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException ex) {}
+        }
+        return false;
     }
 
@@ -580,6 +590,5 @@
                 if (retries >= 0 && retCode != 412)    {
                     retries--;
-                    System.out.print("backing off for 10 seconds...");
-                    Thread.sleep(10000);
+                    if(sleepAndListen()) return;
                     System.out.println("retrying ("+retries+" left)");
                     sendRequestRetry(requestMethod, urlSuffix, osm, body, retries);
