Index: trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java	(revision 7822)
+++ trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java	(revision 7823)
@@ -46,4 +46,5 @@
 import org.openstreetmap.gui.jmapviewer.OsmFileCacheTileLoader;
 import org.openstreetmap.gui.jmapviewer.OsmTileLoader;
+import org.openstreetmap.gui.jmapviewer.TMSFileCacheTileLoader;
 import org.openstreetmap.gui.jmapviewer.Tile;
 import org.openstreetmap.gui.jmapviewer.interfaces.CachedTileLoader;
@@ -110,13 +111,19 @@
     public static final IntegerProperty PROP_TMS_JOBS = new IntegerProperty("tmsloader.maxjobs", 25);
     public static final StringProperty PROP_TILECACHE_DIR;
+    
+    private static final boolean newcache = Main.pref.getBoolean("tms.newcache");
 
     static {
         String defPath = null;
         try {
-            defPath = OsmFileCacheTileLoader.getDefaultCacheDir().getAbsolutePath();
+            if (newcache) {
+                defPath = new File(Main.pref.getCacheDirectory(), "tms").getAbsolutePath();
+            } else {
+                defPath = OsmFileCacheTileLoader.getDefaultCacheDir().getAbsolutePath();
+            }
         } catch (SecurityException e) {
             Main.warn(e);
         }
-        PROP_TILECACHE_DIR = new StringProperty(PREFERENCE_PREFIX + ".tilecache_path", defPath);
+        PROP_TILECACHE_DIR = new StringProperty(PREFERENCE_PREFIX + (newcache ? ".tilecache" : ".tilecache_path"), defPath);
     }
 
@@ -135,5 +142,10 @@
             if (cachePath != null && !cachePath.isEmpty()) {
                 try {
-                    OsmFileCacheTileLoader loader = new OsmFileCacheTileLoader(listener, new File(cachePath));
+                    OsmFileCacheTileLoader loader;
+                    if (newcache) {
+                        loader = new TMSFileCacheTileLoader(listener, new File(cachePath));
+                    } else {
+                        loader = new OsmFileCacheTileLoader(listener, new File(cachePath));
+                    }
                     loader.headers.put("User-Agent", Version.getInstance().getFullAgentString());
                     return loader;
@@ -319,4 +331,8 @@
     private static class CachedAttributionBingAerialTileSource extends BingAerialTileSource {
 
+        public CachedAttributionBingAerialTileSource(String id) {
+            super(id);
+        }
+
         class BingAttributionData extends CacheCustomContent<IOException> {
 
@@ -374,11 +390,11 @@
         if (info.getImageryType() == ImageryType.TMS) {
             checkUrl(info.getUrl());
-            TMSTileSource t = new TemplatedTMSTileSource(info.getName(), info.getUrl(), info.getMinZoom(), info.getMaxZoom());
+            TMSTileSource t = new TemplatedTMSTileSource(info.getName(), info.getUrl(), info.getId(), info.getMinZoom(), info.getMaxZoom());
             info.setAttribution(t);
             return t;
         } else if (info.getImageryType() == ImageryType.BING)
-            return new CachedAttributionBingAerialTileSource();
+            return new CachedAttributionBingAerialTileSource(info.getId());
         else if (info.getImageryType() == ImageryType.SCANEX) {
-            return new ScanexTileSource(info.getName(), info.getUrl(), info.getMaxZoom());
+            return new ScanexTileSource(info.getName(), info.getUrl(), info.getId(), info.getMaxZoom());
         }
         return null;
