Index: applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/interfaces/TileSource.java
===================================================================
--- applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/interfaces/TileSource.java	(revision 35918)
+++ applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/interfaces/TileSource.java	(revision 36138)
@@ -13,4 +13,5 @@
 
 /**
+ * Used for generating tiles
  *
  * @author Jan Peter Stotz
@@ -45,5 +46,5 @@
     /**
      * A unique id for this tile source.
-     *
+     * <p>
      * Unlike the name it has to be unique and has to consist only of characters
      * valid for filenames.
@@ -111,5 +112,7 @@
      * @return the pixel coordinates
      */
-    Point latLonToXY(ICoordinate point, int zoom);
+    default Point latLonToXY(ICoordinate point, int zoom) {
+        return latLonToXY(point.getLat(), point.getLon(), zoom);
+    }
 
     /**
@@ -119,5 +122,7 @@
      * @return WGS84 Coordinates of given point
      */
-    ICoordinate xyToLatLon(Point point, int zoom);
+    default ICoordinate xyToLatLon(Point point, int zoom) {
+        return xyToLatLon(point.x, point.y, zoom);
+    }
 
     /**
@@ -145,5 +150,7 @@
      * @return x and y tile indices
      */
-    TileXY latLonToTileXY(ICoordinate point, int zoom);
+    default TileXY latLonToTileXY(ICoordinate point, int zoom) {
+        return latLonToTileXY(point.getLat(), point.getLon(), zoom);
+    }
 
     /**
@@ -153,5 +160,7 @@
      * @return WGS84 coordinates of given tile
      */
-    ICoordinate tileXYToLatLon(TileXY xy, int zoom);
+    default ICoordinate tileXYToLatLon(TileXY xy, int zoom) {
+        return tileXYToLatLon(xy.getXIndex(), xy.getYIndex(), zoom);
+    }
 
     /**
@@ -161,5 +170,7 @@
      * @return WGS84 coordinates of given tile
      */
-    ICoordinate tileXYToLatLon(Tile tile);
+    default ICoordinate tileXYToLatLon(Tile tile) {
+        return tileXYToLatLon(tile.getXtile(), tile.getYtile(), tile.getZoom());
+    }
 
     /**
@@ -249,5 +260,5 @@
      * Returns a range of tiles, that cover a given tile, which is
      * usually at a different zoom level.
-     *
+     * <p>
      * In standard tile layout, 4 tiles cover a tile one zoom lower, 16 tiles
      * cover a tile 2 zoom levels below etc.
@@ -263,5 +274,5 @@
     /**
      * Get coordinate reference system for this tile source.
-     *
+     * <p>
      * E.g. "EPSG:3857" for Google-Mercator.
      * @return code for the coordinate reference system in use
Index: applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java
===================================================================
--- applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java	(revision 35918)
+++ applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java	(revision 36138)
@@ -2,5 +2,4 @@
 package org.openstreetmap.gui.jmapviewer.tilesources;
 
-import java.awt.Point;
 import java.io.IOException;
 import java.security.MessageDigest;
@@ -11,10 +10,9 @@
 import java.util.Map.Entry;
 import java.util.Set;
-
+import java.util.logging.Level;
+
+import org.openstreetmap.gui.jmapviewer.FeatureAdapter;
 import org.openstreetmap.gui.jmapviewer.JMapViewer;
 import org.openstreetmap.gui.jmapviewer.OsmMercator;
-import org.openstreetmap.gui.jmapviewer.Tile;
-import org.openstreetmap.gui.jmapviewer.TileXY;
-import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
 
 /**
@@ -40,5 +38,5 @@
      * @param info description of the Tile Source
      */
-    public AbstractTMSTileSource(TileSourceInfo info) {
+    protected AbstractTMSTileSource(TileSourceInfo info) {
         this.name = info.getName();
         this.baseUrl = info.getUrl();
@@ -90,8 +88,9 @@
 
     /**
+     * Get the tile path after the URL
      * @param zoom level of the tile
      * @param tilex tile number in x axis
      * @param tiley tile number in y axis
-     * @return String containg path part of URL of the tile
+     * @return String containing path part of URL of the tile
      * @throws IOException when subclass cannot return the tile URL
      */
@@ -126,29 +125,4 @@
         }
         return tileSize;
-    }
-
-    @Override
-    public Point latLonToXY(ICoordinate point, int zoom) {
-        return latLonToXY(point.getLat(), point.getLon(), zoom);
-    }
-
-    @Override
-    public ICoordinate xyToLatLon(Point point, int zoom) {
-        return xyToLatLon(point.x, point.y, zoom);
-    }
-
-    @Override
-    public TileXY latLonToTileXY(ICoordinate point, int zoom) {
-        return latLonToTileXY(point.getLat(), point.getLon(), zoom);
-    }
-
-    @Override
-    public ICoordinate tileXYToLatLon(TileXY xy, int zoom) {
-        return tileXYToLatLon(xy.getXIndex(), xy.getYIndex(), zoom);
-    }
-
-    @Override
-    public ICoordinate tileXYToLatLon(Tile tile) {
-        return tileXYToLatLon(tile.getXtile(), tile.getYtile(), tile.getZoom());
     }
 
@@ -191,8 +165,9 @@
         if (noTileChecksums != null && content != null) {
             for (Entry<String, Set<String>> searchEntry: noTileChecksums.entrySet()) {
-                MessageDigest md = null;
+                MessageDigest md;
                 try {
                     md = MessageDigest.getInstance(searchEntry.getKey());
                 } catch (NoSuchAlgorithmException e) {
+                    FeatureAdapter.getLogger(this.getClass()).log(Level.FINER, searchEntry.getKey() + " algorithm was not found", e);
                     break;
                 }
@@ -201,10 +176,10 @@
 
                 char[] hexChars = new char[len * 2];
-                for (int i = 0, j = 0; i < len; i++) {
-                    final int v = byteDigest[i];
+                int j = 0;
+                for (final int v : byteDigest) {
                     int vn = (v & 0xf0) >> 4;
-                    hexChars[j++] = (char) (vn + (vn >= 10 ? 'a'-10 : '0'));
+                    hexChars[j++] = (char) (vn + (vn >= 10 ? 'a' - 10 : '0'));
                     vn = (v & 0xf);
-                    hexChars[j++] = (char) (vn + (vn >= 10 ? 'a'-10 : '0'));
+                    hexChars[j++] = (char) (vn + (vn >= 10 ? 'a' - 10 : '0'));
                 }
                 for (String val: searchEntry.getValue()) {
