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 31449)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryData.java	(revision 31450)
@@ -18,7 +18,4 @@
 public class MapillaryData {
 
-  /** Unique instance of the class */
-  public volatile static MapillaryData INSTANCE;
-
   private final List<MapillaryAbstractImage> images;
   private MapillaryAbstractImage selectedImage;
@@ -32,5 +29,5 @@
    * Main constructor.
    */
-  private MapillaryData() {
+  protected MapillaryData() {
     this.images = new CopyOnWriteArrayList<>();
     this.multiSelectedImages = new ArrayList<>();
@@ -38,23 +35,4 @@
 
     addListener(MapillaryPlugin.walkAction);
-  }
-
-  /**
-   * Returns the unique instance of the class.
-   *
-   * @return The unique instance of the class.
-   */
-  public static MapillaryData getInstance() {
-    if (INSTANCE == null) {
-      INSTANCE = new MapillaryData();
-    }
-    return INSTANCE;
-  }
-
-  /**
-   * Destroys the unique instance.
-   */
-  public static void clearInstance() {
-    INSTANCE = null;
   }
 
@@ -317,6 +295,5 @@
     }
     if (zoom)
-      Main.map.mapView.zoomTo(MapillaryData.getInstance().getSelectedImage()
-          .getLatLon());
+      Main.map.mapView.zoomTo(getSelectedImage().getLatLon());
     if (Main.main != null)
       Main.map.mapView.repaint();
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 31449)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java	(revision 31450)
@@ -99,5 +99,5 @@
   private MapillaryLayer() {
     super(tr("Mapillary Images"));
-    this.data = MapillaryData.getInstance();
+    this.data = new MapillaryData();
     this.bounds = new CopyOnWriteArrayList<>();
     init();
@@ -190,5 +190,4 @@
     if (Main.map.mapView.getEditLayer() != null)
       Main.map.mapView.getEditLayer().data.removeDataSetListener(this);
-    MapillaryData.clearInstance();
     clearInstance();
     super.destroy();
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryExportAction.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryExportAction.java	(revision 31449)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryExportAction.java	(revision 31450)
@@ -18,7 +18,7 @@
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage;
-import org.openstreetmap.josm.plugins.mapillary.MapillaryData;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryImage;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryImportedImage;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryPlugin;
 import org.openstreetmap.josm.plugins.mapillary.downloads.MapillaryExportManager;
@@ -71,8 +71,8 @@
         && this.dialog.chooser != null) {
       if (this.dialog.group.isSelected(this.dialog.all.getModel())) {
-        export(MapillaryData.getInstance().getImages());
+        export(MapillaryLayer.getInstance().data.getImages());
       } else if (this.dialog.group.isSelected(this.dialog.sequence.getModel())) {
         ArrayList<MapillaryAbstractImage> images = new ArrayList<>();
-        for (MapillaryAbstractImage image : MapillaryData.getInstance()
+        for (MapillaryAbstractImage image : MapillaryLayer.getInstance().data
             .getMultiSelectedImages())
           if (image instanceof MapillaryImage) {
@@ -83,10 +83,10 @@
         export(images);
       } else if (this.dialog.group.isSelected(this.dialog.selected.getModel())) {
-        export(MapillaryData.getInstance().getMultiSelectedImages());
+        export(MapillaryLayer.getInstance().data.getMultiSelectedImages());
       }
       // This option ignores the selected directory.
     } else if (this.dialog.group.isSelected(this.dialog.rewrite.getModel())) {
       ArrayList<MapillaryImportedImage> images = new ArrayList<>();
-      for (MapillaryAbstractImage image : MapillaryData.getInstance()
+      for (MapillaryAbstractImage image : MapillaryLayer.getInstance().data
           .getImages())
         if (image instanceof MapillaryImportedImage) {
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryImportAction.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryImportAction.java	(revision 31449)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryImportAction.java	(revision 31450)
@@ -22,5 +22,4 @@
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.plugins.mapillary.MapillaryData;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryImportedImage;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
@@ -85,8 +84,8 @@
             try {
               if (extension.equals("jpg") || extension.equals("jpeg"))
-                MapillaryData.getInstance().add(readJPG(file.listFiles()[j]));
+                MapillaryLayer.getInstance().data.add(readJPG(file.listFiles()[j]));
 
               else if (extension.equals("png"))
-                MapillaryData.getInstance().add(readPNG(file.listFiles()[j]));
+                MapillaryLayer.getInstance().data.add(readPNG(file.listFiles()[j]));
             } catch (ImageReadException | IOException | NullPointerException e1) {
               Main.error(e1);
@@ -99,5 +98,5 @@
                   .equals(".jpeg")) {
             try {
-              MapillaryData.getInstance().add(readJPG(file));
+              MapillaryLayer.getInstance().data.add(readJPG(file));
             } catch (ImageReadException ex) {
               Main.error(ex);
@@ -107,5 +106,5 @@
           } else if (file.getPath().substring(file.getPath().length() - 4)
               .equals(".png")) {
-            MapillaryData.getInstance().add(readPNG(file));
+            MapillaryLayer.getInstance().data.add(readPNG(file));
           }
         }
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryImportIntoSequenceAction.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryImportIntoSequenceAction.java	(revision 31449)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryImportIntoSequenceAction.java	(revision 31450)
@@ -25,5 +25,4 @@
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage;
-import org.openstreetmap.josm.plugins.mapillary.MapillaryData;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryImportedImage;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
@@ -162,5 +161,5 @@
       MapillaryImportedImage image = new MapillaryImportedImage(latValue,
           lonValue, caValue, file, datetimeOriginal.getStringValue());
-      MapillaryData.getInstance().add(image);
+      MapillaryLayer.getInstance().data.add(image);
       image.getCapturedAt();
 
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 31449)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryUploadAction.java	(revision 31450)
@@ -13,6 +13,6 @@
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage;
-import org.openstreetmap.josm.plugins.mapillary.MapillaryData;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryDataListener;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryPlugin;
 import org.openstreetmap.josm.plugins.mapillary.gui.MapillaryUploadDialog;
@@ -38,5 +38,5 @@
             Shortcut.NONE), false, "mapillaryUpload", false);
     this.setEnabled(false);
-    MapillaryData.getInstance().addListener(this);
+    MapillaryLayer.getInstance().data.addListener(this);
   }
 
@@ -53,5 +53,5 @@
         && (int) pane.getValue() == JOptionPane.OK_OPTION) {
       if (dialog.sequence.isSelected()) {
-        OAuthUtils.uploadSequence(MapillaryData.getInstance()
+        OAuthUtils.uploadSequence(MapillaryLayer.getInstance().data
             .getSelectedImage().getSequence());
       }
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryZoomAction.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryZoomAction.java	(revision 31449)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/actions/MapillaryZoomAction.java	(revision 31450)
@@ -9,6 +9,6 @@
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage;
-import org.openstreetmap.josm.plugins.mapillary.MapillaryData;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryDataListener;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryPlugin;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -29,11 +29,11 @@
    */
   public MapillaryZoomAction() {
-    super(tr("Zoom to selected image"), MapillaryPlugin.getProvider("icon24.png"),
-        tr("Zoom to selected image"), Shortcut.registerShortcut(
-            "Zoom Mapillary",
+    super(tr("Zoom to selected image"), MapillaryPlugin
+        .getProvider("icon24.png"), tr("Zoom to selected image"), Shortcut
+        .registerShortcut("Zoom Mapillary",
             tr("Zoom to the currently selected Mapillary image"),
             KeyEvent.CHAR_UNDEFINED, Shortcut.NONE), false, "mapillaryZoom",
         false);
-    MapillaryData.getInstance().addListener(this);
+    MapillaryLayer.getInstance().data.addListener(this);
     this.setEnabled(false);
   }
@@ -41,8 +41,8 @@
   @Override
   public void actionPerformed(ActionEvent arg0) {
-    if (MapillaryData.getInstance().getSelectedImage() == null)
+    if (MapillaryLayer.getInstance().data.getSelectedImage() == null)
       throw new IllegalStateException();
-    Main.map.mapView.zoomTo(MapillaryData.getInstance().getSelectedImage()
-        .getLatLon());
+    Main.map.mapView.zoomTo(MapillaryLayer.getInstance().data
+        .getSelectedImage().getLatLon());
   }
 
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 31449)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryExportDialog.java	(revision 31450)
@@ -18,7 +18,7 @@
 
 import org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage;
-import org.openstreetmap.josm.plugins.mapillary.MapillaryData;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryImage;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryImportedImage;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
 
 /**
@@ -81,14 +81,15 @@
     this.group.add(this.rewrite);
     // Some options are disabled depending on the circumstances
-    if (MapillaryData.getInstance().getSelectedImage() == null
-        || !(MapillaryData.getInstance().getSelectedImage() instanceof MapillaryImage && ((MapillaryImage) MapillaryData
-            .getInstance().getSelectedImage()).getSequence() != null)) {
+    if (MapillaryLayer.getInstance().data.getSelectedImage() == null
+        || !(MapillaryLayer.getInstance().data.getSelectedImage() instanceof MapillaryImage && ((MapillaryImage) MapillaryLayer
+            .getInstance().data.getSelectedImage()).getSequence() != null)) {
       this.sequence.setEnabled(false);
     }
-    if (MapillaryData.getInstance().getMultiSelectedImages().isEmpty()) {
+    if (MapillaryLayer.getInstance().data.getMultiSelectedImages().isEmpty()) {
       this.selected.setEnabled(false);
     }
     this.rewrite.setEnabled(false);
-    for (MapillaryAbstractImage img : MapillaryData.getInstance().getImages())
+    for (MapillaryAbstractImage img : MapillaryLayer.getInstance().data
+        .getImages())
       if (img instanceof MapillaryImportedImage)
         this.rewrite.setEnabled(true);
@@ -158,5 +159,6 @@
     @Override
     public void actionPerformed(ActionEvent arg0) {
-      MapillaryExportDialog.this.choose.setEnabled(!MapillaryExportDialog.this.rewrite.isSelected());
+      MapillaryExportDialog.this.choose
+          .setEnabled(!MapillaryExportDialog.this.rewrite.isSelected());
       if (MapillaryExportDialog.this.rewrite.isSelected()) {
         this.lastPath = this.dlg.path.getText();
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 31449)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryFilterDialog.java	(revision 31450)
@@ -26,8 +26,8 @@
 import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage;
-import org.openstreetmap.josm.plugins.mapillary.MapillaryData;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryDataListener;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryImage;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryImportedImage;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -79,8 +79,10 @@
   /** The the {@link JCheckBox} where the respective tag should be searched */
   private final JCheckBox[] SIGN_CHECKBOXES = { this.signFilter.maxSpeed,
-      this.signFilter.stop, this.signFilter.giveWay, this.signFilter.roundabout,
-      this.signFilter.access, this.signFilter.access, this.signFilter.intersection,
-      this.signFilter.direction, this.signFilter.direction, this.signFilter.intersection,
-      this.signFilter.uneven, this.signFilter.noParking, this.signFilter.noOvertaking,
+      this.signFilter.stop, this.signFilter.giveWay,
+      this.signFilter.roundabout, this.signFilter.access,
+      this.signFilter.access, this.signFilter.intersection,
+      this.signFilter.direction, this.signFilter.direction,
+      this.signFilter.intersection, this.signFilter.uneven,
+      this.signFilter.noParking, this.signFilter.noOvertaking,
       this.signFilter.crossing, this.signFilter.noTurn, this.signFilter.noTurn };
 
@@ -174,5 +176,6 @@
     boolean onlySigns = this.onlySigns.isSelected();
 
-    for (MapillaryAbstractImage img : MapillaryData.getInstance().getImages()) {
+    for (MapillaryAbstractImage img : MapillaryLayer.getInstance().data
+        .getImages()) {
       img.setVisible(true);
       if (img instanceof MapillaryImportedImage) {
@@ -205,6 +208,6 @@
       if (this.time.getSelectedItem().equals(TIME_LIST[1])) {
         if (img.getCapturedAt() < currentTime
-            - ((Integer) this.spinner.getValue()).longValue() * 365 * 24 * 60 * 60
-            * 1000) {
+            - ((Integer) this.spinner.getValue()).longValue() * 365 * 24 * 60
+            * 60 * 1000) {
           img.setVisible(false);
           continue;
@@ -213,6 +216,6 @@
       if (this.time.getSelectedItem().equals(TIME_LIST[2])) {
         if (img.getCapturedAt() < currentTime
-            - ((Integer) this.spinner.getValue()).longValue() * 30 * 24 * 60 * 60
-            * 1000) {
+            - ((Integer) this.spinner.getValue()).longValue() * 30 * 24 * 60
+            * 60 * 1000) {
           img.setVisible(false);
           continue;
@@ -274,5 +277,6 @@
     @Override
     public void actionPerformed(ActionEvent arg0) {
-      MapillaryFilterDialog.this.onlySigns.setEnabled(MapillaryFilterDialog.this.downloaded.isSelected());
+      MapillaryFilterDialog.this.onlySigns
+          .setEnabled(MapillaryFilterDialog.this.downloaded.isSelected());
     }
   }
@@ -318,5 +322,6 @@
     @Override
     public void actionPerformed(ActionEvent arg0) {
-      MapillaryFilterDialog.this.signChooser.setEnabled(MapillaryFilterDialog.this.onlySigns.isSelected());
+      MapillaryFilterDialog.this.signChooser
+          .setEnabled(MapillaryFilterDialog.this.onlySigns.isSelected());
     }
   }
Index: /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryMainDialog.java
===================================================================
--- /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryMainDialog.java	(revision 31449)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryMainDialog.java	(revision 31450)
@@ -23,5 +23,4 @@
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryAbstractImage;
-import org.openstreetmap.josm.plugins.mapillary.MapillaryData;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryDataListener;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryImage;
@@ -97,5 +96,5 @@
             tr("Open Mapillary main dialog"), KeyEvent.VK_M, Shortcut.NONE),
         200, false, MapillaryPreferenceSetting.class);
-    MapillaryData.getInstance().addListener(this);
+    MapillaryLayer.getInstance().data.addListener(this);
     addShortcuts();
     this.mapillaryImageDisplay = new MapillaryImageDisplay();
@@ -345,5 +344,5 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-      MapillaryData.getInstance().selectNext();
+      MapillaryLayer.getInstance().data.selectNext();
     }
   }
@@ -367,5 +366,5 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-      MapillaryData.getInstance().selectPrevious();
+      MapillaryLayer.getInstance().data.selectPrevious();
     }
   }
@@ -390,5 +389,6 @@
     public void actionPerformed(ActionEvent e) {
       if (MapillaryMainDialog.getInstance().getImage() != null) {
-        MapillaryData.getInstance().setSelectedImage(MapillaryLayer.RED, true);
+        MapillaryLayer.getInstance().data.setSelectedImage(MapillaryLayer.RED,
+            true);
       }
     }
@@ -414,5 +414,6 @@
     public void actionPerformed(ActionEvent e) {
       if (MapillaryMainDialog.getInstance().getImage() != null) {
-        MapillaryData.getInstance().setSelectedImage(MapillaryLayer.BLUE, true);
+        MapillaryLayer.getInstance().data.setSelectedImage(MapillaryLayer.BLUE,
+            true);
       }
     }
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 31449)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/gui/MapillaryUploadDialog.java	(revision 31450)
@@ -5,6 +5,6 @@
 import javax.swing.JRadioButton;
 
-import org.openstreetmap.josm.plugins.mapillary.MapillaryData;
 import org.openstreetmap.josm.plugins.mapillary.MapillaryImportedImage;
+import org.openstreetmap.josm.plugins.mapillary.MapillaryLayer;
 
 /**
@@ -28,6 +28,6 @@
 
     this.sequence = new JRadioButton("Upload selected sequence.");
-    if (MapillaryData.getInstance().getSelectedImage() == null
-        || !(MapillaryData.getInstance().getSelectedImage() instanceof MapillaryImportedImage))
+    if (MapillaryLayer.getInstance().data.getSelectedImage() == null
+        || !(MapillaryLayer.getInstance().data.getSelectedImage() instanceof MapillaryImportedImage))
       this.sequence.setEnabled(false);
     this.group.add(this.sequence);
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 31449)
+++ /applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/mode/AbstractMode.java	(revision 31450)
@@ -28,5 +28,5 @@
   private final static int DOWNLOAD_COOLDOWN = 2000;
 
-  protected MapillaryData data = MapillaryData.getInstance();
+  protected MapillaryData data = MapillaryLayer.getInstance().data;
   private static SemiautomaticThread semiautomaticThread = new SemiautomaticThread();
 
