Index: /trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 3135)
+++ /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 3136)
@@ -181,4 +181,5 @@
     private LinkedList<MapViewPaintable> temporaryLayers = new LinkedList<MapViewPaintable>();
 
+    private BufferedImage nonChangedLayersBuffer;
     private BufferedImage offscreenBuffer;
     // Layers that wasn't changed since last paint
@@ -486,12 +487,17 @@
         }
 
-        Graphics2D tempG = (Graphics2D) g;
+        if (null == offscreenBuffer || offscreenBuffer.getWidth() != getWidth() || offscreenBuffer.getHeight() != getHeight()) {
+            offscreenBuffer = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_3BYTE_BGR);
+        }
+
+        Graphics2D tempG = offscreenBuffer.createGraphics();
+        tempG.setClip(g.getClip());
         Bounds box = getLatLonBounds(g.getClipBounds());
 
-        if (!canUseBuffer || offscreenBuffer == null) {
-            if (null == offscreenBuffer || offscreenBuffer.getWidth() != getWidth() || offscreenBuffer.getHeight() != getHeight()) {
-                offscreenBuffer = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_3BYTE_BGR);
-            }
-            Graphics2D g2 = offscreenBuffer.createGraphics();
+        if (!canUseBuffer || nonChangedLayersBuffer == null) {
+            if (null == nonChangedLayersBuffer || nonChangedLayersBuffer.getWidth() != getWidth() || nonChangedLayersBuffer.getHeight() != getHeight()) {
+                nonChangedLayersBuffer = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_3BYTE_BGR);
+            }
+            Graphics2D g2 = nonChangedLayersBuffer.createGraphics();
             g2.setClip(g.getClip());
             g2.setColor(PaintColors.BACKGROUND.get());
@@ -504,5 +510,5 @@
             // Maybe there were more unchanged layers then last time - draw them to buffer
             if (nonChangedLayers.size() != nonChangedLayersCount) {
-                Graphics2D g2 = offscreenBuffer.createGraphics();
+                Graphics2D g2 = nonChangedLayersBuffer.createGraphics();
                 g2.setClip(g.getClip());
                 for (int i=nonChangedLayers.size(); i<nonChangedLayersCount; i++) {
@@ -519,5 +525,5 @@
         paintPreferencesChanged = false;
 
-        tempG.drawImage(offscreenBuffer, 0, 0, null);
+        tempG.drawImage(nonChangedLayersBuffer, 0, 0, null);
 
         for (int i=nonChangedLayersCount; i<visibleLayers.size(); i++) {
@@ -580,4 +586,5 @@
         }
 
+        g.drawImage(offscreenBuffer, 0, 0, null);
         super.paint(g);
     }
