Index: /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/ScanexTileSource.java
===================================================================
--- /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/ScanexTileSource.java	(revision 30248)
+++ /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/ScanexTileSource.java	(revision 30249)
@@ -5,4 +5,17 @@
 
 import org.openstreetmap.gui.jmapviewer.OsmMercator;
+
+/*
+ * This tilesource uses different to OsmMercator projection.
+ *
+ * Earth is assumed an ellipsoid in this projection, unlike
+ * sphere in OsmMercator, so latitude calculation differs
+ * a lot.
+ *
+ * The longitude calculation is the same as in OsmMercator,
+ * we inherit it from AbstractTMSTileSource.
+ *
+ * TODO: correct getDistance() method.
+ */
 
 public class ScanexTileSource extends TMSTileSource {
@@ -69,7 +82,21 @@
     }
 
+
+    /*
+     * Latitude to Y and back calculations.
+     */
     private static double RADIUS_E = 6378137;   /* radius of Earth at equator, m */
     private static double EQUATOR = 40075016.68557849; /* equator length, m */
     private static double E = 0.0818191908426;  /* eccentricity of Earth's ellipsoid */
+
+    @Override
+    public int LatToY(double lat, int zoom) {
+        return (int )(latToTileY(lat, zoom) * OsmMercator.TILE_SIZE);
+    }
+ 
+    @Override
+    public double YToLat(int y, int zoom) {
+        return tileYToLat((double )y / OsmMercator.TILE_SIZE, zoom);
+    }
 
     @Override
@@ -82,6 +109,6 @@
 
     @Override
-    public double lonToTileX(double lon, int zoom) {
-        return (RADIUS_E * lon * Math.PI / (90*EQUATOR) + 1) * Math.pow(2.0, zoom - 1);
+    public double tileYToLat(int y, int zoom) {
+        return tileYToLat((double )y, zoom);
     }
 
@@ -94,7 +121,5 @@
      */
     private double cached_lat = 0;
-
-    @Override
-    public double tileYToLat(int y, int zoom) {
+    private double tileYToLat(double y, int zoom) {
         double lat0, lat;
 
@@ -131,8 +156,3 @@
         return (f/df);
     }
-
-    @Override
-    public double tileXToLon(int x, int zoom) {
-        return (x / Math.pow(2.0, zoom - 1) - 1) * (90*EQUATOR) / RADIUS_E / Math.PI;
-    }
 }
