Index: src/org/openstreetmap/josm/actions/JoinAreasAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/JoinAreasAction.java	(revision 2595)
+++ src/org/openstreetmap/josm/actions/JoinAreasAction.java	(working copy)
@@ -8,6 +8,7 @@
 import java.awt.Polygon;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.awt.geom.Area;
 import java.awt.geom.Line2D;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -33,12 +34,10 @@
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.command.DeleteCommand;
 import org.openstreetmap.josm.command.SequenceCommand;
-import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.UndoRedoHandler;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.DataSource;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
@@ -46,7 +45,6 @@
 import org.openstreetmap.josm.data.osm.TigerUtils;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.gui.ExtendedDialog;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -113,13 +111,7 @@
         int ways = 0;
         Way[] selWays = new Way[2];
 
-        LinkedList<Bounds> bounds = new LinkedList<Bounds>();
-        OsmDataLayer dataLayer = Main.map.mapView.getEditLayer();
-        for (DataSource ds : dataLayer.data.dataSources) {
-            if (ds.bounds != null) {
-                bounds.add(ds.bounds);
-            }
-        }
+        Area dataSourceArea = Main.main.getCurrentDataSet().getDataSourceArea();
 
         boolean askedAlready = false;
         for (OsmPrimitive prim : selection) {
@@ -136,30 +128,24 @@
                 return;
             }
 
-            // This is copied from SimplifyAction and should be probably ported to tools
-            for (Node node : way.getNodes()) {
-                if(askedAlready) {
-                    break;
-                }
-                boolean isInsideOneBoundingBox = false;
-                for (Bounds b : bounds) {
-                    if (b.contains(node.getCoor())) {
-                        isInsideOneBoundingBox = true;
+            // TODO: Only display this warning when nodes outside dataSourceArea are deleted
+            if (dataSourceArea != null) {
+                for (Node node : way.getNodes()) {
+                    if(askedAlready) {
                         break;
                     }
-                }
+                    if (!dataSourceArea.contains(node.getCoor())) {
+                        int option = JOptionPane.showConfirmDialog(Main.parent,
+                                tr("The selected way(s) have nodes outside of the downloaded data region.\n"
+                                        + "This can lead to nodes being deleted accidentally.\n"
+                                        + "Are you really sure to continue?"),
+                                        tr("Please abort if you are not sure"), JOptionPane.YES_NO_OPTION,
+                                        JOptionPane.WARNING_MESSAGE);
 
-                if (!isInsideOneBoundingBox) {
-                    int option = JOptionPane.showConfirmDialog(Main.parent,
-                            tr("The selected way(s) have nodes outside of the downloaded data region.\n"
-                                    + "This can lead to nodes being deleted accidentally.\n"
-                                    + "Are you really sure to continue?"),
-                                    tr("Please abort if you are not sure"), JOptionPane.YES_NO_OPTION,
-                                    JOptionPane.WARNING_MESSAGE);
-
-                    if (option != JOptionPane.YES_OPTION) return;
-                    askedAlready = true;
-                    break;
+                        if (option != JOptionPane.YES_OPTION) return;
+                        askedAlready = true;
+                        break;
+                    }
                 }
             }
 
@@ -458,8 +444,9 @@
     private ArrayList<RelationRole> removeFromRelations(OsmPrimitive osm) {
         ArrayList<RelationRole> result = new ArrayList<RelationRole>();
         for (Relation r : Main.main.getCurrentDataSet().getRelations()) {
-            if (r.isDeleted())
+            if (r.isDeleted()) {
                 continue;
+            }
             for (RelationMember rm : r.getMembers()) {
                 if (rm.getMember() != osm) {
                     continue;
