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 32573)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImage.java	(revision 32574)
@@ -111,13 +111,12 @@
   @Override
   public boolean equals(Object object) {
-    if (object instanceof MapillaryImage)
-      return this.key.equals(((MapillaryImage) object).getKey());
-    return false;
+    return object instanceof MapillaryImage && this.key.equals(((MapillaryImage) object).getKey());
   }
 
   @Override
   public int compareTo(MapillaryAbstractImage image) {
-    if (image instanceof MapillaryImage)
+    if (image instanceof MapillaryImage) {
       return this.key.compareTo(((MapillaryImage) image).getKey());
+    }
     return super.compareTo(image);
   }
@@ -127,3 +126,25 @@
     return this.key.hashCode();
   }
+
+  @Override
+  public void stopMoving() {
+    super.stopMoving();
+    checkModified();
+  }
+
+  private void checkModified() {
+    MapillaryLayer mapillaryLayer = MapillaryLayer.getInstance();
+    MapillaryLocationChangeset locationChangeset = mapillaryLayer.getLocationChangeset();
+    if (this.isModified()) {
+      locationChangeset.add(this);
+    } else {
+      locationChangeset.remove(this);
+    }
+  }
+
+  @Override
+  public void turn(double ca) {
+    super.turn(ca);
+    checkModified();
+  }
 }
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 32573)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java	(revision 32574)
@@ -95,4 +95,5 @@
 
   private volatile TexturePaint hatched;
+  private final MapillaryLocationChangeset locationChangeset = new MapillaryLocationChangeset();
 
   private MapillaryLayer() {
@@ -192,4 +193,14 @@
   public MapillaryData getData() {
     return this.data;
+  }
+
+  /**
+   * Returns the {@link MapillaryLocationChangeset} object, which acts as the database of the
+   * Layer.
+   *
+   * @return The {@link MapillaryData} object that stores the database.
+   */
+  public MapillaryLocationChangeset getLocationChangeset() {
+    return locationChangeset;
   }
 
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLocationChangeset.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLocationChangeset.java	(revision 32574)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLocationChangeset.java	(revision 32574)
@@ -0,0 +1,40 @@
+package org.openstreetmap.josm.plugins.mapillary;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.openstreetmap.josm.plugins.mapillary.utils.MapillaryChangesetListener;
+
+public class MapillaryLocationChangeset extends HashSet<MapillaryImage> {
+  private final Set<MapillaryChangesetListener> listeners = new HashSet<>();
+
+  public void addChangesetListener(MapillaryChangesetListener listener) {
+    this.listeners.add(listener);
+  }
+
+  public void cleanChangeset() {
+    this.clear();
+    fireListeners();
+  }
+
+  private void fireListeners() {
+    for (MapillaryChangesetListener listener : listeners) {
+      listener.changesetChanged();
+    }
+  }
+
+  @Override
+  public boolean add(MapillaryImage image) {
+    boolean add = super.add(image);
+    fireListeners();
+    return add;
+  }
+
+  @Override
+  public boolean remove(Object image) {
+    boolean remove = super.remove(image);
+    fireListeners();
+    return remove;
+  }
+
+}
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/utils/MapillaryChangesetListener.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/utils/MapillaryChangesetListener.java	(revision 32574)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/utils/MapillaryChangesetListener.java	(revision 32574)
@@ -0,0 +1,15 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.plugins.mapillary.utils;
+
+import org.openstreetmap.josm.plugins.mapillary.MapillaryData;
+
+/**
+ * Interface for listeners of the class {@link MapillaryData}.
+ */
+public interface MapillaryChangesetListener {
+
+  /**
+   * Fired when the an image is added or removed from the changeset.
+   */
+  void changesetChanged();
+}
