Index: /applications/editors/josm/plugins/DirectUpload/build.xml
===================================================================
--- /applications/editors/josm/plugins/DirectUpload/build.xml	(revision 12587)
+++ /applications/editors/josm/plugins/DirectUpload/build.xml	(revision 12588)
@@ -21,4 +21,5 @@
     <echo message="creating ${plugin.jar}"/>
     <javac srcdir="src" classpath="${josm}" destdir="build" debug="true" encoding="UTF-8">
+      <compilerarg value="-Xlint:deprecation"/>
       <include name="**/*.java" />
     </javac>
@@ -45,5 +46,5 @@
 	<attribute name="Plugin-Author" value="Subhodip Biswas :subhodipbiswas@gmail.com" />
 	<attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
-        <attribute name="Plugin-Mainversion" value="1"/>
+        <attribute name="Plugin-Mainversion" value="1180"/>
 	<attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
       </manifest>
Index: /applications/editors/josm/plugins/DirectUpload/src/org/openstreetmap/josm/plugins/DirectUpload/UploadDataGuiPlugin.java
===================================================================
--- /applications/editors/josm/plugins/DirectUpload/src/org/openstreetmap/josm/plugins/DirectUpload/UploadDataGuiPlugin.java	(revision 12587)
+++ /applications/editors/josm/plugins/DirectUpload/src/org/openstreetmap/josm/plugins/DirectUpload/UploadDataGuiPlugin.java	(revision 12588)
@@ -16,4 +16,5 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.plugins.Plugin;
+import org.openstreetmap.josm.tools.Shortcut;
 /**
  *
@@ -22,23 +23,21 @@
 public class UploadDataGuiPlugin extends Plugin{
     UploadAction openaction;
-        
-public UploadDataGuiPlugin() {
-        
-    openaction = new UploadAction();
-    Main.main.menu.toolsMenu.add(openaction);
+
+    public UploadDataGuiPlugin() {
+        openaction = new UploadAction();
+        Main.main.menu.toolsMenu.add(openaction);
     }
 
-class UploadAction extends JosmAction {
-      
+    class UploadAction extends JosmAction {
+
         public UploadAction(){
-            super(tr("Upload Traces"), "UploadAction", tr("Uploads traces to openstreetmap.org"), KeyEvent.VK_G, KeyEvent.CTRL_MASK,
-            false);
+            super(tr("Upload Traces"), "UploadAction", tr("Uploads traces to openstreetmap.org"),
+            Shortcut.registerShortcut("tools:uploadtraces", tr("Tool: {0}", tr("Upload Traces")),
+            KeyEvent.VK_G, Shortcut.GROUP_MENU), false);
         }
         public void actionPerformed(ActionEvent e) {
             UploadDataGui go = new UploadDataGui();
             go.setVisible(true);
-     
-            }
-     }
-     
+        }
+    }
 }
Index: /applications/editors/josm/plugins/agpifoj/build.xml
===================================================================
--- /applications/editors/josm/plugins/agpifoj/build.xml	(revision 12587)
+++ /applications/editors/josm/plugins/agpifoj/build.xml	(revision 12588)
@@ -49,4 +49,5 @@
         <attribute name="Plugin-Early" value="false" />
         <attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
+        <attribute name="Plugin-Mainversion" value="1180"/>
         <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
       </manifest>
Index: /applications/editors/josm/plugins/agpifoj/src/org/openstreetmap/josm/plugins/agpifoj/AgpifojDialog.java
===================================================================
--- /applications/editors/josm/plugins/agpifoj/src/org/openstreetmap/josm/plugins/agpifoj/AgpifojDialog.java	(revision 12587)
+++ /applications/editors/josm/plugins/agpifoj/src/org/openstreetmap/josm/plugins/agpifoj/AgpifojDialog.java	(revision 12588)
@@ -22,4 +22,5 @@
 import org.openstreetmap.josm.plugins.agpifoj.AgpifojLayer.ImageEntry;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.Shortcut;
 
 public class AgpifojDialog extends ToggleDialog implements ActionListener {
@@ -45,6 +46,6 @@
 
     private AgpifojDialog() {
-        super(tr("AgPifoJ - Geotagged pictures"), "agpifoj", tr("Display geotagged photos"), KeyEvent.VK_Y, 200);
-        
+        super(tr("AgPifoJ - Geotagged pictures"), "agpifoj", tr("Display geotagged photos"), Shortcut.registerShortcut("tools:geotagged", tr("Tool: {0}", tr("Display geotagged photos")), KeyEvent.VK_Y, Shortcut.GROUP_EDIT), 200);
+
         if (INSTANCE != null) {
             throw new IllegalStateException("Agpifoj dialog should not be instanciated twice !");
Index: /applications/editors/josm/plugins/agpifoj/src/org/openstreetmap/josm/plugins/agpifoj/AgpifojPlugin.java
===================================================================
--- /applications/editors/josm/plugins/agpifoj/src/org/openstreetmap/josm/plugins/agpifoj/AgpifojPlugin.java	(revision 12587)
+++ /applications/editors/josm/plugins/agpifoj/src/org/openstreetmap/josm/plugins/agpifoj/AgpifojPlugin.java	(revision 12588)
@@ -23,5 +23,7 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
+import org.openstreetmap.josm.gui.IconToggleButton;
 import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.gui.MainMenu;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.plugins.Plugin;
@@ -35,5 +37,5 @@
                   "agpifoj-open",
                   tr("Load set of images as a new layer."),
-                  0, 0, false);
+                  null, false);
         }
 
@@ -82,26 +84,5 @@
 
     public AgpifojPlugin() {
-
-        JMenuBar menu = Main.main.menu;
-        JMenu view = null;
-        JMenuItem agpifojMenu = new JMenuItem(new Action());
-
-        for (int i = 0; i < menu.getMenuCount(); ++i) {
-            if (menu.getMenu(i) != null
-                    && tr("File").equals(menu.getMenu(i).getText())) {
-                view = menu.getMenu(i);
-                break;
-            }
-        }
-
-        if (view != null) {
-            view.insert(agpifojMenu, 2);
-        
-        } else if (menu.getMenuCount() > 0) {
-            view = menu.getMenu(0);
-            view.insert(agpifojMenu, 0);
-        }
-
-        agpifojMenu.setVisible(true);
+        MainMenu.add(Main.main.menu.fileMenu, new Action());
     }
 
@@ -113,14 +94,7 @@
     public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
         if (newFrame != null) {
-            if (newFrame.getLayout() instanceof BorderLayout) {
-                newFrame.remove(newFrame.toolBarActions);
-                newFrame.add(new ScrollViewport(newFrame.toolBarActions, ScrollViewport.VERTICAL_DIRECTION), 
-                             BorderLayout.WEST);
-                newFrame.repaint();
-            }
-            
             AgpifojDialog dialog = AgpifojDialog.getInstance();
-            newFrame.addToggleDialog(dialog);
-        
+            IconToggleButton b = newFrame.addToggleDialog(dialog);
+
             boolean found = false;
             for (Layer layer : newFrame.mapView.getAllLayers()) {
@@ -130,7 +104,5 @@
                 }
             }
-            JToolBar tb = newFrame.toolBarActions;
-            ((JToggleButton) tb.getComponent(tb.getComponentCount() - 1)).getModel().setSelected(found);
-        
+            b.setSelected(found);
         } else {
             AgpifojDialog.getInstance().displayImage(null, null);
Index: plications/editors/josm/plugins/agpifoj/src/org/openstreetmap/josm/plugins/agpifoj/ScrollViewport.java
===================================================================
--- /applications/editors/josm/plugins/agpifoj/src/org/openstreetmap/josm/plugins/agpifoj/ScrollViewport.java	(revision 12587)
+++ 	(revision )
@@ -1,198 +1,0 @@
-// License: GPL. Copyright 2007 by Christian Gallioz (aka khris78)
-
-package org.openstreetmap.josm.plugins.agpifoj;
-
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.Point;
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-
-import javax.swing.JButton;
-import javax.swing.JComponent;
-import javax.swing.JPanel;
-import javax.swing.JViewport;
-import javax.swing.Timer;
-
-import org.openstreetmap.josm.tools.ImageProvider;
-
-/** A viewport with UP and DOWN arrow buttons, so that the user can make the
- * content scroll.
- */
-public class ScrollViewport extends JPanel {
-
-    private static final int NO_SCROLL = 0;
-    
-    public static final int UP_DIRECTION = 1;
-    public static final int DOWN_DIRECTION = 2;
-    public static final int LEFT_DIRECTION = 4;
-    public static final int RIGHT_DIRECTION = 8;
-	public static final int VERTICAL_DIRECTION = UP_DIRECTION | DOWN_DIRECTION;
-	public static final int HORIZONTAL_DIRECTION = LEFT_DIRECTION | RIGHT_DIRECTION;
-	public static final int ALL_DIRECTION = HORIZONTAL_DIRECTION | VERTICAL_DIRECTION;
-	
-    
-    private class ScrollViewPortMouseListener extends MouseAdapter {
-        
-        private int direction;
-        
-        public ScrollViewPortMouseListener(int direction) {
-            this.direction = direction;
-        }
-
-        @Override public void mouseExited(MouseEvent arg0) {
-            ScrollViewport.this.scrollDirection = NO_SCROLL;
-            timer.stop();
-        }
-
-        @Override public void mouseReleased(MouseEvent arg0) {
-            ScrollViewport.this.scrollDirection = NO_SCROLL;
-            timer.stop();
-        }
-
-        @Override public void mousePressed(MouseEvent arg0) {
-            ScrollViewport.this.scrollDirection = direction;
-            scroll();
-            timer.restart();
-        }
-
-    }
-    
-    private JViewport vp = new JViewport();
-    private JComponent component = null;
-    
-    private Timer timer = new Timer(200, new ActionListener() {
-        public void actionPerformed(ActionEvent arg0) {
-            ScrollViewport.this.scroll();
-        }
-    });
-    
-    private int scrollDirection = NO_SCROLL;
-    
-    public ScrollViewport(JComponent c, int direction) {
-        this(direction);
-        add(c);
-    }
-    
-    public ScrollViewport(int direction) {
-        setLayout(new BorderLayout());
-
-        JButton button;
-        
-        // UP
-        if ((direction & UP_DIRECTION) > 0) {
-        	button = new JButton();
-        	button.addMouseListener(new ScrollViewPortMouseListener(UP_DIRECTION));
-        	button.setPreferredSize(new Dimension(10,10));
-        	button.setIcon(ImageProvider.get("svpUp"));
-        	add(button, BorderLayout.NORTH);
-        }
-
-        // DOWN
-        if ((direction & DOWN_DIRECTION) > 0) {
-        	button = new JButton();
-        	button.addMouseListener(new ScrollViewPortMouseListener(DOWN_DIRECTION));
-        	button.setPreferredSize(new Dimension(10,10));
-        	button.setIcon(ImageProvider.get("svpDown"));
-        	add(button, BorderLayout.SOUTH);
-        }
-        
-        // LEFT
-        if ((direction & LEFT_DIRECTION) > 0) {
-        	button = new JButton();
-        	button.addMouseListener(new ScrollViewPortMouseListener(LEFT_DIRECTION));
-        	button.setPreferredSize(new Dimension(10,10));
-        	button.setIcon(ImageProvider.get("svpLeft"));
-        	add(button, BorderLayout.WEST);
-        }
-        
-        // RIGHT
-        if ((direction & RIGHT_DIRECTION) > 0) {
-        	button = new JButton();
-        	button.addMouseListener(new ScrollViewPortMouseListener(RIGHT_DIRECTION));
-        	button.setPreferredSize(new Dimension(10,10));
-        	button.setIcon(ImageProvider.get("svpRight"));
-        	add(button, BorderLayout.EAST);
-        }
-        
-        add(vp, BorderLayout.CENTER);
-        
-        timer.setRepeats(true);
-        timer.setInitialDelay(400);
-    }
-    
-    public synchronized void scroll() {
-        int direction = scrollDirection;
-        
-        if (component == null || direction == NO_SCROLL) {
-            return;
-        }
-        
-        Dimension compSize = component.getSize();
-        Rectangle viewRect = vp.getViewRect();
-        
-        int delta;
-        int newY = 0;
-        int newX = 0;
-
-        if (direction < LEFT_DIRECTION) {
-        	newX = viewRect.x;
-        	delta = viewRect.height * 4 / 5;
-        } else {
-        	newY = viewRect.y;
-        	delta = viewRect.width * 4 / 5;
-        }
-        
-        switch (direction) {
-        case UP_DIRECTION :
-            newY = viewRect.y - delta;
-            if (newY < 0) {
-                newY = 0;
-            }
-            break;
-        case DOWN_DIRECTION :
-            newY = viewRect.y + delta;
-            if (newY > compSize.height - viewRect.height) {
-                newY = compSize.height - viewRect.height;
-            }
-            break;
-        case LEFT_DIRECTION :
-            newX = viewRect.x - delta;
-            if (newX < 0) {
-                newX = 0;
-            }
-            break;
-        case RIGHT_DIRECTION :
-            newX = viewRect.x + delta;
-            if (newX > compSize.width - viewRect.width) {
-                newX = compSize.width - viewRect.width;
-            }
-            break;
-        default : 
-            throw new IllegalStateException("Unknown direction : " + direction);
-        }
-        
-        vp.setViewPosition(new Point(newX, newY));
-    }
-    
-    public Rectangle getViewRect() {
-    	return vp.getViewRect();
-    }
-
-    public Dimension getViewSize() {
-    	return vp.getViewSize();
-    }
-
-    public Point getViewPosition() {
-    	return vp.getViewPosition();
-    }
-
-    public void add(JComponent c) {
-        vp.removeAll();
-        this.component = c;
-        vp.add(c);
-    }
-}
Index: /applications/editors/josm/plugins/build.xml
===================================================================
--- /applications/editors/josm/plugins/build.xml	(revision 12587)
+++ /applications/editors/josm/plugins/build.xml	(revision 12588)
@@ -16,7 +16,7 @@
     <ant	dir="agpifoj"		antfile="build.xml"	target="dist"/>
     <ant	dir="colorscheme"	antfile="build.xml"	target="dist"/>
-    <ant	dir="duplicateway"	antfile="build.xml"	target="dist"/>
     <ant	dir="DirectUpload"	antfile="build.xml"	target="dist"/>
     <ant	dir="globalsat"		antfile="build.xml"	target="dist"/>
+    <ant	dir="imagewaypoint"	antfile="build.xml"	target="dist"/>
     <ant	dir="lakewalker"	antfile="build.xml"	target="dist"/>
     <ant	dir="livegps"		antfile="build.xml"	target="dist"/>
@@ -28,4 +28,5 @@
     <ant	dir="plastic_laf"	antfile="build.xml"	target="dist"/>
     <ant	dir="pluginmanager"	antfile="build.xml"	target="dist"/> 
+    <ant	dir="remotecontrol"	antfile="build.xml"	target="dist"/> 
     <ant	dir="slippymap"		antfile="build.xml"	target="dist"/>
     <ant	dir="slippy_map_chooser"	antfile="build.xml"	target="dist"/>
@@ -39,4 +40,5 @@
 
   <target name="build_defect" depends="compile">
+    <ant	dir="duplicateway"	antfile="build.xml"	target="dist"/>
     <ant	dir="grid"		antfile="build.xml"	target="dist"/>
     <ant	dir="navigator"		antfile="build.xml"	target="dist"/>
@@ -49,4 +51,5 @@
     <ant	dir="globalsat"		antfile="build.xml"	target="clean"/>
     <ant	dir="grid"		antfile="build.xml"	target="clean"/>
+    <ant	dir="imagewaypoint"	antfile="build.xml"	target="clean"/>
     <ant	dir="lakewalker"	antfile="build.xml"	target="clean"/>
     <ant	dir="livegps"		antfile="build.xml"	target="clean"/>
@@ -59,4 +62,5 @@
     <ant	dir="plastic_laf"	antfile="build.xml"	target="clean"/>
     <ant	dir="pluginmanager"	antfile="build.xml"	target="clean"/>
+    <ant	dir="remotecontrol"	antfile="build.xml"	target="clean"/> 
     <ant	dir="slippymap"		antfile="build.xml"	target="clean"/>
     <ant	dir="slippy_map_chooser"	antfile="build.xml"	target="clean"/>
Index: /applications/editors/josm/plugins/colorscheme/build.xml
===================================================================
--- /applications/editors/josm/plugins/colorscheme/build.xml	(revision 12587)
+++ /applications/editors/josm/plugins/colorscheme/build.xml	(revision 12588)
@@ -10,6 +10,4 @@
   <property name="plugin.jar"		value="../../dist/${plugin.name}.jar"/>
   
-  <!-- plugin meta data (enter new version number if anything changed!) -->
-  <property name="plugin.version" value="0.5.2"/>
   <property name="plugin.description" value="Allows the user to create different color schemes and to switch between them. Just change the colors and create a new scheme. Used to switch to a white background with matching colors for better visibility in bright sunlight. See dialog in JOSM's preferences and 'Map Settings' (strange but true :-) (V${plugin.version})."/>
   <property name="plugin.class" value="at.dallermassl.josm.plugin.colorscheme.ColorSchemePlugin"/>
@@ -38,4 +36,12 @@
     </copy>
     
+    <exec append="false" output="REVISION" executable="svn" failifexecutionfails="false">
+      <env key="LANG" value="C"/>
+      <arg value="info"/>
+      <arg value="--xml"/>
+      <arg value="."/>
+    </exec>
+    <xmlproperty file="REVISION" prefix="version" keepRoot="false" collapseAttributes="true"/>
+    <delete file="REVISION"/>
     <!-- create jar file -->
     <jar destfile="${plugin.jar}" basedir="${plugin.build.dir}">
@@ -43,6 +49,7 @@
         <attribute name="Plugin-Class" value="${plugin.class}" />
         <attribute name="Plugin-Description" value="${plugin.description}" />
-        <attribute name="Plugin-Version" value="${plugin.version}" />
-        <!--attribute name="Plugin-Dependencies" value="org.eigenheimstrasse.josm" /-->
+        <attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
+        <attribute name="Plugin-Mainversion" value="1180"/>
+        <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
       </manifest>
     </jar>
Index: /applications/editors/josm/plugins/colorscheme/src/at/dallermassl/josm/plugin/colorscheme/ColorSchemePreference.java
===================================================================
--- /applications/editors/josm/plugins/colorscheme/src/at/dallermassl/josm/plugin/colorscheme/ColorSchemePreference.java	(revision 12587)
+++ /applications/editors/josm/plugins/colorscheme/src/at/dallermassl/josm/plugin/colorscheme/ColorSchemePreference.java	(revision 12588)
@@ -71,8 +71,7 @@
                     JOptionPane.showMessageDialog(Main.parent, tr("Please select a scheme to use."));
                 else {
-                    String schemeName = (String) listModel.get(schemesList.getSelectedIndex());                    
+                    String schemeName = (String) listModel.get(schemesList.getSelectedIndex());
                     getColorPreference().setColorModel(getColorMap(schemeName));
                 }
-                gui.requiresRestart = gui.requiresRestart || false;
             }
         });
@@ -87,5 +86,4 @@
 				listModel.addElement(schemeName);
                 saveSchemeNamesToPref();
-                gui.requiresRestart = gui.requiresRestart || false;
 			}
 		});
@@ -101,5 +99,4 @@
 				    listModel.remove(schemesList.getSelectedIndex());
 				    saveSchemeNamesToPref();
-                    gui.requiresRestart = gui.requiresRestart || false;
 				}
 			}
@@ -135,6 +132,6 @@
 	}
 
-	public void ok() {
-	    // nothing to do
+	public boolean ok() {
+	    return false;// nothing to do
 	}
 	
@@ -179,6 +176,6 @@
 	    return colorMap;
 	}
-	
-	public ColorPreference getColorPreference() {
+
+    public ColorPreference getColorPreference() {
         if(colorPreference == null) {
             for(PreferenceSetting setting : PreferenceDialog.settings) {
@@ -190,4 +187,4 @@
         }
         return colorPreference;
-	}
+    }
 }
Index: /applications/editors/josm/plugins/duplicateway/build.xml
===================================================================
--- /applications/editors/josm/plugins/duplicateway/build.xml	(revision 12587)
+++ /applications/editors/josm/plugins/duplicateway/build.xml	(revision 12588)
@@ -31,8 +31,7 @@
       </fileset>
     </copy>
-    <!-- the code still uses no longer existing Segments, disable compile!
-	<javac srcdir="src" classpath="${josm}" debug="true" destdir="build">
+    <javac srcdir="src" classpath="${josm}" debug="true" destdir="build">
       <include name="**/*.java" />
-    </javac>-->
+    </javac>
   </target>
 
Index: /applications/editors/josm/plugins/globalsat/build.xml
===================================================================
--- /applications/editors/josm/plugins/globalsat/build.xml	(revision 12587)
+++ /applications/editors/josm/plugins/globalsat/build.xml	(revision 12588)
@@ -51,4 +51,5 @@
         <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
         <attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
+        <attribute name="Plugin-Mainversion" value="1180"/>
       </manifest>
     </jar>
Index: /applications/editors/josm/plugins/globalsat/src/org/kaintoch/gps/globalsat/dg100/GpsRec.java
===================================================================
--- /applications/editors/josm/plugins/globalsat/src/org/kaintoch/gps/globalsat/dg100/GpsRec.java	(revision 12587)
+++ /applications/editors/josm/plugins/globalsat/src/org/kaintoch/gps/globalsat/dg100/GpsRec.java	(revision 12588)
@@ -32,5 +32,5 @@
 	private int dg100TypeOfNextRec = -1;
 	// calculated data
-	private Date dateTime = null;
+	private Calendar dateTime = null;
 
 	public GpsRec()
@@ -265,7 +265,5 @@
 			SimpleDateFormat sdf = new SimpleDateFormat(dateTimeFormat);
 			//logger.info(gsTime + " " + gsDate);
-			Calendar cal = GregorianCalendar.getInstance();
-			cal.setTime(dateTime);
-			dateTimeString = sdf.format(cal.getTime());
+			dateTimeString = sdf.format(dateTime.getTime());
 		}
 		return dateTimeString;
@@ -316,5 +314,6 @@
 		int MM = (dg100Date - DD * 10000) / 100;
 		int YY = dg100Date - DD * 10000 - MM * 100;
-		dateTime = new Date(100 + YY, MM - 1, DD, hh, mm, ss);
+		dateTime = GregorianCalendar.getInstance();
+		dateTime.set(2000 + YY, MM, DD, hh, mm, ss);
 	}
 
@@ -415,5 +414,5 @@
 	 * @return Returns the dateTime.
 	 */
-	public Date getDateTime()
+	public Calendar getDateTime()
 	{
 		return dateTime;
Index: /applications/editors/josm/plugins/globalsat/src/org/openstreetmap/josm/plugins/globalsat/GlobalsatPlugin.java
===================================================================
--- /applications/editors/josm/plugins/globalsat/src/org/openstreetmap/josm/plugins/globalsat/GlobalsatPlugin.java	(revision 12587)
+++ /applications/editors/josm/plugins/globalsat/src/org/openstreetmap/josm/plugins/globalsat/GlobalsatPlugin.java	(revision 12588)
@@ -23,4 +23,5 @@
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.data.gpx.GpxData;
+import org.openstreetmap.josm.tools.Shortcut;
 
 import gnu.io.*;
@@ -108,5 +109,8 @@
     class GlobalsatImportAction extends JosmAction{
         public GlobalsatImportAction(){
-            super(tr("Globalsat Import"), "globalsatImport", tr("Import Data from Globalsat Datalogger DG100 into GPXLayer."), KeyEvent.VK_I, KeyEvent.CTRL_MASK, false);
+            super(tr("Globalsat Import"), "globalsatImport",
+            tr("Import Data from Globalsat Datalogger DG100 into GPXLayer."),
+            Shortcut.registerShortcut("menu:globalsatimport", tr("Menu: {0}", tr("Globalsat Import")),
+            KeyEvent.VK_I, Shortcut.GROUP_MENU), false);
         }
         public void actionPerformed(ActionEvent e){
Index: /applications/editors/josm/plugins/imagewaypoint/build.xml
===================================================================
--- /applications/editors/josm/plugins/imagewaypoint/build.xml	(revision 12588)
+++ /applications/editors/josm/plugins/imagewaypoint/build.xml	(revision 12588)
@@ -0,0 +1,55 @@
+<project name="imagewaypoint" default="dist" basedir=".">
+  <!-- compilation properties -->
+  <property name="josm.build.dir"	value="../../core"/>
+  <property name="josm.plugins.dir" value="${josm.home.dir}/plugins"/>
+  <property name="josm"			location="../../core/dist/josm-custom.jar" />
+  <property name="plugin.build.dir"	value="build"/>
+  <property name="plugin.dist.dir"	value="../../dist"/>
+  <property name="plugin.name"		value="${ant.project.name}"/>
+  <property name="plugin.jar"		value="../../dist/${plugin.name}.jar"/>
+
+	<target name="dist" depends="compile">
+
+		<copy todir="build/images">
+			<fileset dir="images" />
+		</copy>
+
+    <exec append="false" output="REVISION" executable="svn" failifexecutionfails="false">
+      <env key="LANG" value="C"/>
+      <arg value="info"/>
+      <arg value="--xml"/>
+      <arg value="."/>
+    </exec>
+    <xmlproperty file="REVISION" prefix="version" keepRoot="false" collapseAttributes="true"/>
+    <delete file="REVISION"/>
+
+		<delete file="${plugin.jar}"/>
+		<jar destfile="${plugin.jar}" basedir="build">
+			<manifest>
+				<attribute name="Plugin-Class" value="org.insignificant.josm.plugins.imagewaypoint.ImageWayPointPlugin" />
+				<attribute name="Plugin-Description" value="An other geotag plugin for josm. Correlates pictures with GPS tracks if the image name is sorted in the GPX trkpt tag." />
+				<attribute name="Plugin-Early" value="false" />
+        <attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
+        <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
+        <attribute name="Plugin-Mainversion" value="1180" />
+			</manifest>
+		</jar>
+	</target>
+
+  <target name="compile" depends="init">
+    <echo message="creating ${plugin.jar}"/>
+    <javac srcdir="src" classpath="${josm}" debug="true" destdir="build">
+      <compilerarg value="-Xlint:deprecation"/>
+      <compilerarg value="-Xlint:unchecked"/>
+      <include name="**/*.java" />
+    </javac>
+  </target>
+
+	<target name="init">
+		<mkdir dir="build" />
+	</target>
+
+	<target name="clean">
+		<delete dir="build" />
+	</target>
+</project>
Index: /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/IImageChangeListener.java
===================================================================
--- /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/IImageChangeListener.java	(revision 12588)
+++ /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/IImageChangeListener.java	(revision 12588)
@@ -0,0 +1,7 @@
+package org.insignificant.josm.plugins.imagewaypoint;
+
+public interface IImageChangeListener {
+    void onAvailableImageEntriesChanged(ImageEntries entries);
+
+    void onSelectedImageEntryChanged(ImageEntries entries);
+}
Index: /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/ImageEntries.java
===================================================================
--- /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/ImageEntries.java	(revision 12588)
+++ /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/ImageEntries.java	(revision 12588)
@@ -0,0 +1,231 @@
+package org.insignificant.josm.plugins.imagewaypoint;
+
+import java.awt.Image;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.insignificant.josm.plugins.imagewaypoint.ImageEntry.IImageReadyListener;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.gpx.WayPoint;
+import org.openstreetmap.josm.gui.layer.GpxLayer;
+import org.openstreetmap.josm.gui.layer.Layer;
+
+public final class ImageEntries {
+    private static final class ImageReadyListener implements
+	    IImageReadyListener {
+	private final ImageEntries imageEntries;
+
+	public ImageReadyListener(final ImageEntries imageEntries) {
+	    this.imageEntries = imageEntries;
+	}
+
+	public final void onImageReady(final ImageEntry imageEntry,
+	    final Image image) {
+	    this.imageEntries.setCurrentImage(imageEntry, image);
+	}
+    }
+
+    private static final ImageEntries INSTANCE = new ImageEntries();
+
+    private final List<ImageEntry> images;
+    private final List<ImageEntry> locatedImages;
+    private final List<IImageChangeListener> listeners;
+    private final IImageReadyListener listener;
+
+    private ImageEntry currentImageEntry;
+    private Image currentImage;
+
+    private ImageEntries() {
+	this.images = new ArrayList<ImageEntry>();
+	this.locatedImages = new ArrayList<ImageEntry>();
+	this.listeners = new ArrayList<IImageChangeListener>();
+	this.listener = new ImageReadyListener(this);
+
+	this.currentImageEntry = null;
+	this.currentImage = null;
+    }
+
+    public static final ImageEntries getInstance() {
+	return ImageEntries.INSTANCE;
+    }
+
+    public final void addListener(final IImageChangeListener listener) {
+	this.listeners.add(listener);
+    }
+
+    public final void removeListener(final IImageChangeListener listener) {
+	this.listeners.remove(listener);
+    }
+
+    public final void add(final File[] imageFiles) {
+	if (null != imageFiles) {
+	    for (int index = 0; index < imageFiles.length; index++) {
+		this.images.add(new ImageEntry(imageFiles[index]));
+	    }
+	    this.associateAllLayers();
+	}
+    }
+
+    public final void associateAllLayers() {
+	for (int index = 0; index < this.images.size(); index++) {
+	    this.images.get(index).setWayPoint(null);
+	}
+	this.locatedImages.clear();
+
+	if (null != Main.map && null != Main.map.mapView) {
+	    final Collection<Layer> layerCollection = Main.map.mapView.getAllLayers();
+	    final Layer[] layers = layerCollection.toArray(new Layer[layerCollection.size()]);
+
+	    for (int index = 0; index < layers.length; index++) {
+		if (layers[index] instanceof GpxLayer
+			&& null != ((GpxLayer) layers[index]).data
+			&& !((GpxLayer) layers[index]).data.fromServer) {
+		    this.doAssociateLayer((GpxLayer) layers[index]);
+		}
+	    }
+
+	    for (IImageChangeListener listener : this.listeners) {
+		listener.onSelectedImageEntryChanged(this);
+	    }
+	}
+    }
+
+    private final void doAssociateLayer(final GpxLayer gpxLayer) {
+	if (null != gpxLayer && null != gpxLayer.data
+		&& !gpxLayer.data.fromServer) {
+	    for (WayPoint wayPoint : gpxLayer.data.waypoints) {
+		final List<String> texts = this.getTextContentsFromWayPoint(wayPoint);
+
+		for (String text : texts) {
+		    final ImageEntry image = this.findImageEntryWithFileName(text);
+		    if (null != image) {
+			image.setWayPoint(wayPoint);
+			this.locatedImages.add(image);
+		    }
+		}
+	    }
+	}
+    }
+
+    private final List<String> getTextContentsFromWayPoint(
+	final WayPoint wayPoint) {
+	final List<String> texts = new ArrayList<String>();
+	for(String s : new String[]{"name", "cmt", "desc"})
+	{
+		String t = wayPoint.getString(s);
+		if(null != t && 0 < t.length())
+			texts.add(t);
+	}
+
+	return texts;
+    }
+
+    // private final String getFileNameFromWayPointAttribute(
+    // final String attributeValue) {
+    // return null != attributeValue
+    // && (attributeValue.toLowerCase().endsWith(".jpg")
+    // || attributeValue.toLowerCase().endsWith(".jpeg")
+    // || attributeValue.toLowerCase().endsWith(".png") ||
+    // attributeValue.toLowerCase()
+    // .endsWith(".gif")) ? attributeValue : null;
+    // }
+
+    private final ImageEntry findImageEntryWithFileName(final String fileName) {
+	ImageEntry foundimage = null;
+
+	for (int index = 0; index < this.images.size() && null == foundimage; index++) {
+	    final ImageEntry image = this.images.get(index);
+	    if (null == image.getWayPoint()
+		    && image.getFileName().startsWith(fileName)) {
+		foundimage = image;
+	    }
+	}
+
+	return foundimage;
+    }
+
+    private final void setCurrentImage(final ImageEntry imageEntry,
+	final Image image) {
+	if (imageEntry == this.currentImageEntry) {
+	    this.currentImage = image;
+	}
+
+	for (IImageChangeListener listener : this.listeners) {
+	    listener.onSelectedImageEntryChanged(this);
+	}
+    }
+
+    public final ImageEntry[] getImages() {
+	return this.locatedImages.toArray(new ImageEntry[this.locatedImages.size()]);
+    }
+
+    public final ImageEntry getCurrentImageEntry() {
+	return this.currentImageEntry;
+    }
+
+    public final Image getCurrentImage() {
+	return this.currentImage;
+    }
+
+    public final boolean hasNext() {
+	return null != this.currentImageEntry
+		&& this.locatedImages.indexOf(this.currentImageEntry) < this.locatedImages.size() - 1;
+    }
+
+    public final boolean hasPrevious() {
+	return null != this.currentImageEntry
+		&& this.locatedImages.indexOf(this.currentImageEntry) > 0;
+    }
+
+    public final void next() {
+	if (null != this.currentImageEntry
+		&& this.locatedImages.indexOf(this.currentImageEntry) < this.locatedImages.size() - 1) {
+	    this.setCurrentImageEntry(this.locatedImages.get(this.locatedImages.indexOf(this.currentImageEntry) + 1));
+	}
+    }
+
+    public final void previous() {
+	if (null != this.currentImageEntry
+		&& this.locatedImages.indexOf(this.currentImageEntry) > 0) {
+	    this.setCurrentImageEntry(this.locatedImages.get(this.locatedImages.indexOf(this.currentImageEntry) - 1));
+	}
+    }
+
+    public final void rotateCurrentImageLeft() {
+	if (null != this.currentImageEntry) {
+	    this.currentImageEntry.setOrientation(this.currentImageEntry.getOrientation()
+		.rotateLeft());
+	}
+
+	this.setCurrentImageEntry(this.currentImageEntry);
+    }
+
+    public final void rotateCurrentImageRight() {
+	if (null != this.currentImageEntry) {
+	    this.currentImageEntry.setOrientation(this.currentImageEntry.getOrientation()
+		.rotateRight());
+	}
+
+	this.setCurrentImageEntry(this.currentImageEntry);
+    }
+
+    public final void setCurrentImageEntry(final ImageEntry imageEntry) {
+	if (null == imageEntry || this.locatedImages.contains(imageEntry)) {
+	    if (null != this.currentImageEntry) {
+		this.currentImageEntry.flush();
+	    }
+
+	    this.currentImageEntry = imageEntry;
+	    this.currentImage = null;
+
+	    for (IImageChangeListener listener : this.listeners) {
+		listener.onSelectedImageEntryChanged(this);
+	    }
+
+	    // now try to get the image
+	    this.currentImageEntry.requestImage(this.listener);
+	}
+    }
+}
Index: /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/ImageEntry.java
===================================================================
--- /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/ImageEntry.java	(revision 12588)
+++ /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/ImageEntry.java	(revision 12588)
@@ -0,0 +1,260 @@
+/**
+ * 
+ */
+package org.insignificant.josm.plugins.imagewaypoint;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Toolkit;
+import java.awt.image.ImageObserver;
+import java.awt.image.MemoryImageSource;
+import java.awt.image.PixelGrabber;
+import java.io.File;
+
+import javax.swing.Icon;
+
+import org.openstreetmap.josm.data.gpx.WayPoint;
+import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.tools.ImageProvider;
+
+public final class ImageEntry implements Comparable<ImageEntry> {
+    public interface IImageReadyListener {
+	void onImageReady(ImageEntry imageEntry, Image image);
+    }
+
+    private static final class Observer implements ImageObserver {
+	private final ImageEntry imageEntry;
+
+	public Observer(final ImageEntry imageEntry) {
+	    this.imageEntry = imageEntry;
+	}
+
+	/**
+	 * @see java.awt.image.ImageObserver#imageUpdate(java.awt.Image, int,
+	 *      int, int, int, int)
+	 * @return true if this ImageObserver still wants to be updates about
+	 *         image loading progress
+	 */
+	public final boolean imageUpdate(final Image image,
+	    final int infoflags, final int x, final int y, final int width,
+	    final int height) {
+	    final boolean complete = ImageObserver.ALLBITS == (infoflags | ImageObserver.ALLBITS);
+	    if (complete) {
+		this.imageEntry.imageLoaded(image);
+	    }
+
+	    return !complete;
+	}
+    }
+
+    public static final class Orientation {
+	private static final Orientation[] orientations = new Orientation[4];
+
+	public static final Orientation NORMAL = new Orientation(tr("Normal"), 0);
+	public static final Orientation ROTATE_90 = new Orientation(tr("Rotate 90"),
+	    1);
+	public static final Orientation ROTATE_180 = new Orientation(tr("Rotate 180"),
+	    2);
+	public static final Orientation ROTATE_270 = new Orientation(tr("Rotate 270"),
+	    3);
+
+	private final String name;
+	private final int index;
+
+	private Orientation(final String name, final int index) {
+	    this.name = name;
+	    this.index = index;
+	    Orientation.orientations[index] = this;
+	}
+
+	public final Orientation rotateRight() {
+	    if (this.index < Orientation.orientations.length - 1) {
+		return Orientation.orientations[this.index + 1];
+	    } else {
+		return Orientation.orientations[0];
+	    }
+	}
+
+	public final Orientation rotateLeft() {
+	    if (this.index == 0) {
+		return Orientation.orientations[Orientation.orientations.length - 1];
+	    } else {
+		return Orientation.orientations[this.index - 1];
+	    }
+	}
+
+	@Override
+	public String toString() {
+	    return "[" + this.name + "]";
+	}
+    }
+
+    public static final Icon ICON = ImageProvider.get("dialogs/imagewaypoint-marker");
+    public static final Icon SELECTED_ICON = ImageProvider.get("dialogs/imagewaypoint-marker-selected");
+    private static final int ICON_WIDTH = ImageEntry.ICON.getIconWidth();
+    private static final int ICON_HEIGHT = ImageEntry.ICON.getIconHeight();
+
+    private final String filePath;
+    private final String fileName;
+    private final ImageObserver observer;
+    private WayPoint wayPoint;
+    private Orientation orientation;
+    private IImageReadyListener listener;
+    private Image normalImage;
+    private Image rotatedImage;
+
+    public ImageEntry(final File file) {
+	this.filePath = file.getAbsolutePath();
+	this.fileName = file.getName();
+	this.observer = new Observer(this);
+
+	this.wayPoint = null;
+	this.orientation = Orientation.NORMAL;
+	this.listener = null;
+	this.normalImage = null;
+	this.rotatedImage = null;
+    }
+
+    public final int compareTo(final ImageEntry image) {
+	return this.fileName.compareTo(image.fileName);
+    }
+
+    public final String getFileName() {
+	return fileName;
+    }
+
+    public final WayPoint getWayPoint() {
+	return wayPoint;
+    }
+
+    public final void setWayPoint(final WayPoint wayPoint) {
+	this.wayPoint = wayPoint;
+    }
+
+    public final Orientation getOrientation() {
+	return orientation;
+    }
+
+    public final void setOrientation(final Orientation orientation) {
+	this.orientation = orientation;
+	this.normalImage = null;
+	this.rotatedImage = null;
+    }
+
+    public final Rectangle getBounds(final MapView mapView) {
+	final Rectangle bounds;
+
+	if (null == this.wayPoint) {
+	    bounds = null;
+	} else {
+	    final Point point = mapView.getPoint(this.getWayPoint().eastNorth);
+	    bounds = new Rectangle(point.x - ImageEntry.ICON_WIDTH,
+		point.y - ImageEntry.ICON_HEIGHT,
+		ImageEntry.ICON_WIDTH,
+		ImageEntry.ICON_WIDTH);
+	}
+
+	return bounds;
+    }
+
+    public final void requestImage(final IImageReadyListener imageReadyListener) {
+	this.listener = imageReadyListener;
+
+	if (null == this.rotatedImage) {
+	    final Image image = Toolkit.getDefaultToolkit()
+		.getImage(this.filePath);
+	    if (Toolkit.getDefaultToolkit().prepareImage(image,
+		-1,
+		-1,
+		this.observer)) {
+		this.imageLoaded(image);
+	    }
+	} else if (null != this.listener) {
+	    this.listener.onImageReady(this, this.rotatedImage);
+	}
+    }
+
+    public final void flush() {
+	if (null != this.normalImage) {
+	    this.normalImage.flush();
+	    this.normalImage = null;
+	}
+
+	if (null != this.rotatedImage) {
+	    this.rotatedImage.flush();
+	    this.rotatedImage = null;
+	}
+    }
+
+    private final void imageLoaded(final Image image) {
+	if (Orientation.NORMAL == this.getOrientation()) {
+	    this.rotatedImage = image;
+	} else {
+	    final int[] buffer = new int[image.getWidth(null)
+		    * image.getHeight(null)];
+	    PixelGrabber grabber = new PixelGrabber(image,
+		0,
+		0,
+		image.getWidth(null),
+		image.getHeight(null),
+		buffer,
+		0,
+		image.getWidth(null));
+	    try {
+		grabber.grabPixels();
+
+		final int newHeight;
+		final int newWidth;
+
+		if (Orientation.ROTATE_180 == this.getOrientation()) {
+		    newHeight = image.getHeight(null);
+		    newWidth = image.getWidth(null);
+		} else {
+		    newHeight = image.getWidth(null);
+		    newWidth = image.getHeight(null);
+		}
+
+		final int[] destination = new int[image.getWidth(null)
+			* image.getHeight(null)];
+		for (int x = 0; x < image.getWidth(null); x++) {
+		    for (int y = 0; y < image.getHeight(null); y++) {
+			final int pix = buffer[x + (y * image.getWidth(null))];
+			final int newX;
+			final int newY;
+			if (Orientation.ROTATE_90 == this.getOrientation()) {
+			    newX = newWidth - y;
+			    newY = x;
+			} else if (Orientation.ROTATE_180 == this.getOrientation()) {
+			    newX = newWidth - x;
+			    newY = newHeight - y;
+			} else { // Orientation.ROTATE_270 ==
+			    // this.getOrientation()
+			    newX = y;
+			    newY = newHeight - x;
+			}
+			final int newIndex = newX + (newY * newWidth);
+			if (newIndex < destination.length) {
+			    destination[newIndex] = pix;
+			}
+		    }
+		}
+
+		this.rotatedImage = Toolkit.getDefaultToolkit()
+		    .createImage(new MemoryImageSource(newWidth,
+			newHeight,
+			destination,
+			0,
+			newWidth));
+	    } catch (final InterruptedException e) {
+		this.rotatedImage = null;
+	    }
+	}
+
+	if (null != this.listener) {
+	    this.listener.onImageReady(this, this.rotatedImage);
+	}
+    }
+}
Index: /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/ImageWayPointDialog.java
===================================================================
--- /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/ImageWayPointDialog.java	(revision 12588)
+++ /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/ImageWayPointDialog.java	(revision 12588)
@@ -0,0 +1,245 @@
+package org.insignificant.josm.plugins.imagewaypoint;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+
+import javax.swing.Action;
+import javax.swing.JButton;
+import javax.swing.JComponent;
+import javax.swing.JPanel;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.JosmAction;
+import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
+import org.openstreetmap.josm.tools.I18n;
+import org.openstreetmap.josm.tools.Shortcut;
+
+public final class ImageWayPointDialog {
+    private static final class ImageComponent extends JComponent {
+	private static final long serialVersionUID = -5207198660736375133L;
+
+	private Image image;
+
+	public ImageComponent() {
+	    this.image = null;
+	}
+
+	@Override
+	public final void paint(final Graphics g) {
+	    if (null == this.image || 0 >= this.image.getWidth(null)
+		    || 0 >= this.image.getHeight(null)) {
+		g.setColor(Color.white);
+		g.fillRect(0, 0, this.getSize().width, this.getSize().height);
+	    } else {
+		final int maxWidth = this.getSize().width;
+		final int maxHeight = this.getSize().height;
+		final int imageWidth = this.image.getWidth(null);
+		final int imageHeight = this.image.getHeight(null);
+
+		final double aspect = 1.0 * imageWidth / imageHeight;
+
+		// what's the width if the height is 100%?
+		final int widthIfHeightIsMax = (int) (aspect * maxHeight);
+
+		// now find the real width and height
+		final int resizedWidth;
+		final int resizedHeight;
+		if (widthIfHeightIsMax > maxWidth) {
+		    // oops - burst the width - so width should be the max, and
+		    // work out the resulting height
+		    resizedWidth = maxWidth;
+		    resizedHeight = (int) (resizedWidth / aspect);
+		} else {
+		    // that'll do...
+		    resizedWidth = widthIfHeightIsMax;
+		    resizedHeight = maxHeight;
+		}
+
+		g.drawImage(this.image,
+		    (maxWidth - resizedWidth) / 2,
+		    (maxHeight - resizedHeight) / 2,
+		    resizedWidth,
+		    resizedHeight,
+		    Color.black,
+		    null);
+	    }
+	}
+
+	public final void setImage(final Image image) {
+	    this.image = image;
+	    this.repaint();
+	}
+    }
+
+    private static final class ImageChangeListener implements
+	    IImageChangeListener {
+	private final ImageWayPointDialog dialog;
+
+	public ImageChangeListener(final ImageWayPointDialog dialog) {
+	    this.dialog = dialog;
+	}
+
+	public final void onAvailableImageEntriesChanged(
+	    final ImageEntries entries) {
+	    this.dialog.imageDisplay.setImage(entries.getCurrentImage());
+	    this.dialog.updateUI();
+	}
+
+	public final void onSelectedImageEntryChanged(final ImageEntries entries) {
+	    this.dialog.imageDisplay.setImage(entries.getCurrentImage());
+	    this.dialog.updateUI();
+	}
+    }
+
+    private static final class PreviousAction extends JosmAction {
+	private static final long serialVersionUID = -7899209365124237890L;
+
+	private final ImageWayPointDialog dialog;
+
+	public PreviousAction(final ImageWayPointDialog dialog) {
+	    super(tr("Previous"),
+		null,
+		tr("Previous image"),
+		null,
+		false);
+	    this.dialog = dialog;
+	}
+
+	public final void actionPerformed(final ActionEvent actionEvent) {
+	    if (ImageEntries.getInstance().hasPrevious()) {
+		ImageEntries.getInstance().previous();
+	    }
+	}
+    }
+
+    private static final class NextAction extends JosmAction {
+	private static final long serialVersionUID = 176134010956760988L;
+
+	private final ImageWayPointDialog dialog;
+
+	public NextAction(final ImageWayPointDialog dialog) {
+	    super(tr("Next"), null, tr("Next image"), null, false);
+	    this.dialog = dialog;
+	}
+
+	public final void actionPerformed(final ActionEvent actionEvent) {
+	    if (ImageEntries.getInstance().hasNext()) {
+		ImageEntries.getInstance().next();
+	    }
+	}
+    }
+
+    private static final class RotateLeftAction extends JosmAction {
+	private static final long serialVersionUID = 3536922796446259943L;
+
+	private final ImageWayPointDialog dialog;
+
+	public RotateLeftAction(final ImageWayPointDialog dialog) {
+	    super(tr("Rotate left"),
+		null,
+		tr("Rotate image left"),
+		null,
+		false);
+	    this.dialog = dialog;
+	}
+
+	public final void actionPerformed(final ActionEvent actionEvent) {
+	    ImageEntries.getInstance().rotateCurrentImageLeft();
+	}
+    }
+
+    private static final class RotateRightAction extends JosmAction {
+	private static final long serialVersionUID = 1760186810341888993L;
+
+	private final ImageWayPointDialog dialog;
+
+	public RotateRightAction(final ImageWayPointDialog dialog) {
+	    super(tr("Rotate right"),
+		null,
+		tr("Rotate image right"),
+		null,
+		false);
+	    this.dialog = dialog;
+	}
+
+	public final void actionPerformed(final ActionEvent actionEvent) {
+	    ImageEntries.getInstance().rotateCurrentImageRight();
+	}
+    }
+
+    private static final ImageWayPointDialog INSTANCE = new ImageWayPointDialog();
+    private final ToggleDialog dialog;
+    private final ImageComponent imageDisplay;
+    private final Action previousAction;
+    private final Action nextAction;
+    private final Action rotateLeftAction;
+    private final Action rotateRightAction;
+
+    private final IImageChangeListener listener;
+
+    private ImageWayPointDialog() {
+	this.dialog = new ToggleDialog(tr("WayPoint Image"),
+	    "imagewaypoint",
+	    tr("Display non-geotagged photos"),
+	    Shortcut.registerShortcut("subwindow:imagewaypoint", tr("Toggle: {0}", tr("WayPoint Image")),
+	    KeyEvent.VK_Y, Shortcut.GROUP_LAYER),
+	    200);
+
+	this.previousAction = new PreviousAction(this);
+	this.nextAction = new NextAction(this);
+	this.rotateLeftAction = new RotateLeftAction(this);
+	this.rotateRightAction = new RotateRightAction(this);
+
+	final JButton previousButton = new JButton(this.previousAction);
+	final JButton nextButton = new JButton(this.nextAction);
+	final JButton rotateLeftButton = new JButton(this.rotateLeftAction);
+	final JButton rotateRightButton = new JButton(this.rotateRightAction);
+
+	// default layout, FlowLayout, is fine
+	final JPanel buttonPanel = new JPanel();
+	buttonPanel.add(previousButton);
+	buttonPanel.add(nextButton);
+	buttonPanel.add(rotateLeftButton);
+	buttonPanel.add(rotateRightButton);
+
+	final JPanel mainPanel = new JPanel();
+	mainPanel.setLayout(new BorderLayout());
+
+	this.imageDisplay = new ImageComponent();
+	mainPanel.add(buttonPanel, BorderLayout.SOUTH);
+	mainPanel.add(this.imageDisplay, BorderLayout.CENTER);
+
+	this.listener = new ImageChangeListener(this);
+	ImageEntries.getInstance().addListener(this.listener);
+
+	this.updateUI();
+	dialog.add(mainPanel);
+    }
+
+    private final void updateUI() {
+	this.previousAction.setEnabled(ImageEntries.getInstance().hasPrevious());
+	this.nextAction.setEnabled(ImageEntries.getInstance().hasNext());
+	this.rotateLeftAction.setEnabled(null != ImageEntries.getInstance()
+	    .getCurrentImageEntry());
+	this.rotateRightAction.setEnabled(null != ImageEntries.getInstance()
+	    .getCurrentImageEntry());
+
+	if (null != Main.map) {
+	    Main.map.repaint();
+	}
+    }
+
+    public static ImageWayPointDialog getInstance() {
+	return ImageWayPointDialog.INSTANCE;
+    }
+
+    public final ToggleDialog getDisplayComponent() {
+	return this.dialog;
+    }
+}
Index: /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/ImageWayPointLayer.java
===================================================================
--- /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/ImageWayPointLayer.java	(revision 12588)
+++ /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/ImageWayPointLayer.java	(revision 12588)
@@ -0,0 +1,167 @@
+package org.insignificant.josm.plugins.imagewaypoint;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.Rectangle;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+import javax.swing.Icon;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
+import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.tools.ImageProvider;
+
+public final class ImageWayPointLayer extends Layer {
+    private static final class ImageWayPointMouseListener extends MouseAdapter {
+	private final ImageWayPointLayer layer;
+
+	public ImageWayPointMouseListener(final ImageWayPointLayer layer) {
+	    this.layer = layer;
+	}
+
+	@Override
+	public final void mouseClicked(final MouseEvent event) {
+	    if (MouseEvent.BUTTON1 == event.getButton() && this.layer.visible) {
+		final ImageEntry[] images = ImageEntries.getInstance()
+		    .getImages();
+
+		if (null != images) {
+		    boolean found = false;
+		    // Note: the images are checked in the *reverse* order to
+		    // which they're painted - this means than an image which
+		    // partly obscures another will match the click first
+		    for (int index = images.length - 1; !found && index >= 0; index--) {
+			final Rectangle bounds = images[index].getBounds(Main.map.mapView);
+			if (null != bounds && bounds.contains(event.getPoint())) {
+			    found = true;
+			    ImageEntries.getInstance()
+				.setCurrentImageEntry(images[index]);
+			}
+		    }
+		}
+	    }
+	}
+    }
+
+    private static final class ImageChangeListener implements
+	    IImageChangeListener {
+	private final ImageWayPointLayer layer;
+
+	public ImageChangeListener(final ImageWayPointLayer layer) {
+	    this.layer = layer;
+	}
+
+	public final void onAvailableImageEntriesChanged(
+	    final ImageEntries entries) {
+	    Main.map.repaint();
+	}
+
+	public final void onSelectedImageEntryChanged(final ImageEntries entries) {
+	    Main.map.repaint();
+	}
+    }
+
+    private final MouseListener layerMouseListener;
+    private final IImageChangeListener imageChangeListener;
+
+    public ImageWayPointLayer() {
+	super(tr("Imported Images"));
+
+	Main.main.addLayer(this);
+
+	this.layerMouseListener = new ImageWayPointMouseListener(this);
+	Main.map.mapView.addMouseListener(this.layerMouseListener);
+
+	this.imageChangeListener = new ImageChangeListener(this);
+	ImageEntries.getInstance().addListener(this.imageChangeListener);
+    }
+
+    @Override
+    public final Icon getIcon() {
+	return ImageProvider.get("dialogs/imagewaypoint");
+    }
+
+    @Override
+    public final Object getInfoComponent() {
+	return null;
+    }
+
+    @Override
+    public final Component[] getMenuEntries() {
+	return new Component[0];
+    }
+
+    @Override
+    public final String getToolTipText() {
+	// TODO
+	return "";
+    }
+
+    @Override
+    public final boolean isMergable(final Layer other) {
+	// TODO
+	return false;
+    }
+
+    @Override
+    public final void mergeFrom(final Layer from) {
+	// TODO not supported yet
+    }
+
+    @Override
+    public final void paint(final Graphics graphics, final MapView mapView) {
+	final ImageEntry[] images = ImageEntries.getInstance().getImages();
+
+	if (null != images) {
+	    final ImageEntry currentImage = ImageEntries.getInstance()
+		.getCurrentImageEntry();
+
+	    for (int index = 0; index < images.length; index++) {
+		final Rectangle bounds = images[index].getBounds(mapView);
+		if (null != bounds) {
+		    if (images[index] == currentImage) {
+			ImageEntry.SELECTED_ICON.paintIcon(mapView,
+			    graphics,
+			    bounds.x,
+			    bounds.y);
+		    } else {
+			ImageEntry.ICON.paintIcon(mapView,
+			    graphics,
+			    bounds.x,
+			    bounds.y);
+		    }
+		}
+	    }
+	}
+    }
+
+    @Override
+    public final void visitBoundingBox(final BoundingXYVisitor visitor) {
+	final ImageEntry[] images = ImageEntries.getInstance().getImages();
+
+	if (null != images) {
+	    for (int index = 0; index < images.length; index++) {
+		final ImageEntry imageEntry = images[index];
+
+		if (null != imageEntry.getWayPoint()
+			&& null != imageEntry.getWayPoint().eastNorth) {
+		    visitor.visit(imageEntry.getWayPoint().eastNorth);
+		}
+	    }
+	}
+    }
+
+    @Override
+    public final void destroy() {
+	super.destroy();
+
+	Main.map.mapView.removeMouseListener(this.layerMouseListener);
+	ImageEntries.getInstance().removeListener(this.imageChangeListener);
+    }
+}
Index: /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/ImageWayPointPlugin.java
===================================================================
--- /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/ImageWayPointPlugin.java	(revision 12588)
+++ /applications/editors/josm/plugins/imagewaypoint/src/org/insignificant/josm/plugins/imagewaypoint/ImageWayPointPlugin.java	(revision 12588)
@@ -0,0 +1,141 @@
+package org.insignificant.josm.plugins.imagewaypoint;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JFileChooser;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.filechooser.FileFilter;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.JosmAction;
+import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.tools.I18n;
+
+public final class ImageWayPointPlugin extends org.openstreetmap.josm.plugins.Plugin {
+    private static final class ImageFileFilter extends FileFilter {
+	@Override
+	public final boolean accept(final File file) {
+	    return file.isDirectory()
+		    || file.getName().toLowerCase().endsWith(".jpg")
+		    || file.getName().toLowerCase().endsWith(".jpeg")
+		    || file.getName().toLowerCase().endsWith(".png")
+		    || file.getName().toLowerCase().endsWith(".gif");
+	}
+
+	@Override
+	public final String getDescription() {
+	    return tr("Image files (*.jpg, *.jpeg, *.png, *.gif)");
+	}
+    }
+
+    private static final class LoadImagesAction extends JosmAction {
+	private static final long serialVersionUID = 4480306223276347301L;
+
+	private final ImageWayPointPlugin plugin;
+
+	public LoadImagesAction(final ImageWayPointPlugin plugin) {
+	    super(tr("Open images with ImageWayPoint"),
+		"imagewaypoint-open",
+		tr("Load set of images as a new layer."),
+		null,
+		false);
+
+	    this.plugin = plugin;
+	}
+
+	public final void actionPerformed(final ActionEvent actionEvent) {
+	    final JFileChooser fileChooser = new JFileChooser(Main.pref.get("tagimages.lastdirectory"));
+	    fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
+	    fileChooser.setMultiSelectionEnabled(true);
+	    fileChooser.setAcceptAllFileFilterUsed(false);
+	    fileChooser.setFileFilter(new ImageFileFilter());
+
+	    fileChooser.showOpenDialog(Main.parent);
+
+	    final File[] selectedFiles = fileChooser.getSelectedFiles();
+	    if (null != selectedFiles && 0 != selectedFiles.length) {
+		Main.pref.put("tagimages.lastdirectory",
+		    fileChooser.getCurrentDirectory().getPath());
+
+		// recursively find all files
+		final List<File> allFiles = new ArrayList<File>();
+		this.plugin.addFiles(allFiles, selectedFiles);
+
+		// add files to ImageEntries
+		ImageEntries.getInstance()
+		    .add(allFiles.toArray(new File[allFiles.size()]));
+
+		// check to see whether there's already an ImageWayPointLayer
+		boolean foundImageWayPointLayer = false;
+		if (null != Main.map && null != Main.map.mapView) {
+		    final Collection<Layer> layerCollection = Main.map.mapView.getAllLayers();
+		    final Iterator<Layer> layerIterator = layerCollection.iterator();
+		    while (layerIterator.hasNext() && !foundImageWayPointLayer) {
+			if (layerIterator.next() instanceof ImageWayPointLayer) {
+			    foundImageWayPointLayer = true;
+			}
+		    }
+		}
+		if (!foundImageWayPointLayer) {
+		    new ImageWayPointLayer();
+		}
+	    }
+	}
+    }
+
+    /**
+     * no-arg constructor is required by JOSM
+     */
+    public ImageWayPointPlugin() {
+	// find the File menu
+	final JMenuBar menuBar = Main.main.menu;
+	JMenu fileMenu = null;
+
+	if (null != menuBar) {
+	    for (int index = 0; index < menuBar.getMenuCount()
+		    && null == fileMenu; index++) {
+		if (I18n.tr("File").equals(menuBar.getMenu(index).getText())) {
+		    fileMenu = menuBar.getMenu(index);
+		}
+	    }
+	}
+
+	if (null != fileMenu) {
+	    // now create our 'load' menu item and add to the file menu
+	    final JMenuItem menuItem = new JMenuItem(new LoadImagesAction(this));
+	    fileMenu.add(menuItem, 2);
+	}
+    }
+
+    @Override
+    public final void mapFrameInitialized(final MapFrame oldFrame,
+	final MapFrame newFrame) {
+	if (newFrame != null) {
+	    newFrame.addToggleDialog(ImageWayPointDialog.getInstance()
+		.getDisplayComponent());
+	} else {
+	    ImageEntries.getInstance().setCurrentImageEntry(null);
+	}
+    }
+
+    private void addFiles(List<File> allFiles, File[] selectedFiles) {
+	for (int index = 0; index < selectedFiles.length; index++) {
+	    final File selectedFile = selectedFiles[index];
+	    if (selectedFile.isDirectory()) {
+		this.addFiles(allFiles, selectedFile.listFiles());
+	    } else if (selectedFile.getName().toLowerCase().endsWith(".jpg")) {
+		allFiles.add(selectedFile);
+	    }
+	}
+    }
+}
Index: /applications/editors/josm/plugins/lakewalker/build.xml
===================================================================
--- /applications/editors/josm/plugins/lakewalker/build.xml	(revision 12587)
+++ /applications/editors/josm/plugins/lakewalker/build.xml	(revision 12588)
@@ -59,5 +59,5 @@
         <attribute name="Plugin-Description" value="Interface to Lakewalker module" />
         <attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
-        <attribute name="Plugin-Mainversion" value="1084"/>
+        <attribute name="Plugin-Mainversion" value="1180"/>
         <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
         <attribute name="Author" value="Brent Easton &lt;b.easton@uws.edu.au>, Jason Reid &lt;jrreid@ucalgary.ca>"/>
Index: /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerPreferences.java
===================================================================
--- /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerPreferences.java	(revision 12587)
+++ /applications/editors/josm/plugins/lakewalker/src/org/openstreetmap/josm/plugins/lakewalker/LakewalkerPreferences.java	(revision 12588)
@@ -132,5 +132,5 @@
    * Save entered preference values on OK button
    */
-  public void ok() {
+  public boolean ok() {
     Main.pref.put(PREF_MAX_SEG, maxSegsConfig.getValueString());
     Main.pref.put(PREF_MAX_NODES, maxNodesConfig.getValueString());
@@ -146,5 +146,5 @@
     Main.pref.put(PREF_MAXCACHESIZE, maxCacheSizeConfig.getValueString());
     Main.pref.put(PREF_MAXCACHEAGE, maxCacheAgeConfig.getValueString());
+    return false;
   }
-  
 }
Index: /applications/editors/josm/plugins/openstreetbugs/build.xml
===================================================================
--- /applications/editors/josm/plugins/openstreetbugs/build.xml	(revision 12587)
+++ /applications/editors/josm/plugins/openstreetbugs/build.xml	(revision 12588)
@@ -50,4 +50,5 @@
 				<attribute name="Plugin-Version" value="${version}" />
 				<attribute name="Plugin-Date" value="${current.time}" />
+				<attribute name="Plugin-Mainversion" value="1180"/>
 				<attribute name="Author" value="Henrik Niehaus" />
 			</manifest>
Index: /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbDownloadLoop.java
===================================================================
--- /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbDownloadLoop.java	(revision 12587)
+++ /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbDownloadLoop.java	(revision 12588)
@@ -28,4 +28,6 @@
 package org.openstreetmap.josm.plugins.osb;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.awt.geom.Point2D;
 import java.util.concurrent.TimeUnit;
@@ -48,5 +50,5 @@
 	
 	public OsbDownloadLoop() {
-	    setName("OpenStreetBugs download loop");
+	    setName(tr("OpenStreetBugs download loop"));
 		start();
 	}
Index: /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbLayer.java
===================================================================
--- /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbLayer.java	(revision 12587)
+++ /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbLayer.java	(revision 12588)
@@ -28,4 +28,6 @@
 package org.openstreetmap.josm.plugins.osb;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.awt.Component;
 import java.awt.Graphics;
@@ -57,5 +59,4 @@
 import org.openstreetmap.josm.plugins.osb.gui.action.OsbAction;
 import org.openstreetmap.josm.plugins.osb.gui.action.PopupFactory;
-import org.openstreetmap.josm.plugins.osb.i18n.Messages;
 import org.openstreetmap.josm.tools.ColorHelper;
 
@@ -98,5 +99,5 @@
 	@Override
 	public String getToolTipText() {
-		return Messages.translate(getClass(), "tooltip");
+		return tr("Displays OpenStreetBugs issues");
 	}
 
Index: /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbPlugin.java
===================================================================
--- /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbPlugin.java	(revision 12587)
+++ /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbPlugin.java	(revision 12588)
@@ -28,4 +28,6 @@
 package org.openstreetmap.josm.plugins.osb;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
Index: /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbUploadHook.java
===================================================================
--- /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbUploadHook.java	(revision 12587)
+++ /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbUploadHook.java	(revision 12588)
@@ -28,4 +28,6 @@
 package org.openstreetmap.josm.plugins.osb;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.util.Collection;
 import java.util.Iterator;
@@ -47,7 +49,7 @@
 		if(containsOsbData) {
 			JOptionPane.showMessageDialog(Main.parent, 
-				"<html>The selected data contains data from OpenStreetBugs.<br>" +
-				"You cannot upload these data. Maybe you have selected the wrong layer?", 
-				"Warning", JOptionPane.WARNING_MESSAGE);
+				tr("<html>The selected data contains data from OpenStreetBugs.<br>" +
+				"You cannot upload these data. Maybe you have selected the wrong layer?"), 
+				tr("Warning"), JOptionPane.WARNING_MESSAGE);
 			return false;
 		} else {
Index: /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/api/CloseAction.java
===================================================================
--- /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/api/CloseAction.java	(revision 12587)
+++ /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/api/CloseAction.java	(revision 12588)
@@ -28,4 +28,6 @@
 package org.openstreetmap.josm.plugins.osb.api;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.io.IOException;
 
@@ -36,5 +38,4 @@
 import org.openstreetmap.josm.plugins.osb.ConfigKeys;
 import org.openstreetmap.josm.plugins.osb.api.util.HttpUtils;
-import org.openstreetmap.josm.plugins.osb.i18n.Messages;
 
 public class CloseAction {
@@ -61,6 +62,6 @@
 		} else {
 			JOptionPane.showMessageDialog(Main.parent,
-					Messages.translate(getClass(), "error_occured", new Object[] {result}),
-					Messages.translate(getClass(), "error_occured_title"),
+					tr("An error occured: {0}", new Object[] {result}),
+					tr("Error"),
 					JOptionPane.ERROR_MESSAGE);
 		}
Index: /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/api/EditAction.java
===================================================================
--- /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/api/EditAction.java	(revision 12587)
+++ /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/api/EditAction.java	(revision 12588)
@@ -28,4 +28,6 @@
 package org.openstreetmap.josm.plugins.osb.api;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.io.IOException;
 import java.net.URLEncoder;
@@ -37,5 +39,4 @@
 import org.openstreetmap.josm.plugins.osb.ConfigKeys;
 import org.openstreetmap.josm.plugins.osb.api.util.HttpUtils;
-import org.openstreetmap.josm.plugins.osb.i18n.Messages;
 
 public class EditAction {
@@ -66,6 +67,6 @@
 		} else {
 			JOptionPane.showMessageDialog(Main.parent,
-					Messages.translate(getClass(), "error_occured", new Object[] {result}),
-					Messages.translate(getClass(), "error_occured_title"),
+					tr("An error occured: {0}", new Object[] {result}),
+					tr("Error"),
 					JOptionPane.ERROR_MESSAGE);
 		}
Index: /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/api/NewAction.java
===================================================================
--- /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/api/NewAction.java	(revision 12587)
+++ /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/api/NewAction.java	(revision 12588)
@@ -27,4 +27,6 @@
  */
 package org.openstreetmap.josm.plugins.osb.api;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.Point;
@@ -72,5 +74,5 @@
 			id = m.group(1);
 		} else {
-			throw new RuntimeException("Couldn't create new bug. Result: " + result);
+			throw new RuntimeException(tr("Couldn't create new bug. Result: {0}" + result));
 		}
 		
Index: /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/api/util/HttpUtils.java
===================================================================
--- /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/api/util/HttpUtils.java	(revision 12587)
+++ /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/api/util/HttpUtils.java	(revision 12588)
@@ -27,4 +27,6 @@
  */
 package org.openstreetmap.josm.plugins.osb.api.util;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.ByteArrayOutputStream;
@@ -165,5 +167,5 @@
             return value.get(0);
         } else {
-            throw new RuntimeException("Header contains several values and cannot be mapped to a single String");
+            throw new RuntimeException(tr("Header contains several values and cannot be mapped to a single String"));
         }
     }
Index: /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/OsbDialog.java
===================================================================
--- /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/OsbDialog.java	(revision 12587)
+++ /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/OsbDialog.java	(revision 12588)
@@ -28,4 +28,6 @@
 package org.openstreetmap.josm.plugins.osb.gui;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.awt.BorderLayout;
 import java.awt.GridLayout;
@@ -72,5 +74,4 @@
 import org.openstreetmap.josm.plugins.osb.gui.action.OsbActionObserver;
 import org.openstreetmap.josm.plugins.osb.gui.action.PopupFactory;
-import org.openstreetmap.josm.plugins.osb.i18n.Messages;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -89,10 +90,10 @@
 	
 	public OsbDialog(final OsbPlugin plugin) {
-		super("OpenStreetBugs", "icon_error22", 
-				Messages.translate(OsbDialog.class, "tooltip"), 
+		super(tr("Open OpenStreetBugs"), "icon_error22", 
+				tr("Open the OpenStreetBugs window and activates the automatic download"),
 				Shortcut.registerShortcut(
-						Messages.translate(OsbDialog.class, "shortcut"), 
-						Messages.translate(OsbDialog.class, "shortcut"), 
-						KeyEvent.VK_O, Shortcut.GROUP_MENU), 
+						"view:openstreetbugs",
+						tr("Toggle: {0}", tr("Open OpenStreetBugs")),
+						KeyEvent.VK_O, Shortcut.GROUP_MENU, Shortcut.SHIFT_DEFAULT), 
 				150);
 		
@@ -110,6 +111,6 @@
 		JPanel buttonPanel = new JPanel(new GridLayout(2, 2));
 		add(buttonPanel, BorderLayout.SOUTH);
-		refresh = new JButton(Messages.translate(OsbDialog.class, "refresh"));
-		refresh.setToolTipText(Messages.translate(OsbDialog.class, "refresh"));
+		refresh = new JButton(tr("Refresh"));
+		refresh.setToolTipText(tr("Refresh"));
 		refresh.setIcon(OsbPlugin.loadIcon("view-refresh22.png"));
 		refresh.setHorizontalAlignment(SwingConstants.LEFT);
@@ -120,6 +121,6 @@
 				if(Main.map.mapView.zoom() > 15 || Main.map.mapView.zoom() < 9) {
 					JOptionPane.showMessageDialog(Main.parent, 
-							Messages.translate(OsbDialog.class, "out_of_bounds"),
-							Messages.translate(OsbDialog.class, "out_of_bounds_title"), 
+							tr("The visible area is either too small or too big to download data from OpenStreetBugs"),
+							tr("Warning"),
 							JOptionPane.INFORMATION_MESSAGE);
 					return;
Index: /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/action/AddCommentAction.java
===================================================================
--- /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/action/AddCommentAction.java	(revision 12587)
+++ /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/action/AddCommentAction.java	(revision 12588)
@@ -28,4 +28,6 @@
 package org.openstreetmap.josm.plugins.osb.gui.action;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.awt.event.ActionEvent;
 
@@ -35,5 +37,4 @@
 import org.openstreetmap.josm.plugins.osb.ConfigKeys;
 import org.openstreetmap.josm.plugins.osb.api.EditAction;
-import org.openstreetmap.josm.plugins.osb.i18n.Messages;
 
 public class AddCommentAction extends OsbAction {
@@ -44,5 +45,5 @@
 	
 	public AddCommentAction() {
-		super(Messages.translate(AddCommentAction.class, "name"));
+		super(tr("Add a comment"));
 	}
 	
@@ -52,7 +53,7 @@
 		String nickname = Main.pref.get(ConfigKeys.OSB_NICKNAME);
 		if(nickname == null || nickname.length() == 0) {
-			nickname = JOptionPane.showInputDialog(Main.parent, Messages.translate(getClass(), "enter_nickname"));
+			nickname = JOptionPane.showInputDialog(Main.parent, tr("Please enter a user name"));
 			if(nickname == null) {
-				nickname = "NoName";
+				nickname = tr("NoName");
 			} else {
 				Main.pref.put(ConfigKeys.OSB_NICKNAME, nickname);
@@ -60,5 +61,5 @@
 		}
 		
-		String comment = JOptionPane.showInputDialog(Main.parent, Messages.translate(getClass(), "enter_comment"));
+		String comment = JOptionPane.showInputDialog(Main.parent, tr("Enter your comment"));
 		if(comment != null) {
 			comment = comment.concat(" [").concat(nickname).concat("]");
Index: /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/action/CloseIssueAction.java
===================================================================
--- /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/action/CloseIssueAction.java	(revision 12587)
+++ /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/action/CloseIssueAction.java	(revision 12588)
@@ -28,4 +28,6 @@
 package org.openstreetmap.josm.plugins.osb.gui.action;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.awt.event.ActionEvent;
 import java.io.IOException;
@@ -35,5 +37,4 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.plugins.osb.api.CloseAction;
-import org.openstreetmap.josm.plugins.osb.i18n.Messages;
 
 public class CloseIssueAction extends OsbAction {
@@ -44,5 +45,5 @@
 	
 	public CloseIssueAction() {
-		super(Messages.translate(CloseIssueAction.class, "name"));
+		super(tr("Mark as done"));
 	}
 	
@@ -50,6 +51,6 @@
 	protected void doActionPerformed(ActionEvent e) throws IOException {
 		int result = JOptionPane.showConfirmDialog(Main.parent,
-				Messages.translate(getClass(), "question"),
-				Messages.translate(getClass(), "title"),
+				tr("Really mark this issue as ''done''?"),
+				tr("Really close?"),
 				JOptionPane.YES_NO_OPTION);
 		
Index: /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/action/NewIssueAction.java
===================================================================
--- /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/action/NewIssueAction.java	(revision 12587)
+++ /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/action/NewIssueAction.java	(revision 12588)
@@ -28,4 +28,6 @@
 package org.openstreetmap.josm.plugins.osb.gui.action;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.awt.Cursor;
 import java.awt.event.ActionEvent;
@@ -42,5 +44,4 @@
 import org.openstreetmap.josm.plugins.osb.OsbPlugin;
 import org.openstreetmap.josm.plugins.osb.api.NewAction;
-import org.openstreetmap.josm.plugins.osb.i18n.Messages;
 
 public class NewIssueAction extends OsbAction implements MouseListener {
@@ -55,5 +56,5 @@
 	
 	public NewIssueAction(JToggleButton button, OsbPlugin plugin) {
-		super(Messages.translate(NewIssueAction.class, "name"));
+		super(tr("New issue"));
 		this.button = button;
 		this.plugin = plugin;
@@ -92,5 +93,5 @@
 		String nickname = Main.pref.get(ConfigKeys.OSB_NICKNAME);
 		if(nickname == null || nickname.length() == 0) {
-			nickname = JOptionPane.showInputDialog(Main.parent, Messages.translate(AddCommentAction.class, "enter_nickname"));
+			nickname = JOptionPane.showInputDialog(Main.parent, tr("Please enter a user name"));
 			if(nickname == null) {
 				nickname = "NoName";
@@ -102,6 +103,6 @@
 		// get the comment
 		String result = JOptionPane.showInputDialog(Main.parent,
-				Messages.translate(getClass(), "question"),
-				Messages.translate(getClass(), "title"),
+				tr("Describe the problem precisely"),
+				tr("Create issue"),
 				JOptionPane.QUESTION_MESSAGE);
 		
@@ -119,6 +120,6 @@
 				e1.printStackTrace();
 				JOptionPane.showMessageDialog(Main.parent,
-						Messages.translate(getClass(), "error_occured", new Object[] {result}),
-						Messages.translate(getClass(), "error_occured_title"),
+						tr("An error occured: {0}", new Object[] {result}),
+						tr("Error"),
 						JOptionPane.ERROR_MESSAGE);
 			}
Index: /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/action/PopupFactory.java
===================================================================
--- /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/action/PopupFactory.java	(revision 12587)
+++ /applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/action/PopupFactory.java	(revision 12588)
@@ -28,4 +28,6 @@
 package org.openstreetmap.josm.plugins.osb.gui.action;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
@@ -45,5 +47,5 @@
 			return getFixedPopup();
 		} else {
-			throw new RuntimeException("Unknown issue state");
+			throw new RuntimeException(tr("Unknown issue state"));
 		}
 	}
Index: /applications/editors/josm/plugins/openvisible/build.xml
===================================================================
--- /applications/editors/josm/plugins/openvisible/build.xml	(revision 12587)
+++ /applications/editors/josm/plugins/openvisible/build.xml	(revision 12588)
@@ -17,6 +17,4 @@
   <property name="plugin.jar" value="${plugin.name}.jar"/>
   
-  <!-- plugin meta data (enter new version number if anything changed!) -->
-  <property name="plugin.version" value="0.2.3"/>
   <property name="plugin.description" value="Allows opening gpx/osm files that intersect the currently visible screen area (V${plugin.version})."/>
   <property name="plugin.stage" value="50"/>
@@ -47,4 +45,12 @@
     <mkdir dir="${plugin.dist.dir}"/>
     
+    <exec append="false" output="REVISION" executable="svn" failifexecutionfails="false">
+      <env key="LANG" value="C"/>
+      <arg value="info"/>
+      <arg value="--xml"/>
+      <arg value="."/>
+    </exec>
+    <xmlproperty file="REVISION" prefix="version" keepRoot="false" collapseAttributes="true"/>
+    <delete file="REVISION"/>
     <!-- create jar file -->
     <jar destfile="${plugin.dist.dir}/${plugin.jar}" basedir="${plugin.build.dir}">
@@ -52,5 +58,7 @@
         <attribute name="Plugin-Class" value="${plugin.class}" />
         <attribute name="Plugin-Description" value="${plugin.description}" />
-        <attribute name="Plugin-Version" value="${plugin.version}" />
+        <attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
+        <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
+        <attribute name="Plugin-Mainversion" value="1180" />
         <attribute name="Plugin-Dependencies" value="jgrapht-jdk1.5" />
         <attribute name="Plugin-Stage" value="${plugin.stage}" />
Index: /applications/editors/josm/plugins/openvisible/src/at/dallermassl/josm/plugin/openvisible/OpenVisibleAction.java
===================================================================
--- /applications/editors/josm/plugins/openvisible/src/at/dallermassl/josm/plugin/openvisible/OpenVisibleAction.java	(revision 12587)
+++ /applications/editors/josm/plugins/openvisible/src/at/dallermassl/josm/plugin/openvisible/OpenVisibleAction.java	(revision 12588)
@@ -31,4 +31,5 @@
 import org.openstreetmap.josm.io.GpxReader;
 import org.openstreetmap.josm.io.OsmReader;
+import org.openstreetmap.josm.tools.Shortcut;
 import org.xml.sax.SAXException;
 
@@ -41,6 +42,8 @@
     
     public OpenVisibleAction() {
-        super(tr("Open Visible ..."), "openvisible", tr("Open only files that are visible in current view."), KeyEvent.VK_O, 
-            InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK, true);
+        super(tr("Open Visible ..."), "openvisible",
+        tr("Open only files that are visible in current view."),
+        Shortcut.registerShortcut("tools:openvisible", tr("Menu: {0}", tr("Open Visible ...")),
+        KeyEvent.VK_I, Shortcut.GROUP_MENU, Shortcut.SHIFT_DEFAULT), true);
     }
 
Index: /applications/editors/josm/plugins/openvisible/src/at/dallermassl/josm/plugin/openvisible/OpenVisiblePlugin.java
===================================================================
--- /applications/editors/josm/plugins/openvisible/src/at/dallermassl/josm/plugin/openvisible/OpenVisiblePlugin.java	(revision 12587)
+++ /applications/editors/josm/plugins/openvisible/src/at/dallermassl/josm/plugin/openvisible/OpenVisiblePlugin.java	(revision 12588)
@@ -8,4 +8,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.MainMenu;
 import org.openstreetmap.josm.plugins.Plugin;
 import org.openstreetmap.josm.actions.JosmAction;
@@ -16,15 +17,8 @@
  */
 public class OpenVisiblePlugin extends Plugin {
-    
+
     public OpenVisiblePlugin() {
         super();
-        JMenu fileMenu = Main.main.menu.fileMenu;
-        JosmAction openVisible = new OpenVisibleAction();
-
-        //JMenu navigatorMenu = new JMenu("Open Visible");
-        JMenuItem menuItem = new JMenuItem(openVisible);
-        
-        fileMenu.add(menuItem,2);
-        menuItem.setAccelerator(openVisible.shortcut);
+        MainMenu.add(Main.main.menu.fileMenu, new OpenVisibleAction());
     }
 
Index: /applications/editors/josm/plugins/osmarender/src/OsmarenderPlugin.java
===================================================================
--- /applications/editors/josm/plugins/osmarender/src/OsmarenderPlugin.java	(revision 12587)
+++ /applications/editors/josm/plugins/osmarender/src/OsmarenderPlugin.java	(revision 12588)
@@ -139,6 +139,7 @@
 				firefox.setText(Main.pref.get("osmarender.firefox"));
 			}
-			public void ok() {
+			public boolean ok() {
 				Main.pref.put("osmarender.firefox", firefox.getText());
+				return false;
 			}
 		};
Index: /applications/editors/josm/plugins/pluginmanager/build.xml
===================================================================
--- /applications/editors/josm/plugins/pluginmanager/build.xml	(revision 12587)
+++ /applications/editors/josm/plugins/pluginmanager/build.xml	(revision 12588)
@@ -17,6 +17,4 @@
   <property name="plugin.jar" value="${plugin.name}.jar"/>
   
-  <!-- plugin meta data (enter new version number if anything changed!) -->
-  <property name="plugin.version" value="0.3.0"/>
   <property name="plugin.description" value="Manage plugins and provide update mechanism (V${plugin.version})."/>
   <property name="plugin.class" value="at.dallermassl.josm.plugin.pluginmanager.PluginManagerPlugin"/>
@@ -45,4 +43,12 @@
     </copy>
     
+    <exec append="false" output="REVISION" executable="svn" failifexecutionfails="false">
+      <env key="LANG" value="C"/>
+      <arg value="info"/>
+      <arg value="--xml"/>
+      <arg value="."/>
+    </exec>
+    <xmlproperty file="REVISION" prefix="version" keepRoot="false" collapseAttributes="true"/>
+    <delete file="REVISION"/>
     <!-- create jar file -->
     <jar destfile="${plugin.jar}" basedir="${plugin.build.dir}">
@@ -50,6 +56,7 @@
         <attribute name="Plugin-Class" value="${plugin.class}" />
         <attribute name="Plugin-Description" value="${plugin.description}" />
-        <attribute name="Plugin-Version" value="${plugin.version}" />
-        <!--attribute name="Plugin-Dependencies" value="org.eigenheimstrasse.josm" /-->
+        <attribute name="Plugin-Mainversion" value="1180" />
+        <attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
+        <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
       </manifest>
     </jar>
Index: /applications/editors/josm/plugins/pluginmanager/src/at/dallermassl/josm/plugin/pluginmanager/PluginManagerPreference.java
===================================================================
--- /applications/editors/josm/plugins/pluginmanager/src/at/dallermassl/josm/plugin/pluginmanager/PluginManagerPreference.java	(revision 12587)
+++ /applications/editors/josm/plugins/pluginmanager/src/at/dallermassl/josm/plugin/pluginmanager/PluginManagerPreference.java	(revision 12588)
@@ -50,5 +50,6 @@
     private JList siteList;
     private DefaultListModel siteListModel;
-    
+    private boolean requiresRestart = false;
+
     protected DefaultListModel createListModel() {
         Map<String, String> sites = Main.pref.getAllPrefix(PREF_KEY_REMOTE_SITE_PREFIX);
@@ -103,5 +104,4 @@
                     return;
                 }
-                gui.requiresRestart = gui.requiresRestart || false;
             }
         });
@@ -117,5 +117,4 @@
                         siteListModel.removeElementAt(selected[i]);
                     }
-                    gui.requiresRestart = gui.requiresRestart || false;
                 }
             }
@@ -142,5 +141,5 @@
                     PluginUpdateFrame frame = new PluginUpdateFrame(tr("Plugins"), descriptions);
                     frame.setVisible(true);
-                    gui.requiresRestart = true;
+                    requiresRestart = true;
                 }
             }
@@ -167,6 +166,5 @@
      * @see org.openstreetmap.josm.gui.preferences.PreferenceSetting#ok()
      */
-    // only in 1.6 allowed @Override
-    public void ok() {
+    public boolean ok() {
         // first remove all old entries:
         Map<String, String> keys = Main.pref.getAllPrefix(PREF_KEY_REMOTE_SITE_PREFIX);
@@ -189,5 +187,5 @@
             }
         }
+        return requiresRestart;
     }
-
 }
Index: /applications/editors/josm/plugins/remotecontrol/build.xml
===================================================================
--- /applications/editors/josm/plugins/remotecontrol/build.xml	(revision 12587)
+++ /applications/editors/josm/plugins/remotecontrol/build.xml	(revision 12588)
@@ -40,4 +40,5 @@
 	<attribute name="Plugin-Description" value="A plugin allowing other applications to send commands to JOSM." />
 	<attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
+	<attribute name="Plugin-Mainversion" value="1180"/>
 	<attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
 	<attribute name="Author" value="Frederik Ramm &lt;frederik@remote.org&gt;"/>
Index: /applications/editors/josm/plugins/remotecontrol/src/org/openstreetmap/josm/plugins/remotecontrol/RemoteControlPreferences.java
===================================================================
--- /applications/editors/josm/plugins/remotecontrol/src/org/openstreetmap/josm/plugins/remotecontrol/RemoteControlPreferences.java	(revision 12587)
+++ /applications/editors/josm/plugins/remotecontrol/src/org/openstreetmap/josm/plugins/remotecontrol/RemoteControlPreferences.java	(revision 12588)
@@ -57,10 +57,10 @@
     }
     
-    public void ok() {
+    public boolean ok() {
     	Main.pref.put("remotecontrol.permission.load-data", permissionLoadData.isSelected());
     	Main.pref.put("remotecontrol.permission.change-selection", permissionChangeSelection.isSelected());
     	Main.pref.put("remotecontrol.permission.change-viewport", permissionChangeViewport.isSelected());
     	Main.pref.put("remotecontrol.always-confirm", alwaysAskUserConfirm.isSelected());
-    		
+    	return false;
     }
 }
Index: /applications/editors/josm/plugins/slippymap/build.xml
===================================================================
--- /applications/editors/josm/plugins/slippymap/build.xml	(revision 12587)
+++ /applications/editors/josm/plugins/slippymap/build.xml	(revision 12588)
@@ -42,4 +42,5 @@
         <attribute name="Plugin-Description" value="Displays a slippy map tile grid, and tile status info" />
         <attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
+        <attribute name="Plugin-Mainversion" value="1180"/>
         <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
       </manifest>
Index: /applications/editors/josm/plugins/slippymap/src/org/openstreetmap/josm/plugins/slippymap/SlippyMapPreferenceSetting.java
===================================================================
--- /applications/editors/josm/plugins/slippymap/src/org/openstreetmap/josm/plugins/slippymap/SlippyMapPreferenceSetting.java	(revision 12587)
+++ /applications/editors/josm/plugins/slippymap/src/org/openstreetmap/josm/plugins/slippymap/SlippyMapPreferenceSetting.java	(revision 12588)
@@ -58,8 +58,9 @@
      * Someone pressed the "ok" button
      */
-    public void ok()
+    public boolean ok()
     {
         Main.pref.put(SlippyMapPreferences.PREFERENCE_TILE_URL, tileSourceCombo
                 .getSelectedItem().toString());
+        return false;
     }
 }
Index: /applications/editors/josm/plugins/tagging-preset-tester/build.xml
===================================================================
--- /applications/editors/josm/plugins/tagging-preset-tester/build.xml	(revision 12587)
+++ /applications/editors/josm/plugins/tagging-preset-tester/build.xml	(revision 12588)
@@ -15,12 +15,28 @@
     <echo message="creating ${plugin.jar}"/>
     <mkdir dir="build"/>
-    <javac srcdir="src" destdir="build" classpath="../../core/dist/josm-custom.jar" />
+    <javac srcdir="src" destdir="build" classpath="../../core/dist/josm-custom.jar">
+      <compilerarg value="-Xlint:deprecation"/>
+    </javac>
   </target>
 
   <target name="dist" depends="compile">
     <mkdir dir="dist"/>
-    <jar destfile="${plugin.jar}" 
-	 basedir="build"
-	 manifest="src/org/openstreetmap/josm/plugins/taggingpresettester/MANIFEST.MF">
+    <exec append="false" output="REVISION" executable="svn" failifexecutionfails="false">
+      <env key="LANG" value="C"/>
+      <arg value="info"/>
+      <arg value="--xml"/>
+      <arg value="."/>
+    </exec>
+    <xmlproperty file="REVISION" prefix="version" keepRoot="false" collapseAttributes="true"/>
+    <delete file="REVISION"/>
+    <jar destfile="${plugin.jar}" basedir="build">
+      <manifest>
+        <attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
+        <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
+        <attribute name="Plugin-Description" value="Make the Tagging Preset Tester tool available in the help menu." />
+        <attribute name="Main-Class" value="org.openstreetmap.josm.plugins.taggingpresettester.TaggingPresetTester" />
+        <attribute name="Plugin-Class" value="org.openstreetmap.josm.plugins.taggingpresettester.TaggingPresetTesterAction" />
+        <attribute name="Plugin-Mainversion" value="1180" />
+      </manifest>
       <fileset dir="."><include name="images/*"/></fileset>
     </jar>
Index: plications/editors/josm/plugins/tagging-preset-tester/src/org/openstreetmap/josm/plugins/taggingpresettester/MANIFEST.MF
===================================================================
--- /applications/editors/josm/plugins/tagging-preset-tester/src/org/openstreetmap/josm/plugins/taggingpresettester/MANIFEST.MF	(revision 12587)
+++ 	(revision )
@@ -1,6 +1,0 @@
-Manifest-Version: 1.0
-Main-Class: org.openstreetmap.josm.plugins.taggingpresettester.TaggingPresetTester
-Plugin-Class: org.openstreetmap.josm.plugins.taggingpresettester.TaggingPresetTesterAction
-Plugin-Description: Make the Tagging Preset Tester tool available in
-  the help menu.
-Plugin-Version: 1.0
Index: /applications/editors/josm/plugins/tagging-preset-tester/src/org/openstreetmap/josm/plugins/taggingpresettester/TaggingPresetTesterAction.java
===================================================================
--- /applications/editors/josm/plugins/tagging-preset-tester/src/org/openstreetmap/josm/plugins/taggingpresettester/TaggingPresetTesterAction.java	(revision 12587)
+++ /applications/editors/josm/plugins/tagging-preset-tester/src/org/openstreetmap/josm/plugins/taggingpresettester/TaggingPresetTesterAction.java	(revision 12588)
@@ -10,4 +10,6 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
+import org.openstreetmap.josm.gui.MainMenu;
+import org.openstreetmap.josm.tools.Shortcut;
 
 /**
@@ -18,7 +20,11 @@
 
 	public TaggingPresetTesterAction() {
-		super(tr("Tagging Preset Tester"), "tagging-preset-tester", tr("Open the tagging preset test tool for previewing tagging preset dialogs."), KeyEvent.VK_A, KeyEvent.CTRL_DOWN_MASK | KeyEvent.ALT_DOWN_MASK, true);
+		super(tr("Tagging Preset Tester"), "tagging-preset-tester",
+		tr("Open the tagging preset test tool for previewing tagging preset dialogs."),
+		Shortcut.registerShortcut("tools:taggingresettester",
+		tr("Tool: {0}", tr("Tagging Preset Tester")),
+		KeyEvent.VK_A, Shortcut.GROUP_EDIT, Shortcut.SHIFT_DEFAULT), true);
 		Main.main.menu.helpMenu.addSeparator();
-		Main.main.menu.helpMenu.add(this);
+		MainMenu.add(Main.main.menu.helpMenu, this);
 	}
 
Index: /applications/editors/josm/plugins/tcxplugin/build.xml
===================================================================
--- /applications/editors/josm/plugins/tcxplugin/build.xml	(revision 12587)
+++ /applications/editors/josm/plugins/tcxplugin/build.xml	(revision 12588)
@@ -20,6 +20,4 @@
   <property name="livegpsplugin.jar" value="../../dist/livegps.jar"/>
   
-  <!-- plugin meta data (enter new version number if anything changed!) -->
-  <property name="plugin.version" value="1.1"/>
   <property name="plugin.description" value="Adds support for TCX files."/>
   <property name="plugin.stage" value="100"/>
@@ -51,4 +49,12 @@
   	
     
+    <exec append="false" output="REVISION" executable="svn" failifexecutionfails="false">
+      <env key="LANG" value="C"/>
+      <arg value="info"/>
+      <arg value="--xml"/>
+      <arg value="."/>
+    </exec>
+    <xmlproperty file="REVISION" prefix="version" keepRoot="false" collapseAttributes="true"/>
+    <delete file="REVISION"/>
     <!-- create jar file -->
     <jar destfile="${plugin.jar}" basedir="${plugin.build.dir}">
@@ -56,6 +62,8 @@
         <attribute name="Plugin-Class" value="${plugin.class}" />
         <attribute name="Plugin-Description" value="${plugin.description}" />
-        <attribute name="Plugin-Version" value="${plugin.version}" />
         <attribute name="Plugin-Stage" value="${plugin.stage}" />
+        <attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
+        <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
+        <attribute name="Plugin-Mainversion" value="1180" />
 <!--        <attribute name="Class-Path" value="lib/jaxb-api.jar;lib/jaxb-impl.jar" />-->
       </manifest>
Index: /applications/editors/josm/plugins/tcxplugin/src/org/openstreetmap/josm/plugins/TcxPlugin.java
===================================================================
--- /applications/editors/josm/plugins/tcxplugin/src/org/openstreetmap/josm/plugins/TcxPlugin.java	(revision 12587)
+++ /applications/editors/josm/plugins/tcxplugin/src/org/openstreetmap/josm/plugins/TcxPlugin.java	(revision 12588)
@@ -19,4 +19,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.MainMenu;
 import org.openstreetmap.josm.actions.DiskAccessAction;
 import org.openstreetmap.josm.actions.JosmAction;
@@ -25,4 +26,5 @@
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.io.TcxReader;
+import org.openstreetmap.josm.tools.Shortcut;
 /**
  * @author adrian
@@ -35,5 +37,7 @@
         public OpenAction()
         {
-            super("Import TCX File...", "tcxicon", "", KeyEvent.VK_T, KeyEvent.CTRL_MASK);
+            super(tr("Import TCX File..."), "tcxicon", tr("Import TCX file as GPS track"),
+            Shortcut.registerShortcut("menu:importtcx", tr("Menu: {0}", tr("Import TCX File...")),
+            KeyEvent.VK_T, Shortcut.GROUP_MENU));
         }
         
@@ -98,11 +102,5 @@
     public TcxPlugin()
     {
-        JMenu menu = Main.main.menu.getMenu(0);
-
-        JosmAction openAction = new OpenAction();
-        JMenuItem actionItem = new JMenuItem(openAction);
-        menu.insert(actionItem, 2);
-        actionItem.setAccelerator(openAction.shortcut);
-        
+        MainMenu.add(Main.main.menu.fileMenu, new OpenAction());
     }
 }
Index: /applications/editors/josm/plugins/wmsplugin/build.xml
===================================================================
--- /applications/editors/josm/plugins/wmsplugin/build.xml	(revision 12587)
+++ /applications/editors/josm/plugins/wmsplugin/build.xml	(revision 12588)
@@ -56,5 +56,5 @@
         <attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
         <attribute name="Plugin-Description" value="Allows external WMS resources to be displayed." />
-        <attribute name="Plugin-Mainversion" value="1153" />
+        <attribute name="Plugin-Mainversion" value="1180" />
       </manifest>
     </jar>
Index: /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java
===================================================================
--- /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java	(revision 12587)
+++ /applications/editors/josm/plugins/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java	(revision 12588)
@@ -109,5 +109,5 @@
 	}
 	
-	public void ok() {
+	public boolean ok() {
 		boolean change = false;
 		for (int i = 0; i < model.getRowCount(); ++i) {
@@ -145,4 +145,5 @@
 
 		if (change) WMSPlugin.refreshMenu();
+		return false;
 	}
 	
Index: /applications/editors/josm/plugins/wmsplugin/webkit-image.cpp
===================================================================
--- /applications/editors/josm/plugins/wmsplugin/webkit-image.cpp	(revision 12587)
+++ /applications/editors/josm/plugins/wmsplugin/webkit-image.cpp	(revision 12588)
@@ -22,6 +22,4 @@
 #define BINARYSTDOUT
 #endif
-
-#define WIDTH 2000
 
 class Save : public QObject
@@ -74,4 +72,8 @@
   QObject::connect(page, SIGNAL(loadFinished(bool)), s, SLOT(loaded(bool)));
   QObject::connect(s, SIGNAL(finish(void)), &a, SLOT(quit()));
+  /* set some useful defaults for a webpage */
+//  page->setViewportSize(QSize(1280,1024));
+//  page->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
+//  page->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
   page->mainFrame()->load (QUrl(url));
   return a.exec();
