Index: src/org/openstreetmap/josm/Main.java
===================================================================
--- src/org/openstreetmap/josm/Main.java	(revision 72)
+++ src/org/openstreetmap/josm/Main.java	(revision 73)
@@ -35,4 +35,5 @@
 import org.openstreetmap.josm.data.Preferences.PreferencesException;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.ShowModifiers;
@@ -53,4 +54,6 @@
 	 */
 	public static Main main;
+
+	public static Projection proj;
 
 	/**
@@ -183,4 +186,6 @@
 		});
 		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
+		
+		proj = pref.getProjection();
 	}
 
Index: src/org/openstreetmap/josm/actions/DownloadAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/DownloadAction.java	(revision 72)
+++ src/org/openstreetmap/josm/actions/DownloadAction.java	(revision 73)
@@ -58,4 +58,7 @@
     private enum DownloadStatus {FINISHED, REDISPLAY}
 
+    /**
+     * minlat, minlon, maxlat, maxlon
+     */
 	JTextField[] latlon = new JTextField[]{
 			new JTextField(9),
@@ -68,4 +71,7 @@
 		super("Download from OSM", "download", "Download map data from the OSM server.", "Ctrl-Shift-D", 
 				KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK));
+		// TODO remove when bug in Java6 is fixed
+		for (JTextField f : latlon)
+			f.setMinimumSize(new Dimension(100,new JTextField().getMinimumSize().height));
 	}
 
Index: src/org/openstreetmap/josm/command/MoveCommand.java
===================================================================
--- src/org/openstreetmap/josm/command/MoveCommand.java	(revision 72)
+++ src/org/openstreetmap/josm/command/MoveCommand.java	(revision 73)
@@ -78,5 +78,5 @@
 		for (Node n : objects) {
 			n.eastNorth = new EastNorth(n.eastNorth.east()+x, n.eastNorth.north()+y);
-			n.coor = Main.pref.getProjection().eastNorth2latlon(n.eastNorth);
+			n.coor = Main.proj.eastNorth2latlon(n.eastNorth);
 		}
 		this.x += x;
@@ -87,5 +87,5 @@
 		for (Node n : objects) {
 			n.eastNorth = new EastNorth(n.eastNorth.east()+x, n.eastNorth.north()+y);
-			n.coor = Main.pref.getProjection().eastNorth2latlon(n.eastNorth);
+			n.coor = Main.proj.eastNorth2latlon(n.eastNorth);
 			n.modified = true;
 		}
Index: src/org/openstreetmap/josm/data/Bounds.java
===================================================================
--- src/org/openstreetmap/josm/data/Bounds.java	(revision 72)
+++ src/org/openstreetmap/josm/data/Bounds.java	(revision 73)
@@ -34,3 +34,8 @@
 		max = new LatLon(Projection.MAX_LAT, Projection.MAX_LON);
 	}
+	
+	@Override
+	public String toString() {
+		return "Bounds["+min.lat()+","+min.lon()+","+max.lat()+","+max.lon()+"]";
+	}
 }
Index: src/org/openstreetmap/josm/data/osm/Node.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/Node.java	(revision 72)
+++ src/org/openstreetmap/josm/data/osm/Node.java	(revision 73)
@@ -19,5 +19,5 @@
 	public Node(LatLon latlon) {
 		this.coor = latlon;
-		eastNorth = Main.pref.getProjection().latlon2eastNorth(latlon);
+		eastNorth = Main.proj.latlon2eastNorth(latlon);
 	}
 
Index: src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(revision 72)
+++ src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(revision 73)
@@ -53,5 +53,5 @@
 		if (min == null || max == null)
 			return null;
-		return new Bounds(Main.pref.getProjection().eastNorth2latlon(min), Main.pref.getProjection().eastNorth2latlon(max));
+		return new Bounds(Main.proj.eastNorth2latlon(min), Main.proj.eastNorth2latlon(max));
 	}
 }
Index: src/org/openstreetmap/josm/data/projection/Mercator.java
===================================================================
--- src/org/openstreetmap/josm/data/projection/Mercator.java	(revision 72)
+++ src/org/openstreetmap/josm/data/projection/Mercator.java	(revision 73)
@@ -23,6 +23,6 @@
 	public LatLon eastNorth2latlon(EastNorth p) {
 		return new LatLon(
-			p.east()*180/Math.PI,
-			Math.atan(Math.sinh(p.north()))*180/Math.PI);
+			Math.atan(Math.sinh(p.north()))*180/Math.PI,
+			p.east()*180/Math.PI);
 	}
 
Index: src/org/openstreetmap/josm/gui/BookmarkList.java
===================================================================
--- src/org/openstreetmap/josm/gui/BookmarkList.java	(revision 72)
+++ src/org/openstreetmap/josm/gui/BookmarkList.java	(revision 73)
@@ -32,5 +32,5 @@
 	public static class Bookmark {
 		public String name;
-		public double[] latlon = new double[4];
+		public double[] latlon = new double[4]; // minlat, minlon, maxlat, maxlon
 		public boolean rawgps;
 		@Override public String toString() {
Index: src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- src/org/openstreetmap/josm/gui/MapView.java	(revision 72)
+++ src/org/openstreetmap/josm/gui/MapView.java	(revision 73)
@@ -19,4 +19,5 @@
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
@@ -228,5 +229,5 @@
 			if (v.min == null || v.max == null) {
 				// no bounds means standard scale and center 
-				center = new EastNorth(51.526447, -0.14746371);
+				center = Main.proj.latlon2eastNorth(new LatLon(51.526447, -0.14746371));
 				scale = 10;
 			} else {
Index: src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 72)
+++ src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 73)
@@ -248,5 +248,5 @@
 	 */
 	protected Projection getProjection() {
-		return Main.pref.getProjection();
+		return Main.proj;
 	}
 }
Index: src/org/openstreetmap/josm/gui/PreferenceDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/PreferenceDialog.java	(revision 72)
+++ src/org/openstreetmap/josm/gui/PreferenceDialog.java	(revision 73)
@@ -90,5 +90,5 @@
 	 * Indicate, that the application has to be restarted for the settings to take effect.
 	 */
-	boolean requiresRestart = false;
+	private boolean requiresRestart = false;
 	/**
 	 * ComboBox with all look and feels.
@@ -149,5 +149,5 @@
 		lafCombo.addActionListener(new ActionListener(){
 			public void actionPerformed(ActionEvent e) {
-				setRequiresRestart();
+				requiresRestart = true;
 			}});
 
@@ -159,4 +159,9 @@
 			}
 		}
+		projectionCombo.addActionListener(new ActionListener(){
+			public void actionPerformed(ActionEvent e) {
+				requiresRestart = true;
+			}
+		});
 		
 		// drawRawGpsLines
@@ -265,11 +270,3 @@
 		return p;
 	}
-	
-	/**
-	 * Remember, that the settings made requires a restart of the application.
-	 * Called from various actionListener - classes
-	 */
-	protected void setRequiresRestart() {
-		requiresRestart = true;
-	}
 }
Index: src/org/openstreetmap/josm/gui/WorldChooser.java
===================================================================
--- src/org/openstreetmap/josm/gui/WorldChooser.java	(revision 72)
+++ src/org/openstreetmap/josm/gui/WorldChooser.java	(revision 73)
@@ -69,6 +69,6 @@
 			public LatLon eastNorth2latlon(EastNorth p) {
 				return new LatLon(
-						p.east()*360/world.getIconWidth() - 180,
-						p.north()*180/world.getIconHeight() - 90);
+						p.north()*180/world.getIconHeight() - 90,
+						p.east()*360/world.getIconWidth() - 180);
 			}
 			@Override
@@ -77,4 +77,5 @@
 			}
 		};
+		setMinimumSize(new Dimension(350, 350/2));
 	}
 
@@ -120,6 +121,8 @@
 	@Override
 	public void zoomTo(EastNorth newCenter, double scale) {
-		if (getWidth() != 0 && scale > scaleMax)
+		if (getWidth() != 0 && scale > scaleMax) {
 			scale = scaleMax;
+			newCenter = center;
+		}
 		super.zoomTo(newCenter, scale);
 	}
@@ -202,6 +205,6 @@
 			}
 		}
-		markerMin = new EastNorth(v[0], v[1]);
-		markerMax = new EastNorth(v[2], v[3]);
+		markerMin = getProjection().latlon2eastNorth(new LatLon(v[0], v[1]));
+		markerMax = getProjection().latlon2eastNorth(new LatLon(v[2], v[3]));
 		repaint();
 	}
Index: src/org/openstreetmap/josm/gui/layer/RawGpsDataLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/RawGpsDataLayer.java	(revision 72)
+++ src/org/openstreetmap/josm/gui/layer/RawGpsDataLayer.java	(revision 73)
@@ -112,5 +112,5 @@
 			Collection<EastNorth> eastNorthList = new LinkedList<EastNorth>();
 			for (LatLon ll : c)
-				eastNorthList.add(Main.pref.getProjection().latlon2eastNorth(ll));
+				eastNorthList.add(Main.proj.latlon2eastNorth(ll));
 			this.eastNorth.add(eastNorthList);
 		}
Index: src/org/openstreetmap/josm/io/OsmServerReader.java
===================================================================
--- src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 72)
+++ src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 73)
@@ -101,5 +101,4 @@
 		HttpURLConnection con = (HttpURLConnection)url.openConnection();
 		con.setConnectTimeout(20000);
-		System.out.println("response: "+con.getResponseCode());
 		if (con.getResponseCode() == 401 && isCancelled())
 			return null;
