Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 5368)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 5369)
@@ -5,15 +5,23 @@
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 import java.util.concurrent.Future;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import javax.swing.JOptionPane;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.imagery.ImageryInfo;
+import org.openstreetmap.josm.data.imagery.ImageryLayerInfo;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DataSource;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
+import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -25,4 +33,5 @@
 import org.openstreetmap.josm.io.OsmTransferCanceledException;
 import org.openstreetmap.josm.io.OsmTransferException;
+import org.openstreetmap.josm.tools.Utils;
 import org.xml.sax.SAXException;
 
@@ -67,6 +76,6 @@
     /**
      * Loads a given URL from the OSM Server
-     * @param True if the data should be saved to a new layer
-     * @param The URL as String
+     * @param new_layer True if the data should be saved to a new layer
+     * @param url The URL as String
      */
     public Future<?> loadUrl(boolean new_layer, String url, ProgressMonitor progressMonitor) {
@@ -216,4 +225,6 @@
                 targetLayer.onPostDownloadFromServer();
             }
+
+            suggestImageryLayers();
         }
         
@@ -234,4 +245,41 @@
             }
         }
+
+        protected void suggestImageryLayers() {
+            final LatLon center = currentBounds.getCenter();
+            final Set<ImageryInfo> layers = new HashSet<ImageryInfo>();
+
+            for (ImageryInfo i : ImageryLayerInfo.instance.getDefaultLayers()) {
+                if (i.getBounds() != null && i.getBounds().contains(center)) {
+                    layers.add(i);
+                }
+            }
+            layers.removeAll(ImageryLayerInfo.instance.getLayers());
+            if (layers.isEmpty()) {
+                return;
+            }
+
+            final List<String> layerNames = new ArrayList<String>();
+            for (ImageryInfo i : layers) {
+                layerNames.add(i.getName());
+            }
+
+            if (!ConditionalOptionPaneUtil.showConfirmationDialog(
+                    "download.suggest-imagery-layer",
+                    Main.parent,
+                    tr("<html>For the downloaded area, the following additional imagery layers are available: {0}" +
+                            "Do you want to add those layers to the <em>Imagery</em> menu?" +
+                            "<br>(If needed, you can remove those entries in the <em>Preferences</em>.)",
+                            Utils.joinAsHtmlUnorderedList(layerNames)),
+                    tr("Add imagery layers?"),
+                    JOptionPane.YES_NO_OPTION,
+                    JOptionPane.QUESTION_MESSAGE,
+                    JOptionPane.YES_OPTION)) {
+                return;
+            }
+
+            ImageryLayerInfo.addLayers(layers);
+        }
+
     }
 }
Index: trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 5368)
+++ trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 5369)
@@ -98,4 +98,5 @@
     private String countryCode = "";
     private String icon;
+    // when adding a field, also adapt the ImageryInfo(ImageryInfo) constructor
 
     /** auxiliary class to save an ImageryInfo object in the preferences */
@@ -246,13 +247,15 @@
 
     public ImageryInfo(ImageryInfo i) {
-        this.name=i.name;
-        this.url=i.url;
-        this.cookies=i.cookies;
-        this.imageryType=i.imageryType;
-        this.defaultMinZoom=i.defaultMinZoom;
-        this.defaultMaxZoom=i.defaultMaxZoom;
-        this.pixelPerDegree=i.pixelPerDegree;
+        this.name = i.name;
+        this.url = i.url;
+        this.defaultEntry = i.defaultEntry;
+        this.cookies = i.cookies;
         this.eulaAcceptanceRequired = null;
+        this.imageryType = i.imageryType;
+        this.pixelPerDegree = i.pixelPerDegree;
+        this.defaultMaxZoom = i.defaultMaxZoom;
+        this.defaultMinZoom = i.defaultMinZoom;
         this.bounds = i.bounds;
+        this.serverProjections = i.serverProjections;
         this.attributionText = i.attributionText;
         this.attributionLinkURL = i.attributionLinkURL;
@@ -261,6 +264,36 @@
         this.termsOfUseText = i.termsOfUseText;
         this.termsOfUseURL = i.termsOfUseURL;
-        this.serverProjections = i.serverProjections;
+        this.countryCode = i.countryCode;
         this.icon = i.icon;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ImageryInfo that = (ImageryInfo) o;
+
+        if (imageryType != that.imageryType) return false;
+        if (url != null ? !url.equals(that.url) : that.url != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = url != null ? url.hashCode() : 0;
+        result = 31 * result + (imageryType != null ? imageryType.hashCode() : 0);
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "ImageryInfo{" +
+                "name='" + name + '\'' +
+                ", countryCode='" + countryCode + '\'' +
+                ", url='" + url + '\'' +
+                ", imageryType=" + imageryType +
+                '}';
     }
 
Index: trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java	(revision 5368)
+++ trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java	(revision 5369)
@@ -150,3 +150,12 @@
         Main.main.menu.imageryMenu.refreshImageryMenu();
     }
+
+    public static void addLayers(Collection<ImageryInfo> infos) {
+        for (ImageryInfo i : infos) {
+            instance.add(i);
+        }
+        instance.save();
+        Collections.sort(instance.layers);
+        Main.main.menu.imageryMenu.refreshImageryMenu();
+    }
 }
