Index: applications/editors/josm/plugins/imageryadjust/build.xml
===================================================================
--- applications/editors/josm/plugins/imageryadjust/build.xml	(revision 27742)
+++ applications/editors/josm/plugins/imageryadjust/build.xml	(revision 27744)
@@ -30,5 +30,5 @@
 <project name="imageryadjust" default="dist" basedir=".">
     <!-- enter the SVN commit message -->
-    <property name="commit.message" value="ImageryAdjust: adjust single visible layer"/>
+    <property name="commit.message" value="ImageryAdjust: Adjust while holding Y"/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
     <property name="plugin.main.version" value="4667"/>
Index: applications/editors/josm/plugins/imageryadjust/src/imageryadjust/ImageryAdjustMapMode.java
===================================================================
--- applications/editors/josm/plugins/imageryadjust/src/imageryadjust/ImageryAdjustMapMode.java	(revision 27742)
+++ applications/editors/josm/plugins/imageryadjust/src/imageryadjust/ImageryAdjustMapMode.java	(revision 27744)
@@ -1,24 +1,13 @@
 package imageryadjust;
 
+import java.awt.*;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.awt.Component;
-import java.awt.Cursor;
-import java.awt.GridBagLayout;
-import java.awt.event.MouseEvent;
-import java.awt.event.MouseListener;
-import java.awt.event.MouseMotionListener;
-import java.util.ArrayList;
-import java.util.Iterator;
+import java.awt.event.*;
 import java.util.List;
-
-import javax.swing.DefaultComboBoxModel;
-import javax.swing.DefaultListCellRenderer;
-import javax.swing.Icon;
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JList;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
+import java.util.*;
+
+import javax.swing.*;
+import javax.swing.Timer;
 
 import org.openstreetmap.josm.Main;
@@ -31,14 +20,24 @@
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
-
-public class ImageryAdjustMapMode extends MapMode implements MouseListener, MouseMotionListener{
+import org.openstreetmap.josm.tools.Shortcut;
+
+
+public class ImageryAdjustMapMode extends MapMode implements MouseListener, MouseMotionListener, AWTEventListener, MapFrame.MapModeChangeListener{
     boolean mouseDown;
     EastNorth prevEastNorth;
     private ImageryLayer adjustingLayer;
-
+    private MapMode oldMapMode;
+
+    private final TreeSet<Integer> set = new TreeSet<Integer>();
+    private Timer timer;
+    private KeyEvent releaseEvent;
+    
     public ImageryAdjustMapMode(MapFrame mapFrame) {
         super(tr("Adjust imagery"), "adjustimg",
-                tr("Adjust the position of the selected imagery layer"), mapFrame,
+                tr("Adjust the position of the selected imagery layer"), 
+                Shortcut.registerShortcut("imageryadjust:adjustmode", tr("imageryadjust"), KeyEvent.VK_Y, Shortcut.GROUP_EDIT),
+                mapFrame,
                 ImageProvider.getCursor("normal", "move"));
+        MapFrame.addMapModeChangeListener(this);
     }
     
@@ -51,4 +50,11 @@
         return all;
     }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        super.actionPerformed(e);
+    }
+    
+    
     
     @Override public void enterMode() {
@@ -71,4 +77,22 @@
        Main.map.mapView.addMouseListener(this);
         Main.map.mapView.addMouseMotionListener(this);
+        timer = new Timer(0, new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent ae) {
+                 timer.stop();
+                 if (set.remove(releaseEvent.getKeyCode())) {
+                  doKeyReleaseEvent(releaseEvent);
+                 }
+            }
+
+        });
+        
+        try {
+            Toolkit.getDefaultToolkit().addAWTEventListener(this,
+                    AWTEvent.KEY_EVENT_MASK);
+        } catch (SecurityException ex) {
+        }
+        
+        
     }
 
@@ -78,4 +102,8 @@
         Main.map.mapView.removeMouseMotionListener(this);
         adjustingLayer = null;
+        try {
+            Toolkit.getDefaultToolkit().removeAWTEventListener(this);
+        } catch (SecurityException ex) {
+        }
     }
 
@@ -107,8 +135,49 @@
         prevEastNorth = null;
     }
+    
+    private void doKeyEvent(KeyEvent keyEvent) {
+    }
+
+    private void doKeyReleaseEvent(KeyEvent releaseEvent) {
+        if (releaseEvent.getKeyCode() == getShortcut().getKeyStroke().getKeyCode()) {
+            if (oldMapMode!=null && !(oldMapMode instanceof ImageryAdjustMapMode))
+            Main.map.selectMapMode(oldMapMode);
+        }
+    }
 
     @Override public boolean layerIsSupported(Layer l) {
-        return hasImageryLayersToAdjust();
-    }
+        //return hasImageryLayersToAdjust();
+        return true;        
+    }
+
+    @Override
+    public void eventDispatched(AWTEvent event) {
+        if (event instanceof KeyEvent) {
+        KeyEvent e=(KeyEvent) event;
+        
+        if (event.getID() == KeyEvent.KEY_PRESSED) {
+             if (timer.isRunning()) {
+                  timer.stop();
+                } else {
+                  if (set.add((e.getKeyCode()))) doKeyEvent((KeyEvent) event);
+                }
+        }
+        if (event.getID() == KeyEvent.KEY_RELEASED) {
+            if (timer.isRunning()) {
+              timer.stop();
+               if (set.remove(e.getKeyCode())) doKeyReleaseEvent(e);
+            } else {
+              releaseEvent = e;
+              timer.restart();
+            }
+        }
+        }
+    }
+
+    @Override
+    public void mapModeChange(MapMode oldMapMode, MapMode newMapMode) {
+        this.oldMapMode = oldMapMode;
+    }
+
 
     /**
@@ -194,10 +263,13 @@
         if (Main.map == null) return false;
         if (Main.map.mapView == null) return false;
-        return ! Main.map.mapView.getLayersOfType(ImageryLayer.class).isEmpty();
+        boolean b = ! Main.map.mapView.getLayersOfType(ImageryLayer.class).isEmpty();
+        return b;
     }
 
     @Override
     protected void updateEnabledState() {
+        
         setEnabled(hasImageryLayersToAdjust());
+        //setEnabled(hasImageryLayersToAdjust());
     }
 }
Index: applications/editors/josm/plugins/imageryadjust/src/imageryadjust/ImageryAdjustPlugin.java
===================================================================
--- applications/editors/josm/plugins/imageryadjust/src/imageryadjust/ImageryAdjustPlugin.java	(revision 27742)
+++ applications/editors/josm/plugins/imageryadjust/src/imageryadjust/ImageryAdjustPlugin.java	(revision 27744)
@@ -1,4 +1,5 @@
 package imageryadjust;
 
+import javax.swing.Action;
 import org.openstreetmap.josm.gui.IconToggleButton;
 import org.openstreetmap.josm.gui.MapFrame;
@@ -14,6 +15,7 @@
     @Override
     public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
-        if (newFrame == null) return;
+        if (oldFrame == null && newFrame != null) {
         newFrame.addMapMode(new IconToggleButton(new ImageryAdjustMapMode(newFrame)));
+        }
     }
 }
