Index: /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 5380)
+++ /trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 5381)
@@ -8,4 +8,5 @@
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
@@ -20,4 +21,5 @@
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.data.imagery.ImageryLayerInfo;
+import org.openstreetmap.josm.data.imagery.Shape;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DataSource;
@@ -255,5 +257,20 @@
                 }
             }
+            // Do not suggest layers already in use
             layers.removeAll(ImageryLayerInfo.instance.getLayers());
+            // For layers containing complex shapes, check that center is in one of its shapes (fix #7910)
+            for (Iterator<ImageryInfo> iti = layers.iterator(); iti.hasNext(); ) {
+                List<Shape> shapes = iti.next().getBounds().getShapes();
+                if (shapes != null) {
+                    boolean found = false;
+                    for (Iterator<Shape> its = shapes.iterator(); its.hasNext() && !found; ) {
+                        found = its.next().contains(center);
+                    }
+                    if (!found) {
+                        iti.remove();
+                    }
+                }
+            }
+            
             if (layers.isEmpty()) {
                 return;
Index: /trunk/src/org/openstreetmap/josm/data/imagery/Shape.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/imagery/Shape.java	(revision 5380)
+++ /trunk/src/org/openstreetmap/josm/data/imagery/Shape.java	(revision 5381)
@@ -10,5 +10,7 @@
 import org.openstreetmap.gui.jmapviewer.Coordinate;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.Geometry;
 
 /**
@@ -24,5 +26,5 @@
         String[] components = asString.split(separator);
         if (components.length % 2 != 0)
-            throw new IllegalArgumentException(MessageFormat.format("Even number of doubles excpected in string, got {0}: {1}", components.length, asString));
+            throw new IllegalArgumentException(MessageFormat.format("Even number of doubles expected in string, got {0}: {1}", components.length, asString));
         for (int i=0; i<components.length; i+=2) {
             addPoint(components[i], components[i+1]);
@@ -46,4 +48,14 @@
     public List<Coordinate> getPoints() {
         return coords;
+    }
+    
+    public boolean contains(LatLon latlon) {
+        if (latlon == null)
+            return false;
+        List<Node> nodes = new ArrayList<Node>(coords.size());
+        for (Coordinate c : coords) {
+            nodes.add(new Node(new LatLon(c.getLat(), c.getLon())));
+        }
+        return Geometry.nodeInsidePolygon(new Node(latlon), nodes);
     }
 
