Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryData.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryData.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryData.java	(revision 31501)
@@ -11,5 +11,5 @@
 
 /**
- * Database class for all the MapillaryImage objects.
+ * Database class for all the {@link MapillaryAbstractImage} objects.
  *
  * @author nokutu
@@ -21,9 +21,11 @@
 
   private List<MapillaryAbstractImage> images;
+  /** The image currently selected, this is the one being shown. */
   private MapillaryAbstractImage selectedImage;
-  /** The image under the cursor */
+  /** The image under the cursor. */
   private MapillaryAbstractImage highlightedImage;
+  /** All the images selected, can be more than one. */
   private final List<MapillaryAbstractImage> multiSelectedImages;
-
+  /** Listeners of the class. */
   private CopyOnWriteArrayList<MapillaryDataListener> listeners = new CopyOnWriteArrayList<>();
 
@@ -39,4 +41,5 @@
     this.selectedImage = null;
 
+    // Adds the basic set of listeners.
     addListener(MapillaryPlugin.walkAction);
     addListener(MapillaryPlugin.zoomAction);
@@ -67,6 +70,6 @@
 
   /**
-   * Removes an image from the database. From the ArrayList in this object and
-   * from its {@link MapillarySequence}.
+   * Removes an image from the database. From the {@link List} in this object
+   * and from its {@link MapillarySequence}.
    *
    * @param image
@@ -120,11 +123,10 @@
 
   /**
-   * Adds a set of MapillaryImages to the object, but doesn't repaint mapView.
-   * This is needed for concurrency.
+   * Adds a set of {link MapillaryAbstractImage} objects to this object.
    *
    * @param images
    *          The set of images to be added.
    * @param update
-   *          Whether the map must be updated or no.
+   *          Whether the map must be updated or not.
    */
   public synchronized void add(List<MapillaryAbstractImage> images,
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImage.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImage.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImage.java	(revision 31501)
@@ -14,5 +14,4 @@
   /** Unique identifier of the object */
   private final String key;
-
   /** The user that made the image */
   private String user;
@@ -24,5 +23,5 @@
    * Returns the location where the image was taken.
    *
-   * @return A String containing the location where the picture was taken.
+   * @return A {@code String} containing the location where the picture was taken.
    */
   public String getLocation() {
@@ -34,5 +33,5 @@
    *
    * @param location
-   *          A String object containing the place where the image was taken.
+   *          A {@code String} object containing the place where the image was taken.
    */
   public void setLocation(String location) {
@@ -61,5 +60,5 @@
    * Returns the unique identifier of the object.
    *
-   * @return A String containing the unique identifier of the object.
+   * @return A {@code String} containing the unique identifier of the object.
    */
   public String getKey() {
@@ -71,5 +70,5 @@
    *
    * @param sign
-   *          A String that identifies the type of sign.
+   *          A {@code String} that identifies the type of sign.
    */
   public void addSign(String sign) {
@@ -78,7 +77,7 @@
 
   /**
-   * Returns a List containing the signs assigned to this image.
+   * Returns a {@link List} containing the signs assigned to this image.
    *
-   * @return A List object containing the signs assigned to this image.
+   * @return A {@link List} object containing the signs assigned to this image.
    */
   public List<String> getSigns() {
@@ -90,5 +89,5 @@
    *
    * @param user
-   *          A String containing the username of the person who took the image.
+   *          A {@code String} containing the username of the person who took the image.
    */
   public void setUser(String user) {
@@ -99,5 +98,5 @@
    * Returns the username of the person who took the picture.
    *
-   * @return A String containing the username of the person who took the
+   * @return A {@code String} containing the username of the person who took the
    *         picture.
    */
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImportedImage.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImportedImage.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImportedImage.java	(revision 31501)
@@ -5,8 +5,8 @@
 import java.io.IOException;
 import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
 
 import javax.imageio.ImageIO;
+
+import org.openstreetmap.josm.plugins.mapillary.utils.MapillaryUtils;
 
 /**
@@ -24,6 +24,6 @@
 
   /**
-   * Creates a new MapillaryImportedImage object using as date the current date,
-   * because it is missing in the file.
+   * Creates a new MapillaryImportedImage object using as date the current date.
+   * Using when the EXIF tags doesn't contain that info.
    *
    * @param lat
@@ -37,5 +37,5 @@
    */
   public MapillaryImportedImage(double lat, double lon, double ca, File file) {
-    this(lat, lon, ca, file, currentDate());
+    this(lat, lon, ca, file, MapillaryUtils.currentDate());
   }
 
@@ -73,6 +73,6 @@
    * Returns the pictures of the file.
    *
-   * @return A BufferedImage object containing the picture, or null if the
-   *         {@link File} given in the constructor was null.
+   * @return A {@link BufferedImage} object containing the picture, or null if
+   *         the {@link File} given in the constructor was null.
    * @throws IOException
    *           If the file parameter of the object isn't an image.
@@ -85,7 +85,7 @@
 
   /**
-   * Returns the File object where the picture is located.
+   * Returns the {@link File} object where the picture is located.
    *
-   * @return The File object where the picture is located.
+   * @return The {@link File} object where the picture is located.
    */
   public File getFile() {
@@ -104,9 +104,3 @@
     return this.file.hashCode();
   }
-
-  private static String currentDate() {
-    Calendar cal = Calendar.getInstance();
-    SimpleDateFormat formatter = new SimpleDateFormat("yyyy:MM:dd hh:mm:ss");
-    return formatter.format(cal.getTime());
-  }
 }
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java	(revision 31501)
@@ -86,5 +86,4 @@
   /** The image pointed by the red line. */
   public static MapillaryImage RED;
-
   /** {@link MapillaryData} object that stores the database. */
   private final MapillaryData data;
@@ -519,5 +518,5 @@
     public void run() {
       try {
-        sleep(1000);
+        sleep(1500);
       } catch (InterruptedException e) {
         Main.error(e);
@@ -529,40 +528,32 @@
   @Override
   public void primitivesAdded(PrimitivesAddedEvent event) {
-    // Nothing
   }
 
   @Override
   public void primitivesRemoved(PrimitivesRemovedEvent event) {
-    // Nothing
   }
 
   @Override
   public void tagsChanged(TagsChangedEvent event) {
-    // Nothing
   }
 
   @Override
   public void nodeMoved(NodeMovedEvent event) {
-    // Nothing
   }
 
   @Override
   public void wayNodesChanged(WayNodesChangedEvent event) {
-    // Nothing
   }
 
   @Override
   public void relationMembersChanged(RelationMembersChangedEvent event) {
-    // Nothing
   }
 
   @Override
   public void otherDatasetChange(AbstractDatasetChangedEvent event) {
-    // Nothing
   }
 
   @Override
   public void visitBoundingBox(BoundingXYVisitor v) {
-    // Nothing
   }
 
@@ -598,8 +589,7 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-      if (INSTANCE != null) {
+      if (INSTANCE != null)
         MapillaryRecord.getInstance().addCommand(
             new CommandDelete(getData().getMultiSelectedImages()));
-      }
     }
   }
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryPlugin.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryPlugin.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryPlugin.java	(revision 31501)
@@ -175,5 +175,5 @@
 
   /**
-   * Enables/disables a JMenuItem.
+   * Enables/disables a {@link JMenuItem}.
    *
    * @param menu
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillarySequence.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillarySequence.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillarySequence.java	(revision 31501)
@@ -5,8 +5,8 @@
 
 /**
- * Class that stores a sequence of MapillaryImage objects.
+ * Class that stores a sequence of {@link MapillaryAbstractImage} objects.
  *
  * @author nokutu
- * @see MapillaryImage
+ * @see MapillaryAbstractImage
  *
  */
@@ -25,5 +25,5 @@
 
   /**
-   * Creates a sequence object with the given parameters
+   * Creates a sequence object with the given parameters.
    *
    * @param key
@@ -39,5 +39,6 @@
 
   /**
-   * Returns all MapillaryImages objects contained by this object.
+   * Returns all {@link MapillaryAbstractImage} objects contained by this
+   * object.
    *
    * @return A List object containing all the {@link MapillaryAbstractImage}
@@ -101,5 +102,6 @@
 
   /**
-   * Returns the next {@link MapillaryAbstractImage} in the sequence.
+   * Returns the next {@link MapillaryAbstractImage} in the sequence of a given
+   * {@link MapillaryAbstractImage} object.
    *
    * @param image
@@ -121,5 +123,6 @@
 
   /**
-   * Returns the previous {@link MapillaryAbstractImage} in the sequence.
+   * Returns the previous {@link MapillaryAbstractImage} in the sequence of a given
+   * {@link MapillaryAbstractImage} object.
    *
    * @param image
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 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/WalkThread.java	(revision 31501)
@@ -82,4 +82,5 @@
         try {
           synchronized (this) {
+            // Waits for full quality picture.
             if (this.waitForFullQuality && image instanceof MapillaryImage) {
               while (MapillaryMainDialog.getInstance().mapillaryImageDisplay
@@ -90,5 +91,7 @@
                       .getImage().getWidth() < 2048)
                 wait(100);
-            } else {
+            }
+            // Waits for thumbnail.
+            else {
               while (MapillaryMainDialog.getInstance().mapillaryImageDisplay
                   .getImage() == this.lastImage
@@ -135,5 +138,4 @@
       this.lock.unlock();
     }
-
   }
 
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/cache/CacheUtils.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/cache/CacheUtils.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/cache/CacheUtils.java	(revision 31501)
@@ -74,5 +74,4 @@
     public void loadingFinished(CacheEntry arg0, CacheEntryAttributes arg1,
         LoadResult arg2) {
-      // Nothing
     }
   }
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/cache/MapillaryCache.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/cache/MapillaryCache.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/cache/MapillaryCache.java	(revision 31501)
@@ -30,5 +30,4 @@
     /** Full quality image */
     FULL_IMAGE,
-
     /** Low quality image */
     THUMBNAIL
@@ -41,5 +40,5 @@
    *          The key of the image.
    * @param type
-   *          The type of image that must be downloaded (THUMNAIL or
+   *          The type of image that must be downloaded (THUMBNAIL or
    *          FULL_IMAGE).
    */
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryDownloader.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryDownloader.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryDownloader.java	(revision 31501)
@@ -49,6 +49,6 @@
   public final static String CLIENT_ID = "T1Fzd20xZjdtR0s1VDk5OFNIOXpYdzoxNDYyOGRkYzUyYTFiMzgz";
   /** Executor that will run the petitions. */
-  private static ThreadPoolExecutor EXECUTOR = new ThreadPoolExecutor(3, 5, 100, TimeUnit.SECONDS,
-      new ArrayBlockingQueue<Runnable>(100));;
+  private static ThreadPoolExecutor EXECUTOR = new ThreadPoolExecutor(3, 5,
+      100, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(100));;
 
   /**
@@ -114,8 +114,9 @@
 
   /**
-   * Checks if the given {@LatLon} object lies inside the bounds of the
+   * Checks if the given {@link LatLon} object lies inside the bounds of the
    * image.
    *
    * @param latlon
+   *          The coordinates to check.
    * @return true if it lies inside the bounds; false otherwise;
    */
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryExportDownloadThread.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryExportDownloadThread.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryExportDownloadThread.java	(revision 31501)
@@ -12,5 +12,4 @@
 import org.openstreetmap.josm.data.cache.CacheEntryAttributes;
 import org.openstreetmap.josm.data.cache.ICachedLoaderListener;
-import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryImage;
@@ -28,10 +27,8 @@
     ICachedLoaderListener {
 
-  String url;
-  ArrayBlockingQueue<BufferedImage> queue;
-  ArrayBlockingQueue<MapillaryAbstractImage> queueImages;
+  private ArrayBlockingQueue<BufferedImage> queue;
+  private ArrayBlockingQueue<MapillaryAbstractImage> queueImages;
 
-  ProgressMonitor monitor;
-  MapillaryImage image;
+  private MapillaryImage image;
 
   /**
@@ -50,6 +47,4 @@
       ArrayBlockingQueue<BufferedImage> queue,
       ArrayBlockingQueue<MapillaryAbstractImage> queueImages) {
-    this.url = "https://d1cuyjsrcm0gby.cloudfront.net/" + image.getKey()
-        + "/thumb-2048.jpg";
     this.queue = queue;
     this.image = image;
@@ -59,14 +54,17 @@
   @Override
   public void run() {
-    new MapillaryCache(this.image.getKey(), MapillaryCache.Type.FULL_IMAGE).submit(
-        this, false);
+    new MapillaryCache(this.image.getKey(), MapillaryCache.Type.FULL_IMAGE)
+        .submit(this, false);
   }
 
   @Override
-  public void loadingFinished(CacheEntry data, CacheEntryAttributes attributes,
-      LoadResult result) {
+  public synchronized void loadingFinished(CacheEntry data,
+      CacheEntryAttributes attributes, LoadResult result) {
     try {
-      this.queue.put(ImageIO.read(new ByteArrayInputStream(data.getContent())));
-      this.queueImages.put(this.image);
+      synchronized (this.getClass()) {
+        this.queue
+            .put(ImageIO.read(new ByteArrayInputStream(data.getContent())));
+        this.queueImages.put(this.image);
+      }
     } catch (InterruptedException e) {
       Main.error(e);
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryExportManager.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryExportManager.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryExportManager.java	(revision 31501)
@@ -28,14 +28,15 @@
  *
  * @author nokutu
- *
+ * @see MapillaryExportWriterThread
+ * @see MapillaryExportDownloadThread
  */
 public class MapillaryExportManager extends PleaseWaitRunnable {
 
-  ArrayBlockingQueue<BufferedImage> queue;
-  ArrayBlockingQueue<MapillaryAbstractImage> queueImages;
+  private ArrayBlockingQueue<BufferedImage> queue;
+  private ArrayBlockingQueue<MapillaryAbstractImage> queueImages;
 
-  final int amount;
-  List<MapillaryAbstractImage> images;
-  String path;
+  private final int amount;
+  private List<MapillaryAbstractImage> images;
+  private String path;
 
   private Thread writer;
@@ -137,10 +138,8 @@
       Main.error(e);
     }
-
   }
 
   @Override
   protected void finish() {
-    // TODO Auto-generated method stub
   }
 }
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryImageInfoDownloadThread.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryImageInfoDownloadThread.java	(revision 31501)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryImageInfoDownloadThread.java	(revision 31501)
@@ -0,0 +1,75 @@
+package org.openstreetmap.josm.plugins.mapillary.downloads;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.concurrent.ExecutorService;
+
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryImage;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
+
+/**
+ * This thread downloads one of the images in a given area.
+ *
+ * @author nokutu
+ * @see MapillarySquareDownloadManagerThread
+ */
+public class MapillaryImageInfoDownloadThread extends Thread {
+  private static final String URL = MapillaryDownloader.BASE_URL + "search/im/";
+  private final String queryString;
+  private final ExecutorService ex;
+
+  /**
+   * Main constructor.
+   *
+   * @param ex
+   *          {@link ExecutorService} object that is executing this thread.
+   * @param queryString
+   *          A String containing the parameters for the download.
+   */
+  public MapillaryImageInfoDownloadThread(ExecutorService ex,
+      String queryString) {
+    this.ex = ex;
+    this.queryString = queryString;
+  }
+
+  @Override
+  public void run() {
+    try {
+      BufferedReader br = new BufferedReader(new InputStreamReader(new URL(URL
+          + this.queryString).openStream(), "UTF-8"));
+      JsonObject jsonobj = Json.createReader(br).readObject();
+      if (!jsonobj.getBoolean("more"))
+        this.ex.shutdown();
+      JsonArray jsonarr = jsonobj.getJsonArray("ims");
+      JsonObject data;
+      for (int i = 0; i < jsonarr.size(); i++) {
+        data = jsonarr.getJsonObject(i);
+        String key = data.getString("key");
+        for (MapillaryAbstractImage image : MapillaryLayer.getInstance().getData()
+            .getImages()) {
+          if (image instanceof MapillaryImage) {
+            if (((MapillaryImage) image).getKey().equals(key)
+                && ((MapillaryImage) image).getUser() == null) {
+              ((MapillaryImage) image).setUser(data.getString("user"));
+              ((MapillaryImage) image).setCapturedAt(data.getJsonNumber(
+                  "captured_at").longValue());
+            }
+          }
+        }
+      }
+    } catch (MalformedURLException e) {
+      Main.error(e);
+    } catch (IOException e) {
+      Main.error(e);
+    }
+  }
+}
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryImageInfoDownloaderThread.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryImageInfoDownloaderThread.java	(revision 31500)
+++ 	(revision )
@@ -1,75 +1,0 @@
-package org.openstreetmap.josm.plugins.mapillary.downloads;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.concurrent.ExecutorService;
-
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonObject;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage;
-import org.openstreetmap.josm.plugins.mapillary.MapillaryImage;
-import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
-
-/**
- * This thread downloads one of the images in a given area.
- *
- * @author nokutu
- * @see MapillarySquareDownloadManagerThread
- */
-public class MapillaryImageInfoDownloaderThread extends Thread {
-  private static final String URL = MapillaryDownloader.BASE_URL + "search/im/";
-  private final String queryString;
-  private final ExecutorService ex;
-
-  /**
-   * Main constructor.
-   *
-   * @param ex
-   *          {@link ExecutorService} object that is executing this thread.
-   * @param queryString
-   *          A String containing the parameters for the download.
-   */
-  public MapillaryImageInfoDownloaderThread(ExecutorService ex,
-      String queryString) {
-    this.ex = ex;
-    this.queryString = queryString;
-  }
-
-  @Override
-  public void run() {
-    try {
-      BufferedReader br = new BufferedReader(new InputStreamReader(new URL(URL
-          + this.queryString).openStream(), "UTF-8"));
-      JsonObject jsonobj = Json.createReader(br).readObject();
-      if (!jsonobj.getBoolean("more"))
-        this.ex.shutdown();
-      JsonArray jsonarr = jsonobj.getJsonArray("ims");
-      JsonObject data;
-      for (int i = 0; i < jsonarr.size(); i++) {
-        data = jsonarr.getJsonObject(i);
-        String key = data.getString("key");
-        for (MapillaryAbstractImage image : MapillaryLayer.getInstance().getData()
-            .getImages()) {
-          if (image instanceof MapillaryImage) {
-            if (((MapillaryImage) image).getKey().equals(key)
-                && ((MapillaryImage) image).getUser() == null) {
-              ((MapillaryImage) image).setUser(data.getString("user"));
-              ((MapillaryImage) image).setCapturedAt(data.getJsonNumber(
-                  "captured_at").longValue());
-            }
-          }
-        }
-      }
-    } catch (MalformedURLException e) {
-      Main.error(e);
-    } catch (IOException e) {
-      Main.error(e);
-    }
-  }
-}
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySquareDownloadManagerThread.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySquareDownloadManagerThread.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySquareDownloadManagerThread.java	(revision 31501)
@@ -24,4 +24,7 @@
  *
  * @see MapillaryDownloader
+ * @see MapillarySequenceDownloadThread
+ * @see MapillaryImageInfoDownloadThread
+ * @see MapillaryTrafficSignDownloadThread
  */
 public class MapillarySquareDownloadManagerThread extends Thread {
@@ -109,5 +112,5 @@
     int page = 0;
     while (!this.completeExecutor.isShutdown()) {
-      this.completeExecutor.execute(new MapillaryImageInfoDownloaderThread(
+      this.completeExecutor.execute(new MapillaryImageInfoDownloadThread(
           this.completeExecutor, this.imageQueryString + "&page=" + page
               + "&limit=20"));
@@ -122,5 +125,5 @@
     int page = 0;
     while (!this.signsExecutor.isShutdown()) {
-      this.signsExecutor.execute(new MapillaryTrafficSignDownloaderThread(
+      this.signsExecutor.execute(new MapillaryTrafficSignDownloadThread(
           this.signsExecutor, this.signQueryString + "&page=" + page
               + "&limit=20"));
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryTrafficSignDownloadThread.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryTrafficSignDownloadThread.java	(revision 31501)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryTrafficSignDownloadThread.java	(revision 31501)
@@ -0,0 +1,97 @@
+package org.openstreetmap.josm.plugins.mapillary.downloads;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.concurrent.ExecutorService;
+
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryImage;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
+
+/**
+ * Downloads the signs information in a given area.
+ *
+ * @author nokutu
+ *
+ */
+public class MapillaryTrafficSignDownloadThread extends Thread {
+  private static final String URL = MapillaryDownloader.BASE_URL
+      + "search/im/or/";
+  private final String queryString;
+  private final ExecutorService ex;
+
+  /**
+   * Main constructor.
+   *
+   * @param ex
+   *          {@link ExecutorService} object that is executing this thread.
+   * @param queryString
+   *          A String containing the parameter for the download.
+   */
+  public MapillaryTrafficSignDownloadThread(ExecutorService ex,
+      String queryString) {
+    this.ex = ex;
+    this.queryString = queryString;
+  }
+
+  @Override
+  public void run() {
+    BufferedReader br;
+    try {
+      br = new BufferedReader(new InputStreamReader(new URL(URL
+          + this.queryString).openStream(), "UTF-8"));
+      JsonObject jsonobj = Json.createReader(br).readObject();
+      if (!jsonobj.getBoolean("more")) {
+        this.ex.shutdown();
+      }
+      JsonArray jsonarr = jsonobj.getJsonArray("ims");
+      for (int i = 0; i < jsonarr.size(); i++) {
+        JsonArray rects = jsonarr.getJsonObject(i).getJsonArray("rects");
+        JsonArray rectversions = jsonarr.getJsonObject(i).getJsonArray(
+            "rectversions");
+        String key = jsonarr.getJsonObject(i).getString("key");
+        if (rectversions != null) {
+          for (int j = 0; j < rectversions.size(); j++) {
+            rects = rectversions.getJsonObject(j).getJsonArray("rects");
+            for (int k = 0; k < rects.size(); k++) {
+              JsonObject data = rects.getJsonObject(k);
+              for (MapillaryAbstractImage image : MapillaryLayer.getInstance()
+                  .getData().getImages())
+                if (image instanceof MapillaryImage
+                    && ((MapillaryImage) image).getKey().equals(key))
+                  try {
+                    ((MapillaryImage) image).addSign(data.getString("type"));
+                  } catch (Exception e) {
+                    Main.error("Error when downloading sign.");
+                  }
+            }
+          }
+        }
+
+        // Just one sign on the picture
+        else if (rects != null) {
+          for (int j = 0; j < rects.size(); j++) {
+            JsonObject data = rects.getJsonObject(j);
+            for (MapillaryAbstractImage image : MapillaryLayer.getInstance()
+                .getData().getImages())
+              if (image instanceof MapillaryImage
+                  && ((MapillaryImage) image).getKey().equals(key))
+                ((MapillaryImage) image).addSign(data.getString("type"));
+          }
+        }
+      }
+    } catch (MalformedURLException e) {
+      Main.error(e);
+    } catch (IOException e) {
+      Main.error(e);
+    }
+  }
+}
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryTrafficSignDownloaderThread.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillaryTrafficSignDownloaderThread.java	(revision 31500)
+++ 	(revision )
@@ -1,97 +1,0 @@
-package org.openstreetmap.josm.plugins.mapillary.downloads;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.concurrent.ExecutorService;
-
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonObject;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage;
-import org.openstreetmap.josm.plugins.mapillary.MapillaryImage;
-import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
-
-/**
- * Downloads the signs information in a given area.
- *
- * @author nokutu
- *
- */
-public class MapillaryTrafficSignDownloaderThread extends Thread {
-  private static final String URL = MapillaryDownloader.BASE_URL
-      + "search/im/or/";
-  private final String queryString;
-  private final ExecutorService ex;
-
-  /**
-   * Main constructor.
-   *
-   * @param ex
-   *          {@link ExecutorService} object that is executing this thread.
-   * @param queryString
-   *          A String containing the parameter for the download.
-   */
-  public MapillaryTrafficSignDownloaderThread(ExecutorService ex,
-      String queryString) {
-    this.ex = ex;
-    this.queryString = queryString;
-  }
-
-  @Override
-  public void run() {
-    BufferedReader br;
-    try {
-      br = new BufferedReader(new InputStreamReader(new URL(URL
-          + this.queryString).openStream(), "UTF-8"));
-      JsonObject jsonobj = Json.createReader(br).readObject();
-      if (!jsonobj.getBoolean("more")) {
-        this.ex.shutdown();
-      }
-      JsonArray jsonarr = jsonobj.getJsonArray("ims");
-      for (int i = 0; i < jsonarr.size(); i++) {
-        JsonArray rects = jsonarr.getJsonObject(i).getJsonArray("rects");
-        JsonArray rectversions = jsonarr.getJsonObject(i).getJsonArray(
-            "rectversions");
-        String key = jsonarr.getJsonObject(i).getString("key");
-        if (rectversions != null) {
-          for (int j = 0; j < rectversions.size(); j++) {
-            rects = rectversions.getJsonObject(j).getJsonArray("rects");
-            for (int k = 0; k < rects.size(); k++) {
-              JsonObject data = rects.getJsonObject(k);
-              for (MapillaryAbstractImage image : MapillaryLayer.getInstance()
-                  .getData().getImages())
-                if (image instanceof MapillaryImage
-                    && ((MapillaryImage) image).getKey().equals(key))
-                  try {
-                    ((MapillaryImage) image).addSign(data.getString("type"));
-                  } catch (Exception e) {
-                    Main.error("Error when downloading sign.");
-                  }
-            }
-          }
-        }
-
-        // Just one sign on the picture
-        else if (rects != null) {
-          for (int j = 0; j < rects.size(); j++) {
-            JsonObject data = rects.getJsonObject(j);
-            for (MapillaryAbstractImage image : MapillaryLayer.getInstance()
-                .getData().getImages())
-              if (image instanceof MapillaryImage
-                  && ((MapillaryImage) image).getKey().equals(key))
-                ((MapillaryImage) image).addSign(data.getString("type"));
-          }
-        }
-      }
-    } catch (MalformedURLException e) {
-      Main.error(e);
-    } catch (IOException e) {
-      Main.error(e);
-    }
-  }
-}
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/HyperlinkLabel.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/HyperlinkLabel.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/HyperlinkLabel.java	(revision 31501)
@@ -24,5 +24,5 @@
 
 /**
- * JLabel that acts as a hyperlink.
+ * {@link JLabel} that acts as a hyperlink.
  *
  * @author nokutu
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryExportDialog.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryExportDialog.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryExportDialog.java	(revision 31501)
@@ -168,7 +168,5 @@
         this.dlg.path.setText(this.lastPath);
       }
-
     }
-
   }
 }
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryFilterDialog.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryFilterDialog.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryFilterDialog.java	(revision 31501)
@@ -49,5 +49,5 @@
       tr("Months"), tr("Days") };
 
-  private final JPanel panel = new JPanel();
+  private final JPanel panel;
 
   /** Spinner to choose the range of dates. */
@@ -93,4 +93,6 @@
             KeyEvent.VK_M, Shortcut.NONE), 200);
 
+    this.panel = new JPanel();
+
     this.signChooser.setEnabled(false);
     JPanel signChooserPanel = new JPanel();
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryHistoryDialog.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryHistoryDialog.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryHistoryDialog.java	(revision 31501)
@@ -44,7 +44,7 @@
  * allows the user to revert them.
  *
+ * @author nokutu
  * @see MapillaryRecord
  * @see MapillaryCommand
- * @author nokutu
  *
  */
@@ -211,5 +211,4 @@
       MapillaryRecord.getInstance().undo();
     }
-
   }
 
@@ -227,5 +226,4 @@
       MapillaryRecord.getInstance().redo();
     }
-
   }
 
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/history/MapillaryRecordListener.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/history/MapillaryRecordListener.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/history/MapillaryRecordListener.java	(revision 31501)
@@ -3,9 +3,10 @@
 /**
  * Interface for the listener of the {@link MapillaryRecord} class
- * 
+ *
  * @author nokutu
  * @see MapillaryRecord
  */
 public interface MapillaryRecordListener {
+
   /**
    * Fired when any command is undone or redone.
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/utils/MapillaryUtils.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/utils/MapillaryUtils.java	(revision 31500)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/utils/MapillaryUtils.java	(revision 31501)
@@ -7,5 +7,7 @@
 import java.net.URISyntaxException;
 import java.net.URL;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Calendar;
 import java.util.List;
 
@@ -266,3 +268,13 @@
     showPictures(MapillaryLayer.getInstance().getData().getImages(), false);
   }
+
+  /**
+   * Returns the current date.
+   * @return A {@code String} object containing the current date.
+   */
+  public static String currentDate() {
+    Calendar cal = Calendar.getInstance();
+    SimpleDateFormat formatter = new SimpleDateFormat("yyyy:MM:dd hh:mm:ss");
+    return formatter.format(cal.getTime());
+  }
 }
Index: applications/editors/josm/plugins/mapillary/test/unit/org/openstreetmap/josm/plugins/mapillary/MapillarySequenceDownloadThreadTest.java
===================================================================
--- applications/editors/josm/plugins/mapillary/test/unit/org/openstreetmap/josm/plugins/mapillary/MapillarySequenceDownloadThreadTest.java	(revision 31500)
+++ 	(revision )
@@ -1,69 +1,0 @@
-/**
- *
- */
-package org.openstreetmap.josm.plugins.mapillary;
-
-import static org.junit.Assert.assertTrue;
-
-import java.util.Locale;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import org.junit.Test;
-import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.plugins.mapillary.downloads.MapillaryDownloader;
-import org.openstreetmap.josm.plugins.mapillary.downloads.MapillarySequenceDownloadThread;
-
-/**
- *
- */
-public class MapillarySequenceDownloadThreadTest extends AbstractTest {
-
-  /**
-   * Test method for
-   * {@link org.openstreetmap.josm.plugins.mapillary.downloads.MapillarySequenceDownloadThread#run()}
-   * .
-   *
-   * This downloads a small area of mapillary-sequences where we know that
-   * images already exist. When the download-thread finishes, we check if the
-   * Mapillary-layer now contains one or more images.
-   *
-   * @throws InterruptedException
-   */
-  @Test
-  public void testRun() throws InterruptedException {
-    System.out.println("[JUnit] MapillarySequenceDownloadThreadTest.testRun()");
-    // Area around image UjEbeXZYIoyAKOsE-remlg (59.32125452° N 18.06166856° E)
-    LatLon minLatLon = new LatLon(59.3212545, 18.0616685);
-    LatLon maxLatLon = new LatLon(59.3212546, 18.0616686);
-
-    ExecutorService ex = Executors.newSingleThreadExecutor();
-    String queryString = String
-        .format(
-            Locale.UK,
-            "?max_lat=%.8f&max_lon=%.8f&min_lat=%.8f&min_lon=%.8f&limit=10&client_id=%s",
-            maxLatLon.lat(), maxLatLon.lon(), minLatLon.lat(), minLatLon.lon(),
-            MapillaryDownloader.CLIENT_ID);
-    MapillaryLayer.getInstance().getData().bounds.add(new Bounds(minLatLon,
-        maxLatLon));
-
-    int page = 1;
-    while (!ex.isShutdown()
-        && MapillaryLayer.getInstance().getData().getImages().size() <= 0
-        && page < 50) {
-      System.out.println("Sending sequence-request " + page
-          + " to Mapillary-servers…");
-      Thread downloadThread = new MapillarySequenceDownloadThread(ex,
-          queryString + "&page=" + page);
-      downloadThread.start();
-      downloadThread.join();
-      page++;
-      Thread.sleep(500);
-    }
-    assertTrue(MapillaryLayer.getInstance().getData().getImages().size() >= 1);
-    System.out
-        .println("One or more images were added to the MapillaryLayer within the given bounds.");
-  }
-
-}
Index: applications/editors/josm/plugins/mapillary/test/unit/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySequenceDownloadThreadTest.java
===================================================================
--- applications/editors/josm/plugins/mapillary/test/unit/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySequenceDownloadThreadTest.java	(revision 31501)
+++ applications/editors/josm/plugins/mapillary/test/unit/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySequenceDownloadThreadTest.java	(revision 31501)
@@ -0,0 +1,71 @@
+/**
+ *
+ */
+package org.openstreetmap.josm.plugins.mapillary.downloads;
+
+import static org.junit.Assert.assertTrue;
+
+import java.util.Locale;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import org.junit.Test;
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.plugins.mapillary.AbstractTest;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
+import org.openstreetmap.josm.plugins.mapillary.downloads.MapillaryDownloader;
+import org.openstreetmap.josm.plugins.mapillary.downloads.MapillarySequenceDownloadThread;
+
+/**
+ *
+ */
+public class MapillarySequenceDownloadThreadTest extends AbstractTest {
+
+  /**
+   * Test method for
+   * {@link org.openstreetmap.josm.plugins.mapillary.downloads.MapillarySequenceDownloadThread#run()}
+   * .
+   *
+   * This downloads a small area of mapillary-sequences where we know that
+   * images already exist. When the download-thread finishes, we check if the
+   * Mapillary-layer now contains one or more images.
+   *
+   * @throws InterruptedException
+   */
+  @Test
+  public void testRun() throws InterruptedException {
+    System.out.println("[JUnit] MapillarySequenceDownloadThreadTest.testRun()");
+    // Area around image UjEbeXZYIoyAKOsE-remlg (59.32125452° N 18.06166856° E)
+    LatLon minLatLon = new LatLon(59.3212545, 18.0616685);
+    LatLon maxLatLon = new LatLon(59.3212546, 18.0616686);
+
+    ExecutorService ex = Executors.newSingleThreadExecutor();
+    String queryString = String
+        .format(
+            Locale.UK,
+            "?max_lat=%.8f&max_lon=%.8f&min_lat=%.8f&min_lon=%.8f&limit=10&client_id=%s",
+            maxLatLon.lat(), maxLatLon.lon(), minLatLon.lat(), minLatLon.lon(),
+            MapillaryDownloader.CLIENT_ID);
+    MapillaryLayer.getInstance().getData().bounds.add(new Bounds(minLatLon,
+        maxLatLon));
+
+    int page = 1;
+    while (!ex.isShutdown()
+        && MapillaryLayer.getInstance().getData().getImages().size() <= 0
+        && page < 50) {
+      System.out.println("Sending sequence-request " + page
+          + " to Mapillary-servers…");
+      Thread downloadThread = new MapillarySequenceDownloadThread(ex,
+          queryString + "&page=" + page);
+      downloadThread.start();
+      downloadThread.join();
+      page++;
+      Thread.sleep(500);
+    }
+    assertTrue(MapillaryLayer.getInstance().getData().getImages().size() >= 1);
+    System.out
+        .println("One or more images were added to the MapillaryLayer within the given bounds.");
+  }
+
+}
