Index: src/org/openstreetmap/josm/io/OsmServerWriter.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 1391)
+++ src/org/openstreetmap/josm/io/OsmServerWriter.java	(working copy)
@@ -226,11 +226,9 @@
                 throw new OsmTransferException(tr("Server does not support changesets"));
             }
             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);
                 }
@@ -331,8 +329,7 @@
             } else if (retCode != 200 && retCode != 412) {
                 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);
                 } else {
@@ -413,8 +410,7 @@
             if (retCode != 200 && retCode != 412) {
                 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);
                 } else {
@@ -456,6 +452,20 @@
             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(isAuthCancelled()) {
+                cancel();
+                return true;
+            }
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException ex) {}
+        }
+        return false;
+    }
 
     /**
      * Upload a single node.
@@ -579,8 +589,7 @@
             else if (retCode != 200) {
                 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);
                 } else {
