Index: /applications/editors/josm/plugins/imageryadjust/src/imageryadjust/ImageryAdjustMapMode.java
===================================================================
--- /applications/editors/josm/plugins/imageryadjust/src/imageryadjust/ImageryAdjustMapMode.java	(revision 31689)
+++ /applications/editors/josm/plugins/imageryadjust/src/imageryadjust/ImageryAdjustMapMode.java	(revision 31690)
@@ -34,6 +34,4 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
-
-import utils.TimedKeyReleaseListener;
 
 
Index: /applications/editors/josm/plugins/imageryadjust/src/imageryadjust/TimedKeyReleaseListener.java
===================================================================
--- /applications/editors/josm/plugins/imageryadjust/src/imageryadjust/TimedKeyReleaseListener.java	(revision 31690)
+++ /applications/editors/josm/plugins/imageryadjust/src/imageryadjust/TimedKeyReleaseListener.java	(revision 31690)
@@ -0,0 +1,69 @@
+package imageryadjust;
+
+import java.awt.AWTEvent;
+import java.awt.Toolkit;
+import java.awt.event.AWTEventListener;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.util.TreeSet;
+import javax.swing.Timer;
+
+public class TimedKeyReleaseListener implements AWTEventListener {
+    private final TreeSet<Integer> set = new TreeSet<>();
+    private Timer timer;
+    protected KeyEvent releaseEvent;
+    
+    public TimedKeyReleaseListener() {
+        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) {
+        }
+    }
+
+    @Override
+    public void eventDispatched(AWTEvent event) {
+        if (!(event instanceof KeyEvent)) return;
+        KeyEvent e = (KeyEvent) event;
+        if (event.getID() == KeyEvent.KEY_PRESSED) {
+            if (timer.isRunning()) {
+                timer.stop();
+            } else {
+                if (set.add((e.getKeyCode()))) doKeyPressEvent((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();
+            }
+        }
+    }
+
+    public void stop() {
+        try {
+            Toolkit.getDefaultToolkit().removeAWTEventListener(this);
+        } catch (SecurityException ex) {
+        }
+    }
+    
+    protected void doKeyReleaseEvent(KeyEvent evt) {
+    }
+
+    protected void doKeyPressEvent(KeyEvent evt) {
+    }
+}
Index: /applications/editors/josm/plugins/touchscreenhelper/.classpath
===================================================================
--- /applications/editors/josm/plugins/touchscreenhelper/.classpath	(revision 31690)
+++ /applications/editors/josm/plugins/touchscreenhelper/.classpath	(revision 31690)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/JOSM"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
Index: /applications/editors/josm/plugins/touchscreenhelper/.project
===================================================================
--- /applications/editors/josm/plugins/touchscreenhelper/.project	(revision 31690)
+++ /applications/editors/josm/plugins/touchscreenhelper/.project	(revision 31690)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>JOSM-TouchScreenHelper</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
Index: /applications/editors/josm/plugins/touchscreenhelper/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- /applications/editors/josm/plugins/touchscreenhelper/.settings/org.eclipse.jdt.core.prefs	(revision 31690)
+++ /applications/editors/josm/plugins/touchscreenhelper/.settings/org.eclipse.jdt.core.prefs	(revision 31690)
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.7
Index: /applications/editors/josm/plugins/touchscreenhelper/src/touchscreenhelper/BrowseAction.java
===================================================================
--- /applications/editors/josm/plugins/touchscreenhelper/src/touchscreenhelper/BrowseAction.java	(revision 31689)
+++ /applications/editors/josm/plugins/touchscreenhelper/src/touchscreenhelper/BrowseAction.java	(revision 31690)
@@ -14,5 +14,4 @@
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.tools.Shortcut;
-import utils.TimedKeyReleaseListener;
 
 public class BrowseAction extends MapMode implements MouseListener,
Index: /applications/editors/josm/plugins/touchscreenhelper/src/touchscreenhelper/TimedKeyReleaseListener.java
===================================================================
--- /applications/editors/josm/plugins/touchscreenhelper/src/touchscreenhelper/TimedKeyReleaseListener.java	(revision 31690)
+++ /applications/editors/josm/plugins/touchscreenhelper/src/touchscreenhelper/TimedKeyReleaseListener.java	(revision 31690)
@@ -0,0 +1,74 @@
+package touchscreenhelper;
+
+// Thanks to http://www.arco.in-berlin.de/keyevent.html
+// (code simplified here)
+
+
+import java.awt.AWTEvent;
+import java.awt.Toolkit;
+import java.awt.event.AWTEventListener;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
+import java.util.TreeSet;
+import javax.swing.Timer;
+
+public class TimedKeyReleaseListener implements AWTEventListener {
+    private final TreeSet<Integer> set = new TreeSet<Integer>();
+    private Timer timer;
+    protected KeyEvent releaseEvent;
+    
+    public TimedKeyReleaseListener() {
+        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) {
+        }
+    }
+    @Override
+    public void eventDispatched(AWTEvent event) {
+        if (!(event instanceof KeyEvent)) return;
+        KeyEvent e = (KeyEvent) event;
+        if (event.getID() == KeyEvent.KEY_PRESSED) {
+            if (timer.isRunning()) {
+                timer.stop();
+            } else {
+                if (set.add((e.getKeyCode()))) doKeyPressEvent((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();
+            }
+        }
+    }
+    
+
+    public void stop() {
+        try {
+            Toolkit.getDefaultToolkit().removeAWTEventListener(this);
+        } catch (SecurityException ex) {
+        }
+    }
+
+    
+    protected void doKeyReleaseEvent(KeyEvent evt) {
+    }
+
+    protected void doKeyPressEvent(KeyEvent evt) {
+    }
+}
