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 31415)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java	(revision 31416)
@@ -445,5 +445,6 @@
    * Returns the 2 closest images belonging to a different sequence.
    *
-   * @return
+   * @return An array of length 2 containing the two closest images belonging
+   *         to different sequences.
    */
   private MapillaryImage[] getClosestImagesFromDifferentSequences() {
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryWalkAction.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryWalkAction.java	(revision 31415)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryWalkAction.java	(revision 31416)
@@ -57,5 +57,6 @@
         && (int) pane.getValue() == JOptionPane.OK_OPTION) {
       thread = new WalkThread((int) dialog.spin.getValue(),
-          dialog.waitForPicture.isSelected(), dialog.followSelection.isSelected());
+          dialog.waitForPicture.isSelected(),
+          dialog.followSelection.isSelected(), dialog.goForward.isSelected());
       fireWalkStarted();
       thread.start();
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 31415)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/WalkThread.java	(revision 31416)
@@ -28,4 +28,5 @@
   private final boolean waitForFullQuality;
   private final boolean followSelected;
+  private final boolean goForward;
   private BufferedImage lastImage;
   private volatile boolean paused = false;
@@ -37,9 +38,12 @@
    * @param waitForPicture
    * @param followSelected
+   * @param goForward
    */
-  public WalkThread(int interval, boolean waitForPicture, boolean followSelected) {
+  public WalkThread(int interval, boolean waitForPicture,
+      boolean followSelected, boolean goForward) {
     this.interval = interval;
     this.waitForFullQuality = waitForPicture;
     this.followSelected = followSelected;
+    this.goForward = goForward;
     data = MapillaryLayer.getInstance().getMapillaryData();
     data.addListener(this);
@@ -67,5 +71,5 @@
               break;
             image = image.next();
-            Utils.downloadPicture((MapillaryImage) image, Utils.PICTURE.FULL);
+            Utils.downloadPicture((MapillaryImage) image, Utils.PICTURE.FULL_IMAGE);
           }
         try {
@@ -98,5 +102,8 @@
               .getImage();
           lock.lock();
-          data.selectNext(followSelected);
+          if (goForward)
+            data.selectNext(followSelected);
+          else
+            data.selectPrevious(followSelected);
           lock.unlock();
         } catch (InterruptedException e) {
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 31415)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/cache/MapillaryCache.java	(revision 31416)
@@ -45,13 +45,15 @@
     this.key = key;
     try {
-      if (type == Type.FULL_IMAGE) {
-        url = new URL("https://d1cuyjsrcm0gby.cloudfront.net/" + key
-            + "/thumb-2048.jpg");
-        this.key += ".FULL_IMAGE";
-
-      } else if (type == Type.THUMBNAIL) {
-        url = new URL("https://d1cuyjsrcm0gby.cloudfront.net/" + key
-            + "/thumb-320.jpg");
-        this.key += ".THUMBNAIL";
+      switch (type) {
+        case FULL_IMAGE:
+          url = new URL("https://d1cuyjsrcm0gby.cloudfront.net/" + key
+              + "/thumb-2048.jpg");
+          this.key += ".FULL_IMAGE";
+          break;
+        case THUMBNAIL:
+          url = new URL("https://d1cuyjsrcm0gby.cloudfront.net/" + key
+              + "/thumb-320.jpg");
+          this.key += ".THUMBNAIL";
+          break;
       }
     } catch (MalformedURLException e) {
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/cache/Utils.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/cache/Utils.java	(revision 31415)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/cache/Utils.java	(revision 31416)
@@ -18,8 +18,8 @@
   /** Picture quality */
   public enum PICTURE {
-    /** Thumbnail quality picture () */
+    /** Thumbnail quality picture (320 p) */
     THUMBNAIL,
-    /** Full quality picture () */
-    FULL,
+    /** Full quality picture (2048 p) */
+    FULL_IMAGE,
     /** Both of them */
     BOTH;
@@ -27,8 +27,9 @@
 
   /**
-   * Downloads the picture of the given image and does nothing when it is
-   * downloaded.
+   * Downloads the the thumbnail and the full resolution picture of the given
+   * image. Does nothing if it is already in cache.
    *
    * @param img
+   *          The image whose picture is going to be downloaded.
    */
   public static void downloadPicture(MapillaryImage img) {
@@ -37,6 +38,6 @@
 
   /**
-   * Downloads the picture of the given image and does nothing when it is
-   * downloaded.
+   * Downloads the picture of the given image. Does nothing when it is already
+   * in cache.
    *
    * @param img
@@ -46,22 +47,23 @@
    */
   public static void downloadPicture(MapillaryImage img, PICTURE pic) {
-    if (pic == PICTURE.BOTH) {
-      if (new MapillaryCache(img.getKey(), MapillaryCache.Type.THUMBNAIL).get() == null)
+    switch (pic) {
+      case BOTH:
+        if (new MapillaryCache(img.getKey(), MapillaryCache.Type.THUMBNAIL)
+            .get() == null)
+          new MapillaryCache(img.getKey(), MapillaryCache.Type.THUMBNAIL)
+              .submit(IGNORE_DOWNLOAD, false);
+        if (new MapillaryCache(img.getKey(), MapillaryCache.Type.FULL_IMAGE)
+            .get() == null)
+          new MapillaryCache(img.getKey(), MapillaryCache.Type.FULL_IMAGE)
+              .submit(IGNORE_DOWNLOAD, false);
+        break;
+      case THUMBNAIL:
         new MapillaryCache(img.getKey(), MapillaryCache.Type.THUMBNAIL).submit(
             IGNORE_DOWNLOAD, false);
-      if (new MapillaryCache(img.getKey(), MapillaryCache.Type.FULL_IMAGE)
-          .get() == null)
+        break;
+      case FULL_IMAGE:
         new MapillaryCache(img.getKey(), MapillaryCache.Type.FULL_IMAGE)
             .submit(IGNORE_DOWNLOAD, false);
-    } else if (pic == PICTURE.THUMBNAIL
-        && new MapillaryCache(img.getKey(), MapillaryCache.Type.THUMBNAIL)
-            .get() == null) {
-      new MapillaryCache(img.getKey(), MapillaryCache.Type.THUMBNAIL).submit(
-          IGNORE_DOWNLOAD, false);
-    } else if (pic == PICTURE.FULL
-        && new MapillaryCache(img.getKey(), MapillaryCache.Type.FULL_IMAGE)
-            .get() == null) {
-      new MapillaryCache(img.getKey(), MapillaryCache.Type.FULL_IMAGE).submit(
-          IGNORE_DOWNLOAD, false);
+        break;
     }
   }
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryWalkDialog.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryWalkDialog.java	(revision 31415)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryWalkDialog.java	(revision 31416)
@@ -24,4 +24,6 @@
   /** Whether the view must follow the selected image. */
   public JCheckBox followSelection;
+  /** Go forward or backwards */
+  public JCheckBox goForward;
 
   /**
@@ -42,4 +44,8 @@
     followSelection.setSelected(true);
     add(followSelection);
+
+    goForward = new JCheckBox("Go forward");
+    goForward.setSelected(true);
+    add(goForward);
   }
 }
