Index: /trunk/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java	(revision 8642)
+++ /trunk/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java	(revision 8643)
@@ -276,10 +276,12 @@
                 return false;
             }
-        } else {
+        } else if (attributes.getLastModification() > 0 &&
+                now - attributes.getLastModification() > DEFAULT_EXPIRE_TIME) {
             // check by file modification date
-            if (now - attributes.getLastModification() > DEFAULT_EXPIRE_TIME) {
-                log.log(Level.FINE, "JCS - Object has expired, maximum file age reached {0}", getUrl());
-                return false;
-            }
+            log.log(Level.FINE, "JCS - Object has expired, maximum file age reached {0}", getUrl());
+            return false;
+        } else if (now - attributes.getCreateTime() > DEFAULT_EXPIRE_TIME) {
+            log.log(Level.FINE, "JCS - Object has expired, maximum time since object creation reached {0}", getUrl());
+            return false;
         }
         return true;
Index: /trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java	(revision 8642)
+++ /trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java	(revision 8643)
@@ -188,5 +188,5 @@
                     }
                     int httpStatusCode = attributes.getResponseCode();
-                    if (!isNoTileAtZoom() && httpStatusCode >= 400 && httpStatusCode != 499) {
+                    if (!isNoTileAtZoom() && httpStatusCode >= 400) {
                         if (attributes.getErrorMessage() == null) {
                             tile.setError(tr("HTTP error {0} when loading tiles", httpStatusCode));
Index: /trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 8642)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 8643)
@@ -1037,8 +1037,27 @@
     private void myDrawString(Graphics g, String text, int x, int y) {
         Color oldColor = g.getColor();
-        g.setColor(Color.black);
-        g.drawString(text, x+1, y+1);
-        g.setColor(oldColor);
-        g.drawString(text, x, y);
+        String textToDraw = text;
+        if (g.getFontMetrics().stringWidth(text) > tileSource.getTileSize()) {
+            // text longer than tile size, split it
+            StringBuilder line = new StringBuilder();
+            StringBuilder ret = new StringBuilder();
+            for(String s: text.split(" ")) {
+                if (g.getFontMetrics().stringWidth(line.toString() + s) > tileSource.getTileSize()) {
+                    ret.append(line).append("\n");
+                    line.setLength(0);
+                }
+                line.append(s).append(" ");
+            }
+            ret.append(line);
+            textToDraw = ret.toString();
+        }
+        int offset = 0;
+        for (String s: textToDraw.split("\n")) {
+            g.setColor(Color.black);
+            g.drawString(s, x + 1, y + offset + 1);
+            g.setColor(oldColor);
+            g.drawString(s, x, y + offset);
+            offset += g.getFontMetrics().getHeight() + 3;
+        }
     }
 
