Index: applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/transform/RotatePictureAction.java
===================================================================
--- applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/transform/RotatePictureAction.java	(revision 33144)
+++ applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/transform/RotatePictureAction.java	(revision 33146)
@@ -23,6 +23,7 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.awt.event.InputEvent;
+import java.awt.Point;
 import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
 
 import org.openstreetmap.josm.Main;
@@ -47,11 +48,8 @@
     @Override
     protected void doAction(MouseEvent e) {
-        double factor;
-        if ((e.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) != 0) {
-            factor = Main.pref.getDouble("piclayer.rotatefactors.high_precision", 100.0);
-        } else {
-            factor = Main.pref.getDouble("piclayer.rotatefactors.low_precision", 10.0);
-        }
-        currentLayer.rotatePictureBy((e.getY() - prevMousePoint.getY()) / factor);
+        Point2D center = new Point(Main.map.mapView.getWidth()/2, Main.map.mapView.getHeight()/2);
+        double alpha1 = Math.atan2(e.getY() - center.getY(), e.getX() - center.getX());
+        double alpha0 = Math.atan2(prevMousePoint.getY() - center.getY(), prevMousePoint.getX() - center.getX());
+        currentLayer.rotatePictureBy(alpha1 - alpha0);
     }
 }
