Index: src/org/openstreetmap/josm/actions/AutoScaleAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 113)
@@ -2,4 +2,5 @@
 
 import static org.openstreetmap.josm.tools.I18n.tr;
+import static org.xnap.commons.i18n.I18n.marktr;
 
 import java.awt.event.ActionEvent;
@@ -25,13 +26,18 @@
 public class AutoScaleAction extends GroupAction {
 
-	private enum AutoScaleMode {data, selection, layer, conflict}
-	private AutoScaleMode mode = AutoScaleMode.data;
+	private static final String[] modes = {
+		marktr("data"), 
+		marktr("selection"),
+		marktr("layer"),
+		marktr("conflict")
+	};
+	private String mode = "data";
 	private final MapFrame mapFrame;
 
 	private class Action extends AbstractAction {
-		private final AutoScaleMode mode;
-		public Action(AutoScaleMode mode) {
-			super(tr("Auto Scale"+": "+tr(mode.toString())), ImageProvider.get("dialogs/autoscale/"+mode));
-			putValue(SHORT_DESCRIPTION, tr("Auto zoom the view")+tr("(to "+mode+")")+tr(". Disabled if the view is moved."));
+		private final String mode;
+		public Action(String mode) {
+			super(tr("Auto Scale: {0}", tr(mode)), ImageProvider.get("dialogs/autoscale/"+mode));
+			putValue(SHORT_DESCRIPTION, tr("Auto zoom the view (to {0}. Disabled if the view is moved)", tr(mode)));
 			this.mode = mode;
 		}
@@ -48,5 +54,5 @@
 	public AutoScaleAction(final MapFrame mapFrame) {
 		super(KeyEvent.VK_A, 0);
-		for (AutoScaleMode mode : AutoScaleMode.values())
+		for (String mode : modes)
 			actions.add(new Action(mode));
 		setCurrent(0);
@@ -54,5 +60,5 @@
 		Main.ds.addSelectionChangedListener(new SelectionChangedListener(){
 			public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
-				if (mode == AutoScaleMode.selection)
+				if (mode.equals("selection"))
 					mapFrame.mapView.recalculateCenterScale();
 			}
@@ -62,15 +68,11 @@
 	public BoundingXYVisitor getBoundingBox() {
 		BoundingXYVisitor v = new BoundingXYVisitor();
-		switch (mode) {
-		case data:
+		if (mode.equals("data")) {
 			for (Layer l : mapFrame.mapView.getAllLayers())
 				l.visitBoundingBox(v);
-			break;
-		case layer:
+		} else if (mode.equals("layer"))
 			mapFrame.mapView.getActiveLayer().visitBoundingBox(v);
-			break;
-		case selection:
-		case conflict:
-			Collection<OsmPrimitive> sel = mode == AutoScaleMode.selection ? Main.ds.getSelected() : mapFrame.conflictDialog.conflicts.keySet();
+		else if (mode.equals("selection") || mode.equals("conflict")) { 
+			Collection<OsmPrimitive> sel = mode.equals("selection") ? Main.ds.getSelected() : mapFrame.conflictDialog.conflicts.keySet();
 			for (OsmPrimitive osm : sel)
 				osm.visit(v);
@@ -81,5 +83,4 @@
 				v.max = new EastNorth(v.max.east()+en.east(), v.max.north()+en.north());
 			}
-			break;
 		}
 		return v;
Index: src/org/openstreetmap/josm/actions/DiskAccessAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/DiskAccessAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/DiskAccessAction.java	(revision 113)
@@ -7,5 +7,4 @@
 import javax.swing.JFileChooser;
 import javax.swing.JOptionPane;
-import javax.swing.KeyStroke;
 
 import org.openstreetmap.josm.Main;
@@ -17,6 +16,6 @@
 abstract public class DiskAccessAction extends JosmAction {
 
-	public DiskAccessAction(String name, String iconName, String tooltip, String shortCutName, KeyStroke shortCut) {
-		super(name, iconName, tooltip, shortCutName, shortCut);
+	public DiskAccessAction(String name, String iconName, String tooltip, int shortCut, int modifiers) {
+		super(name, iconName, tooltip, shortCut, modifiers);
 	}
 	
Index: src/org/openstreetmap/josm/actions/DownloadAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/DownloadAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/DownloadAction.java	(revision 113)
@@ -27,5 +27,4 @@
 import javax.swing.JScrollPane;
 import javax.swing.JTextField;
-import javax.swing.KeyStroke;
 import javax.swing.SwingUtilities;
 import javax.swing.event.ListSelectionEvent;
@@ -127,6 +126,5 @@
 
 	public DownloadAction() {
-		super(tr("Download from OSM"), "download", tr("Download map data from the OSM server."), tr("Ctrl-Shift-D"), 
-				KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK));
+		super(tr("Download from OSM"), "download", tr("Download map data from the OSM server."), KeyEvent.VK_D, InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK);
 		// TODO remove when bug in Java6 is fixed
 		for (JTextField f : latlon)
Index: src/org/openstreetmap/josm/actions/DownloadIncompleteAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/DownloadIncompleteAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/DownloadIncompleteAction.java	(revision 113)
@@ -13,5 +13,4 @@
 
 import javax.swing.JOptionPane;
-import javax.swing.KeyStroke;
 
 import org.openstreetmap.josm.Main;
@@ -84,6 +83,5 @@
 
 	public DownloadIncompleteAction() {
-		super(tr("Download incomplete objects"), "downloadincomplete", tr("Download all (selected) incomplete ways from the OSM server."), tr("Ctrl-Shift-Alt-D"), 
-				KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK | InputEvent.ALT_DOWN_MASK));
+		super(tr("Download incomplete objects"), "downloadincomplete", tr("Download all (selected) incomplete ways from the OSM server."), KeyEvent.VK_D, InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK | InputEvent.ALT_DOWN_MASK);
 	}
 
Index: src/org/openstreetmap/josm/actions/GpxExportAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/GpxExportAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/GpxExportAction.java	(revision 113)
@@ -24,5 +24,4 @@
 import javax.swing.JTextArea;
 import javax.swing.JTextField;
-import javax.swing.KeyStroke;
 import javax.swing.ListSelectionModel;
 
@@ -38,10 +37,10 @@
 public class GpxExportAction extends DiskAccessAction {
 
-	private final static String warningGpl = tr("<html><font color='red' size='-2'>Note: GPL is not compatible to the OSM license. Do not upload GPL licensed tracks</html>");
+	private final static String warningGpl = "<html><font color='red' size='-2'>"+tr("Note: GPL is not compatible to the OSM license. Do not upload GPL licensed tracks.")+"</html>";
 
 	private final Layer layer;
 
 	public GpxExportAction(Layer layer) {
-		super(tr("Export to GPX"), "exportgpx", tr("Export the data to GPX file."), tr("Ctrl-E"), KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_DOWN_MASK));
+		super(tr("Export to GPX"), "exportgpx", tr("Export the data to GPX file."), KeyEvent.VK_E, InputEvent.CTRL_DOWN_MASK);
 		this.layer = layer;
 	}
Index: src/org/openstreetmap/josm/actions/JosmAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/JosmAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/JosmAction.java	(revision 113)
@@ -8,4 +8,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.ShortCutLabel;
 
 /**
@@ -30,10 +31,10 @@
 
 
-	public JosmAction(String name, String iconName, String tooltip, String shortCutName, KeyStroke shortCut) {
+	public JosmAction(String name, String iconName, String tooltip, int shortCut, int modifier) {
 		super(name, ImageProvider.get(iconName));
-		putValue(SHORT_DESCRIPTION, "<html>"+tooltip+" <font size='-2'>"+shortCutName+"</font>&nbsp;</html>");
+		putValue(SHORT_DESCRIPTION, "<html>"+tooltip+" <font size='-2'>"+ShortCutLabel.name(shortCut, modifier)+"</font>&nbsp;</html>");
 		//Main.panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(shortCut, name);
         //Main.panel.getActionMap().put(name, this);
-        Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(shortCut, name);
+        Main.contentPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(shortCut, modifier), name);
         Main.contentPane.getActionMap().put(name, this);
 	}
Index: src/org/openstreetmap/josm/actions/OpenAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/OpenAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/OpenAction.java	(revision 113)
@@ -15,5 +15,4 @@
 import javax.swing.JFileChooser;
 import javax.swing.JOptionPane;
-import javax.swing.KeyStroke;
 
 import org.openstreetmap.josm.Main;
@@ -39,5 +38,5 @@
 	 */
 	public OpenAction() {
-		super(tr("Open"), "open", tr("Open a file."), tr("Ctrl-O"), KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK));
+		super(tr("Open"), "open", tr("Open a file."), KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK);
 	}
 
Index: src/org/openstreetmap/josm/actions/PreferencesAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/PreferencesAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/PreferencesAction.java	(revision 113)
@@ -5,6 +5,4 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
-
-import javax.swing.KeyStroke;
 
 import org.openstreetmap.josm.gui.PreferenceDialog;
@@ -21,5 +19,5 @@
 	 */
 	public PreferencesAction() {
-		super(tr("Preferences"), "preference", tr("Open a preferences page for global settings."), tr("F12"), KeyStroke.getKeyStroke(KeyEvent.VK_F12, 0));
+		super(tr("Preferences"), "preference", tr("Open a preferences page for global settings."), KeyEvent.VK_F12, 0);
 	}
 
Index: src/org/openstreetmap/josm/actions/RedoAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/RedoAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/RedoAction.java	(revision 113)
@@ -6,6 +6,4 @@
 import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
-
-import javax.swing.KeyStroke;
 
 import org.openstreetmap.josm.Main;
@@ -23,5 +21,5 @@
 	 */
 	public RedoAction() {
-		super(tr("Redo"), "redo", tr("Redo the last undone action."), tr("Ctrl-Shift-Z"), KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK));
+		super(tr("Redo"), "redo", tr("Redo the last undone action."), KeyEvent.VK_Z, InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK);
 		setEnabled(false);
 	}
Index: src/org/openstreetmap/josm/actions/SaveAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/SaveAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/SaveAction.java	(revision 113)
@@ -12,5 +12,4 @@
 import javax.swing.JFileChooser;
 import javax.swing.JOptionPane;
-import javax.swing.KeyStroke;
 import javax.swing.filechooser.FileFilter;
 
@@ -31,5 +30,5 @@
 	 */
 	public SaveAction() {
-		super(tr("Save"), "save", tr("Save the current data."), tr("Ctrl-S"), KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK));
+		super(tr("Save"), "save", tr("Save the current data."), KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK);
 	}
 	
Index: src/org/openstreetmap/josm/actions/UndoAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/UndoAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/UndoAction.java	(revision 113)
@@ -6,6 +6,4 @@
 import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
-
-import javax.swing.KeyStroke;
 
 import org.openstreetmap.josm.Main;
@@ -23,5 +21,5 @@
 	 */
 	public UndoAction() {
-		super(tr("Undo"), "undo", tr("Undo the last action."), tr("Ctrl-Z"), KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_DOWN_MASK));
+		super(tr("Undo"), "undo", tr("Undo the last action."), KeyEvent.VK_Z, InputEvent.CTRL_DOWN_MASK);
 		setEnabled(false);
 	}
Index: src/org/openstreetmap/josm/actions/UploadAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/UploadAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/UploadAction.java	(revision 113)
@@ -15,5 +15,4 @@
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
-import javax.swing.KeyStroke;
 
 import org.openstreetmap.josm.Main;
@@ -35,6 +34,5 @@
 public class UploadAction extends JosmAction {
 	public UploadAction() {
-		super(tr("Upload to OSM"), "upload", tr("Upload all changes to the OSM server."), tr("Ctrl-Shift-U"), 
-				KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK));
+		super(tr("Upload to OSM"), "upload", tr("Upload all changes to the OSM server."), KeyEvent.VK_U, InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK);
 	}
 
Index: src/org/openstreetmap/josm/actions/mapmode/AddSegmentAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/AddSegmentAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/mapmode/AddSegmentAction.java	(revision 113)
@@ -52,5 +52,4 @@
 				"addsegment", 
 				tr("Add a segment between two nodes."), 
-				"G", 
 				KeyEvent.VK_G, 
 				mapFrame, 
Index: src/org/openstreetmap/josm/actions/mapmode/AddWayAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/AddWayAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/mapmode/AddWayAction.java	(revision 113)
@@ -59,5 +59,5 @@
 	 */
 	public AddWayAction(MapFrame mapFrame) {
-		super(tr("Add Way"), "addway", tr("Add a new way to the data."), "W", KeyEvent.VK_W, mapFrame, ImageProvider.getCursor("normal", "way"));
+		super(tr("Add Way"), "addway", tr("Add a new way to the data."), KeyEvent.VK_W, mapFrame, ImageProvider.getCursor("normal", "way"));
 		
 		Main.ds.addSelectionChangedListener(this);
Index: src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(revision 113)
@@ -56,5 +56,4 @@
 				"delete", 
 				tr("Delete nodes, streets or segments."), 
-				"D", 
 				KeyEvent.VK_D, 
 				mapFrame, 
Index: src/org/openstreetmap/josm/actions/mapmode/MapMode.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/MapMode.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/mapmode/MapMode.java	(revision 113)
@@ -6,6 +6,4 @@
 import java.awt.event.MouseListener;
 import java.awt.event.MouseMotionListener;
-
-import javax.swing.KeyStroke;
 
 import org.openstreetmap.josm.Main;
@@ -29,6 +27,6 @@
 	 * Constructor for mapmodes without an menu
 	 */
-	public MapMode(String name, String iconName, String tooltip, String keyname, int keystroke, MapFrame mapFrame, Cursor cursor) {
-		super(name, "mapmode/"+iconName, tooltip, keyname, KeyStroke.getKeyStroke(keystroke, 0));
+	public MapMode(String name, String iconName, String tooltip, int keystroke, MapFrame mapFrame, Cursor cursor) {
+		super(name, "mapmode/"+iconName, tooltip, keystroke, 0);
 //		this.cursor = cursor;
 		putValue("active", false);
Index: src/org/openstreetmap/josm/actions/mapmode/MoveAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/MoveAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/mapmode/MoveAction.java	(revision 113)
@@ -52,5 +52,4 @@
 				"move", 
 				tr("Move selected objects around."), 
-				"M", 
 				KeyEvent.VK_M, 
 				mapFrame, 
Index: src/org/openstreetmap/josm/actions/mapmode/ZoomAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/mapmode/ZoomAction.java	(revision 112)
+++ src/org/openstreetmap/josm/actions/mapmode/ZoomAction.java	(revision 113)
@@ -44,5 +44,5 @@
 	 */
 	public ZoomAction(MapFrame mapFrame) {
-		super(tr("Zoom"), "zoom", tr("Zoom in by dragging. (Ctrl+up,left,down,right,+,-)"), "Z", KeyEvent.VK_Z, mapFrame, ImageProvider.getCursor("normal", "zoom"));
+		super(tr("Zoom"), "zoom", tr("Zoom in by dragging. (Ctrl+up,left,down,right,+,-)"), KeyEvent.VK_Z, mapFrame, ImageProvider.getCursor("normal", "zoom"));
 		mv = mapFrame.mapView;
 		selectionManager = new SelectionManager(this, true, mv);
Index: src/org/openstreetmap/josm/command/AddCommand.java
===================================================================
--- src/org/openstreetmap/josm/command/AddCommand.java	(revision 112)
+++ src/org/openstreetmap/josm/command/AddCommand.java	(revision 113)
@@ -50,5 +50,5 @@
 		NameVisitor v = new NameVisitor();
 		osm.visit(v);
-		return new DefaultMutableTreeNode(new JLabel(tr("Add")+" "+v.className+" "+v.name, v.icon, JLabel.HORIZONTAL));
+		return new DefaultMutableTreeNode(new JLabel(tr("Add")+" "+tr(v.className)+" "+v.name, v.icon, JLabel.HORIZONTAL));
     }
 }
Index: src/org/openstreetmap/josm/command/ChangeCommand.java
===================================================================
--- src/org/openstreetmap/josm/command/ChangeCommand.java	(revision 112)
+++ src/org/openstreetmap/josm/command/ChangeCommand.java	(revision 113)
@@ -35,5 +35,5 @@
 		NameVisitor v = new NameVisitor();
 		osm.visit(v);
-		return new DefaultMutableTreeNode(new JLabel(tr("Change")+" "+v.className+" "+v.name, v.icon, JLabel.HORIZONTAL));
+		return new DefaultMutableTreeNode(new JLabel(tr("Change")+" "+tr(v.className)+" "+v.name, v.icon, JLabel.HORIZONTAL));
     }
 }
Index: src/org/openstreetmap/josm/command/ChangePropertyCommand.java
===================================================================
--- src/org/openstreetmap/josm/command/ChangePropertyCommand.java	(revision 112)
+++ src/org/openstreetmap/josm/command/ChangePropertyCommand.java	(revision 113)
@@ -68,7 +68,7 @@
 			NameVisitor v = new NameVisitor();
 			objects.iterator().next().visit(v);
-			text += " "+v.className+" "+v.name;
+			text += " "+tr(v.className)+" "+v.name;
 		} else
-			text += objects.size()+trn("object","objects",objects.size());
+			text += objects.size()+" "+trn("object","objects",objects.size());
 		DefaultMutableTreeNode root = new DefaultMutableTreeNode(new JLabel(text, ImageProvider.get("data", "key"), JLabel.HORIZONTAL));
 		if (objects.size() == 1)
Index: src/org/openstreetmap/josm/command/DeleteCommand.java
===================================================================
--- src/org/openstreetmap/josm/command/DeleteCommand.java	(revision 112)
+++ src/org/openstreetmap/josm/command/DeleteCommand.java	(revision 113)
@@ -44,5 +44,5 @@
 		if (data.size() == 1) {
 			data.iterator().next().visit(v);
-			return new DefaultMutableTreeNode(new JLabel(tr("Delete"+" "+v.className+" "+v.name), v.icon, JLabel.HORIZONTAL));
+			return new DefaultMutableTreeNode(new JLabel(tr("Delete")+" "+tr(v.className)+" "+v.name, v.icon, JLabel.HORIZONTAL));
 		}
 
@@ -53,5 +53,5 @@
 				cname = v.className;
 			else if (!cname.equals(v.className))
-				cname = "primitive";
+				cname = "object";
 		}
 		DefaultMutableTreeNode root = new DefaultMutableTreeNode(new JLabel(
Index: src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- src/org/openstreetmap/josm/data/Preferences.java	(revision 112)
+++ src/org/openstreetmap/josm/data/Preferences.java	(revision 113)
@@ -1,3 +1,5 @@
 package org.openstreetmap.josm.data;
+
+import static org.xnap.commons.i18n.I18n.marktr;
 
 import java.awt.Color;
@@ -128,12 +130,12 @@
 		properties.put("projection", "org.openstreetmap.josm.data.projection.Epsg4326");
 		properties.put("osm-server.url", "http://www.openstreetmap.org/api");
-		properties.put("color.background", ColorHelper.color2html(Color.black));
-		properties.put("color.node", ColorHelper.color2html(Color.red));
-		properties.put("color.segment", ColorHelper.color2html(SimplePaintVisitor.darkgreen));
-		properties.put("color.way", ColorHelper.color2html(SimplePaintVisitor.darkblue));
-		properties.put("color.incomplete way", ColorHelper.color2html(SimplePaintVisitor.darkerblue));
-		properties.put("color.selected", ColorHelper.color2html(Color.white));
-		properties.put("color.gps point", ColorHelper.color2html(Color.gray));
-		properties.put("color.conflict", ColorHelper.color2html(Color.gray));
+		properties.put("color."+marktr("background"), ColorHelper.color2html(Color.black));
+		properties.put("color."+marktr("node"), ColorHelper.color2html(Color.red));
+		properties.put("color."+marktr("segment"), ColorHelper.color2html(SimplePaintVisitor.darkgreen));
+		properties.put("color."+marktr("way"), ColorHelper.color2html(SimplePaintVisitor.darkblue));
+		properties.put("color."+marktr("incomplete way"), ColorHelper.color2html(SimplePaintVisitor.darkerblue));
+		properties.put("color."+marktr("selected"), ColorHelper.color2html(Color.white));
+		properties.put("color."+marktr("gps point"), ColorHelper.color2html(Color.gray));
+		properties.put("color."+marktr("conflict"), ColorHelper.color2html(Color.gray));
 		save();
 	}
Index: src/org/openstreetmap/josm/data/osm/visitor/NameVisitor.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/NameVisitor.java	(revision 112)
+++ src/org/openstreetmap/josm/data/osm/visitor/NameVisitor.java	(revision 113)
@@ -46,9 +46,10 @@
 		if (name == null) {
 			if (ls.incomplete)
-				name = ls.id == 0 ? tr("new") : tr("{0} (unknown)", ls.id);
+				name = ls.id == 0 ? tr("new") : ls.id+" ("+tr("unknown")+")";
 			else
 				name = (ls.id==0?"":ls.id+" ")+"("+ls.from.coor.lat()+","+ls.from.coor.lon()+") -> ("+ls.to.coor.lat()+","+ls.to.coor.lon()+")";
 		}
 		icon = ImageProvider.get("data", "segment");
+		trn("segment", "segments", 0); // no marktrn available
 		className = "segment";
 	}
@@ -63,4 +64,5 @@
 			name = (n.id==0?"":""+n.id)+" ("+n.coor.lat()+","+n.coor.lon()+")";
 		icon = ImageProvider.get("data", "node");
+		trn("node", "nodes", 0); // no marktrn available
 		className = "node";
 	}
@@ -88,4 +90,5 @@
 		}
 		icon = ImageProvider.get("data", "way");
+		trn("way", "ways", 0); // no marktrn available
 		className = "way";
 	}
Index: src/org/openstreetmap/josm/gui/ConflictResolver.java
===================================================================
--- src/org/openstreetmap/josm/gui/ConflictResolver.java	(revision 112)
+++ src/org/openstreetmap/josm/gui/ConflictResolver.java	(revision 113)
@@ -161,5 +161,5 @@
 		
 		if (this.conflicts.isEmpty())
-			throw new RuntimeException(tr("No conflicts but in conflict list:\n{0}" , Arrays.toString(conflicts.entrySet().toArray())));
+			throw new RuntimeException("No conflicts but in conflict list:\n"+Arrays.toString(conflicts.entrySet().toArray()));
 
 		// have to initialize the JTables here and not in the declaration, because its constructor
Index: src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- src/org/openstreetmap/josm/gui/MainApplication.java	(revision 112)
+++ src/org/openstreetmap/josm/gui/MainApplication.java	(revision 113)
@@ -49,5 +49,5 @@
 					}
 					if (modified) {
-						final String msg = uploadedModified ? tr("\nHint: Some changes came from uploading new data to the server.") : "";
+						final String msg = uploadedModified ? "\n"+tr("Hint: Some changes came from uploading new data to the server.") : "";
 						final int answer = JOptionPane.showConfirmDialog(
 								Main.parent, tr("There are unsaved changes. Really quit?")+msg,
Index: src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- src/org/openstreetmap/josm/gui/MapStatus.java	(revision 112)
+++ src/org/openstreetmap/josm/gui/MapStatus.java	(revision 113)
@@ -219,7 +219,7 @@
 		setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
 		setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
-		add(new JLabel(tr("Lat/Lon ")));
+		add(new JLabel(tr("Lat/Lon")+" "));
 		add(positionText);
-		add(new JLabel(tr(" Object ")));
+		add(new JLabel(" "+tr("Object")+" "));
 		add(nameText);
 
Index: src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- src/org/openstreetmap/josm/gui/MapView.java	(revision 112)
+++ src/org/openstreetmap/josm/gui/MapView.java	(revision 113)
@@ -157,5 +157,5 @@
 			dataLayer.listenerModified.add(new ModifiedChangedListener(){
 				public void modifiedChanged(boolean value, OsmDataLayer source) {
-					JOptionPane.getFrameForComponent(Main.parent).setTitle(tr("{0}Java Open Street Map - Editor",(value?"*":"")));
+					JOptionPane.getFrameForComponent(Main.parent).setTitle((value?"*":"")+tr("Java Open Street Map - Editor"));
 				}
 			});
@@ -326,5 +326,5 @@
 	public void setActiveLayer(Layer layer) {
 		if (!layers.contains(layer))
-			throw new IllegalArgumentException(tr("layer must be in layerlist"));
+			throw new IllegalArgumentException("Layer must be in layerlist");
 		Layer old = activeLayer;
 		activeLayer = layer;
Index: src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java
===================================================================
--- src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java	(revision 112)
+++ src/org/openstreetmap/josm/gui/PleaseWaitRunnable.java	(revision 113)
@@ -53,5 +53,5 @@
 		pane.add(currentAction, GBC.eol().fill(GBC.HORIZONTAL));
 		pane.add(progressBar, GBC.eop().fill(GBC.HORIZONTAL));
-		JButton cancel = new JButton(tr(tr("Cancel")));
+		JButton cancel = new JButton(tr("Cancel"));
 		pane.add(cancel, GBC.eol().anchor(GBC.CENTER));
 		pleaseWaitDlg.setContentPane(pane);
@@ -79,8 +79,8 @@
 		} catch (SAXException x) {
 			x.printStackTrace();
-			errorMessage = tr("Error while parsing: ")+x.getMessage();
+			errorMessage = tr("Error while parsing")+": "+x.getMessage();
 		} catch (FileNotFoundException x) {
 			x.printStackTrace();
-			errorMessage = tr("Not found: ") + x.getMessage();
+			errorMessage = tr("File Not found")+": "+x.getMessage();
 		} catch (IOException x) {
 			x.printStackTrace();
Index: src/org/openstreetmap/josm/gui/PreferenceDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/PreferenceDialog.java	(revision 112)
+++ src/org/openstreetmap/josm/gui/PreferenceDialog.java	(revision 113)
@@ -230,11 +230,11 @@
 		for (Entry<String,String> e : allColors.entrySet()) {
 			Vector<Object> row = new Vector<Object>(2);
-			row.add(e.getKey().substring("color.".length()));
+			row.add(tr(e.getKey().substring("color.".length())));
 			row.add(ColorHelper.html2color(e.getValue()));
 			rows.add(row);
 		}
 		Vector<Object> cols = new Vector<Object>(2);
-		cols.add("Color");
-		cols.add("Name");
+		cols.add(tr("Color"));
+		cols.add(tr("Name"));
 		colors = new JTable(rows, cols){
 			@Override public boolean isCellEditable(int row, int column) {
Index: src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 112)
+++ src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 113)
@@ -3,4 +3,5 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
+import static org.xnap.commons.i18n.I18n.marktr;
 
 import java.awt.BorderLayout;
@@ -86,5 +87,5 @@
 		String key = data.getValueAt(row, 0).toString();
 		Collection<OsmPrimitive> sel = Main.ds.getSelected();
-		String msg = "<html>"+trn("This will change {0} object.", "This will change {0} objects.", sel.size(), sel.size())+"<br><br> "+tr("Please select a new value for \"{0}\".<br>(Empty string deletes the key.)</html>)", key);
+		String msg = "<html>"+trn("This will change {0} object.", "This will change {0} objects.", sel.size(), sel.size())+"<br><br> "+tr("Please select a new value for \"{0}\".<br>(Empty string deletes the key.)", key)+"</html>";
 		final JComboBox combo = (JComboBox)data.getValueAt(row, 1);
 		JPanel p = new JPanel(new BorderLayout());
@@ -136,7 +137,5 @@
 
 		JPanel p = new JPanel(new BorderLayout());
-		p.add(new JLabel(trn("<html>This will change {0} object.<br><br>Please select a key",
-				"<html>This will change {0} objects.<br><br>Please select a key",
-				sel.size(),sel.size())),
+		p.add(new JLabel("<html>"+trn("This will change {0} object.","This will change {0} objects.", sel.size(),sel.size())+"<br><br>"+tr("Please select a key")),
 				BorderLayout.NORTH);
 		TreeSet<String> allKeys = new TreeSet<String>();
@@ -250,12 +249,12 @@
 			}
 		};
-		buttonPanel.add(createButton(tr("Add"),tr("Add a new key/value pair to all objects"), KeyEvent.VK_A, buttonAction));
-		buttonPanel.add(createButton(tr("Edit"),tr( "Edit the value of the selected key for all objects"), KeyEvent.VK_E, buttonAction));
-		buttonPanel.add(createButton(tr("Delete"),tr("Delete the selected key in all objects"), KeyEvent.VK_D, buttonAction));
+		buttonPanel.add(createButton(marktr("Add"),tr("Add a new key/value pair to all objects"), KeyEvent.VK_A, buttonAction));
+		buttonPanel.add(createButton(marktr("Edit"),tr( "Edit the value of the selected key for all objects"), KeyEvent.VK_E, buttonAction));
+		buttonPanel.add(createButton(marktr("Delete"),tr("Delete the selected key in all objects"), KeyEvent.VK_D, buttonAction));
 		add(buttonPanel, BorderLayout.SOUTH);
 	}
 
 	private JButton createButton(String name, String tooltip, int mnemonic, ActionListener actionListener) {
-		JButton b = new JButton(name, ImageProvider.get("dialogs", name.toLowerCase()));
+		JButton b = new JButton(tr(name), ImageProvider.get("dialogs", name.toLowerCase()));
 		b.setActionCommand(name);
 		b.addActionListener(actionListener);
Index: src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 112)
+++ src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 113)
@@ -9,9 +9,7 @@
 import javax.swing.JLabel;
 import javax.swing.JPanel;
-import javax.swing.KeyStroke;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
-import org.openstreetmap.josm.tools.ShortCutLabel;
 
 /**
@@ -27,6 +25,6 @@
 	    public AbstractButton button;
 
-	    private ToggleDialogAction(String name, String iconName, String tooltip, String shortcut, KeyStroke cut, String prefname) {
-		    super(name, iconName, tooltip, shortcut, cut);
+	    private ToggleDialogAction(String name, String iconName, String tooltip, int shortCut, int modifier, String prefname) {
+		    super(name, iconName, tooltip, shortCut, modifier);
 		    this.prefname = prefname;
 	    }
@@ -48,5 +46,5 @@
 	public ToggleDialog(String name, String iconName, String tooltip, int shortCut) {
 		this.prefName = iconName;
-		action = new ToggleDialogAction(name, "dialogs/"+iconName, tooltip, ShortCutLabel.name(shortCut, KeyEvent.ALT_MASK), KeyStroke.getKeyStroke(shortCut, KeyEvent.ALT_MASK), iconName);
+		action = new ToggleDialogAction(name, "dialogs/"+iconName, tooltip, shortCut, KeyEvent.ALT_MASK, iconName);
 		setLayout(new BorderLayout());
 		add(new JLabel(name), BorderLayout.NORTH);
Index: src/org/openstreetmap/josm/gui/layer/GeoImageLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/GeoImageLayer.java	(revision 112)
+++ src/org/openstreetmap/josm/gui/layer/GeoImageLayer.java	(revision 113)
@@ -94,5 +94,5 @@
 				for (GpsPoint p : c) {
 					if (p.time == null)
-						throw new IOException(tr("No time for point {0},{1}",p.latlon.lat(),p.latlon.lon()));
+						throw new IOException(tr("No time for point {0} x {1}",p.latlon.lat(),p.latlon.lon()));
 					Date d = null;
                     try {
@@ -279,5 +279,5 @@
 			if (e.pos != null)
 				i++;
-		return trn("{0} image. {1} within the track.","{0} images. {1} within the track.",data.size(),data.size(),i);
+		return data.size()+" "+trn("image","images",data.size())+". "+tr("{0} within the track.",i);
 	}
 
Index: src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 112)
+++ src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 113)
@@ -151,7 +151,7 @@
 
 	@Override public String getToolTipText() {
-		return trn("{0} node", "{0} nodes", undeletedSize(data.nodes), undeletedSize(data.nodes))
-		+trn("{0} segment", "{0} segments", undeletedSize(data.segments), undeletedSize(data.segments))
-		+trn("{0} way", "{0} ways", undeletedSize(data.ways), undeletedSize(data.ways));
+		return undeletedSize(data.nodes)+" "+trn("node", "nodes", undeletedSize(data.nodes))+
+		undeletedSize(data.segments)+" "+trn("segment", "segments", undeletedSize(data.segments))+
+		undeletedSize(data.ways)+" "+trn("way", "ways", undeletedSize(data.ways));
 	}
 
Index: src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java	(revision 112)
+++ src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java	(revision 113)
@@ -130,6 +130,6 @@
 		for (Collection<GpsPoint> c : data)
 			points += c.size();
-		return trn("{0} track", "{0} tracks", data.size(), data.size())
-		+" "+trn("{0} point", "{0} points", points, points);
+		return data.size()+" "+trn("track", "tracks", data.size())
+		+" "+points+" "+trn("point", "points", points);
 	}
 
@@ -157,5 +157,5 @@
 		}
 		b.append("</html>");
-		return "<html>"+tr("{0} consists of ")+trn("{0} track", "{0} tracks", data.size(), data.size())+" ("+trn("{0} point", "{0} points", points, points)+")<br>"+b.toString();
+		return "<html>"+tr("{0} consists of {1} track", "{0} consists of {1} tracks", data.size(), name, data.size())+" ("+trn("{0} point", "{0} points", points, points)+")<br>"+b.toString();
 	}
 
Index: src/org/openstreetmap/josm/io/ObjectListDownloader.java
===================================================================
--- src/org/openstreetmap/josm/io/ObjectListDownloader.java	(revision 112)
+++ src/org/openstreetmap/josm/io/ObjectListDownloader.java	(revision 113)
@@ -33,5 +33,5 @@
 			for (OsmPrimitive osm : toDownload) {
 				osm.visit(namer);
-				download(namer.className, osm.id);
+				download(tr(namer.className), osm.id);
 				if (cancel)
 					break;
Index: src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmReader.java	(revision 112)
+++ src/org/openstreetmap/josm/io/OsmReader.java	(revision 113)
@@ -94,7 +94,7 @@
 				if (qName.equals("osm")) {
 					if (atts == null)
-						throw new SAXException(tr("Unknown version."));
+						throw new SAXException(tr("Unknown version"));
 					if (!"0.3".equals(atts.getValue("version")))
-						throw new SAXException(tr("Unknown version {0}",atts.getValue("version")));
+						throw new SAXException(tr("Unknown version")+": "+atts.getValue("version"));
 				} else if (qName.equals("node")) {
 					current = new Node(new LatLon(getDouble(atts, "lat"), getDouble(atts, "lon")));
Index: src/org/openstreetmap/josm/io/OsmServerWriter.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 112)
+++ src/org/openstreetmap/josm/io/OsmServerWriter.java	(revision 113)
@@ -69,5 +69,5 @@
 					return;
 				osm.visit(v);
-				currentAction.setText(tr("Upload {0} {1} ({2})...", v.className, v.name, osm.id));
+				currentAction.setText(tr("Upload {0} {1} ({2})...", tr(v.className), v.name, osm.id));
 				osm.visit(this);
 				progress.setValue(progress.getValue()+1);
@@ -154,5 +154,5 @@
 		try {
 			URL url = new URL(Main.pref.get("osm-server.url") + "/0.3/" + urlSuffix + "/" + osm.id);
-			System.out.println(tr("upload to: {0}"));
+			System.out.println("upload to: "+url);
 			activeConnection = (HttpURLConnection) url.openConnection();
 			activeConnection.setConnectTimeout(15000);
@@ -171,5 +171,5 @@
 			if (retCode == 200 && osm.id == 0)
 				osm.id = readId(activeConnection.getInputStream());
-			System.out.println(tr("got return: {0} with id {1}",retCode,osm.id));
+			System.out.println("got return: "+retCode+" with id "+osm.id);
 			String retMsg = activeConnection.getResponseMessage();
 			activeConnection.disconnect();
@@ -183,5 +183,5 @@
 			}
 		} catch (UnknownHostException e) {
-			throw new RuntimeException(tr("Unknown host: ")+e.getMessage(), e);
+			throw new RuntimeException(tr("Unknown host")+": "+e.getMessage(), e);
 		} catch (Exception e) {
 			if (cancel)
Index: src/org/openstreetmap/josm/io/RawCsvReader.java
===================================================================
--- src/org/openstreetmap/josm/io/RawCsvReader.java	(revision 112)
+++ src/org/openstreetmap/josm/io/RawCsvReader.java	(revision 113)
@@ -81,5 +81,5 @@
 						st.nextToken();
 					else
-						throw new SAXException(tr("Unknown data type: \"{0}\".{1}",token,(Main.pref.get("csv.importstring").equals("") ? (" "+tr("Maybe add an format string in preferences.")) : "")));
+						throw new SAXException(tr("Unknown data type: \"{0}\".",token)+(Main.pref.get("csv.importstring").equals("") ? (" "+tr("Maybe add an format string in preferences.")) : ""));
 				}
 				data.add(new GpsPoint(new LatLon(lat, lon), time));
Index: src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java
===================================================================
--- src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java	(revision 112)
+++ src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java	(revision 113)
@@ -49,5 +49,5 @@
 
 					URL revUrl = Main.class.getResource("/REVISION");
-					StringBuilder sb = new StringBuilder("Please send this to josm@eigenheimstrasse.de\n\n");
+					StringBuilder sb = new StringBuilder(tr("Please send this to josm@eigenheimstrasse.de\n\n"));
 					if (revUrl == null) {
 						sb.append("Development version. Unknown revision.");
@@ -70,5 +70,5 @@
 
 					JPanel p = new JPanel(new GridBagLayout());
-					p.add(new JLabel("Please send an email with the following information to josm@eigenheimstrasse.de"), GBC.eop());
+					p.add(new JLabel(tr("Please send an email with the following information to josm@eigenheimstrasse.de")), GBC.eop());
 
 					JTextArea info = new JTextArea(sb.toString(), 20, 60);
Index: src/org/openstreetmap/josm/tools/DateParser.java
===================================================================
--- src/org/openstreetmap/josm/tools/DateParser.java	(revision 112)
+++ src/org/openstreetmap/josm/tools/DateParser.java	(revision 113)
@@ -1,5 +1,3 @@
 package org.openstreetmap.josm.tools;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.text.ParseException;
@@ -42,5 +40,5 @@
 			try {return sdf.parse(d);} catch (ParseException pe) {}
 		}
-		throw new ParseException(tr("No applicable parse format"), 0);
+		throw new ParseException("", 0);
 	}
 }
Index: src/org/openstreetmap/josm/tools/ShortCutLabel.java
===================================================================
--- src/org/openstreetmap/josm/tools/ShortCutLabel.java	(revision 112)
+++ src/org/openstreetmap/josm/tools/ShortCutLabel.java	(revision 113)
@@ -17,5 +17,8 @@
 		if ((modifiers & KeyEvent.SHIFT_MASK) != 0)
 			s += tr("Shift-");
-		s += Character.toUpperCase((char)shortCut);
+		if (shortCut >= KeyEvent.VK_F1 && shortCut <= KeyEvent.VK_F12)
+			s += "F"+(shortCut-KeyEvent.VK_F1+1);
+		else
+			s += Character.toUpperCase((char)shortCut);
 		return s;
 	}
