Index: /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/DuplicateNode.java
===================================================================
--- /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/DuplicateNode.java	(revision 16969)
+++ /applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/DuplicateNode.java	(revision 16970)
@@ -2,4 +2,6 @@
 
 import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.geom.Area;
 
 import java.util.Collection;
@@ -7,4 +9,7 @@
 import java.util.List;
 
+import javax.swing.JOptionPane;
+
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.MergeNodesAction;
 import org.openstreetmap.josm.command.Command;
@@ -12,4 +17,5 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
 import org.openstreetmap.josm.plugins.validator.Severity;
 import org.openstreetmap.josm.plugins.validator.Test;
@@ -93,5 +99,6 @@
             target = nodes.iterator().next();
 
-        new  MergeNodesAction().mergeNodes(nodes, target);
+        if(checkAndConfirmOutlyingDeletes(nodes))
+            new MergeNodesAction().mergeNodes(nodes, target);
 
         return null; // undoRedo handling done in mergeNodes
@@ -103,3 +110,33 @@
         return (testError.getTester() instanceof DuplicateNode);
     }
+
+    /**
+     * Check whether user is about to delete data outside of the download area.
+     * Request confirmation if he is.
+     */
+    private static boolean checkAndConfirmOutlyingDeletes(LinkedList<Node> del) {
+        Area a = Main.main.getCurrentDataSet().getDataSourceArea();
+        if (a != null) {
+            for (OsmPrimitive osm : del) {
+                if (osm instanceof Node && osm.id != 0) {
+                    Node n = (Node) osm;
+                    if (!a.contains(n.getCoor())) {
+                        return ConditionalOptionPaneUtil.showConfirmationDialog(
+                            "delete_outside_nodes",
+                            Main.parent,
+                            tr("You are about to delete nodes outside of the area you have downloaded." +
+                                                "<br>" +
+                                                "This can cause problems because other objects (that you don't see) might use them." +
+                                                "<br>" +
+                                        "Do you really want to delete?") + "</html>",
+                            tr("Confirmation"),
+                            JOptionPane.YES_NO_OPTION,
+                            JOptionPane.QUESTION_MESSAGE,
+                            JOptionPane.YES_OPTION);
+                    }
+                }
+            }
+        }
+        return true;
+    }
 }
