Index: /trunk/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java	(revision 8634)
+++ /trunk/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java	(revision 8635)
@@ -53,5 +53,5 @@
     // Absolute expire time limit. Cached tiles that are older will not be used,
     // even if the refresh from the server fails.
-    protected static final long ABSOLUTE_EXPIRE_TIME_LIMIT = Long.MAX_VALUE; // unlimited
+    protected static final long ABSOLUTE_EXPIRE_TIME_LIMIT = 1000L * 60 * 60 * 24 * 365; // 1 year
 
     /**
@@ -455,4 +455,5 @@
             }
         }
+
         if (force) {
             urlConn.setUseCaches(false);
Index: /trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java	(revision 8634)
+++ /trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java	(revision 8635)
@@ -289,5 +289,5 @@
                     tile.finishLoading();
                 }
-                if (attributes.getResponseCode() >= 400) {
+                if (attributes != null && attributes.getResponseCode() >= 400) {
                     if (attributes.getErrorMessage() == null) {
                         tile.setError(tr("HTTP error {0} when loading tiles", attributes.getResponseCode()));
Index: /trunk/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java	(revision 8634)
+++ /trunk/src/org/openstreetmap/josm/data/imagery/WMTSTileSource.java	(revision 8635)
@@ -180,7 +180,11 @@
                 this.currentLayer = layerSelection.getSelectedLayer();
                 // TODO: save layer information into ImageryInfo / ImageryPreferences?
-            } else {
-                throw new IllegalArgumentException(tr("No layer selected")); //user canceled operation
-            }
+            }
+
+            if (this.currentLayer == null) {
+                // user canceled operation or did not choose any layer
+                throw new IllegalArgumentException(tr("No layer selected"));
+            }
+
         } else if (layers.size() == 1) {
             this.currentLayer = this.layers.iterator().next();
