Index: /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractOsmTileSource.java
===================================================================
--- /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractOsmTileSource.java	(revision 32024)
+++ /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractOsmTileSource.java	(revision 32025)
@@ -9,12 +9,12 @@
  * Abstract class for OSM Tile sources
  */
-public abstract class AbstractOsmTileSource extends AbstractTMSTileSource {
-    
+public abstract class AbstractOsmTileSource extends TMSTileSource {
+
     /**
-     * The OSM attribution. Must be always in line with 
+     * The OSM attribution. Must be always in line with
      * <a href="https://www.openstreetmap.org/copyright/en">https://www.openstreetmap.org/copyright/en</a>
      */
     public static final String DEFAULT_OSM_ATTRIBUTION = "\u00a9 OpenStreetMap contributors";
-    
+
     /**
      * Constructs a new OSM tile source
Index: /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java
===================================================================
--- /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java	(revision 32024)
+++ /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java	(revision 32025)
@@ -11,5 +11,4 @@
 import java.util.Map.Entry;
 
-import org.openstreetmap.gui.jmapviewer.Coordinate;
 import org.openstreetmap.gui.jmapviewer.OsmMercator;
 import org.openstreetmap.gui.jmapviewer.Tile;
@@ -32,5 +31,4 @@
     private final Map<String, String> metadataHeaders;
     protected int tileSize;
-    protected OsmMercator osmMercator;
 
     /**
@@ -50,5 +48,4 @@
         this.metadataHeaders = info.getMetadataHeaders();
         this.tileSize = info.getTileSize();
-        this.osmMercator = new OsmMercator(this.getTileSize());
     }
 
@@ -128,17 +125,4 @@
 
     @Override
-    public double getDistance(double lat1, double lon1, double lat2, double lon2) {
-        return osmMercator.getDistance(lat1, lon1, lat2, lon2);
-    }
-
-    @Override
-    public Point latLonToXY(double lat, double lon, int zoom) {
-        return new Point(
-                (int) osmMercator.lonToX(lon, zoom),
-                (int) osmMercator.latToY(lat, zoom)
-                );
-    }
-
-    @Override
     public Point latLonToXY(ICoordinate point, int zoom) {
         return latLonToXY(point.getLat(), point.getLon(), zoom);
@@ -151,20 +135,4 @@
 
     @Override
-    public ICoordinate xyToLatLon(int x, int y, int zoom) {
-        return new Coordinate(
-                osmMercator.yToLat(y, zoom),
-                osmMercator.xToLon(x, zoom)
-                );
-    }
-
-    @Override
-    public TileXY latLonToTileXY(double lat, double lon, int zoom) {
-        return new TileXY(
-                osmMercator.lonToX(lon, zoom) / getTileSize(),
-                osmMercator.latToY(lat, zoom) / getTileSize()
-                );
-    }
-
-    @Override
     public TileXY latLonToTileXY(ICoordinate point, int zoom) {
         return latLonToTileXY(point.getLat(), point.getLon(), zoom);
@@ -179,12 +147,4 @@
     public ICoordinate tileXYToLatLon(Tile tile) {
         return tileXYToLatLon(tile.getXtile(), tile.getYtile(), tile.getZoom());
-    }
-
-    @Override
-    public ICoordinate tileXYToLatLon(int x, int y, int zoom) {
-        return new Coordinate(
-                osmMercator.yToLat(y * getTileSize(), zoom),
-                osmMercator.xToLon(x * getTileSize(), zoom)
-                );
     }
 
Index: /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/BingAerialTileSource.java
===================================================================
--- /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/BingAerialTileSource.java	(revision 32024)
+++ /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/BingAerialTileSource.java	(revision 32025)
@@ -37,5 +37,5 @@
 import org.xml.sax.SAXException;
 
-public class BingAerialTileSource extends AbstractTMSTileSource {
+public class BingAerialTileSource extends TMSTileSource {
 
     private static final String API_KEY = "Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU";
Index: /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java
===================================================================
--- /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java	(revision 32024)
+++ /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java	(revision 32025)
@@ -1,4 +1,11 @@
 // License: GPL. For details, see Readme.txt file.
 package org.openstreetmap.gui.jmapviewer.tilesources;
+
+import java.awt.Point;
+
+import org.openstreetmap.gui.jmapviewer.Coordinate;
+import org.openstreetmap.gui.jmapviewer.OsmMercator;
+import org.openstreetmap.gui.jmapviewer.TileXY;
+import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
 
 public class TMSTileSource extends AbstractTMSTileSource {
@@ -6,4 +13,5 @@
     protected int maxZoom;
     protected int minZoom;
+    protected OsmMercator osmMercator;
 
     public TMSTileSource(TileSourceInfo info) {
@@ -11,4 +19,5 @@
         minZoom = info.getMinZoom();
         maxZoom = info.getMaxZoom();
+        this.osmMercator = new OsmMercator(this.getTileSize());
     }
 
@@ -22,3 +31,39 @@
         return (maxZoom == 0) ? super.getMaxZoom() : maxZoom;
     }
+    @Override
+    public double getDistance(double lat1, double lon1, double lat2, double lon2) {
+        return osmMercator.getDistance(lat1, lon1, lat2, lon2);
+    }
+
+    @Override
+    public Point latLonToXY(double lat, double lon, int zoom) {
+        return new Point(
+                (int) osmMercator.lonToX(lon, zoom),
+                (int) osmMercator.latToY(lat, zoom)
+                );
+    }
+
+    @Override
+    public ICoordinate xyToLatLon(int x, int y, int zoom) {
+        return new Coordinate(
+                osmMercator.yToLat(y, zoom),
+                osmMercator.xToLon(x, zoom)
+                );
+    }
+
+    @Override
+    public TileXY latLonToTileXY(double lat, double lon, int zoom) {
+        return new TileXY(
+                osmMercator.lonToX(lon, zoom) / getTileSize(),
+                osmMercator.latToY(lat, zoom) / getTileSize()
+                );
+    }
+
+    @Override
+    public ICoordinate tileXYToLatLon(int x, int y, int zoom) {
+        return new Coordinate(
+                osmMercator.yToLat(y * getTileSize(), zoom),
+                osmMercator.xToLon(x * getTileSize(), zoom)
+                );
+    }
 }
