Index: /trunk/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java	(revision 6106)
+++ /trunk/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java	(revision 6107)
@@ -32,5 +32,4 @@
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 
-
 public class ImageryAdjustAction extends MapMode implements MouseListener, MouseMotionListener, AWTEventListener{
     static ImageryOffsetDialog offsetDialog;
@@ -58,14 +57,18 @@
             layer.setVisible(true);
         }
+        oldDx = layer.getDx();
+        oldDy = layer.getDy();
+        addListeners();
+        offsetDialog = new ImageryOffsetDialog();
+        offsetDialog.setVisible(true);
+    }
+    
+    protected void addListeners() {
         Main.map.mapView.addMouseListener(this);
         Main.map.mapView.addMouseMotionListener(this);
-        oldDx = layer.getDx();
-        oldDy = layer.getDy();
         try {
             Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.KEY_EVENT_MASK);
         } catch (SecurityException ex) {
         }
-        offsetDialog = new ImageryOffsetDialog();
-        offsetDialog.setVisible(true);
     }
 
@@ -77,10 +80,16 @@
             offsetDialog = null;
         }
+        removeListeners();
+    }
+    
+    protected void removeListeners() {
         try {
             Toolkit.getDefaultToolkit().removeAWTEventListener(this);
         } catch (SecurityException ex) {
         }
-        Main.map.mapView.removeMouseListener(this);
-        Main.map.mapView.removeMouseMotionListener(this);
+        if (Main.isDisplayingMapView()) {
+            Main.map.mapView.removeMouseMotionListener(this);
+            Main.map.mapView.removeMouseListener(this);
+        }
     }
 
@@ -265,3 +274,11 @@
         }
     }
+
+    @Override
+    public void destroy() {
+        super.destroy();
+        removeListeners();
+        this.layer = null;
+        this.oldMapMode = null;
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java	(revision 6106)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java	(revision 6107)
@@ -596,3 +596,9 @@
         }
     }
+
+    @Override
+    public void destroy() {
+        super.destroy();
+        Main.pref.removePreferenceChangeListener(this);
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 6106)
+++ /trunk/src/org/openstreetmap/josm/gui/MapView.java	(revision 6107)
@@ -210,5 +210,5 @@
     public MouseEvent lastMEvent = new MouseEvent(this, 0, 0, 0, 0, 0, 0, false); // In case somebody reads it before first mouse move
 
-    private LinkedList<MapViewPaintable> temporaryLayers = new LinkedList<MapViewPaintable>();
+    private final LinkedList<MapViewPaintable> temporaryLayers = new LinkedList<MapViewPaintable>();
 
     private BufferedImage nonChangedLayersBuffer;
@@ -954,4 +954,10 @@
             mapMover.destroy();
         }
+        activeLayer = null;
+        changedLayer = null;
+        editLayer = null;
+        layers.clear();
+        nonChangedLayers.clear();
+        temporaryLayers.clear();
     }
 
