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 31218)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryImage.java	(revision 31219)
@@ -30,4 +30,9 @@
 	/** Temporal direction of the picture until it is uplaoded */
 	private double tempCa;
+	/**
+	 * When the object direction is being moved in the map, the temporal
+	 * direction is stored here
+	 */
+	private double movingCa;
 
 	/**
@@ -46,8 +51,9 @@
 		this.key = key;
 		this.latLon = new LatLon(lat, lon);
-		this.tempLatLon = new LatLon(lat, lon);
-		this.movingLatLon = new LatLon(lat, lon);
+		this.tempLatLon = this.latLon;
+		this.movingLatLon = this.latLon;
 		this.ca = ca;
 		this.tempCa = ca;
+		this.movingCa = ca;
 	}
 
@@ -87,5 +93,5 @@
 	 */
 	public void turn(double ca) {
-		this.tempCa = ca;
+		this.movingCa = this.tempCa + ca;
 		this.isModified = true;
 	}
@@ -97,4 +103,5 @@
 	public void stopMoving() {
 		this.tempLatLon = this.movingLatLon;
+		this.tempCa = this.movingCa;
 	}
 
@@ -104,5 +111,13 @@
 	 * @return The direction of the image (0 means north and goes clockwise).
 	 */
-	public Double getCa() {
+	public double getCa() {
+		return movingCa;
+	}
+
+	/**
+	 * Returns the last fixed direction of the object.
+	 * @return
+	 */
+	public double getTempCa() {
 		return tempCa;
 	}
@@ -148,4 +163,9 @@
 	}
 
+	@Override
+	public int hashCode() {
+		return this.key.hashCode();
+	}
+
 	/**
 	 * If the MapillaryImage belongs to a MapillarySequence, returns the next
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 31218)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryLayer.java	(revision 31219)
@@ -35,6 +35,4 @@
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.awt.event.MouseMotionAdapter;
 import java.awt.geom.AffineTransform;
 import java.awt.image.AffineTransformOp;
@@ -45,5 +43,4 @@
 import javax.swing.Action;
 import javax.swing.Icon;
-import javax.swing.SwingUtilities;
 
 import java.util.List;
@@ -110,4 +107,5 @@
 			private Point start;
 			private int lastButton;
+			private MapillaryImage closest;
 
 			@Override
@@ -119,5 +117,21 @@
 						.getInstance())
 					return;
-				Point clickPoint = e.getPoint();
+				if (e.getClickCount() == 2 && mapillaryData.getSelectedImage() != null) {
+					for (MapillaryImage img : mapillaryData.getSelectedImage().getSequence().getImages()) {
+						mapillaryData.addMultiSelectedImage(img);
+					}
+				}
+				MapillaryImage closest = getClosest(e.getPoint());
+				this.start = e.getPoint();
+				this.closest = closest;
+				if (mapillaryData.getMultiSelectedImages().contains(closest))
+					return;
+				if (e.getModifiers() == (MouseEvent.BUTTON1_MASK | MouseEvent.CTRL_MASK))
+					mapillaryData.addMultiSelectedImage(closest);
+				else
+					mapillaryData.setSelectedImage(closest);
+			}
+			
+			private MapillaryImage getClosest(Point clickPoint){
 				double snapDistance = 10;
 				double minDistance = Double.MAX_VALUE;
@@ -135,11 +149,5 @@
 					}
 				}
-				start = e.getPoint();
-				if (mapillaryData.getMultiSelectedImages().contains(closest))
-					return;
-				if (e.getModifiers() == (MouseEvent.BUTTON1_MASK | MouseEvent.CTRL_MASK))
-					mapillaryData.addMultiSelectedImage(closest);
-				else
-					mapillaryData.setSelectedImage(closest);
+				return closest;				
 			}
 
@@ -160,8 +168,10 @@
 					} else if (lastButton == MouseEvent.BUTTON1
 							&& e.isShiftDown()) {
+						this.closest.turn(Math.toDegrees(Math.atan2(
+									(e.getX() - start.x), -(e.getY() - start.y))) - closest.getTempCa());
 						for (MapillaryImage img : MapillaryData.getInstance()
 								.getMultiSelectedImages()) {
 							img.turn(Math.toDegrees(Math.atan2(
-									(e.getX() - start.x), -(e.getY() - start.y))));
+									(e.getX() - start.x), -(e.getY() - start.y))) - closest.getTempCa());
 						}
 						Main.map.repaint();
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillarySequence.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillarySequence.java	(revision 31218)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillarySequence.java	(revision 31219)
@@ -117,6 +117,14 @@
 	}
 	
-	public boolean equals(MapillarySequence sequence) {
-		return this.getKey() == sequence.getKey();
+	@Override
+	public boolean equals(Object obj) {
+		if (obj instanceof MapillarySequence)
+			return this.getKey().equals(((MapillarySequence) obj).getKey());
+		return false;
+	}
+	
+	@Override
+	public int hashCode() {
+		return this.key.hashCode();
 	}
 }
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryToggleDialog.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryToggleDialog.java	(revision 31218)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/MapillaryToggleDialog.java	(revision 31219)
@@ -13,5 +13,4 @@
 import java.io.IOException;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.List;
 
@@ -26,7 +25,4 @@
 
 import javax.imageio.ImageIO;
-import javax.swing.BoxLayout;
-import javax.swing.JButton;
-import javax.swing.JScrollPane;
 import javax.swing.SwingUtilities;
 import javax.swing.AbstractAction;
Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySequenceDownloadThread.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySequenceDownloadThread.java	(revision 31218)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/downloads/MapillarySequenceDownloadThread.java	(revision 31219)
@@ -79,5 +79,5 @@
 				MapillarySequence sequence = new MapillarySequence(jsonobj.getString("key"), jsonobj.getJsonNumber("captured_at").intValue());
 				for (MapillaryImage mimage : MapillaryData.getInstance().getImages())
-					if (mimage.getSequence().getKey() == sequence.getKey())
+					if (mimage.getSequence().getKey().equals(sequence.getKey()))
 						break;
 				int first = -1;
