Index: trunk/src/org/openstreetmap/josm/data/imagery/JosmTemplatedTMSTileSource.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/JosmTemplatedTMSTileSource.java	(revision 15456)
+++ trunk/src/org/openstreetmap/josm/data/imagery/JosmTemplatedTMSTileSource.java	(revision 15456)
@@ -0,0 +1,33 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.imagery;
+
+import org.openstreetmap.gui.jmapviewer.JMapViewer;
+import org.openstreetmap.gui.jmapviewer.tilesources.TemplatedTMSTileSource;
+import org.openstreetmap.gui.jmapviewer.tilesources.TileSourceInfo;
+import org.openstreetmap.josm.gui.layer.TMSLayer;
+
+/**
+ * JOSM wrapper class that uses min/max zoom settings from imagery settings instead of JMapViewer defaults
+ *
+ */
+public class JosmTemplatedTMSTileSource extends TemplatedTMSTileSource {
+
+    /**
+     * Creates TMS tilesource based on tilesource info
+     * @param info
+     */
+    public JosmTemplatedTMSTileSource(TileSourceInfo info) {
+        super(info);
+    }
+
+    @Override
+    public int getMinZoom() {
+        return (minZoom == 0) ? TMSLayer.PROP_MIN_ZOOM_LVL.get() : minZoom;
+    }
+
+    // return no more, than JMapViewer supports
+    @Override
+    public int getMaxZoom() {
+        return Math.min((maxZoom == 0) ? TMSLayer.PROP_MAX_ZOOM_LVL.get() : maxZoom, JMapViewer.MAX_ZOOM);
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 15455)
+++ trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 15456)
@@ -150,5 +150,5 @@
     /** maximum zoom level supported */
     public static final int MAX_ZOOM = 30;
-    /** minium zoom level supported */
+    /** minimum zoom level supported */
     public static final int MIN_ZOOM = 2;
     private static final Font InfoFont = new Font("sansserif", Font.BOLD, 13);
Index: trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java	(revision 15455)
+++ trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java	(revision 15456)
@@ -7,4 +7,5 @@
 
 import org.apache.commons.jcs.access.CacheAccess;
+import org.openstreetmap.gui.jmapviewer.JMapViewer;
 import org.openstreetmap.gui.jmapviewer.OsmMercator;
 import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
@@ -12,9 +13,9 @@
 import org.openstreetmap.gui.jmapviewer.tilesources.ScanexTileSource;
 import org.openstreetmap.gui.jmapviewer.tilesources.TMSTileSource;
-import org.openstreetmap.gui.jmapviewer.tilesources.TemplatedTMSTileSource;
 import org.openstreetmap.josm.data.cache.BufferedImageCacheEntry;
 import org.openstreetmap.josm.data.imagery.CachedAttributionBingAerialTileSource;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
+import org.openstreetmap.josm.data.imagery.JosmTemplatedTMSTileSource;
 import org.openstreetmap.josm.data.imagery.TMSCachedTileLoader;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
@@ -45,4 +46,7 @@
     public static final BooleanProperty PROP_ADD_TO_SLIPPYMAP_CHOOSER = new BooleanProperty(PREFERENCE_PREFIX + ".add_to_slippymap_chooser",
             true);
+    /** override minimum/maximum zoom level with those supported by JMapViewer, as these might be used in slippymap chooser */
+    public static final int MAX_ZOOM = JMapViewer.MAX_ZOOM;
+    public static final int MIN_ZOOM = JMapViewer.MIN_ZOOM;
 
     private static final ScaleList nativeScaleList = initNativeScaleList();
@@ -112,6 +116,6 @@
     public static TMSTileSource getTileSourceStatic(ImageryInfo info, Runnable attributionLoadedTask) {
         if (info.getImageryType() == ImageryType.TMS) {
-            TemplatedTMSTileSource.checkUrl(info.getUrl());
-            TMSTileSource t = new TemplatedTMSTileSource(info);
+            JosmTemplatedTMSTileSource.checkUrl(info.getUrl());
+            TMSTileSource t = new JosmTemplatedTMSTileSource(info);
             info.setAttribution(t);
             return t;
Index: trunk/src/org/openstreetmap/josm/gui/preferences/imagery/TMSSettingsPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/imagery/TMSSettingsPanel.java	(revision 15455)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/imagery/TMSSettingsPanel.java	(revision 15456)
@@ -16,4 +16,5 @@
 import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -40,7 +41,11 @@
         super(new GridBagLayout());
         minZoomLvl = new JSpinner(new SpinnerNumberModel(
-                TMSLayer.PROP_MIN_ZOOM_LVL.get().intValue(), TMSLayer.MIN_ZOOM, TMSLayer.MAX_ZOOM, 1));
+                Utils.clamp(TMSLayer.PROP_MIN_ZOOM_LVL.get().intValue(), TMSLayer.MIN_ZOOM, TMSLayer.MAX_ZOOM),
+                TMSLayer.MIN_ZOOM,
+                TMSLayer.MAX_ZOOM, 1));
         maxZoomLvl = new JSpinner(new SpinnerNumberModel(
-                TMSLayer.PROP_MAX_ZOOM_LVL.get().intValue(), TMSLayer.MIN_ZOOM, TMSLayer.MAX_ZOOM, 1));
+                Utils.clamp(TMSLayer.PROP_MAX_ZOOM_LVL.get().intValue(), TMSLayer.MIN_ZOOM, TMSLayer.MAX_ZOOM),
+                TMSLayer.MIN_ZOOM,
+                TMSLayer.MAX_ZOOM, 1));
         maxConcurrentDownloads = new JSpinner(new SpinnerNumberModel(
                 TMSCachedTileLoader.THREAD_LIMIT.get().intValue(), 0, Integer.MAX_VALUE, 1));
