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 24681)
+++ /applications/editors/josm/plugins/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSLayer.java	(revision 24682)
@@ -81,5 +81,4 @@
     {
         tile.setLoaded(true);
-        needRedraw = true;
         Main.map.repaint(100);
         tileRequestsOutstanding.remove(tile);
@@ -106,9 +105,5 @@
     public int currentZoomLevel;
 
-    EastNorth lastTopLeft;
-    EastNorth lastBotRight;
-    private Image bufferImage;
     private Tile clickedTile;
-    private boolean needRedraw;
     private JPopupMenu tileOptionMenu;
     JCheckBoxMenuItem autoZoomPopup;
@@ -131,5 +126,4 @@
     void redraw()
     {
-        needRedraw = true;
         Main.map.repaint();
     }
@@ -158,10 +152,4 @@
         //tileloader = new OsmTileLoader(this);
         tileLoader = new OsmFileCacheTileLoader(this);
-    }
-
-    @Override
-    public void setOffset(double dx, double dy) {
-        super.setOffset(dx, dy);
-        needRedraw = true;
     }
 
@@ -364,5 +352,4 @@
         if (debug)
             out("zoomChanged(): " + currentZoomLevel);
-        needRedraw = true;
         jobDispatcher.cancelOutstandingJobs();
         tileRequestsOutstanding.clear();
@@ -513,5 +500,4 @@
     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");
@@ -754,5 +740,5 @@
 
         String tileStatus = tile.getStatus();
-        if (!tile.isLoaded()) {
+        if (!tile.isLoaded() && TMSPreferences.PROP_DRAW_DEBUG.get()) {
             g.drawString(tr("image " + tileStatus), p.x + 2, texty);
             texty += 1 + fontHeight;
@@ -911,5 +897,4 @@
         EastNorth topLeft = mv.getEastNorth(0, 0);
         EastNorth botRight = mv.getEastNorth(mv.getWidth(), mv.getHeight());
-        Graphics2D oldg = g;
 
         if (botRight.east() == 0.0 || botRight.north() == 0) {
@@ -918,21 +903,4 @@
             return;
         }
-
-        if (lastTopLeft != null && lastBotRight != null && topLeft.equals(lastTopLeft)
-                && botRight.equals(lastBotRight) && bufferImage != null
-                && mv.getWidth() == bufferImage.getWidth(null) && mv.getHeight() == bufferImage.getHeight(null)
-                && !needRedraw) {
-
-            if (debug)
-                out("drawing buffered image");
-            g.drawImage(bufferImage, 0, 0, null);
-            return;
-        }
-
-        needRedraw = false;
-        lastTopLeft = topLeft;
-        lastBotRight = botRight;
-        bufferImage = mv.createImage(mv.getWidth(), mv.getHeight());
-        g = (Graphics2D) bufferImage.getGraphics();
 
         int zoom = currentZoomLevel;
@@ -944,5 +912,5 @@
                     out("too many tiles, decreasing zoom from " + currentZoomLevel);
                 if (decreaseZoomLevel())
-                    this.paint(oldg, mv, bounds);
+                    this.paint(g, mv, bounds);
                 return;
             }
@@ -964,5 +932,5 @@
                 az_disable = true;
                 if (increaseZoomLevel())
-                     this.paint(oldg, mv, bounds);
+                     this.paint(g, mv, bounds);
                 az_disable = tmp;
                 return;
@@ -1057,6 +1025,4 @@
         }
 
-        oldg.drawImage(bufferImage, 0, 0, null);
-
         if (autoZoomEnabled() && lastImageScale != null) {
             // If each source image pixel is being stretched into > 3
@@ -1066,5 +1032,5 @@
                     out("autozoom increase: scale: " + lastImageScale);
                 increaseZoomLevel();
-                this.paint(oldg, mv, bounds);
+                this.paint(g, mv, bounds);
             // If each source image pixel is being squished into > 0.32
             // of a drawn pixels, zoom out.
@@ -1073,15 +1039,15 @@
                     out("autozoom decrease: scale: " + lastImageScale);
                 decreaseZoomLevel();
-                this.paint(oldg, mv, bounds);
+                this.paint(g, mv, bounds);
             }
         }
         //g.drawString("currentZoomLevel=" + currentZoomLevel, 120, 120);
-        oldg.setColor(Color.black);
+        g.setColor(Color.black);
         if (ts.insane()) {
-            oldg.drawString("zoom in to load any tiles", 120, 120);
+            g.drawString("zoom in to load any tiles", 120, 120);
         } else if (ts.tooLarge()) {
-            oldg.drawString("zoom in to load more tiles", 120, 120);
+            g.drawString("zoom in to load more tiles", 120, 120);
         } else if (ts.tooSmall()) {
-            oldg.drawString("increase zoom level to see more detail", 120, 120);
+            g.drawString("increase zoom level to see more detail", 120, 120);
         }
     }// end of paint method
