Index: /trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java	(revision 3825)
+++ /trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java	(revision 3826)
@@ -31,8 +31,14 @@
     @Override
     protected void updateEnabledState() {
-        setEnabled(info.getImageryType() == ImageryType.TMS
-                || info.getImageryType() == ImageryType.BING
-                || (Main.map != null && Main.map.mapView != null
-                        && !Main.map.mapView.getAllLayers().isEmpty()));
+        // never enable blacklisted entries.
+        if (info.isBlacklisted()) {
+            setEnabled(false);
+        } else if (info.getImageryType() == ImageryType.TMS || info.getImageryType() == ImageryType.BING) {
+            setEnabled(true);
+        } else if (Main.map != null && Main.map.mapView != null && !Main.map.mapView.getAllLayers().isEmpty()) {
+            setEnabled(true);
+        } else {
+            setEnabled(false);
+        }
     }
 }
Index: /trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 3825)
+++ /trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 3826)
@@ -6,9 +6,10 @@
 
 /**
- * Class that stores info about a WMS server.
+ * Class that stores info about an image background layer.
  *
  * @author Frederik Ramm <frederik@remote.org>
  */
 public class ImageryInfo implements Comparable<ImageryInfo> {
+
     public enum ImageryType {
         WMS("wms"),
@@ -26,6 +27,14 @@
     }
 
+    private final static String[] BLACKLIST_REGEXES = {
+        // These entries are for Google tile servers (names and IPV4 numbers)
+        ".*\\.google\\.com/.*",
+        ".*209\\.85\\.2\\d\\d.*",
+        ".*209\\.85\\.1[3-9]\\d.*",
+        ".*209\\.85\\.12[89].*"
+    };
+
     String name;
-    String url=null;
+    String url = null;
     String cookies = null;
     public final String eulaAcceptanceRequired;
@@ -33,4 +42,5 @@
     double pixelPerDegree = 0.0;
     int maxZoom = 0;
+    private boolean blacklisted = false;
 
     public ImageryInfo(String name) {
@@ -41,5 +51,5 @@
     public ImageryInfo(String name, String url) {
         this.name=name;
-        setURL(url);
+        setUrl(url);
         this.eulaAcceptanceRequired = null;
     }
@@ -47,5 +57,5 @@
     public ImageryInfo(String name, String url, String eulaAcceptanceRequired) {
         this.name=name;
-        setURL(url);
+        setUrl(url);
         this.eulaAcceptanceRequired = eulaAcceptanceRequired;
     }
@@ -53,5 +63,5 @@
     public ImageryInfo(String name, String url, String eulaAcceptanceRequired, String cookies) {
         this.name=name;
-        setURL(url);
+        setUrl(url);
         this.cookies=cookies;
         this.eulaAcceptanceRequired = eulaAcceptanceRequired;
@@ -60,5 +70,5 @@
     public ImageryInfo(String name, String url, String cookies, double pixelPerDegree) {
         this.name=name;
-        setURL(url);
+        setUrl(url);
         this.cookies=cookies;
         this.pixelPerDegree=pixelPerDegree;
@@ -71,5 +81,5 @@
         String e4 = null;
         if(url != null && !url.isEmpty()) {
-            e2 = getFullURL();
+            e2 = getFullUrl();
         }
         if(cookies != null && !cookies.isEmpty()) {
@@ -110,5 +120,5 @@
         this.name=array.get(0);
         if(array.size() >= 2) {
-            setURL(array.get(1));
+            setUrl(array.get(1));
         }
         if(array.size() >= 3) {
@@ -160,5 +170,16 @@
     }
 
-    public void setURL(String url) {
+    public void setUrl(String url) {
+
+        // determine if URL is on blacklist and flag accordingly.
+        blacklisted = false;
+        for (String blacklistRegex : BLACKLIST_REGEXES) {
+            if (url.matches(blacklistRegex)) {
+                blacklisted = true;
+                System.err.println("layer '" + name + "' uses blacklisted URL");
+                break;
+            }
+        }
+
         for (ImageryType type : ImageryType.values()) {
             if (url.startsWith(type.getUrlString() + ":")) {
@@ -182,5 +203,5 @@
     }
 
-    public String getURL() {
+    public String getUrl() {
         return this.url;
     }
@@ -198,5 +219,5 @@
     }
 
-    public String getFullURL() {
+    public String getFullUrl() {
         return imageryType.getUrlString() + ":" + url;
     }
@@ -229,3 +250,7 @@
         return url != null && url.contains("{") && url.contains("}");
     }
+
+    public boolean isBlacklisted() {
+        return blacklisted;
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java	(revision 3825)
+++ /trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java	(revision 3826)
@@ -20,9 +20,12 @@
 
 public class ImageryLayerInfo {
+
     public static final ImageryLayerInfo instance = new ImageryLayerInfo();
     ArrayList<ImageryInfo> layers = new ArrayList<ImageryInfo>();
     ArrayList<ImageryInfo> defaultLayers = new ArrayList<ImageryInfo>();
-    private final static String[] DEFAULT_LAYER_SITES
-    = { "http://josm.openstreetmap.de/maps"};
+
+    private final static String[] DEFAULT_LAYER_SITES = { 
+        "http://josm.openstreetmap.de/maps" 
+    };
 
     public void load() {
@@ -32,5 +35,5 @@
         for(Collection<String> c : Main.pref.getArray("imagery.layers",
                 Collections.<Collection<String>>emptySet())) {
-            layers.add(new ImageryInfo(c));
+            add(new ImageryInfo(c));
         }
 
@@ -60,21 +63,23 @@
                         String url = val[2];
                         String eulaAcceptanceRequired = null;
+
                         if (val.length == 4) {
                             // 4th parameter optional for license agreement (EULA)
                             eulaAcceptanceRequired = val[3];
                         }
+
                         defaultLayers.add(new ImageryInfo(name, url, eulaAcceptanceRequired));
 
-                        if(force) {
+                        if (force) {
                             defaultsSave.add(url);
-                            if(!defaults.contains(url)) {
-                                for(ImageryInfo i : layers) {
-                                    if ((i.getImageryType() == ImageryType.WMS && url.equals(i.getURL()))
-                                            || url.equals(i.getFullURL())) {
+                            if (!defaults.contains(url)) {
+                                for (ImageryInfo i : layers) {
+                                    if ((i.getImageryType() == ImageryType.WMS && url.equals(i.getUrl()))
+                                            || url.equals(i.getFullUrl())) {
                                         force = false;
                                     }
                                 }
-                                if(force) {
-                                    layers.add(new ImageryInfo(name, url));
+                                if (force) {
+                                    add(new ImageryInfo(name, url));
                                 }
                             }
Index: /trunk/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java	(revision 3825)
+++ /trunk/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java	(revision 3826)
@@ -99,5 +99,5 @@
             List<TileSource> sources = new ArrayList<TileSource>();
             for (ImageryInfo info : ImageryLayerInfo.instance.getLayers()) {
-                if (existingSlippyMapUrls.contains(info.getURL())) {
+                if (existingSlippyMapUrls.contains(info.getUrl())) {
                     continue;
                 }
Index: /trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java	(revision 3825)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java	(revision 3826)
@@ -232,8 +232,8 @@
     public static TileSource getTileSource(ImageryInfo info) {
         if (info.getImageryType() == ImageryType.TMS) {
-            if(ImageryInfo.isUrlWithPatterns(info.getURL()))
-                return new TemplatedTMSTileSource(info.getName(), info.getURL(), info.getMaxZoom());
+            if(ImageryInfo.isUrlWithPatterns(info.getUrl()))
+                return new TemplatedTMSTileSource(info.getName(), info.getUrl(), info.getMaxZoom());
             else
-                return new TMSTileSource(info.getName(),info.getURL(), info.getMaxZoom());
+                return new TMSTileSource(info.getName(),info.getUrl(), info.getMaxZoom());
         } else if (info.getImageryType() == ImageryType.BING)
             return new BingAerialTileSource();
Index: /trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java	(revision 3825)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java	(revision 3826)
@@ -124,11 +124,11 @@
         resolution = mv.getDist100PixelText();
 
-        if(info.getURL() != null) {
-            WMSGrabber.getProjection(info.getURL(), true);
+        if(info.getUrl() != null) {
+            WMSGrabber.getProjection(info.getUrl(), true);
             startGrabberThreads();
-            if(info.getImageryType() == ImageryType.WMS && !ImageryInfo.isUrlWithPatterns(info.getURL())) {
-                if (!(info.getURL().endsWith("&") || info.getURL().endsWith("?"))) {
-                    if (!confirmMalformedUrl(info.getURL())) {
-                        System.out.println(tr("Warning: WMS layer deactivated because of malformed base url ''{0}''", info.getURL()));
+            if(info.getImageryType() == ImageryType.WMS && !ImageryInfo.isUrlWithPatterns(info.getUrl())) {
+                if (!(info.getUrl().endsWith("&") || info.getUrl().endsWith("?"))) {
+                    if (!confirmMalformedUrl(info.getUrl())) {
+                        System.out.println(tr("Warning: WMS layer deactivated because of malformed base url ''{0}''", info.getUrl()));
                         usesInvalidUrl = true;
                         setName(getName() + tr("(deactivated)"));
@@ -200,5 +200,5 @@
 
     @Override public void paint(Graphics2D g, final MapView mv, Bounds b) {
-        if(info.getURL() == null || (usesInvalidUrl && !isInvalidUrlConfirmed)) return;
+        if(info.getUrl() == null || (usesInvalidUrl && !isInvalidUrlConfirmed)) return;
 
         settingsChanged = false;
@@ -628,5 +628,5 @@
                     oos.writeDouble(info.getPixelPerDegree());
                     oos.writeObject(info.getName());
-                    oos.writeObject(info.getFullURL());
+                    oos.writeObject(info.getFullUrl());
                     oos.writeObject(images);
                     oos.close();
@@ -667,5 +667,5 @@
                 info.setPixelPerDegree(ois.readDouble());
                 doSetName((String)ois.readObject());
-                info.setURL((String) ois.readObject());
+                info.setUrl((String) ois.readObject());
                 images = (GeorefImage[][])ois.readObject();
                 ois.close();
@@ -680,5 +680,5 @@
                 settingsChanged = true;
                 mv.repaint();
-                if(info.getURL() != null)
+                if(info.getUrl() != null)
                 {
                     startGrabberThreads();
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/ImageryPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/ImageryPreference.java	(revision 3825)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/ImageryPreference.java	(revision 3826)
@@ -587,5 +587,5 @@
                     return info.getName();
                 case 1:
-                    return info.getFullURL();
+                    return info.getFullUrl();
                 case 2:
                     return (info.getImageryType() == ImageryType.WMS || info.getImageryType() == ImageryType.HTML) ?
@@ -605,5 +605,5 @@
                     break;
                 case 1:
-                    info.setURL((String)o);
+                    info.setUrl((String)o);
                     break;
                 case 2:
@@ -654,5 +654,5 @@
                     return info.getName();
                 case 1:
-                    return info.getFullURL();
+                    return info.getFullUrl();
                 }
                 return null;
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/ImagerySettingsMigration.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/ImagerySettingsMigration.java	(revision 3825)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/ImagerySettingsMigration.java	(revision 3826)
@@ -128,10 +128,10 @@
         HashSet<String> existingUrls = new HashSet<String>();
         for (ImageryInfo info : layerInfo.getLayers()) {
-            existingUrls.add(info.getFullURL());
+            existingUrls.add(info.getFullUrl());
         }
         for(Collection<String> c : Main.pref.getArray("wmslayers",
                 Collections.<Collection<String>>emptySet())) {
             ImageryInfo info = new ImageryInfo(c);
-            if (!existingUrls.contains(info.getFullURL())) {
+            if (!existingUrls.contains(info.getFullUrl())) {
                 layerInfo.add(info);
             }
Index: /trunk/src/org/openstreetmap/josm/io/imagery/WMSGrabber.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/imagery/WMSGrabber.java	(revision 3825)
+++ /trunk/src/org/openstreetmap/josm/io/imagery/WMSGrabber.java	(revision 3826)
@@ -43,5 +43,5 @@
     public WMSGrabber(MapView mv, WMSLayer layer) {
         super(mv, layer);
-        this.baseURL = layer.getInfo().getURL();
+        this.baseURL = layer.getInfo().getUrl();
         /* URL containing placeholders? */
         urlWithPatterns = ImageryInfo.isUrlWithPatterns(baseURL);
