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 32642)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java	(revision 32652)
@@ -1,4 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.plugins.mapillary;
+
+import static org.openstreetmap.josm.tools.I18n.marktr;
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.AlphaComposite;
@@ -53,4 +56,5 @@
 import org.openstreetmap.josm.plugins.mapillary.history.commands.CommandDelete;
 import org.openstreetmap.josm.plugins.mapillary.io.download.MapillaryDownloader;
+import org.openstreetmap.josm.plugins.mapillary.io.download.MapillaryDownloader.DOWNLOAD_MODE;
 import org.openstreetmap.josm.plugins.mapillary.mode.AbstractMode;
 import org.openstreetmap.josm.plugins.mapillary.mode.JoinMode;
@@ -58,7 +62,4 @@
 import org.openstreetmap.josm.plugins.mapillary.utils.MapViewGeometryUtil;
 import org.openstreetmap.josm.plugins.mapillary.utils.MapillaryUtils;
-
-import static org.openstreetmap.josm.tools.I18n.marktr;
-import static org.openstreetmap.josm.tools.I18n.tr;
 
 /**
@@ -110,16 +111,20 @@
       Main.getLayerManager().addLayer(this);
       Main.getLayerManager().addActiveLayerChangeListener(this);
-      if (Main.getLayerManager().getEditLayer() != null)
+      if (Main.getLayerManager().getEditLayer() != null) {
         Main.getLayerManager().getEditLayer().data.addDataSetListener(this);
-      if (MapillaryDownloader.getMode() == MapillaryDownloader.MODES.Automatic)
+      }
+      if (MapillaryDownloader.getMode() == DOWNLOAD_MODE.OSM_AREA) {
         MapillaryDownloader.automaticDownload();
-      if (MapillaryDownloader.getMode() == MapillaryDownloader.MODES.Semiautomatic)
+      }
+      if (MapillaryDownloader.getMode() == DOWNLOAD_MODE.VISIBLE_AREA) {
         this.mode.zoomChanged();
+      }
     }
     // Does not execute when in headless mode
     if (MapillaryPlugin.getExportMenu() != null) {
       MapillaryPlugin.setMenuEnabled(MapillaryPlugin.getExportMenu(), true);
-      if (!MapillaryMainDialog.getInstance().isShowing())
+      if (!MapillaryMainDialog.getInstance().isShowing()) {
         MapillaryMainDialog.getInstance().getButton().doClick();
+      }
     }
     createHatchTexture();
@@ -132,6 +137,7 @@
     }
 
-    if (Main.main != null)
+    if (Main.main != null) {
       MapillaryData.dataUpdated();
+    }
   }
 
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 32642)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryPlugin.java	(revision 32652)
@@ -32,7 +32,8 @@
 import org.openstreetmap.josm.plugins.mapillary.gui.MapillaryMainDialog;
 import org.openstreetmap.josm.plugins.mapillary.gui.MapillaryPreferenceSetting;
-import org.openstreetmap.josm.plugins.mapillary.io.download.MapillaryDownloader;
+import org.openstreetmap.josm.plugins.mapillary.io.download.MapillaryDownloader.DOWNLOAD_MODE;
 import org.openstreetmap.josm.plugins.mapillary.oauth.MapillaryUser;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.plugins.mapillary.io.download.MapillaryDownloader;
 
 /**
@@ -145,6 +146,12 @@
     }
 
-    if (Main.pref.get("mapillary.access-token") == null)
+    if (Main.pref.get("mapillary.access-token") == null) {
       MapillaryUser.setTokenValid(false);
+    }
+    // Normalize download mode preference setting
+    Main.pref.put(
+      "mapillary.download-mode",
+      DOWNLOAD_MODE.fromPrefId(Main.pref.get("mapillary.download-mode")).getPrefId()
+    );
   }
 
@@ -225,5 +232,5 @@
       Main.map.addToggleDialog(MapillaryFilterDialog.getInstance(), false);
       setMenuEnabled(downloadMenu, true);
-      if (MapillaryDownloader.getMode() == MapillaryDownloader.MODES.Manual)
+      if (MapillaryDownloader.getMode() == DOWNLOAD_MODE.MANUAL_ONLY)
         setMenuEnabled(downloadViewMenu, true);
       setMenuEnabled(importMenu, true);
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 32642)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryPreferenceSetting.java	(revision 32652)
@@ -29,5 +29,5 @@
 import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryPlugin;
-import org.openstreetmap.josm.plugins.mapillary.io.download.MapillaryDownloader;
+import org.openstreetmap.josm.plugins.mapillary.io.download.MapillaryDownloader.DOWNLOAD_MODE;
 import org.openstreetmap.josm.plugins.mapillary.oauth.MapillaryLoginListener;
 import org.openstreetmap.josm.plugins.mapillary.oauth.MapillaryUser;
@@ -48,7 +48,7 @@
 public class MapillaryPreferenceSetting implements SubPreferenceSetting, MapillaryLoginListener {
   private final JComboBox<String> downloadModeComboBox = new JComboBox<>(new String[]{
-      MapillaryDownloader.MODES.Automatic.toString(),
-      MapillaryDownloader.MODES.Semiautomatic.toString(),
-      MapillaryDownloader.MODES.Manual.toString()
+      DOWNLOAD_MODE.VISIBLE_AREA.getLabel(),
+      DOWNLOAD_MODE.OSM_AREA.getLabel(),
+      DOWNLOAD_MODE.MANUAL_ONLY.getLabel()
   });
   private final JCheckBox displayHour = new JCheckBox(I18n.tr("Display hour when the picture was taken"));
@@ -102,11 +102,6 @@
     mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
-    // Sets the value of the ComboBox.
-    String downloadMode = Main.pref.get("mapillary.download-mode");
-    if (MapillaryDownloader.MODES.Automatic.toString().equals(downloadMode)
-        || MapillaryDownloader.MODES.Semiautomatic.toString().equals(downloadMode)
-        || MapillaryDownloader.MODES.Manual.toString().equals(downloadMode)) {
-      downloadModeComboBox.setSelectedItem(Main.pref.get("mapillary.download-mode"));
-    }
+    downloadModeComboBox.setSelectedItem(DOWNLOAD_MODE.fromPrefId(Main.pref.get("mapillary.download-mode")).getLabel());
+
     JPanel downloadModePanel = new JPanel();
     downloadModePanel.add(new JLabel(I18n.tr("Download mode")));
@@ -170,14 +165,14 @@
 
     MapillaryPlugin.setMenuEnabled(MapillaryPlugin.getDownloadViewMenu(), false);
-    if (this.downloadModeComboBox.getSelectedItem().equals(MapillaryDownloader.MODES.Automatic.toString())) {
-      Main.pref.put("mapillary.download-mode", MapillaryDownloader.MODES.Automatic.toString());
-    }
-    if (this.downloadModeComboBox.getSelectedItem().equals(MapillaryDownloader.MODES.Semiautomatic.toString())) {
-      Main.pref.put("mapillary.download-mode", MapillaryDownloader.MODES.Semiautomatic.toString());
-    }
-    if (this.downloadModeComboBox.getSelectedItem().equals(MapillaryDownloader.MODES.Manual.toString())) {
-      Main.pref.put("mapillary.download-mode", MapillaryDownloader.MODES.Manual.toString());
-      MapillaryPlugin.setMenuEnabled(MapillaryPlugin.getDownloadViewMenu(), true);
-    }
+    Main.pref.put(
+      "mapillary.download-mode",
+      DOWNLOAD_MODE.fromLabel(downloadModeComboBox.getSelectedItem().toString()).getPrefId()
+    );
+    MapillaryPlugin.setMenuEnabled(
+      MapillaryPlugin.getDownloadViewMenu(),
+      DOWNLOAD_MODE.MANUAL_ONLY.getPrefId().equals(
+        Main.pref.get("mapillary.download-mode", DOWNLOAD_MODE.getDefault().getPrefId())
+      )
+    );
     Main.pref.put("mapillary.display-hour", this.displayHour.isSelected());
     Main.pref.put("mapillary.format-24", this.format24.isSelected());
@@ -198,5 +193,5 @@
    *
    */
-  public class LoginAction extends AbstractAction {
+  private class LoginAction extends AbstractAction {
     private static final long serialVersionUID = -3908477563072057344L;
     private final transient MapillaryLoginListener callback;
@@ -224,5 +219,5 @@
    *
    */
-  public class LogoutAction extends AbstractAction {
+  private class LogoutAction extends AbstractAction {
 
     private static final long serialVersionUID = 3434780936404707219L;
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/io/download/MapillaryDownloader.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/io/download/MapillaryDownloader.java	(revision 32642)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/io/download/MapillaryDownloader.java	(revision 32652)
@@ -18,4 +18,5 @@
 import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryPlugin;
+import org.openstreetmap.josm.tools.I18n;
 
 /**
@@ -29,5 +30,54 @@
 
   /** Possible download modes. */
-  public enum MODES {Automatic, Semiautomatic, Manual}
+  public enum DOWNLOAD_MODE {
+    VISIBLE_AREA("visibleArea", I18n.tr("everything in the visible area")),
+    OSM_AREA("osmArea", I18n.tr("areas with downloaded OSM-data")),
+    MANUAL_ONLY("manualOnly", I18n.tr("only when manually requested"));
+
+    private String prefId;
+    private String label;
+
+    private DOWNLOAD_MODE(String prefId, String label) {
+      this.prefId = prefId;
+      this.label = label;
+    }
+
+    public String getPrefId() {
+      return prefId;
+    }
+
+    public String getLabel() {
+      return label;
+    }
+
+    public static DOWNLOAD_MODE fromPrefId(String prefId) {
+      if (MANUAL_ONLY.getPrefId().equals(prefId) || "Manual".equals(prefId)) {
+        return MANUAL_ONLY;
+      }
+      if (OSM_AREA.getPrefId().equals(prefId) || "Automatic".equals(prefId)) {
+        return OSM_AREA;
+      }
+      if (VISIBLE_AREA.getPrefId().equals(prefId) || "Semiautomatic".equals(prefId)) {
+        return VISIBLE_AREA;
+      }
+      return getDefault();
+    }
+    public static DOWNLOAD_MODE fromLabel(String label) {
+      if (MANUAL_ONLY.getLabel().equals(label)) {
+        return MANUAL_ONLY;
+      }
+      if (OSM_AREA.getLabel().equals(label)) {
+        return OSM_AREA;
+      }
+      if (VISIBLE_AREA.getLabel().equals(label)) {
+        return VISIBLE_AREA;
+      }
+      return getDefault();
+    }
+
+    public static DOWNLOAD_MODE getDefault() {
+      return OSM_AREA;
+    }
+  }
 
   /** All the Threads that have been run. Used to interrupt them properly. */
@@ -73,18 +123,10 @@
    * Returns the current download mode.
    *
-   * @return the currently enabled of the available {@link MODES}
-   */
-  public static MapillaryDownloader.MODES getMode() {
-    String downloadMode = Main.pref.get("mapillary.download-mode", MODES.Automatic.toString());
-    boolean isTempSemiautomatic = MapillaryLayer.hasInstance() && MapillaryLayer.getInstance().tempSemiautomatic;
-    if (MODES.Semiautomatic.toString().equals(downloadMode) || isTempSemiautomatic) {
-      return MODES.Semiautomatic;
-    } else if (MODES.Manual.toString().equals(downloadMode)) {
-      return MODES.Manual;
-    } else if (MODES.Automatic.toString().equals(downloadMode)) {
-      return MODES.Automatic;
-    } else {
-      throw new IllegalStateException();
-    }
+   * @return the currently enabled {@link DOWNLOAD_MODE}
+   */
+  public static MapillaryDownloader.DOWNLOAD_MODE getMode() {
+   return MapillaryLayer.hasInstance() && MapillaryLayer.getInstance().tempSemiautomatic
+     ? DOWNLOAD_MODE.VISIBLE_AREA
+     : DOWNLOAD_MODE.fromPrefId(Main.pref.get("mapillary.download-mode"));
   }
 
@@ -98,11 +140,14 @@
    */
   public static void completeView() {
-    if (getMode() != MODES.Semiautomatic && getMode() != MODES.Manual)
-      throw new IllegalStateException("Must be in semiautomatic or manual mode");
+    if (getMode() != DOWNLOAD_MODE.VISIBLE_AREA && getMode() != DOWNLOAD_MODE.MANUAL_ONLY) {
+      throw new IllegalStateException("Download mode must be 'visible area' or 'manual only'");
+    }
     Bounds view = Main.map.mapView.getRealBounds();
-    if (view.getArea() > MAX_AREA)
-      return;
-    if (isViewDownloaded(view))
-      return;
+    if (view.getArea() > MAX_AREA) {
+      return;
+    }
+    if (isViewDownloaded(view)) {
+      return;
+    }
     MapillaryLayer.getInstance().getData().getBounds().add(view);
     getImages(view);
@@ -159,5 +204,5 @@
       return;
     }
-    if (getMode() != MODES.Automatic)
+    if (getMode() != DOWNLOAD_MODE.OSM_AREA)
       throw new IllegalStateException("Must be in automatic mode.");
     for (Bounds bounds : Main.getLayerManager().getEditLayer().data
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/mode/AbstractMode.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/mode/AbstractMode.java	(revision 32642)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/mode/AbstractMode.java	(revision 32652)
@@ -66,5 +66,5 @@
   @Override
   public void zoomChanged() {
-    if (MapillaryDownloader.getMode() == MapillaryDownloader.MODES.Semiautomatic) {
+    if (MapillaryDownloader.getMode() == MapillaryDownloader.DOWNLOAD_MODE.VISIBLE_AREA) {
       if (!semiautomaticThread.isAlive())
         semiautomaticThread.start();
