Index: /trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 11198)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 11199)
@@ -42,5 +42,4 @@
 import java.util.function.Function;
 import java.util.stream.Collectors;
-import java.util.stream.IntStream;
 import java.util.stream.Stream;
 
@@ -93,4 +92,6 @@
 import org.openstreetmap.josm.gui.layer.imagery.ImageryFilterSettings.FilterChangeListener;
 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;
@@ -1269,95 +1270,4 @@
     private final TileSet nullTileSet = new TileSet();
 
-    /**
-     * This is a rectangular range of tiles.
-     */
-    private static class TileRange {
-        int minX;
-        int maxX;
-        int minY;
-        int maxY;
-        int zoom;
-
-        private 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());
-        }
-
-        protected 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());
-            }
-        }
-    }
-
-    /**
-     * The position of a single tile.
-     * @author Michael Zangl
-     */
-    private static class TilePosition {
-        private final int x;
-        private final int y;
-        private final int zoom;
-        TilePosition(int x, int y, int zoom) {
-            this.x = x;
-            this.y = y;
-            this.zoom = zoom;
-        }
-
-        TilePosition(Tile tile) {
-            this(tile.getXtile(), tile.getYtile(), tile.getZoom());
-        }
-
-        /**
-         * @return the x position
-         */
-        public int getX() {
-            return x;
-        }
-
-        /**
-         * @return the y position
-         */
-        public int getY() {
-            return y;
-        }
-
-        /**
-         * @return the zoom
-         */
-        public int getZoom() {
-            return zoom;
-        }
-
-        @Override
-        public String toString() {
-            return "TilePosition [x=" + x + ", y=" + y + ", zoom=" + zoom + ']';
-        }
-    }
-
     private class TileSet extends TileRange {
 
Index: /trunk/src/org/openstreetmap/josm/gui/layer/imagery/TilePosition.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/imagery/TilePosition.java	(revision 11199)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/imagery/TilePosition.java	(revision 11199)
@@ -0,0 +1,53 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.layer.imagery;
+
+import org.openstreetmap.gui.jmapviewer.Tile;
+
+/**
+ * The position of a single tile.
+ * @author Michael Zangl
+ */
+public class TilePosition {
+    private final int x;
+    private final int y;
+    private final int zoom;
+    TilePosition(int x, int y, int zoom) {
+        this.x = x;
+        this.y = y;
+        this.zoom = zoom;
+    }
+
+    /**
+     * Constructs a new {@code TilePosition}.
+     * @param tile tile
+     */
+    public TilePosition(Tile tile) {
+        this(tile.getXtile(), tile.getYtile(), tile.getZoom());
+    }
+
+    /**
+     * @return the x position
+     */
+    public int getX() {
+        return x;
+    }
+
+    /**
+     * @return the y position
+     */
+    public int getY() {
+        return y;
+    }
+
+    /**
+     * @return the zoom
+     */
+    public int getZoom() {
+        return zoom;
+    }
+
+    @Override
+    public String toString() {
+        return "TilePosition [x=" + x + ", y=" + y + ", zoom=" + zoom + ']';
+    }
+}
Index: /trunk/src/org/openstreetmap/josm/gui/layer/imagery/TileRange.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/imagery/TileRange.java	(revision 11199)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/imagery/TileRange.java	(revision 11199)
@@ -0,0 +1,58 @@
+// 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());
+        }
+    }
+}
