Index: trunk/src/org/openstreetmap/josm/data/cache/ICachedLoaderJob.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/cache/ICachedLoaderJob.java	(revision 8423)
+++ trunk/src/org/openstreetmap/josm/data/cache/ICachedLoaderJob.java	(revision 8424)
@@ -6,5 +6,5 @@
 
 /**
- * 
+ *
  * @author Wiktor Niesiobędzki
  *
@@ -14,5 +14,5 @@
     /**
      * returns cache entry key
-     * 
+     *
      * @param tile
      * @return cache key for tile
@@ -23,5 +23,5 @@
      * method to get download URL for Job
      * @return URL that should be fetched
-     * 
+     *
      */
     public URL getUrl();
@@ -33,5 +33,5 @@
     /**
      * fetches object from cache, or returns null when object is not found
-     * 
+     *
      * @return filled tile with data or null when no cache entry found
      */
@@ -41,7 +41,8 @@
      * Submit job for background fetch, and listener will be
      * fed with value object
-     * 
+     *
      * @param listener
+     * @param force true if the load should skip all the caches (local & remote)
      */
-    public void submit(ICachedLoaderListener listener);
+    public void submit(ICachedLoaderListener listener, boolean force);
 }
Index: trunk/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java	(revision 8423)
+++ trunk/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java	(revision 8424)
@@ -109,4 +109,5 @@
     private ThreadPoolExecutor downloadJobExecutor;
     private Runnable finishTask;
+    private boolean force = false;
 
     /**
@@ -159,5 +160,6 @@
 
     @Override
-    public void submit(ICachedLoaderListener listener) {
+    public void submit(ICachedLoaderListener listener, boolean force) {
+        this.force = force;
         boolean first = false;
         URL url = getUrl();
@@ -181,7 +183,7 @@
         }
 
-        if (first) {
+        if (first || force) {
             ensureCacheElement();
-            if (cacheElement != null && isCacheElementValid() && (isObjectLoadable())) {
+            if (!force && cacheElement != null && isCacheElementValid() && (isObjectLoadable())) {
                 // we got something in cache, and it's valid, so lets return it
                 log.log(Level.FINE, "JCS - Returning object from cache: {0}", getCacheKey());
@@ -234,4 +236,5 @@
     }
 
+    @Override
     public void run() {
         final Thread currentThread = Thread.currentThread();
@@ -429,4 +432,7 @@
             urlConn.setRequestProperty(e.getKey(), e.getValue());
         }
+        if (force) {
+            urlConn.setUseCaches(false);
+        }
         return urlConn;
     }
Index: trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java	(revision 8423)
+++ trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java	(revision 8424)
@@ -154,7 +154,8 @@
     }
 
-    public void submit() {
+    @Override
+    public void submit(boolean force) {
         tile.initLoading();
-        super.submit(this);
+        super.submit(this, force);
     }
 
@@ -282,3 +283,8 @@
         return new BufferedImageCacheEntry(content);
     }
+
+    @Override
+    public void submit() {
+        submit(false);
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java	(revision 8423)
+++ trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java	(revision 8424)
@@ -602,5 +602,5 @@
                 if (clickedTile != null) {
                     clickedTile.setLoaded(false);
-                    tileLoader.createTileLoaderJob(clickedTile).submit();
+                    tileLoader.createTileLoaderJob(clickedTile).submit(true);
                 }
             }
@@ -847,5 +847,5 @@
         if (tile.isLoading())
             return false;
-        tileLoader.createTileLoaderJob(tile).submit();
+        tileLoader.createTileLoaderJob(tile).submit(force);
         return true;
     }
@@ -1259,6 +1259,6 @@
             List<Tile> allTiles = allTilesCreate();
             Collections.sort(allTiles, getTileDistanceComparator());
-            for (Tile t : allTiles) { //, getTileDistanceComparator())) {
-                loadTile(t, false);
+            for (Tile t : allTiles) {
+                loadTile(t, force);
             }
         }
