Index: /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/OsmFileCacheTileLoader.java
===================================================================
--- /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/OsmFileCacheTileLoader.java	(revision 26908)
+++ /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/OsmFileCacheTileLoader.java	(revision 26909)
@@ -20,4 +20,6 @@
 import java.net.URLConnection;
 import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Random;
@@ -52,4 +54,6 @@
 
     protected String cacheDirBase;
+    
+    protected final Map<TileSource, File> sourceCacheDirMap;
 
     protected long maxCacheFileAge = FILE_AGE_ONE_WEEK;
@@ -96,4 +100,5 @@
         log.finest("Tile cache directory: " + cacheDir);
         cacheDirBase = cacheDir.getAbsolutePath();
+        sourceCacheDirMap = new HashMap<TileSource, File>();
     }
 
@@ -112,4 +117,15 @@
     }
 
+    protected File getSourceCacheDir(TileSource source) {
+        File dir = sourceCacheDirMap.get(source);
+        if (dir == null) {
+            dir = new File(cacheDirBase, source.getName().replaceAll("[\\\\/:*?\"<>|]", "_"));
+            if (!dir.exists()) {
+                dir.mkdirs();
+            }
+        }
+        return dir;
+    }
+    
     protected class FileLoadJob implements Runnable {
         InputStream input = null;
@@ -140,8 +156,5 @@
                 tile.loading = true;
             }
-            tileCacheDir = new File(cacheDirBase, source.getName().replaceAll("[\\\\/:*?\"<>|]", "_"));
-            if (!tileCacheDir.exists()) {
-                tileCacheDir.mkdirs();
-            }
+            tileCacheDir = getSourceCacheDir(source);
             if (loadTileFromFile())
                 return;
@@ -463,4 +476,13 @@
         this.cacheDirBase = dir.getAbsolutePath();
     }
-
+    
+    public void clearCache(TileSource source) {
+        File dir = getSourceCacheDir(source);
+        if (dir.isDirectory()) {
+            for (File file : dir.listFiles()) {
+                file.delete();
+            }
+        }
+        dir.delete();
+    }
 }
