Index: applications/editors/josm/plugins/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSLayer.java
===================================================================
--- applications/editors/josm/plugins/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSLayer.java	(revision 24683)
+++ applications/editors/josm/plugins/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSLayer.java	(revision 24684)
@@ -81,4 +81,5 @@
     {
         tile.setLoaded(true);
+        needRedraw = true;
         Main.map.repaint(100);
         tileRequestsOutstanding.remove(tile);
@@ -106,4 +107,5 @@
 
     private Tile clickedTile;
+    private boolean needRedraw;
     private JPopupMenu tileOptionMenu;
     JCheckBoxMenuItem autoZoomPopup;
@@ -126,4 +128,5 @@
     void redraw()
     {
+        needRedraw = true;
         Main.map.repaint();
     }
@@ -152,4 +155,10 @@
         //tileloader = new OsmTileLoader(this);
         tileLoader = new OsmFileCacheTileLoader(this);
+    }
+
+    @Override
+    public void setOffset(double dx, double dy) {
+        super.setOffset(dx, dy);
+        needRedraw = true;
     }
 
@@ -352,4 +361,5 @@
         if (debug)
             out("zoomChanged(): " + currentZoomLevel);
+        needRedraw = true;
         jobDispatcher.cancelOutstandingJobs();
         tileRequestsOutstanding.clear();
@@ -500,4 +510,5 @@
     public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
         boolean done = ((infoflags & (ERROR | FRAMEBITS | ALLBITS)) != 0);
+        needRedraw = true;
         if (debug)
             out("imageUpdate() done: " + done + " calling repaint");
@@ -904,4 +915,6 @@
         }
 
+        needRedraw = false;
+
         int zoom = currentZoomLevel;
         TileSet ts = new TileSet(topLeft, botRight, zoom);
@@ -1110,4 +1123,9 @@
     }
 
+    @Override
+    public boolean isChanged() {
+        return needRedraw;
+    }
+
     private int latToTileY(double lat, int zoom) {
         double l = lat / 180 * Math.PI;
