Index: trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 9609)
+++ trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 9610)
@@ -220,4 +220,5 @@
         @pref String description;
         @pref Map<String, String> noTileHeaders;
+        @pref Map<String, String> noTileChecksums;
         @pref int tileSize = OsmMercator.DEFAUL_TILE_SIZE;
         @pref Map<String, String> metadataHeaders;
@@ -281,4 +282,8 @@
             }
 
+            if (i.noTileChecksums != null && !i.noTileChecksums.isEmpty()) {
+                noTileChecksums = i.noTileChecksums;
+            }
+
             if (i.metadataHeaders != null && !i.metadataHeaders.isEmpty()) {
                 metadataHeaders = i.metadataHeaders;
@@ -409,4 +414,7 @@
             noTileHeaders = e.noTileHeaders;
         }
+        if (e.noTileChecksums != null) {
+            noTileChecksums = e.noTileChecksums;
+        }
         setTileSize(e.tileSize);
         metadataHeaders = e.metadataHeaders;
@@ -440,4 +448,5 @@
         this.description = i.description;
         this.noTileHeaders = i.noTileHeaders;
+        this.noTileChecksums = i.noTileChecksums;
         this.metadataHeaders = i.metadataHeaders;
         this.isEpsg4326To3857Supported = i.isEpsg4326To3857Supported;
@@ -485,4 +494,5 @@
                 Objects.equals(this.description, other.description) &&
                 Objects.equals(this.noTileHeaders, other.noTileHeaders) &&
+                Objects.equals(this.noTileChecksums, other.noTileChecksums) &&
                 Objects.equals(this.metadataHeaders, other.metadataHeaders);
     }
@@ -978,4 +988,20 @@
 
     /**
+     * Sets the map of &lt;checksum type, checksum value&gt; that if any tile with that checksum
+     * will be returned, then this tile will be treated as "no tile at this zoom level"
+     *
+     * @param noTileChecksums Map of &lt;checksum type, checksum value&gt; which will be treated as "no tile at this zoom level"
+     * @since 9610
+     */
+    public void setNoTileChecksums(Map<String, String> noTileChecksums) {
+       this.noTileChecksums = noTileChecksums;
+    }
+
+    @Override
+    public Map<String, String> getNoTileChecksums() {
+        return noTileChecksums;
+    }
+
+    /**
      * Returns the map of &lt;header name, metadata key&gt; indicating, which HTTP headers should
      * be moved to metadata
Index: trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java	(revision 9609)
+++ trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java	(revision 9610)
@@ -206,22 +206,4 @@
         Collection<String> newKnownDefaults = new TreeSet<>(knownDefaults);
         for (ImageryInfo def : defaultLayers) {
-            // temporary migration code, so all user preferences will get updated with new settings from JOSM site (can be removed ~Dez. 2015)
-            if (def.getNoTileHeaders() != null || def.getTileSize() > 0 || def.getMetadataHeaders() != null) {
-                for (ImageryInfo i: layers) {
-                    if (isSimilar(def,  i)) {
-                        if (def.getNoTileHeaders() != null) {
-                            i.setNoTileHeaders(def.getNoTileHeaders());
-                        }
-                        if (def.getTileSize() > 0) {
-                            i.setTileSize(def.getTileSize());
-                        }
-                        if (def.getMetadataHeaders() != null && def.getMetadataHeaders().size() > 0) {
-                            i.setMetadataHeaders(def.getMetadataHeaders());
-                        }
-                        changed = true;
-                    }
-                }
-            }
-
             if (def.isDefaultEntry()) {
                 boolean isKnownDefault = false;
Index: trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java	(revision 9609)
+++ trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java	(revision 9610)
@@ -45,4 +45,5 @@
         SHAPE,
         NO_TILE,
+        NO_TILESUM,
         METADATA,
         UNKNOWN,            // element is not recognized in the current context
@@ -94,4 +95,5 @@
         private List<String> projections;
         private Map<String, String> noTileHeaders;
+        private Map<String, String> noTileChecksums;
         private Map<String, String> metadataHeaders;
 
@@ -107,4 +109,5 @@
             projections = null;
             noTileHeaders = null;
+            noTileChecksums = null;
         }
 
@@ -125,4 +128,5 @@
                     newState = State.ENTRY;
                     noTileHeaders = new HashMap<>();
+                    noTileChecksums = new HashMap<>();
                     metadataHeaders = new HashMap<>();
                 }
@@ -170,4 +174,7 @@
                     noTileHeaders.put(atts.getValue("name"), atts.getValue("value"));
                     newState = State.NO_TILE;
+                } else if ("no-tile-checksum".equals(qName)) {
+                    noTileChecksums.put(atts.getValue("type"), atts.getValue("value"));
+                    newState = State.NO_TILESUM;
                 } else if ("metadata-header".equals(qName)) {
                     metadataHeaders.put(atts.getValue("header-name"), atts.getValue("metadata-key"));
@@ -225,4 +232,6 @@
                     entry.setNoTileHeaders(noTileHeaders);
                     noTileHeaders = null;
+                    entry.setNoTileChecksums(noTileChecksums);
+                    noTileChecksums = null;
                     entry.setMetadataHeaders(metadataHeaders);
                     metadataHeaders = null;
