Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryAbstractImage.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryAbstractImage.java	(revision 31513)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryAbstractImage.java	(revision 31514)
@@ -4,6 +4,4 @@
 import java.util.Calendar;
 import java.util.Date;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
 
 import org.openstreetmap.josm.Main;
@@ -18,11 +16,4 @@
  */
 public abstract class MapillaryAbstractImage {
-
-  /**
-   * Lock that locks {@link MapillaryAbstractImage#next()} and
-   * {@link MapillaryAbstractImage#previous()} methods. Used when downloading
-   * images to prevent concurrency problems.
-   */
-  public static final Lock LOCK = new ReentrantLock();
 
   /** The time the image was captured, in Epoch format. */
@@ -205,12 +196,8 @@
    */
   public MapillaryAbstractImage next() {
-    LOCK.lock();
-    try {
-      if (this.getSequence() == null) {
+    synchronized (this.getClass()) {
+      if (this.getSequence() == null)
         return null;
-      }
       return this.getSequence().next(this);
-    } finally {
-      LOCK.unlock();
     }
   }
@@ -223,14 +210,9 @@
    */
   public MapillaryAbstractImage previous() {
-    LOCK.lock();
-    try {
-      if (this.getSequence() == null) {
+    synchronized (this.getClass()) {
+      if (this.getSequence() == null)
         return null;
-      }
       return this.getSequence().previous(this);
-    } finally {
-      LOCK.unlock();
-    }
-
+    }
   }
 
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryUploadAction.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryUploadAction.java	(revision 31513)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryUploadAction.java	(revision 31514)
@@ -53,5 +53,6 @@
 
     if (pane.getValue() != null
-        && (int) pane.getValue() == JOptionPane.OK_OPTION) {
+        && (int) pane.getValue() == JOptionPane.OK_OPTION
+        && dialog.delete != null) {
       if (dialog.sequence.isSelected()) {
         UploadUtils.uploadSequence(MapillaryLayer.getInstance().getData()
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/WalkThread.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/WalkThread.java	(revision 31513)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/WalkThread.java	(revision 31514)
@@ -2,6 +2,4 @@
 
 import java.awt.image.BufferedImage;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
 
 import javax.swing.SwingUtilities;
@@ -24,5 +22,4 @@
   private final int interval;
   private final MapillaryData data;
-  private final Lock lock;
   private boolean end = false;
   private final boolean waitForFullQuality;
@@ -53,5 +50,4 @@
     this.data = MapillaryLayer.getInstance().getData();
     this.data.addListener(this);
-    this.lock = new ReentrantLock();
   }
 
@@ -110,12 +106,9 @@
           this.lastImage = MapillaryMainDialog.getInstance().mapillaryImageDisplay
               .getImage();
-          this.lock.lock();
-          try {
+          synchronized (this) {
             if (this.goForward)
               this.data.selectNext(this.followSelected);
             else
               this.data.selectPrevious(this.followSelected);
-          } finally {
-            this.lock.unlock();
           }
         } catch (InterruptedException e) {
@@ -130,12 +123,6 @@
 
   @Override
-  public void interrupt() {
-    this.lock.lock();
-    try {
-      super.interrupt();
-    } catch (Exception e) {
-    } finally {
-      this.lock.unlock();
-    }
+  public synchronized void interrupt() {
+    super.interrupt();
   }
 
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySequenceDownloadThread.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySequenceDownloadThread.java	(revision 31513)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySequenceDownloadThread.java	(revision 31514)
@@ -8,6 +8,4 @@
 import java.util.List;
 import java.util.concurrent.ExecutorService;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
 
 import javax.json.Json;
@@ -33,7 +31,4 @@
   private static final String URL = MapillaryDownloader.BASE_URL + "search/s/";
 
-  /** Lock to prevent multiple downloads to be imported at the same time. */
-  private static final Lock LOCK = new ReentrantLock();
-
   private final String queryString;
   private final ExecutorService ex;
@@ -58,6 +53,6 @@
     try {
       BufferedReader br;
-      br = new BufferedReader(new InputStreamReader(
-          new URL(URL + this.queryString).openStream(), "UTF-8"));
+      br = new BufferedReader(new InputStreamReader(new URL(URL
+          + this.queryString).openStream(), "UTF-8"));
       JsonObject jsonall = Json.createReader(br).readObject();
 
@@ -95,27 +90,23 @@
             finalImages.remove(img);
         }
-
-        LOCK.lock();
-        MapillaryAbstractImage.LOCK.lock();
-        try {
-          for (MapillaryImage img : finalImages) {
-            if (this.layer.getData().getImages().contains(img)) {
-              // The image in finalImages is substituted by the one in the
-              // database, as they represent the same picture.
-              img = (MapillaryImage) this.layer.getData().getImages()
-                  .get(this.layer.getData().getImages().indexOf(img));
-              sequence.add(img);
-              ((MapillaryImage) this.layer.getData().getImages()
-                  .get(this.layer.getData().getImages().indexOf(img)))
-                  .setSequence(sequence);
-              finalImages.set(finalImages.indexOf(img), img);
-            } else {
-              img.setSequence(sequence);
-              sequence.add(img);
+        synchronized (this.getClass()) {
+          synchronized (MapillaryAbstractImage.class) {
+            for (MapillaryImage img : finalImages) {
+              if (this.layer.getData().getImages().contains(img)) {
+                // The image in finalImages is substituted by the one in the
+                // database, as they represent the same picture.
+                img = (MapillaryImage) this.layer.getData().getImages()
+                    .get(this.layer.getData().getImages().indexOf(img));
+                sequence.add(img);
+                ((MapillaryImage) this.layer.getData().getImages()
+                    .get(this.layer.getData().getImages().indexOf(img)))
+                    .setSequence(sequence);
+                finalImages.set(finalImages.indexOf(img), img);
+              } else {
+                img.setSequence(sequence);
+                sequence.add(img);
+              }
             }
           }
-        } finally {
-          MapillaryAbstractImage.LOCK.unlock();
-          LOCK.unlock();
         }
 
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryPreferenceSetting.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryPreferenceSetting.java	(revision 31513)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryPreferenceSetting.java	(revision 31514)
@@ -83,5 +83,5 @@
     panel.add(this.moveTo);
     this.login = new JButton(new LoginAction());
-    if (Main.pref.get("mapillary.access-token") == null)
+    if (MapillaryUser.getUsername() == null)
       this.login.setText("Login");
     else
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryUploadDialog.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryUploadDialog.java	(revision 31513)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryUploadDialog.java	(revision 31514)
@@ -6,4 +6,5 @@
 import javax.swing.ButtonGroup;
 import javax.swing.JCheckBox;
+import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JRadioButton;
@@ -12,4 +13,5 @@
 import org.openstreetmap.josm.plugins.mapillary.MapillaryImportedImage;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
+import org.openstreetmap.josm.plugins.mapillary.oauth.MapillaryUser;
 
 /**
@@ -33,20 +35,22 @@
   public MapillaryUploadDialog() {
     setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
+    if (MapillaryUser.getUsername() != null) {
+      this.group = new ButtonGroup();
 
-    this.group = new ButtonGroup();
+      this.sequence = new JRadioButton(tr("Upload selected sequence"));
+      if (MapillaryLayer.getInstance().getData().getSelectedImage() == null
+          || !(MapillaryLayer.getInstance().getData().getSelectedImage() instanceof MapillaryImportedImage))
+        this.sequence.setEnabled(false);
+      this.group.add(this.sequence);
+      add(this.sequence);
+      this.group.setSelected(this.sequence.getModel(), true);
 
-    this.sequence = new JRadioButton(tr("Upload selected sequence"));
-    if (MapillaryLayer.getInstance().getData().getSelectedImage() == null
-        || !(MapillaryLayer.getInstance().getData().getSelectedImage() instanceof MapillaryImportedImage))
-      this.sequence.setEnabled(false);
-    this.group.add(this.sequence);
-    add(this.sequence);
-    this.group.setSelected(this.sequence.getModel(), true);
-
-    this.delete = new JCheckBox(tr("Delete after upload"));
-    this.delete.setSelected(Main.pref.getBoolean(
-        "mapillary.delete-after-upload", true));
-    add(this.delete);
-
+      this.delete = new JCheckBox(tr("Delete after upload"));
+      this.delete.setSelected(Main.pref.getBoolean(
+          "mapillary.delete-after-upload", true));
+      add(this.delete);
+    } else {
+      this.add(new JLabel("Go to setting and log in to Mapillary before uploading."));
+    }
   }
 }
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/oauth/MapillaryUser.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/oauth/MapillaryUser.java	(revision 31513)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/oauth/MapillaryUser.java	(revision 31514)
@@ -61,5 +61,4 @@
         Main.error(e);
         isTokenValid = false;
-        isTokenValid = false;
       }
     hash.put("images_hash", images_hash);
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/traffico/TrafficoSignElement.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/traffico/TrafficoSignElement.java	(revision 31513)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/traffico/TrafficoSignElement.java	(revision 31514)
@@ -20,5 +20,5 @@
    */
   public Color getColor() {
-    return color;
+    return this.color;
   }
 
@@ -27,5 +27,5 @@
    */
   public char getGlyph() {
-    return glyph;
+    return this.glyph;
   }
 }
