Index: src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- src/org/openstreetmap/josm/gui/MainApplication.java	(revision 114)
+++ src/org/openstreetmap/josm/gui/MainApplication.java	(revision 115)
@@ -13,4 +13,5 @@
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
@@ -70,40 +71,6 @@
 		Thread.setDefaultUncaughtExceptionHandler(new BugReportExceptionHandler());
 
+		// construct argument table
 		List<String> argList = Arrays.asList(argArray);
-		if (argList.contains("--help") || argList.contains("-?") || argList.contains("-h")) {
-			System.out.println(tr("Java OpenStreetMap Editor\n\n"+
-						   "usage:\n"+
-						   "\tjava -jar josm.jar <option> <option> <option>...\n\n"+
-						   "options:\n"+
-						   "\t--help|-?|-h                              Show this help\n"+
-						   "\t--geometry=widthxheight(+|-)x(+|-)y       Standard unix geometry argument\n"+
-						   "\t[--download=]minlat,minlon,maxlat,maxlon  Download the bounding box\n"+
-						   "\t[--download=]<url>                        Download the location at the url (with lat=x&lon=y&zoom=z)\n"+
-						   "\t[--download=]<filename>                   Open file (as raw gps, if .gpx or .csv)\n"+
-						   "\t--downloadgps=minlat,minlon,maxlat,maxlon Download the bounding box as raw gps\n"+
-						   "\t--selection=<searchstring>                Select with the given search\n"+
-						   "\t--no-fullscreen                           Don't launch in fullscreen mode\n"+
-						   "\t--reset-preferences                       Reset the preferences to default\n\n"+
-						   "examples:\n"+
-						   "\tjava -jar josm.jar track1.gpx track2.gpx london.osm\n"+
-						   "\tjava -jar josm.jar http://www.openstreetmap.org/index.html?lat=43.2&lon=11.1&zoom=13\n"+
-						   "\tjava -jar josm.jar london.osm --selection=http://www.ostertag.name/osm/OSM_errors_node-duplicate.xml\n"+
-						   "\tjava -jar josm.jar 43.2,11.1,43.4,11.4\n\n"+
-
-						   "Parameters are read in the order they are specified, so make sure you load\n"+
-						   "some data before --selection\n\n"+
-						   "Instead of --download=<bbox> you may specify osm://<bbox>\n"));
-			System.exit(0);
-		}
-
-		final File prefDir = new File(Main.pref.getPreferencesDir());
-		if (prefDir.exists() && !prefDir.isDirectory()) {
-			JOptionPane.showMessageDialog(null, tr("Cannot open preferences directory: {0}",Main.pref.getPreferencesDir()));
-			return;
-		}
-		if (!prefDir.exists())
-			prefDir.mkdirs();
-
-		// construct argument table
 		Map<String, Collection<String>> args = new HashMap<String, Collection<String>>();
 		for (String arg : argArray) {
@@ -120,4 +87,52 @@
 		}
 
+		// very first thing to do is to setup the locale
+		if (args.containsKey("language") && !args.get("language").isEmpty() && args.get("language").iterator().next().length() >= 2) {
+			String s = args.get("language").iterator().next();
+			Locale l = null;
+			if (s.length() <= 2 || s.charAt(2) != '_')
+				l = new Locale(s);
+			else if (s.length() <= 5 || s.charAt(5) != '.')
+				l = new Locale(s.substring(0,2), s.substring(3));
+			else
+				l = new Locale(s.substring(0,2), s.substring(3,5), s.substring(6));
+			Locale.setDefault(l);
+		}
+		
+		if (argList.contains("--help") || argList.contains("-?") || argList.contains("-h")) {
+			System.out.println(tr("Java OpenStreetMap Editor")+"\n\n"+
+					tr("usage")+":\n"+
+					"\tjava -jar josm.jar <option> <option> <option>...\n\n"+
+					tr("options")+":\n"+
+					"\t--help|-?|-h                              "+tr("Show this help")+"\n"+
+					"\t--geometry=widthxheight(+|-)x(+|-)y       "+tr("Standard unix geometry argument")+"\n"+
+					"\t[--download=]minlat,minlon,maxlat,maxlon  "+tr("Download the bounding box")+"\n"+
+					"\t[--download=]<url>                        "+tr("Download the location at the url (with lat=x&lon=y&zoom=z)")+"\n"+
+					"\t[--download=]<filename>                   "+tr("Open file (as raw gps, if .gpx or .csv)")+"\n"+
+					"\t--downloadgps=minlat,minlon,maxlat,maxlon "+tr("Download the bounding box as raw gps")+"\n"+
+					"\t--selection=<searchstring>                "+tr("Select with the given search")+"\n"+
+					"\t--no-fullscreen                           "+tr("Don't launch in fullscreen mode")+"\n"+
+					"\t--reset-preferences                       "+tr("Reset the preferences to default")+"\n\n"+
+					"\t--language=<language>                     "+tr("Set the language. Example: ")+"\n\n"+
+					tr("examples")+":\n"+
+					"\tjava -jar josm.jar track1.gpx track2.gpx london.osm\n"+
+					"\tjava -jar josm.jar http://www.openstreetmap.org/index.html?lat=43.2&lon=11.1&zoom=13\n"+
+					"\tjava -jar josm.jar london.osm --selection=http://www.ostertag.name/osm/OSM_errors_node-duplicate.xml\n"+
+					"\tjava -jar josm.jar 43.2,11.1,43.4,11.4\n\n"+
+
+					tr("Parameters are read in the order they are specified, so make sure you load\n"+
+					"some data before --selection")+"\n\n"+
+					tr("Instead of --download=<bbox> you may specify osm://<bbox>\n"));
+			System.exit(0);
+		}
+
+		final File prefDir = new File(Main.pref.getPreferencesDir());
+		if (prefDir.exists() && !prefDir.isDirectory()) {
+			JOptionPane.showMessageDialog(null, tr("Cannot open preferences directory: {0}",Main.pref.getPreferencesDir()));
+			return;
+		}
+		if (!prefDir.exists())
+			prefDir.mkdirs();
+
 		preConstructorInit(args);
 		JFrame mainFrame = new JFrame(tr("Java Open Street Map - Editor"));
Index: src/org/openstreetmap/josm/gui/MapScaler.java
===================================================================
--- src/org/openstreetmap/josm/gui/MapScaler.java	(revision 115)
+++ src/org/openstreetmap/josm/gui/MapScaler.java	(revision 115)
@@ -0,0 +1,29 @@
+package org.openstreetmap.josm.gui;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.geom.Rectangle2D;
+
+import javax.swing.JComponent;
+
+public class MapScaler extends JComponent {
+
+	private final MapView mv;
+
+	public MapScaler(MapView mv) {
+		this.mv = mv;
+		setSize(100,30);
+		setOpaque(false);
+    }
+
+	@Override public void paint(Graphics g) {
+		double circum = mv.getScale()*100/Math.PI/2*40041455; // circumference of the earth in meter
+		String text = circum > 1000 ? (Math.round(circum/100)/10.0)+"km" : Math.round(circum)+"m";
+		g.setColor(Color.white);
+		g.drawLine(0, 5, 99, 5);
+		g.drawLine(0, 0, 0, 10);
+		g.drawLine(99, 0, 99, 10);
+		Rectangle2D bound = g.getFontMetrics().getStringBounds(text, g);
+		g.drawString(text, (int)(50-bound.getWidth()/2), 23);
+    }
+}
Index: src/org/openstreetmap/josm/gui/MapSlider.java
===================================================================
--- src/org/openstreetmap/josm/gui/MapSlider.java	(revision 115)
+++ src/org/openstreetmap/josm/gui/MapSlider.java	(revision 115)
@@ -0,0 +1,51 @@
+package org.openstreetmap.josm.gui;
+
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import javax.swing.JSlider;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.openstreetmap.josm.data.coor.EastNorth;
+
+class MapSlider extends JSlider implements PropertyChangeListener, ChangeListener {
+	
+    private final MapView mv;
+	boolean clicked = false;
+	
+	public MapSlider(MapView mv) {
+		super(0, 20);
+		setOpaque(false);
+		this.mv = mv;
+		addMouseListener(new MouseAdapter(){
+			@Override public void mousePressed(MouseEvent e) {
+				clicked = true;
+			}
+			@Override public void mouseReleased(MouseEvent e) {
+				clicked = false;
+			}
+		});
+		mv.addPropertyChangeListener("scale", this);
+		addChangeListener(this);
+	}
+	
+	public void propertyChange(PropertyChangeEvent evt) {
+		if (!getModel().getValueIsAdjusting())
+			setValue(this.mv.zoom());
+	}
+	
+	public void stateChanged(ChangeEvent e) {
+		if (!clicked)
+			return;
+		EastNorth pos = MapView.world;
+		for (int zoom = 0; zoom < getValue(); ++zoom)
+			pos = new EastNorth(pos.east()/2, pos.north()/2);
+		if (this.mv.getWidth() < this.mv.getHeight())
+			this.mv.zoomTo(this.mv.center, pos.east()*2/(this.mv.getWidth()-20));
+		else
+			this.mv.zoomTo(this.mv.center, pos.north()*2/(this.mv.getHeight()-20));
+	}
+}
Index: src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- src/org/openstreetmap/josm/gui/MapView.java	(revision 114)
+++ src/org/openstreetmap/josm/gui/MapView.java	(revision 115)
@@ -8,8 +8,4 @@
 import java.awt.event.ComponentAdapter;
 import java.awt.event.ComponentEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -18,7 +14,4 @@
 
 import javax.swing.JOptionPane;
-import javax.swing.JSlider;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
 
 import org.openstreetmap.josm.Main;
@@ -87,36 +80,4 @@
 
 
-	private final class Scaler extends JSlider implements PropertyChangeListener, ChangeListener {
-		boolean clicked = false;
-		public Scaler() {
-			super(0, 20);
-			addMouseListener(new MouseAdapter(){
-				@Override public void mousePressed(MouseEvent e) {
-					clicked = true;
-				}
-				@Override public void mouseReleased(MouseEvent e) {
-					clicked = false;
-				}
-			});
-			MapView.this.addPropertyChangeListener("scale", this);
-			addChangeListener(this);
-		}
-		public void propertyChange(PropertyChangeEvent evt) {
-			if (!getModel().getValueIsAdjusting())
-				setValue(zoom());
-		}
-		public void stateChanged(ChangeEvent e) {
-			if (!clicked)
-				return;
-			EastNorth pos = world;
-			for (int zoom = 0; zoom < getValue(); ++zoom)
-				pos = new EastNorth(pos.east()/2, pos.north()/2);
-			if (MapView.this.getWidth() < MapView.this.getHeight())
-				zoomTo(center, pos.east()*2/(MapView.this.getWidth()-20));
-			else
-				zoomTo(center, pos.north()*2/(MapView.this.getHeight()-20));
-		}
-	}
-
 	public MapView(AutoScaleAction autoScaleAction) {
 		this.autoScaleAction = autoScaleAction;
@@ -134,8 +95,12 @@
 			}
 		});
-		Scaler zoomScaler = new Scaler();
-		zoomScaler.setOpaque(false);
-		add(zoomScaler);
-		zoomScaler.setBounds(0,0, 100, 30);
+
+		MapSlider zoomSlider = new MapSlider(this);
+		add(zoomSlider);
+		zoomSlider.setBounds(0,0, 100, 30);
+		
+		MapScaler scaler = new MapScaler(this);
+		add(scaler);
+		scaler.setLocation(10,30);
 	}
 
Index: src/org/openstreetmap/josm/gui/PreferenceDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/PreferenceDialog.java	(revision 114)
+++ src/org/openstreetmap/josm/gui/PreferenceDialog.java	(revision 115)
@@ -78,4 +78,5 @@
 			Main.pref.put("draw.rawgps.lines", drawRawGpsLines.isSelected());
 			Main.pref.put("draw.rawgps.lines.force", forceRawGpsLines.isSelected());
+			Main.pref.put("draw.rawgps.large", largeGpsPoints.isSelected());
 			Main.pref.put("draw.segment.direction", directionHint.isSelected());
 
@@ -157,4 +158,5 @@
 	 */
 	private JCheckBox forceRawGpsLines = new JCheckBox(tr("Force lines if no segments imported."));
+	private JCheckBox largeGpsPoints = new JCheckBox(tr("Draw large GPS points."));
 	private JCheckBox directionHint = new JCheckBox(tr("Draw Direction Arrows"));
 	private JTable colors;
@@ -220,4 +222,6 @@
 		forceRawGpsLines.setSelected(Main.pref.getBoolean("draw.rawgps.lines.force"));
 		forceRawGpsLines.setEnabled(drawRawGpsLines.isSelected());
+		largeGpsPoints.setSelected(Main.pref.getBoolean("draw.rawgps.large"));
+		largeGpsPoints.setToolTipText(tr("Draw larger dots for the GPS points."));
 		directionHint.setToolTipText(tr("Draw direction hints for all segments."));
 		directionHint.setSelected(Main.pref.getBoolean("draw.segment.direction"));
@@ -296,4 +300,5 @@
 		display.add(drawRawGpsLines, GBC.eol().insets(20,0,0,0));
 		display.add(forceRawGpsLines, GBC.eop().insets(40,0,0,0));
+		display.add(largeGpsPoints, GBC.eop().insets(20,0,0,0));
 		display.add(directionHint, GBC.eop().insets(20,0,0,0));
 		display.add(new JLabel(tr("Colors")), GBC.eol());
Index: src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 114)
+++ src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java	(revision 115)
@@ -234,12 +234,12 @@
 			public void actionPerformed(ActionEvent e) {
 				int sel = propertyTable.getSelectedRow();
-				if (e.getActionCommand().equals(tr("Add")))
+				if (e.getActionCommand().equals("Add"))
 					add();
-				else if (e.getActionCommand().equals(tr("Edit"))) {
+				else if (e.getActionCommand().equals("Edit")) {
 					if (sel == -1)
 						JOptionPane.showMessageDialog(Main.parent, tr("Please select the row to edit."));
 					else
 						edit(sel);
-				} else if (e.getActionCommand().equals(tr("Delete"))) {
+				} else if (e.getActionCommand().equals("Delete")) {
 					if (sel == -1)
 						JOptionPane.showMessageDialog(Main.parent, tr("Please select the row to delete."));
Index: src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 114)
+++ src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 115)
@@ -41,5 +41,5 @@
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.io.OsmIdReader;
-import org.openstreetmap.josm.io.ProgressReader;
+import org.openstreetmap.josm.io.ProgressInputStream;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -74,5 +74,5 @@
 			try {
 		        URLConnection con = url.openConnection();
-		        InputStream in = new ProgressReader(con, progress, currentAction);
+		        InputStream in = new ProgressInputStream(con, progress, currentAction);
 				currentAction.setText(tr("Downloading..."));
 				Map<Long, String> ids = idReader.parseIds(in);
Index: src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java	(revision 114)
+++ src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java	(revision 115)
@@ -112,13 +112,19 @@
 			g.setColor(Color.GRAY);
 		Point old = null;
+		
+		boolean force = Main.pref.getBoolean("draw.rawgps.lines.force");
+		boolean lines = Main.pref.getBoolean("draw.rawgps.lines");
+		boolean large = Main.pref.getBoolean("draw.rawgps.large");
 		for (Collection<GpsPoint> c : data) {
-			if (!Main.pref.getBoolean("draw.rawgps.lines.force"))
+			if (!force)
 				old = null;
 			for (GpsPoint p : c) {
 				Point screen = mv.getPoint(p.eastNorth);
-				if (Main.pref.getBoolean("draw.rawgps.lines") && old != null)
+				if (lines && old != null)
 					g.drawLine(old.x, old.y, screen.x, screen.y);
-				else
+				else if (!large)
 					g.drawRect(screen.x, screen.y, 0, 0);
+				if (large)
+					g.fillRect(screen.x-1, screen.y-1, 3, 3);
 				old = screen;
 			}
Index: src/org/openstreetmap/josm/io/OsmServerReader.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 114)
+++ src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 115)
@@ -30,5 +30,5 @@
 		if (isAuthCancelled() && activeConnection.getResponseCode() == 401)
 			return null;
-		return new ProgressReader(activeConnection, progress, currentAction);
+		return new ProgressInputStream(activeConnection, progress, currentAction);
 	}
 }
Index: src/org/openstreetmap/josm/io/ProgressInputStream.java
===================================================================
--- src/org/openstreetmap/josm/io/ProgressInputStream.java	(revision 115)
+++ src/org/openstreetmap/josm/io/ProgressInputStream.java	(revision 115)
@@ -0,0 +1,79 @@
+package org.openstreetmap.josm.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URLConnection;
+
+import javax.swing.BoundedRangeModel;
+import javax.swing.JLabel;
+
+/**
+ * Read from an other reader and increment an progress counter while on the way.
+ * @author Imi
+ */
+public class ProgressInputStream extends InputStream {
+
+	private final InputStream in;
+	private final BoundedRangeModel progress;
+	private final JLabel currentAction;
+	private int readSoFar = 0;
+	private int lastDialogUpdate = 0;
+	private final URLConnection connection;
+
+	public ProgressInputStream(URLConnection con, BoundedRangeModel progress, JLabel currentAction) throws IOException {
+		this.connection = con;
+		this.in = con.getInputStream();
+		this.progress = progress;
+		this.currentAction = currentAction;
+		int contentLength = con.getContentLength();
+		if (contentLength > 0)
+			progress.setMaximum(contentLength);
+		else
+			progress.setMaximum(0);
+		progress.setValue(0);
+	}
+
+	@Override public void close() throws IOException {
+		in.close();
+	}
+
+	@Override public int read(byte[] b, int off, int len) throws IOException {
+		int read = in.read(b, off, len);
+		if (read != -1)
+			advanceTicker(read);
+		return read;
+	}
+
+	@Override public int read() throws IOException {
+		int read = in.read();
+		if (read != -1)
+			advanceTicker(1);
+		return read;
+	}
+
+	/**
+	 * Increase ticker (progress counter and displayed text) by the given amount.
+	 * @param amount
+	 */
+	private void advanceTicker(int amount) {
+		if (progress.getMaximum() == 0 && connection.getContentLength() != -1)
+			progress.setMaximum(connection.getContentLength());
+
+		readSoFar += amount;
+
+		if (readSoFar / 1024 != lastDialogUpdate) {
+			lastDialogUpdate++;
+			String progStr = " "+readSoFar/1024+"/";
+			progStr += (progress.getMaximum()==0) ? "??? KB" : (progress.getMaximum()/1024)+" KB";
+			progress.setValue(readSoFar);
+
+			String cur = currentAction.getText();
+			int i = cur.indexOf(' ');
+			if (i != -1)
+				cur = cur.substring(0, i) + progStr;
+			else
+				cur += progStr;
+			currentAction.setText(cur);
+		}
+	}
+}
Index: src/org/openstreetmap/josm/io/ProgressReader.java
===================================================================
--- src/org/openstreetmap/josm/io/ProgressReader.java	(revision 114)
+++ 	(revision )
@@ -1,79 +1,0 @@
-package org.openstreetmap.josm.io;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URLConnection;
-
-import javax.swing.BoundedRangeModel;
-import javax.swing.JLabel;
-
-/**
- * Read from an other reader and increment an progress counter while on the way.
- * @author Imi
- */
-public class ProgressReader extends InputStream {
-
-	private final InputStream in;
-	private final BoundedRangeModel progress;
-	private final JLabel currentAction;
-	private int readSoFar = 0;
-	private int lastDialogUpdate = 0;
-	private final URLConnection connection;
-
-	public ProgressReader(URLConnection con, BoundedRangeModel progress, JLabel currentAction) throws IOException {
-		this.connection = con;
-		this.in = con.getInputStream();
-		this.progress = progress;
-		this.currentAction = currentAction;
-		int contentLength = con.getContentLength();
-		if (contentLength > 0)
-			progress.setMaximum(contentLength);
-		else
-			progress.setMaximum(0);
-		progress.setValue(0);
-	}
-
-	@Override public void close() throws IOException {
-		in.close();
-	}
-
-	@Override public int read(byte[] b, int off, int len) throws IOException {
-		int read = in.read(b, off, len);
-		if (read != -1)
-			advanceTicker(read);
-		return read;
-	}
-
-	@Override public int read() throws IOException {
-		int read = in.read();
-		if (read != -1)
-			advanceTicker(1);
-		return read;
-	}
-
-	/**
-	 * Increase ticker (progress counter and displayed text) by the given amount.
-	 * @param amount
-	 */
-	private void advanceTicker(int amount) {
-		if (progress.getMaximum() == 0 && connection.getContentLength() != -1)
-			progress.setMaximum(connection.getContentLength());
-
-		readSoFar += amount;
-
-		if (readSoFar / 1024 != lastDialogUpdate) {
-			lastDialogUpdate++;
-			String progStr = " "+readSoFar/1024+"/";
-			progStr += (progress.getMaximum()==0) ? "??? KB" : (progress.getMaximum()/1024)+" KB";
-			progress.setValue(readSoFar);
-
-			String cur = currentAction.getText();
-			int i = cur.indexOf(' ');
-			if (i != -1)
-				cur = cur.substring(0, i) + progStr;
-			else
-				cur += progStr;
-			currentAction.setText(cur);
-		}
-	}
-}
Index: src/org/openstreetmap/josm/tools/I18n.java
===================================================================
--- src/org/openstreetmap/josm/tools/I18n.java	(revision 114)
+++ src/org/openstreetmap/josm/tools/I18n.java	(revision 115)
@@ -20,5 +20,5 @@
 	        i18n = I18nFactory.getI18n(Main.class);
         } catch (MissingResourceException e) {
-        	System.out.println("Locale '"+Locale.getDefault().getLanguage()+"' not found. Using default.");
+        	System.out.println("Locale '"+Locale.getDefault()+"' not found. Using default.");
         }
 	}
