Index: applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/OsmFileCacheTileLoader.java
===================================================================
--- applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/OsmFileCacheTileLoader.java	(revision 30849)
+++ applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/OsmFileCacheTileLoader.java	(revision 30850)
@@ -133,5 +133,6 @@
         File tileCacheDir;
         File tileFile = null;
-        Long fileAge = null;
+        Long fileMtime = null;
+        Long now = null; // current time in milliseconds (keep consistent value for the whole run)
 
         public FileLoadJob(Tile tile) {
@@ -153,8 +154,9 @@
                 tile.loading = true;
             }
+            now = System.currentTimeMillis();
             tileCacheDir = getSourceCacheDir(tile.getSource());
             
             if (loadTileFromFile(recheckAfter)) {
-                log.log(Level.FINEST, "TMS - found in tile cache: {0}", tile);
+                log.log(Level.FINE, "TMS - found in tile cache: {0}", tile);
                 tile.setLoaded(true);
                 listener.tileLoadingFinished(tile, true);
@@ -174,5 +176,5 @@
                             tile.error = false;
                             listener.tileLoadingFinished(tile, true);
-                            log.log(Level.FINEST, "TMS - found stale tile in cache: {0}", tile);
+                            log.log(Level.FINE, "TMS - found stale tile in cache: {0}", tile);
                         } else {
                             // failed completely
@@ -193,13 +195,13 @@
             try {
                 URLConnection urlConn = loadTileFromOsm(tile);
-                if (fileAge != null) {
+                if (fileMtime != null && now - fileMtime <= maxCacheFileAge) {
                     switch (tile.getSource().getTileUpdate()) {
                     case IfModifiedSince:
-                        urlConn.setIfModifiedSince(fileAge);
+                        urlConn.setIfModifiedSince(fileMtime);
                         break;
                     case LastModified:
-                        if (!isOsmTileNewer(fileAge)) {
-                            log.log(Level.FINEST, "TMS - LastModified test: local version is up to date: {0}", tile);
-                            tileFile.setLastModified(System.currentTimeMillis());
+                        if (!isOsmTileNewer(fileMtime)) {
+                            log.log(Level.FINE, "TMS - LastModified test: local version is up to date: {0}", tile);
+                            tileFile.setLastModified(now);
                             return true;
                         }
@@ -216,6 +218,6 @@
                         case ETag:
                             if (hasOsmTileETag(fileETag)) {
-                                log.log(Level.FINEST, "TMS - ETag test: local version is up to date: {0}", tile);
-                                tileFile.setLastModified(System.currentTimeMillis());
+                                log.log(Level.FINE, "TMS - ETag test: local version is up to date: {0}", tile);
+                                tileFile.setLastModified(now);
                                 return true;
                             }
@@ -229,12 +231,12 @@
                     switch (tile.getSource().getTileUpdate()) {
                     case IfModifiedSince:
-                        log.log(Level.FINEST, "TMS - IfModifiedSince test: local version is up to date: {0}", tile);
+                        log.log(Level.FINE, "TMS - IfModifiedSince test: local version is up to date: {0}", tile);
                         break;
                     case IfNoneMatch:
-                        log.log(Level.FINEST, "TMS - IfNoneMatch test: local version is up to date: {0}", tile);
+                        log.log(Level.FINE, "TMS - IfNoneMatch test: local version is up to date: {0}", tile);
                         break;
                     }
                     if (loadTileFromFile(maxCacheFileAge)) {
-                        tileFile.setLastModified(System.currentTimeMillis());
+                        tileFile.setLastModified(now);
                         return true;
                     }
@@ -246,5 +248,5 @@
                 if ("no-tile".equals(tile.getValue("tile-info")))
                 {
-                    log.log(Level.FINEST, "TMS - No tile: tile-info=no-tile: {0}", tile);
+                    log.log(Level.FINE, "TMS - No tile: tile-info=no-tile: {0}", tile);
                     tile.setError("No tile at this zoom level");
                     return true;
@@ -259,5 +261,5 @@
                             tile.loadImage(new ByteArrayInputStream(buffer));
                             saveTileToFile(buffer);
-                            log.log(Level.FINEST, "TMS - downloaded tile from server: {0}", tile.getUrl());
+                            log.log(Level.FINE, "TMS - downloaded tile from server: {0}", tile.getUrl());
                             return true;
                         }
@@ -285,6 +287,6 @@
                 loadTagsFromFile();
 
-                fileAge = tileFile.lastModified();
-                if (System.currentTimeMillis() - fileAge > maxAge)
+                fileMtime = tileFile.lastModified();
+                if (now - fileMtime > maxAge)
                     return false;
 
@@ -308,5 +310,5 @@
                 tileFile.delete();
                 tileFile = null;
-                fileAge = null;
+                fileMtime = null;
             }
             return false;
@@ -361,5 +363,5 @@
             // System.out.println("Tile age: " + new
             // Date(urlConn.getLastModified()) + " / "
-            // + new Date(fileAge));
+            // + new Date(fileMtime));
             long lastModified = urlConn.getLastModified();
             if (lastModified == 0)
@@ -377,5 +379,5 @@
             // System.out.println("Tile age: " + new
             // Date(urlConn.getLastModified()) + " / "
-            // + new Date(fileAge));
+            // + new Date(fileMtime));
             String osmETag = urlConn.getHeaderField("ETag");
             if (osmETag == null)
@@ -401,5 +403,5 @@
                 f.write(rawData);
             } catch (Exception e) {
-                System.err.println("Failed to save tile content: " + e.getLocalizedMessage());
+                log.log(Level.SEVERE, "Failed to save tile content: {0}", e.getLocalizedMessage());
             }
         }
