Index: applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/mode/SelectMode.java
===================================================================
--- applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/mode/SelectMode.java	(revision 32588)
+++ applications/editors/josm/plugins/mapillary/src/org/openstreetmap/josm/plugins/mapillary/mode/SelectMode.java	(revision 32589)
@@ -9,4 +9,6 @@
 import java.awt.event.MouseEvent;
 import java.util.concurrent.ConcurrentSkipListSet;
+
+import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.Main;
@@ -32,5 +34,4 @@
 public class SelectMode extends AbstractMode {
   private Point start;
-  private int lastButton;
   private MapillaryAbstractImage closest;
   private MapillaryAbstractImage lastClicked;
@@ -48,5 +49,4 @@
   @Override
   public void mousePressed(MouseEvent e) {
-    this.lastButton = e.getButton();
     if (e.getButton() != MouseEvent.BUTTON1) {
       return;
@@ -99,33 +99,27 @@
   @Override
   public void mouseDragged(MouseEvent e) {
-    if (Main.getLayerManager().getActiveLayer() != MapillaryLayer.getInstance()) {
-      return;
-    }
-
-    if (!Main.pref.getBoolean("mapillary.developer")) {
-      for (MapillaryAbstractImage img : this.data.getMultiSelectedImages()) {
-        if (img instanceof MapillaryImage) {
-          return;
+    MapillaryAbstractImage highlightImg = data.getHighlightedImage();
+    if (
+      Main.getLayerManager().getActiveLayer() == MapillaryLayer.getInstance()
+      && SwingUtilities.isLeftMouseButton(e)
+      && highlightImg != null && highlightImg.getLatLon() != null
+    ) {
+      Point highlightImgPoint = Main.map.mapView.getPoint(highlightImg.getTempLatLon());
+      if (e.isShiftDown()) { // turn
+        for (MapillaryAbstractImage img : data.getMultiSelectedImages()) {
+          if (Main.pref.getBoolean("mapillary.developer") || !(img instanceof MapillaryImage)) {
+            img.turn(Math.toDegrees(Math.atan2((e.getX() - highlightImgPoint.getX()), -(e.getY() - highlightImgPoint.getY()))) - highlightImg.getTempCa());
+          }
         }
-      }
-    }
-    if (this.data.getSelectedImage() != null) {
-      if (this.lastButton == MouseEvent.BUTTON1 && !e.isShiftDown()) {
-        LatLon to = Main.map.mapView.getLatLon(e.getX(), e.getY());
-        LatLon from = Main.map.mapView.getLatLon(this.start.getX(), this.start.getY());
+      } else { // move
         for (MapillaryAbstractImage img : this.data.getMultiSelectedImages()) {
-          img.move(to.getX() - from.getX(), to.getY() - from.getY());
+          if (Main.pref.getBoolean("mapillary.developer") || !(img instanceof MapillaryImage)) {
+            LatLon eventLatLon = Main.map.mapView.getLatLon(e.getX(), e.getY());
+            LatLon imgLatLon = Main.map.mapView.getLatLon(highlightImgPoint.getX(), highlightImgPoint.getY());
+            img.move(eventLatLon.getX() - imgLatLon.getX(), eventLatLon.getY() - imgLatLon.getY());
+          }
         }
-        Main.map.repaint();
-      } else if (this.lastButton == MouseEvent.BUTTON1 && e.isShiftDown()) {
-        this.closest.turn(Math.toDegrees(Math.atan2((e.getX() - this.start.x),
-                -(e.getY() - this.start.y)))
-                - this.closest.getTempCa());
-        for (MapillaryAbstractImage img : this.data.getMultiSelectedImages()) {
-          img.turn(Math.toDegrees(Math.atan2((e.getX() - this.start.x),
-                  -(e.getY() - this.start.y))) - this.closest.getTempCa());
-        }
-        Main.map.repaint();
-      }
+      }
+      Main.map.repaint();
     }
   }
