Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/oauth/UploadUtils.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/oauth/UploadUtils.java	(revision 31479)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/oauth/UploadUtils.java	(revision 31482)
@@ -176,5 +176,4 @@
       }
       this.ex.shutdown();
-      PluginState.finishUpload();
     }
   }
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/utils/PluginState.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/utils/PluginState.java	(revision 31479)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/utils/PluginState.java	(revision 31482)
@@ -18,5 +18,5 @@
   private static int runningDownloads = 0;
   /** Images that have to be uploaded. */
-  public static int imagesToUpload = 0;
+  protected static int imagesToUpload = 0;
   /** Images that have been uploaded. */
   public static int imagesUploaded = 0;
@@ -33,4 +33,7 @@
    */
   public static void finishDownload() {
+    if (runningDownloads == 0)
+      throw new IllegalStateException(
+          "The amount of running downlaods is less or equals to 0");
     runningDownloads--;
   }
@@ -43,14 +46,4 @@
   public static boolean isDownloading() {
     return runningDownloads > 0;
-  }
-
-  /**
-   * Called when an upload is finished.
-   */
-  public static void finishUpload() {
-    if (imagesUploaded >= imagesToUpload) {
-      imagesUploaded = 0;
-      imagesToUpload = 0;
-    }
   }
 
@@ -71,4 +64,8 @@
    */
   public static void imagesToUpload(int amount) {
+    if (imagesToUpload <= imagesUploaded) {
+      imagesToUpload = 0;
+      imagesUploaded = 0;
+    }
     imagesToUpload += amount;
   }
@@ -80,5 +77,6 @@
     imagesUploaded++;
     if (imagesToUpload == imagesUploaded) {
-      finishedUploadDialog();
+      if (Main.main != null)
+        finishedUploadDialog();
     }
   }
