Index: /applications/viewer/jmapviewer/pom.xml
===================================================================
--- /applications/viewer/jmapviewer/pom.xml	(revision 36305)
+++ /applications/viewer/jmapviewer/pom.xml	(revision 36306)
@@ -6,5 +6,5 @@
     <groupId>org.openstreetmap.jmapviewer</groupId>
     <artifactId>jmapviewer</artifactId>
-    <version>2.20</version>
+    <version>2.22-SNAPSHOT</version>
 
     <name>JMapViewer</name>
Index: /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/MemoryTileCache.java
===================================================================
--- /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/MemoryTileCache.java	(revision 36305)
+++ /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/MemoryTileCache.java	(revision 36306)
@@ -2,8 +2,10 @@
 package org.openstreetmap.gui.jmapviewer;
 
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.gui.jmapviewer.interfaces.TileCache;
@@ -102,4 +104,11 @@
         hash.clear();
         lruTiles.clear();
+    }
+
+    @Override
+    public synchronized void clearErrorTiles() {
+        Collection<CacheEntry> toRemove = hash.values().stream().filter(cacheEntry -> cacheEntry.tile.hasError()).collect(Collectors.toList());
+        hash.values().removeAll(toRemove);
+        toRemove.forEach(lruTiles::removeEntry);
     }
 
Index: /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/interfaces/TileCache.java
===================================================================
--- /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/interfaces/TileCache.java	(revision 36305)
+++ /applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/interfaces/TileCache.java	(revision 36306)
@@ -50,4 +50,12 @@
 
     /**
+     * Removes error tiles from memory.
+     * This is implementation specific; the default calls {@link #clear()}.
+     */
+    default void clearErrorTiles() {
+        this.clear();
+    }
+
+    /**
      * Size of the cache.
      * @return maximum number of tiles in cache
