Index: applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/interfaces/TileSource.java
===================================================================
--- applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/interfaces/TileSource.java	(revision 33924)
+++ applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/interfaces/TileSource.java	(revision 33971)
@@ -270,3 +270,10 @@
     String getServerCRS();
 
+    /**
+     * Determines if this imagery supports "/dirty" mode (tile re-rendering).
+     * @return <code>true</code> if it supports "/dirty" mode (tile re-rendering)
+     */
+    default boolean isDirtyMode() {
+        return false;
+    }
 }
Index: applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java
===================================================================
--- applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java	(revision 33924)
+++ applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java	(revision 33971)
@@ -31,4 +31,5 @@
     private final Map<String, Set<String>> noTileChecksums;
     private final Map<String, String> metadataHeaders;
+    protected boolean dirtyMode;
     protected int tileSize;
 
@@ -48,4 +49,5 @@
         this.noTileChecksums = info.getNoTileChecksums();
         this.metadataHeaders = info.getMetadataHeaders();
+        this.dirtyMode = info.isDirtyMode();
         this.tileSize = info.getTileSize();
     }
@@ -236,4 +238,9 @@
     }
 
+    @Override
+    public boolean isDirtyMode() {
+        return dirtyMode;
+    }
+
     private static int getTileMax(int zoom) {
         return (int) Math.pow(2.0, zoom) - 1;
Index: applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/OsmTileSource.java
===================================================================
--- applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/OsmTileSource.java	(revision 33924)
+++ applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/OsmTileSource.java	(revision 33971)
@@ -27,4 +27,5 @@
         public Mapnik() {
             super("Mapnik", PATTERN, "MAPNIK");
+            dirtyMode = true;
         }
 
Index: applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/TileSourceInfo.java
===================================================================
--- applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/TileSourceInfo.java	(revision 33924)
+++ applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/tilesources/TileSourceInfo.java	(revision 33971)
@@ -41,4 +41,7 @@
     protected Map<String, String> metadataHeaders;
 
+    /** supports "/dirty" mode (tile re-rendering) */
+    protected boolean dirtyMode;
+
     /**
      * Create a TileSourceInfo class
@@ -188,3 +191,19 @@
         this.id = id;
     }
+
+    /**
+     * Determines if this imagery supports "/dirty" mode (tile re-rendering).
+     * @return <code>true</code> if it supports "/dirty" mode (tile re-rendering)
+     */
+    public final boolean isDirtyMode() {
+        return dirtyMode;
+    }
+
+    /**
+     * Sets whether this imagery supports "/dirty" mode (tile re-rendering).
+     * @param dirtyMode <code>true</code> if it supports "/dirty" mode (tile re-rendering)
+     */
+    public final void setDirtyMode(boolean dirtyMode) {
+        this.dirtyMode = dirtyMode;
+    }
 }
