Index: trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 11824)
+++ trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 11829)
@@ -42,4 +42,5 @@
 import java.util.function.Function;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 import java.util.stream.Stream;
 
@@ -61,4 +62,5 @@
 import org.openstreetmap.gui.jmapviewer.OsmTileLoader;
 import org.openstreetmap.gui.jmapviewer.Tile;
+import org.openstreetmap.gui.jmapviewer.TileRange;
 import org.openstreetmap.gui.jmapviewer.TileXY;
 import org.openstreetmap.gui.jmapviewer.interfaces.CachedTileLoader;
@@ -93,5 +95,4 @@
 import org.openstreetmap.josm.gui.layer.imagery.TileCoordinateConverter;
 import org.openstreetmap.josm.gui.layer.imagery.TilePosition;
-import org.openstreetmap.josm.gui.layer.imagery.TileRange;
 import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings;
 import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings.DisplaySettingsChangeEvent;
@@ -1320,10 +1321,15 @@
         }
 
-        @Override
+        /**
+         * Gets a stream of all tile positions in this set
+         * @return A stream of all positions
+         */
         public Stream<TilePosition> tilePositions() {
-            if (this.insane()) {
+            if (zoom == 0 || this.insane()) {
                 return Stream.empty(); // Tileset is either empty or too large
             } else {
-                return super.tilePositions();
+                return IntStream.rangeClosed(minX, maxX).mapToObj(
+                        x -> IntStream.rangeClosed(minY, maxY).mapToObj(y -> new TilePosition(x, y, zoom))
+                        ).flatMap(Function.identity());
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/layer/imagery/TilePosition.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/imagery/TilePosition.java	(revision 11824)
+++ trunk/src/org/openstreetmap/josm/gui/layer/imagery/TilePosition.java	(revision 11829)
@@ -12,5 +12,6 @@
     private final int y;
     private final int zoom;
-    TilePosition(int x, int y, int zoom) {
+
+    public TilePosition(int x, int y, int zoom) {
         this.x = x;
         this.y = y;
Index: trunk/src/org/openstreetmap/josm/gui/layer/imagery/TileRange.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/imagery/TileRange.java	(revision 11824)
+++ 	(revision )
@@ -1,58 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.layer.imagery;
-
-import java.util.function.Function;
-import java.util.stream.IntStream;
-import java.util.stream.Stream;
-
-import org.openstreetmap.gui.jmapviewer.TileXY;
-
-/**
- * This is a rectangular range of tiles.
- */
-public class TileRange {
-    protected int minX;
-    protected int maxX;
-    protected int minY;
-    protected int maxY;
-    protected int zoom;
-
-    protected TileRange() {
-    }
-
-    protected TileRange(TileXY t1, TileXY t2, int zoom) {
-        minX = (int) Math.floor(Math.min(t1.getX(), t2.getX()));
-        minY = (int) Math.floor(Math.min(t1.getY(), t2.getY()));
-        maxX = (int) Math.ceil(Math.max(t1.getX(), t2.getX()));
-        maxY = (int) Math.ceil(Math.max(t1.getY(), t2.getY()));
-        this.zoom = zoom;
-    }
-
-    protected double tilesSpanned() {
-        return Math.sqrt(1.0 * this.size());
-    }
-
-    /**
-     * Returns size
-     * @return size
-     */
-    public int size() {
-        int xSpan = maxX - minX + 1;
-        int ySpan = maxY - minY + 1;
-        return xSpan * ySpan;
-    }
-
-    /**
-     * Gets a stream of all tile positions in this set
-     * @return A stream of all positions
-     */
-    public Stream<TilePosition> tilePositions() {
-        if (zoom == 0) {
-            return Stream.empty();
-        } else {
-            return IntStream.rangeClosed(minX, maxX).mapToObj(
-                    x -> IntStream.rangeClosed(minY, maxY).mapToObj(y -> new TilePosition(x, y, zoom))
-                    ).flatMap(Function.identity());
-        }
-    }
-}
