Index: trunk/src/org/openstreetmap/josm/actions/AboutAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AboutAction.java	(revision 17662)
+++ trunk/src/org/openstreetmap/josm/actions/AboutAction.java	(revision 17663)
@@ -2,4 +2,6 @@
 package org.openstreetmap.josm.actions;
 
+import static java.awt.GridBagConstraints.HORIZONTAL;
+import static javax.swing.SwingConstants.CENTER;
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.tr;
@@ -105,5 +107,5 @@
                 "<p style='font-size:50%'></p>" +
                 "</html>");
-        info.add(label, GBC.eol().fill(GBC.HORIZONTAL).insets(10, 0, 0, 10));
+        info.add(label, GBC.eol().fill(HORIZONTAL).insets(10, 0, 0, 10));
         info.add(new JLabel(tr("Homepage")), GBC.std().insets(10, 0, 10, 0));
         info.add(new UrlLabel(Config.getUrls().getJOSMWebsite(), 2), GBC.eol());
@@ -121,7 +123,5 @@
 
         JPanel inst = new JPanel(new GridBagLayout());
-        final String pathToPreferences = ShowStatusReportAction
-                .paramCleanup(Preferences.main().getPreferenceFile().getAbsolutePath());
-        inst.add(new JLabel(tr("Preferences are stored in {0}", pathToPreferences)), GBC.eol().insets(0, 0, 0, 10));
+        inst.add(new JLabel(tr("Preferences are stored in {0}", getPathToPreferences())), GBC.eol().insets(0, 0, 0, 10));
         inst.add(new JLabel(tr("Symbolic names for directories and the actual paths:")),
                 GBC.eol().insets(0, 0, 0, 10));
@@ -147,8 +147,17 @@
         JPanel panel = new JPanel(new GridBagLayout());
         panel.setPreferredSize(new Dimension(890, 300));
-        panel.add(new JLabel("", ImageProvider.get("logo.svg", ImageProvider.ImageSizes.ABOUT_LOGO),
-                JLabel.CENTER), GBC.std().insets(0, 5, 0, 0));
+        panel.add(new JLabel("", ImageProvider.get("logo.svg", ImageSizes.ABOUT_LOGO), CENTER), GBC.std().insets(0, 5, 0, 0));
         panel.add(about, GBC.std().fill());
         return panel;
+    }
+
+    private static String getPathToPreferences() {
+        File preferenceFile = Preferences.main().getPreferenceFile();
+        try {
+            return ShowStatusReportAction.paramCleanup(preferenceFile.getAbsolutePath());
+        } catch (SecurityException e) {
+            Logging.warn(e);
+            return ShowStatusReportAction.paramCleanup(preferenceFile.getPath());
+        }
     }
 
@@ -176,5 +185,10 @@
             putValue(Action.NAME, "...");
             this.dir = dir;
-            setEnabled(dir != null && new File(dir).isDirectory());
+            try {
+                setEnabled(dir != null && new File(dir).isDirectory());
+            } catch (SecurityException e) {
+                setEnabled(false);
+                Logging.warn(e);
+            }
         }
 
@@ -209,5 +223,5 @@
         dirLabel.setFont(GuiHelper.getMonospacedFont(dirLabel));
         dirLabel.setOpaque(false);
-        inst.add(dirLabel, GBC.std().fill(GBC.HORIZONTAL));
+        inst.add(dirLabel, GBC.std().fill(HORIZONTAL));
         JButton btn = new JButton(new OpenDirAction(dir));
         btn.setToolTipText(tr("Open directory"));
Index: trunk/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java	(revision 17662)
+++ trunk/src/org/openstreetmap/josm/data/cache/JCSCacheManager.java	(revision 17663)
@@ -42,10 +42,13 @@
  */
 public final class JCSCacheManager {
-    private static final long maxObjectTTL = -1;
+    private static final long MAX_OBJECT_TTL = -1;
     private static final String PREFERENCE_PREFIX = "jcs.cache";
+
+    /**
+     * Property that determines the disk cache implementation
+     */
     public static final BooleanProperty USE_BLOCK_CACHE = new BooleanProperty(PREFERENCE_PREFIX + ".use_block_cache", true);
 
-    private static final AuxiliaryCacheFactory DISK_CACHE_FACTORY =
-            USE_BLOCK_CACHE.get() ? new BlockDiskCacheFactory() : new IndexedDiskCacheFactory();
+    private static final AuxiliaryCacheFactory DISK_CACHE_FACTORY = getDiskCacheFactory();
     private static FileLock cacheDirLock;
 
@@ -139,6 +142,6 @@
         props.setProperty("jcs.default.elementattributes",                    CacheEntryAttributes.class.getCanonicalName());
         props.setProperty("jcs.default.elementattributes.IsEternal",          "false");
-        props.setProperty("jcs.default.elementattributes.MaxLife",            Long.toString(maxObjectTTL));
-        props.setProperty("jcs.default.elementattributes.IdleTime",           Long.toString(maxObjectTTL));
+        props.setProperty("jcs.default.elementattributes.MaxLife",            Long.toString(MAX_OBJECT_TTL));
+        props.setProperty("jcs.default.elementattributes.IdleTime",           Long.toString(MAX_OBJECT_TTL));
         props.setProperty("jcs.default.elementattributes.IsSpool",            "true");
         // CHECKSTYLE.ON: SingleSpaceSeparator
@@ -148,4 +151,17 @@
             Logging.log(Logging.LEVEL_WARN, "Unable to initialize JCS", e);
         }
+    }
+
+    private static AuxiliaryCacheFactory getDiskCacheFactory() {
+        try {
+            return useBlockCache() ? new BlockDiskCacheFactory() : new IndexedDiskCacheFactory();
+        } catch (SecurityException | LinkageError e) {
+            Logging.error(e);
+            return null;
+        }
+    }
+
+    private static boolean useBlockCache() {
+        return USE_BLOCK_CACHE.get() == Boolean.TRUE;
     }
 
@@ -173,10 +189,10 @@
     @SuppressWarnings("unchecked")
     public static <K, V> CacheAccess<K, V> getCache(String cacheName, int maxMemoryObjects, int maxDiskObjects, String cachePath) {
-        CacheAccess<K, V> cacheAccess = JCS.getInstance(cacheName, getCacheAttributes(maxMemoryObjects));
-        CompositeCache<K, V> cc = cacheAccess.getCacheControl();
-
-        if (cachePath != null && cacheDirLock != null) {
-            IDiskCacheAttributes diskAttributes = getDiskCacheAttributes(maxDiskObjects, cachePath, cacheName);
+        CacheAccess<K, V> cacheAccess = getCacheAccess(cacheName, getCacheAttributes(maxMemoryObjects));
+
+        if (cachePath != null && cacheDirLock != null && cacheAccess != null && DISK_CACHE_FACTORY != null) {
+            CompositeCache<K, V> cc = cacheAccess.getCacheControl();
             try {
+                IDiskCacheAttributes diskAttributes = getDiskCacheAttributes(maxDiskObjects, cachePath, cacheName);
                 if (cc.getAuxCaches().length == 0) {
                     cc.setAuxCaches(new AuxiliaryCache[]{DISK_CACHE_FACTORY.createCache(
@@ -192,4 +208,13 @@
     }
 
+    private static <K, V> CacheAccess<K, V> getCacheAccess(String cacheName, CompositeCacheAttributes cacheAttributes) {
+        try {
+            return JCS.getInstance(cacheName, cacheAttributes);
+        } catch (SecurityException | LinkageError e) {
+            Logging.error(e);
+            return null;
+        }
+    }
+
     /**
      * Close all files to ensure, that all indexes and data are properly written
@@ -201,8 +226,8 @@
     private static IDiskCacheAttributes getDiskCacheAttributes(int maxDiskObjects, String cachePath, String cacheName) {
         IDiskCacheAttributes ret;
-        removeStaleFiles(cachePath + File.separator + cacheName, USE_BLOCK_CACHE.get() ? "_INDEX_v2" : "_BLOCK_v2");
-        String newCacheName = cacheName + (USE_BLOCK_CACHE.get() ? "_BLOCK_v2" : "_INDEX_v2");
-
-        if (USE_BLOCK_CACHE.get()) {
+        removeStaleFiles(cachePath + File.separator + cacheName, useBlockCache() ? "_INDEX_v2" : "_BLOCK_v2");
+        String newCacheName = cacheName + (useBlockCache() ? "_BLOCK_v2" : "_INDEX_v2");
+
+        if (useBlockCache()) {
             BlockDiskCacheAttributes blockAttr = new BlockDiskCacheAttributes();
             /*
Index: trunk/src/org/openstreetmap/josm/spi/lifecycle/Lifecycle.java
===================================================================
--- trunk/src/org/openstreetmap/josm/spi/lifecycle/Lifecycle.java	(revision 17662)
+++ trunk/src/org/openstreetmap/josm/spi/lifecycle/Lifecycle.java	(revision 17663)
@@ -79,6 +79,10 @@
             }
             // asynchronous initializations to be completed eventually
-            initSequence.asynchronousRunnableTasks().forEach(service::submit);
-            initSequence.asynchronousCallableTasks().forEach(service::submit);
+            initSequence.asynchronousRunnableTasks().forEach(x -> {
+                if (x != null) service.submit(x);
+            });
+            initSequence.asynchronousCallableTasks().forEach(x -> {
+                if (x != null) service.submit(x);
+            });
             try {
                 service.shutdown();
