Index: trunk/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java	(revision 13640)
+++ trunk/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java	(revision 13643)
@@ -101,19 +101,24 @@
 
     @SuppressWarnings("resource")
-    private static void initialize() throws IOException {
+    private static void initialize()  {
         File cacheDir = new File(Config.getDirs().getCacheDirectory(true), "jcs");
 
-        if (!cacheDir.exists() && !cacheDir.mkdirs())
-            throw new IOException("Cannot access cache directory");
-
-        File cacheDirLockPath = new File(cacheDir, ".lock");
-        if (!cacheDirLockPath.exists() && !cacheDirLockPath.createNewFile()) {
-            Logging.warn("Cannot create cache dir lock file");
-        }
-        cacheDirLock = FileChannel.open(cacheDirLockPath.toPath(), StandardOpenOption.WRITE).tryLock();
-
-        if (cacheDirLock == null)
-            Logging.warn("Cannot lock cache directory. Will not use disk cache");
-
+        if (!cacheDir.exists() && !cacheDir.mkdirs()) {
+            Logging.warn("Cache directory " + cacheDir.toString() + " does not exists and could not create it");
+        } else {
+            File cacheDirLockPath = new File(cacheDir, ".lock");
+            try {
+                if (!cacheDirLockPath.exists() && !cacheDirLockPath.createNewFile()) {
+                    Logging.warn("Cannot create cache dir lock file");
+                }
+                cacheDirLock = FileChannel.open(cacheDirLockPath.toPath(), StandardOpenOption.WRITE).tryLock();
+
+                if (cacheDirLock == null)
+                    Logging.warn("Cannot lock cache directory. Will not use disk cache");
+            } catch (IOException e) {
+                Logging.warn("Cannot create cache dir \"" + cacheDirLockPath.toString() + "\" lock file: " + e.toString());
+                Logging.warn("Will not use disk cache");
+            }
+        }
         // this could be moved to external file
         Properties props = new Properties();
@@ -142,7 +147,6 @@
      * @param cacheName region name
      * @return cache access object
-     * @throws IOException if directory is not found
-     */
-    public static <K, V> CacheAccess<K, V> getCache(String cacheName) throws IOException {
+     */
+    public static <K, V> CacheAccess<K, V> getCache(String cacheName) {
         return getCache(cacheName, DEFAULT_MAX_OBJECTS_IN_MEMORY.get().intValue(), 0, null);
     }
@@ -157,8 +161,6 @@
      * @param cachePath         path to disk cache. if null, no disk cache will be created
      * @return cache access object
-     * @throws IOException if directory is not found
-     */
-    public static <K, V> CacheAccess<K, V> getCache(String cacheName, int maxMemoryObjects, int maxDiskObjects, String cachePath)
-            throws IOException {
+     */
+    public static <K, V> CacheAccess<K, V> getCache(String cacheName, int maxMemoryObjects, int maxDiskObjects, String cachePath) {
         if (cacheManager != null)
             return getCacheInner(cacheName, maxMemoryObjects, maxDiskObjects, cachePath);
@@ -172,6 +174,5 @@
 
     @SuppressWarnings("unchecked")
-    private static <K, V> CacheAccess<K, V> getCacheInner(String cacheName, int maxMemoryObjects, int maxDiskObjects, String cachePath)
-            throws IOException {
+    private static <K, V> CacheAccess<K, V> getCacheInner(String cacheName, int maxMemoryObjects, int maxDiskObjects, String cachePath) {
         CompositeCache<K, V> cc = cacheManager.getCache(cacheName, getCacheAttributes(maxMemoryObjects));
 
@@ -183,8 +184,7 @@
                             diskAttributes, cacheManager, null, new StandardSerializer())});
                 }
-            } catch (IOException e) {
-                throw e;
-            } catch (Exception e) { // NOPMD
-                throw new IOException(e);
+            } catch (Exception e) {
+                // in case any error in setting auxiliary cache, do not use disk cache at all - only memory
+                cc.setAuxCaches(new AuxiliaryCache[0]);
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/layer/AbstractCachedTileSourceLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/AbstractCachedTileSourceLayer.java	(revision 13640)
+++ trunk/src/org/openstreetmap/josm/gui/layer/AbstractCachedTileSourceLayer.java	(revision 13643)
@@ -2,5 +2,4 @@
 package org.openstreetmap.josm.gui.layer;
 
-import java.io.IOException;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -16,5 +15,4 @@
 import org.openstreetmap.josm.data.imagery.TileLoaderFactory;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
-import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -84,14 +82,9 @@
             return cache;
         }
-        try {
-            cache = JCSCacheManager.getCache(getCacheName(),
-                    0,
-                    getDiskCacheSize(),
-                    CachedTileLoaderFactory.PROP_TILECACHE_DIR.get());
-            return cache;
-        } catch (IOException e) {
-            Logging.warn(e);
-            return null;
-        }
+        cache = JCSCacheManager.getCache(getCacheName(),
+                0,
+                getDiskCacheSize(),
+                CachedTileLoaderFactory.PROP_TILECACHE_DIR.get());
+        return cache;
     }
 
@@ -125,13 +118,8 @@
      */
     public static CacheAccess<String, BufferedImageCacheEntry> getCache(String name) {
-            try {
-                return JCSCacheManager.getCache(name,
-                        0,
-                        MAX_DISK_CACHE_SIZE.get() * 1024, // MAX_DISK_CACHE_SIZE is in MB, needs to by in sync with getDiskCacheSize
-                        CachedTileLoaderFactory.PROP_TILECACHE_DIR.get());
-            } catch (IOException e) {
-                Logging.warn(e);
-                return null;
-            }
+            return JCSCacheManager.getCache(name,
+                    0,
+                    MAX_DISK_CACHE_SIZE.get() * 1024, // MAX_DISK_CACHE_SIZE is in MB, needs to by in sync with getDiskCacheSize
+                    CachedTileLoaderFactory.PROP_TILECACHE_DIR.get());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java	(revision 13640)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ThumbsLoader.java	(revision 13643)
@@ -68,11 +68,6 @@
     private void initCache() {
         if (!cacheOff) {
-            try {
-                cache = JCSCacheManager.getCache("geoimage-thumbnails", 0, 120,
-                        Config.getDirs().getCacheDirectory(true).getPath() + File.separator + "geoimage-thumbnails");
-            } catch (IOException e) {
-                Logging.warn("Failed to initialize cache for geoimage-thumbnails");
-                Logging.warn(e);
-            }
+            cache = JCSCacheManager.getCache("geoimage-thumbnails", 0, 120,
+                    Config.getDirs().getCacheDirectory(true).getPath() + File.separator + "geoimage-thumbnails");
         }
     }
