Index: trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java	(revision 14564)
+++ trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java	(revision 14565)
@@ -51,4 +51,5 @@
     static final Pattern SERVICE_EXCEPTION_PATTERN = Pattern.compile("(?s).+<ServiceException[^>]*>(.+)</ServiceException>.+");
     static final Pattern CDATA_PATTERN = Pattern.compile("(?s)\\s*<!\\[CDATA\\[(.+)\\]\\]>\\s*");
+    static final Pattern JSON_PATTERN = Pattern.compile("\\{\"message\":\"(.+)\"\\}");
     protected final Tile tile;
     private volatile URL url;
@@ -321,6 +322,9 @@
     @Override
     public String detectErrorMessage(String data) {
-        Matcher m = SERVICE_EXCEPTION_PATTERN.matcher(data);
-        return m.matches() ? removeCdata(Utils.strip(m.group(1))) : super.detectErrorMessage(data);
+        Matcher xml = SERVICE_EXCEPTION_PATTERN.matcher(data);
+        Matcher json = JSON_PATTERN.matcher(data);
+        return xml.matches() ? removeCdata(Utils.strip(xml.group(1)))
+            : json.matches() ? Utils.strip(json.group(1))
+            : super.detectErrorMessage(data);
     }
 
Index: trunk/test/unit/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJobTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJobTest.java	(revision 14564)
+++ trunk/test/unit/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJobTest.java	(revision 14565)
@@ -174,4 +174,13 @@
     }
 
+    /**
+     * Tests that {@code TMSCachedTileLoaderJob#JSON_PATTERN} is correct.
+     */
+    @Test
+    public void testJsonPattern() {
+        testJson("Tile does not exist",
+                "{\"message\":\"Tile does not exist\"}");
+    }
+
     private static void testServiceException(String expected, String xml) {
         test(TMSCachedTileLoaderJob.SERVICE_EXCEPTION_PATTERN, expected, xml);
@@ -182,7 +191,11 @@
     }
 
-    private static void test(Pattern pattern, String expected, String xml) {
-        Matcher m = pattern.matcher(xml);
-        assertTrue(xml, m.matches());
+    private static void testJson(String expected, String json) {
+        test(TMSCachedTileLoaderJob.JSON_PATTERN, expected, json);
+    }
+
+    private static void test(Pattern pattern, String expected, String text) {
+        Matcher m = pattern.matcher(text);
+        assertTrue(text, m.matches());
         assertEquals(expected, Utils.strip(m.group(1)));
     }
