Index: src/org/openstreetmap/josm/actions/PasteAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/PasteAction.java	(revision 5049)
+++ src/org/openstreetmap/josm/actions/PasteAction.java	(working copy)
@@ -5,6 +5,8 @@
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.MouseInfo;
+import java.awt.Point;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.util.ArrayList;
@@ -19,10 +21,10 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.PrimitiveData;
 import org.openstreetmap.josm.data.osm.PrimitiveDeepCopy;
-import org.openstreetmap.josm.data.osm.PrimitiveDeepCopy.PasteBufferChangedListener;
 import org.openstreetmap.josm.data.osm.RelationData;
 import org.openstreetmap.josm.data.osm.RelationMemberData;
 import org.openstreetmap.josm.data.osm.WayData;
+import org.openstreetmap.josm.data.osm.PrimitiveDeepCopy.PasteBufferChangedListener;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -66,15 +68,14 @@
             if (!confirmDeleteIncomplete()) return;
         }
 
-        EastNorth mPosition;
-        if((e.getModifiers() & ActionEvent.CTRL_MASK) ==0){
-            /* adjust the coordinates to the middle of the visible map area */
-            mPosition = Main.map.mapView.getCenter();
-        } else {
-            if (Main.map.mapView.lastMEvent != null) {
-                mPosition = Main.map.mapView.getEastNorth(Main.map.mapView.lastMEvent.getX(), Main.map.mapView.lastMEvent.getY());
-            } else {
-                mPosition = Main.map.mapView.getCenter();
+        // default to paste in center of map (pasted via menu or cursor not in MapView)
+        EastNorth mPosition = Main.map.mapView.getCenter();
+        if((e.getModifiers() & ActionEvent.CTRL_MASK) != 0) {
+            final Point mp = MouseInfo.getPointerInfo().getLocation();
+            final Point tl = Main.map.mapView.getLocationOnScreen();
+            final Point pos = new Point(mp.x-tl.x, mp.y-tl.y);
+            if(Main.map.mapView.contains(pos)) {
+                mPosition = Main.map.mapView.getEastNorth(pos.x, pos.y);
             }
         }
 
