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 31217)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryData.java	(revision 31218)
@@ -157,19 +157,15 @@
 			if (image.next() != null) {
 				new MapillaryCache(image.next().getKey(),
-						MapillaryCache.Type.THUMBNAIL).submit(
-						this, false);
+						MapillaryCache.Type.THUMBNAIL).submit(this, false);
 				if (image.next().next() != null)
 					new MapillaryCache(image.next().next().getKey(),
-							MapillaryCache.Type.THUMBNAIL)
-							.submit(this, false);
+							MapillaryCache.Type.THUMBNAIL).submit(this, false);
 			}
 			if (image.previous() != null) {
 				new MapillaryCache(image.previous().getKey(),
-						MapillaryCache.Type.THUMBNAIL).submit(
-						this, false);
+						MapillaryCache.Type.THUMBNAIL).submit(this, false);
 				if (image.previous().previous() != null)
 					new MapillaryCache(image.previous().previous().getKey(),
-							MapillaryCache.Type.THUMBNAIL)
-							.submit(this, false);
+							MapillaryCache.Type.THUMBNAIL).submit(this, false);
 			}
 		}
@@ -187,5 +183,8 @@
 	 */
 	public void addMultiSelectedImage(MapillaryImage image) {
-		this.multiSelectedImages.add(image);
+		if (this.getSelectedImage() != null)
+			this.multiSelectedImages.add(image);
+		else
+			this.setSelectedImage(image);
 		Main.map.mapView.repaint();
 	}
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 31217)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImage.java	(revision 31218)
@@ -11,11 +11,22 @@
  */
 public class MapillaryImage {
+	/** Unique identifier of the object */
 	private final String key;
+	/** Postion of the picture */
 	private final LatLon latLon;
+	/** Direction of the picture */
 	private final double ca;
+	/** Sequence of pictures containing this */
 	private MapillarySequence sequence;
-	
+
 	private boolean isModified = false;
+	/** Temporal position of the picture until it is uplaoded */
 	private LatLon tempLatLon;
+	/**
+	 * When the object is being dragged in the map, the temporal position is
+	 * stored here
+	 */
+	private LatLon movingLatLon;
+	/** Temporal direction of the picture until it is uplaoded */
 	private double tempCa;
 
@@ -36,4 +47,5 @@
 		this.latLon = new LatLon(lat, lon);
 		this.tempLatLon = new LatLon(lat, lon);
+		this.movingLatLon = new LatLon(lat, lon);
 		this.ca = ca;
 		this.tempCa = ca;
@@ -55,7 +67,7 @@
 	 */
 	public LatLon getLatLon() {
-		return tempLatLon;
+		return movingLatLon;
 	}
-	
+
 	/**
 	 * Moves the image temporally to another position
@@ -63,11 +75,13 @@
 	 * @param pos
 	 */
-	public void move(LatLon pos) {
-		this.tempLatLon = pos;
+	public void move(double x, double y) {
+		this.movingLatLon = new LatLon(this.tempLatLon.getY() + y,
+				this.tempLatLon.getX() + x);
 		this.isModified = true;
 	}
-	
+
 	/**
 	 * Turns the image direction.
+	 * 
 	 * @param ca
 	 */
@@ -75,4 +89,12 @@
 		this.tempCa = ca;
 		this.isModified = true;
+	}
+
+	/**
+	 * Called when the mouse button is released, meaning that the picture has
+	 * stopped being dragged.
+	 */
+	public void stopMoving() {
+		this.tempLatLon = this.movingLatLon;
 	}
 
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 31217)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java	(revision 31218)
@@ -136,4 +136,6 @@
 				}
 				start = e.getPoint();
+				if (mapillaryData.getMultiSelectedImages().contains(closest))
+					return;
 				if (e.getModifiers() == (MouseEvent.BUTTON1_MASK | MouseEvent.CTRL_MASK))
 					mapillaryData.addMultiSelectedImage(closest);
@@ -146,16 +148,32 @@
 				if (MapillaryData.getInstance().getSelectedImage() != null) {
 					if (lastButton == MouseEvent.BUTTON1 && !e.isShiftDown()) {
-						MapillaryData
-								.getInstance()
-								.getSelectedImage()
-								.move(Main.map.mapView.getLatLon(e.getX(),
-										e.getY()));
+						LatLon to = Main.map.mapView.getLatLon(e.getX(),
+								e.getY());
+						LatLon from = Main.map.mapView.getLatLon(start.getX(),
+								start.getY());
+						for (MapillaryImage img : MapillaryData.getInstance()
+								.getMultiSelectedImages()) {
+							img.move(to.getX() - from.getX(),
+									to.getY() - from.getY());
+						}
 						Main.map.repaint();
-					} else if (lastButton == MouseEvent.BUTTON1 && e.isShiftDown()) {
-						MapillaryData
-						.getInstance()
-						.getSelectedImage().turn(Math.toDegrees(Math.atan2((e.getX() - start.x), -(e.getY() - start.y))));
+					} else if (lastButton == MouseEvent.BUTTON1
+							&& e.isShiftDown()) {
+						for (MapillaryImage img : MapillaryData.getInstance()
+								.getMultiSelectedImages()) {
+							img.turn(Math.toDegrees(Math.atan2(
+									(e.getX() - start.x), -(e.getY() - start.y))));
+						}
 						Main.map.repaint();
 					}
+				}
+			}
+
+			@Override
+			public void mouseReleased(MouseEvent e) {
+				for (MapillaryImage img : MapillaryData.getInstance()
+						.getMultiSelectedImages()) {
+					if (img != null)
+						img.stopMoving();
 				}
 			}
