Index: /home/mli/workspace/JOSM/src/org/openstreetmap/josm/gui/preferences/ProjectionPreference.java
===================================================================
--- /home/mli/workspace/JOSM/src/org/openstreetmap/josm/gui/preferences/ProjectionPreference.java	(revision 1096)
+++ /home/mli/workspace/JOSM/src/org/openstreetmap/josm/gui/preferences/ProjectionPreference.java	(working copy)
@@ -13,6 +13,7 @@
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.projection.Projection;
+import org.openstreetmap.josm.data.projection.Projection.CoordinateDisplay;
 import org.openstreetmap.josm.tools.GBC;
 
 public class ProjectionPreference implements PreferenceSetting {
@@ -21,15 +22,26 @@
 	 * Combobox with all projections available
 	 */
 	private JComboBox projectionCombo = new JComboBox(Projection.allProjections);
+	private JComboBox coordinatesCombo = new JComboBox(CoordinateDisplay.values());
 
 	public void addGui(PreferenceDialog gui) {
-		for (int i = 0; i < projectionCombo.getItemCount(); ++i) {
-			if (projectionCombo.getItemAt(i).getClass().getName().equals(Main.pref.get("projection"))) {
-				projectionCombo.setSelectedIndex(i);
-				break;
-			}
-		}
+		
+        for (int i = 0; i < projectionCombo.getItemCount(); ++i) {
+            if (projectionCombo.getItemAt(i).getClass().getName().equals(Main.pref.get("projection"))) {
+                projectionCombo.setSelectedIndex(i);
+                break;
+            }
+        }
+
+        for (int i = 0; i < coordinatesCombo.getItemCount(); ++i) {
+            if (coordinatesCombo.getItemAt(i).toString().equals(Main.pref.get("coordinates"))) {
+                coordinatesCombo.setSelectedIndex(i);
+                break;
+            }
+        }
+
 		projectionCombo.addActionListener(gui.requireRestartAction);
+        coordinatesCombo.addActionListener(gui.requireRestartAction);
 		
 		JPanel projPanel = new JPanel();
 		projPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.gray), tr("Map Projection")));
@@ -37,10 +49,14 @@
 		projPanel.add(new JLabel(tr("Projection method")), GBC.std().insets(5,5,0,5));
 		projPanel.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
 		projPanel.add(projectionCombo, GBC.eop().fill(GBC.HORIZONTAL).insets(0,5,5,5));
+	    projPanel.add(new JLabel(tr("Display coordinates as")), GBC.std().insets(5,5,0,5));
+	    projPanel.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
+	    projPanel.add(coordinatesCombo, GBC.eop().fill(GBC.HORIZONTAL).insets(0,5,5,5));
 		gui.map.add(projPanel, GBC.eol().insets(0,0,0,10).fill(GBC.HORIZONTAL));
     }
 
 	public void ok() {
 		Main.pref.put("projection", projectionCombo.getSelectedItem().getClass().getName());
+		Main.pref.put("coordinates", coordinatesCombo.getSelectedItem().toString());
     }
 }
Index: /home/mli/workspace/JOSM/src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- /home/mli/workspace/JOSM/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 1096)
+++ /home/mli/workspace/JOSM/src/org/openstreetmap/josm/gui/MapStatus.java	(working copy)
@@ -88,11 +88,12 @@
 		}
 	}
 
+	String mCord;
     DecimalFormat latlon = new DecimalFormat("###0.0000");
-    ImageLabel lonText = new ImageLabel("lon", tr("The geographic longitude at the mouse pointer."), 8);
+    ImageLabel lonText = new ImageLabel("lon", tr("The geographic longitude at the mouse pointer."), 11);
     ImageLabel nameText = new ImageLabel("name", tr("The name of the object at the mouse pointer."), 20);
     JTextField helpText = new JTextField();
-    ImageLabel latText = new ImageLabel("lat", tr("The geographic latitude at the mouse pointer."), 7);
+    ImageLabel latText = new ImageLabel("lat", tr("The geographic latitude at the mouse pointer."), 10);
     ImageLabel angleText = new ImageLabel("angle", tr("The angle between the previous and the current way segment."), 6);
     ImageLabel headingText = new ImageLabel("heading", tr("The (compass) heading of the line segment being drawn."), 6);
     ImageLabel distText = new ImageLabel("dist", tr("The length of the new way segment being drawn."), 8);
@@ -253,7 +254,9 @@
 	 */
 	public MapStatus(final MapFrame mapFrame) {
 		this.mv = mapFrame.mapView;
-
+		
+		mCord = Main.pref.get("coordinates");
+		
 		// Listen for mouse movements and set the position text field
 		mv.addMouseMotionListener(new MouseMotionListener(){
 			public void mouseDragged(MouseEvent e) {
@@ -265,8 +268,8 @@
 				// Do not update the view, if ctrl is pressed.
 				if ((e.getModifiersEx() & MouseEvent.CTRL_DOWN_MASK) == 0) {
 					LatLon p = mv.getLatLon(e.getX(),e.getY());
-					latText.setText(latlon.format(p.lat()));
-					lonText.setText(latlon.format(p.lon()));
+					latText.setText(p.lat(mCord, latlon));
+					lonText.setText(p.lon(mCord, latlon));
 				}
 			}
 		});
Index: /home/mli/workspace/JOSM/src/org/openstreetmap/josm/data/coor/LatLon.java
===================================================================
--- /home/mli/workspace/JOSM/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 1096)
+++ /home/mli/workspace/JOSM/src/org/openstreetmap/josm/data/coor/LatLon.java	(working copy)
@@ -1,9 +1,13 @@
 // License: GPL. Copyright 2007 by Immanuel Scholz and others
 package org.openstreetmap.josm.data.coor;
 
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.lang.Math;
+
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.projection.Projection;
-import java.text.NumberFormat;
+import org.openstreetmap.josm.data.projection.Projection.CoordinateDisplay;
 
 /**
  * LatLon are unprojected latitude / longitude coordinates.
@@ -13,7 +17,36 @@
  * @author Imi
  */
 public class LatLon extends Coordinate {
+    
+    private static DecimalFormat DMSsFormatter = new DecimalFormat("00.0");
+    private static DecimalFormat DMmFormatter = new DecimalFormat("00.00");
+    
+    public static String convertDDToDMS(double pCoordinate, boolean pIsLon) {
+        
+        String tDir = "";
+        if (pIsLon && pCoordinate < 0) {tDir = "W";}
+        else if (pIsLon && pCoordinate > 0) {tDir = "E";}
+        else if (!pIsLon && pCoordinate < 0) {tDir = "S";}
+        else if (!pIsLon && pCoordinate > 0) {tDir = "N";}
+        
+        double tAbsCoord = Math.abs(pCoordinate);
+        int tDegree = (int) tAbsCoord;
+        double tTmpMinutes = (tAbsCoord - tDegree) * 60;
+        int tMinutes = (int) tTmpMinutes;
+        double tSeconds = (tTmpMinutes - tMinutes) * 60;
+        
+        return tDir + Math.abs(tDegree) + "\u00B0" + tMinutes + "\'" + DMSsFormatter.format(tSeconds) + "\"";
+    }
 
+    public static String convertDDToDM(double pCoordinate, boolean pIsLon) {
+        
+        int tDegree = (int) pCoordinate;
+        double tTmpMinutes = (pCoordinate - tDegree) * 60;
+        int tMinutes = Math.abs((int) tTmpMinutes);
+        
+        return tDegree + "\u00B0" + DMmFormatter.format(tMinutes) + "'";
+    }
+
 	public LatLon(double lat, double lon) {
 		super(lon, lat);
 	}
@@ -21,10 +54,40 @@
 	public double lat() {
 		return y;
 	}
+	
+	public String lat(String pCoord, DecimalFormat pFormat) {
+       
+	    boolean tIsLon = false;
+	    
+	    if (pCoord.equals(CoordinateDisplay.DD.toString())) {
+	        return pFormat.format(y);
+	    } else if (pCoord.equals(CoordinateDisplay.DM.toString())) {
+            return convertDDToDM(y, tIsLon);
+	    } else if (pCoord.equals(CoordinateDisplay.DMS.toString())) {
+	        return convertDDToDMS(y, tIsLon);
+	    } else {
+            return "ERROR";
+        }
+	}
 
 	public double lon() {
 		return x;
 	}
+	
+	public String lon(String pCoord, DecimalFormat pFormat) {
+	    
+	    boolean tIsLon = true;
+	    
+	    if (pCoord.equals(CoordinateDisplay.DD.toString())) {
+	        return pFormat.format(x);
+	    } else if (pCoord.equals(CoordinateDisplay.DM.toString())) {
+            return convertDDToDM(x, tIsLon);
+	    } else if (pCoord.equals(CoordinateDisplay.DMS.toString())) {
+	        return convertDDToDMS(x, tIsLon);
+	    } else {
+            return "ERROR";
+        }
+	}
 
 	/**
 	 * @return <code>true</code> if the other point has almost the same lat/lon
Index: /home/mli/workspace/JOSM/src/org/openstreetmap/josm/data/projection/Projection.java
===================================================================
--- /home/mli/workspace/JOSM/src/org/openstreetmap/josm/data/projection/Projection.java	(revision 1096)
+++ /home/mli/workspace/JOSM/src/org/openstreetmap/josm/data/projection/Projection.java	(working copy)
@@ -37,6 +37,15 @@
 	};
 	
 	/**
+	 * Possible ways to display coordinates
+	 */
+	public enum CoordinateDisplay {
+	    DD {public String toString() {return "hddd.ddddd°";}}, 
+	    DM {public String toString() {return "hddd.mm.mmm'";}}, 
+	    DMS {public String toString() {return "hddd°mm'ss.s\"";}};
+	}
+	
+	/**
 	 * Convert from lat/lon to northing/easting. 
 	 * 
 	 * @param p		The geo point to convert. x/y members of the point are filled.
