Index: trunk/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java	(revision 14506)
+++ trunk/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java	(revision 14507)
@@ -335,4 +335,18 @@
         if (this.layers.isEmpty())
             throw new IllegalArgumentException(tr("No layers defined by getCapabilities document: {0}", info.getUrl()));
+    }
+
+    /**
+     * Creates a tile source based on imagery info and initializes it with given projection.
+     * @param info imagery info
+     * @param projection projection to be used by this TileSource
+     * @throws IOException if any I/O error occurs
+     * @throws WMTSGetCapabilitiesException when document didn't contain any layers
+     * @throws IllegalArgumentException if any other error happens for the given imagery info
+     * @since 14507
+     */
+    public WMTSTileSource(ImageryInfo info, Projection projection) throws IOException, WMTSGetCapabilitiesException {
+        this(info);
+        initProjection(projection);
     }
 
Index: trunk/test/unit/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreferenceTestIT.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreferenceTestIT.java	(revision 14506)
+++ trunk/test/unit/org/openstreetmap/josm/gui/preferences/imagery/ImageryPreferenceTestIT.java	(revision 14507)
@@ -16,9 +16,14 @@
 import org.junit.Rule;
 import org.junit.Test;
+import org.openstreetmap.gui.jmapviewer.TileXY;
+import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
 import org.openstreetmap.gui.jmapviewer.tilesources.AbstractTileSource;
 import org.openstreetmap.gui.jmapviewer.tilesources.BingAerialTileSource;
 import org.openstreetmap.gui.jmapviewer.tilesources.ScanexTileSource;
 import org.openstreetmap.gui.jmapviewer.tilesources.TemplatedTMSTileSource;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.imagery.CoordinateConversion;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
+import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryBounds;
 import org.openstreetmap.josm.data.imagery.ImageryLayerInfo;
 import org.openstreetmap.josm.data.imagery.TemplatedWMSTileSource;
@@ -73,4 +78,10 @@
     }
 
+    private void checkTileUrl(ImageryInfo info, AbstractTileSource tileSource, ICoordinate center, int zoom)
+            throws IOException {
+        TileXY xy = tileSource.latLonToTileXY(center, zoom);
+        checkUrl(info, tileSource.getTileUrl(zoom, xy.getXIndex(), xy.getYIndex()));
+    }
+
     private void checkEntry(ImageryInfo info) {
         Logging.info("Checking "+ info);
@@ -90,5 +101,9 @@
 
         try {
-            getTileSource(info);
+            ImageryBounds bounds = info.getBounds();
+            ICoordinate center = CoordinateConversion.llToCoor(bounds != null ? bounds.getCenter() : LatLon.ZERO);
+            AbstractTileSource tileSource = getTileSource(info);
+            checkTileUrl(info, tileSource, center, info.getMinZoom());
+            checkTileUrl(info, tileSource, center, info.getMaxZoom());
         } catch (IOException | WMTSGetCapabilitiesException | IllegalArgumentException e) {
             addError(info, e.toString());
@@ -113,5 +128,5 @@
                 return new WMSEndpointTileSource(info, ProjectionRegistry.getProjection());
             case WMTS:
-                return new WMTSTileSource(info);
+                return new WMTSTileSource(info, ProjectionRegistry.getProjection());
             default:
                 throw new UnsupportedOperationException(info.toString());
