Index: applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/transform/ScalePictureActionAbstract.java
===================================================================
--- applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/transform/ScalePictureActionAbstract.java	(revision 33146)
+++ 	(revision )
@@ -1,60 +1,0 @@
-/***************************************************************************
- *   Copyright (C) 2009 by Tomasz Stelmach                                 *
- *   http://www.stelmach-online.net/                                       *
- *                                                                         *
- *   This program is free software; you can redistribute it and/or modify  *
- *   it under the terms of the GNU General Public License as published by  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
- ***************************************************************************/
-
-package org.openstreetmap.josm.plugins.piclayer.actions.transform;
-
-import java.awt.event.InputEvent;
-import java.awt.event.MouseEvent;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.gui.MapFrame;
-import org.openstreetmap.josm.plugins.piclayer.actions.GenericPicTransformAction;
-import org.openstreetmap.josm.tools.ImageProvider;
-
-/**
- * This class handles the input during scaling the picture.
- */
-@SuppressWarnings("serial")
-public abstract class ScalePictureActionAbstract extends GenericPicTransformAction {
-
-    /**
-     * Constructor
-     */
-    public ScalePictureActionAbstract(String name, String actionName, String icon, String tooltip, MapFrame frame) {
-        super(name, actionName, icon, tooltip, frame, ImageProvider.getCursor("crosshair", null));
-    }
-
-    @Override
-    protected void doAction(MouseEvent e) {
-        double factor;
-        if ((e.getModifiersEx() & InputEvent.SHIFT_DOWN_MASK) != 0) {
-            factor = Main.pref.getDouble("piclayer.scalefactors.high_precision", 1.0005);
-        } else {
-            factor = Main.pref.getDouble("piclayer.scalefactors.low_precision", 1.015);
-        }
-        doTheScale(Math.pow(factor, prevMousePoint.getY() - e.getY()));
-    }
-
-    /**
-     * Does the actual scaling in the inherited class.
-     */
-     protected abstract void doTheScale(double scale);
-
-}
Index: applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/transform/ScaleXPictureAction.java
===================================================================
--- applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/transform/ScaleXPictureAction.java	(revision 33146)
+++ applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/transform/ScaleXPictureAction.java	(revision 33148)
@@ -23,5 +23,10 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.event.MouseEvent;
+
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.plugins.piclayer.actions.GenericPicTransformAction;
+import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -29,5 +34,5 @@
  */
 @SuppressWarnings("serial")
-public class ScaleXPictureAction extends ScalePictureActionAbstract {
+public class ScaleXPictureAction extends GenericPicTransformAction {
 
     /**
@@ -35,10 +40,14 @@
      */
     public ScaleXPictureAction(MapFrame frame) {
-        super(tr("PicLayer scale X"), tr("Scaled by X"), "scale_x", tr("Drag to scale the picture in the X Axis"), frame);
+        super(tr("PicLayer scale X"), tr("Scaled by X"), "scale_x", tr("Drag to scale the picture in the X Axis"), frame, ImageProvider.getCursor("crosshair", null));
     }
 
     @Override
-    public void doTheScale(double scale) {
-        currentLayer.scalePictureBy(scale, 1.0);
+    protected void doAction(MouseEvent e) {
+        double centerX = Main.map.mapView.getWidth()/2;
+        double dx0 = Math.max(Math.abs(prevMousePoint.getX() - centerX), 10);
+        double dx = Math.abs(e.getX() - centerX);
+        double scaleX = Math.max(dx / dx0, 0.9);
+        currentLayer.scalePictureBy(scaleX, 1.0);
     }
 }
Index: applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/transform/ScaleXYPictureAction.java
===================================================================
--- applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/transform/ScaleXYPictureAction.java	(revision 33146)
+++ applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/transform/ScaleXYPictureAction.java	(revision 33148)
@@ -23,5 +23,12 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.Point;
+import java.awt.event.MouseEvent;
+import java.awt.geom.Point2D;
+
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.plugins.piclayer.actions.GenericPicTransformAction;
+import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -29,5 +36,5 @@
  */
 @SuppressWarnings("serial")
-public class ScaleXYPictureAction extends ScalePictureActionAbstract {
+public class ScaleXYPictureAction extends GenericPicTransformAction {
 
     /**
@@ -35,9 +42,15 @@
      */
     public ScaleXYPictureAction(MapFrame frame) {
-        super(tr("PicLayer scale"), tr("Scaled"), "scale", tr("Drag to scale the picture in the X and Y Axis"), frame);
+        super(tr("PicLayer scale"), tr("Scaled"), "scale", tr("Drag to scale the picture in the X and Y Axis"), frame, ImageProvider.getCursor("crosshair", null));
     }
 
     @Override
-    public void doTheScale(double scale) {
+    protected void doAction(MouseEvent e) {
+        double centerX = Main.map.mapView.getWidth()/2;
+        double centerY = Main.map.mapView.getHeight()/2;
+        double d0 = Math.max(prevMousePoint.distance(centerX, centerY), 10);
+        Point2D mousePoint = new Point(e.getX(), e.getY());
+        double d = mousePoint.distance(centerX, centerY);
+        double scale = Math.max(d / d0, 0.9);
         currentLayer.scalePictureBy(scale, scale);
     }
Index: applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/transform/ScaleYPictureAction.java
===================================================================
--- applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/transform/ScaleYPictureAction.java	(revision 33146)
+++ applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/transform/ScaleYPictureAction.java	(revision 33148)
@@ -23,5 +23,10 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.event.MouseEvent;
+
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.plugins.piclayer.actions.GenericPicTransformAction;
+import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -29,5 +34,5 @@
  */
 @SuppressWarnings("serial")
-public class ScaleYPictureAction extends ScalePictureActionAbstract {
+public class ScaleYPictureAction extends GenericPicTransformAction {
 
     /**
@@ -35,10 +40,14 @@
      */
     public ScaleYPictureAction(MapFrame frame) {
-        super(tr("PicLayer scale Y"), tr("Scaled by Y"), "scale_y", tr("Drag to scale the picture in the Y Axis"), frame);
+        super(tr("PicLayer scale Y"), tr("Scaled by Y"), "scale_y", tr("Drag to scale the picture in the Y Axis"), frame, ImageProvider.getCursor("crosshair", null));
     }
 
     @Override
-    public void doTheScale(double scale) {
-        currentLayer.scalePictureBy(1.0, scale);
+    protected void doAction(MouseEvent e) {
+        double centerY = Main.map.mapView.getHeight()/2;
+        double dy0 = Math.max(Math.abs(prevMousePoint.getY() - centerY), 10);
+        double dy = Math.abs(e.getY() - centerY);
+        double scaleY = Math.max(dy / dy0, 0.9);
+        currentLayer.scalePictureBy(1.0, scaleY);
     }
 }
