Index: trunk/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java	(revision 3411)
+++ trunk/src/org/openstreetmap/josm/data/coor/CoordinateFormat.java	(revision 3412)
@@ -16,8 +16,13 @@
 
     /**
-     * the minutes/seconds format 99" 99'
+     * the degrees/minutes/seconds format 9° 99" 99'
      */
-    DEGREES_MINUTES_SECONDS (tr("Degrees Minutes Seconds")),
-
+    DEGREES_MINUTES_SECONDS (tr("deg\u00B0 min'' sec\"")),
+    
+    /**
+     * the nautical format 
+     */
+    NAUTICAL (tr("deg\u00B0 min'' (Nautical)")),
+    
     /**
      * coordinates East/North
Index: trunk/src/org/openstreetmap/josm/data/coor/LatLon.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 3411)
+++ trunk/src/org/openstreetmap/josm/data/coor/LatLon.java	(revision 3412)
@@ -35,4 +35,5 @@
     private static DecimalFormat cDmsMinuteFormatter = new DecimalFormat("00");
     private static DecimalFormat cDmsSecondFormatter = new DecimalFormat("00.0");
+    private static DecimalFormat cDmMinuteFormatter = new DecimalFormat("00.000");
     public static DecimalFormat cDdFormatter;
     static {
@@ -78,4 +79,12 @@
     }
 
+    public static String dm(double pCoordinate) {
+
+        double tAbsCoord = Math.abs(pCoordinate);
+        int tDegree = (int) tAbsCoord;
+        double tMinutes = (tAbsCoord - tDegree) * 60;
+        return tDegree + "\u00B0" + cDmMinuteFormatter.format(tMinutes) + "\'";
+    }
+
     public LatLon(double lat, double lon) {
         super(lon, lat);
@@ -90,10 +99,11 @@
     }
 
+    private final static String SOUTH = trc("compass", "S");
+    private final static String NORTH = trc("compass", "N");
     public String latToString(CoordinateFormat d) {
         switch(d) {
         case DECIMAL_DEGREES: return cDdFormatter.format(y);
-        case DEGREES_MINUTES_SECONDS: return dms(y) + ((y < 0) ?
-                /* short symbol for South */ trc("compass", "S") :
-                    /* short symbol for North */ trc("compass", "N"));
+        case DEGREES_MINUTES_SECONDS: return dms(y) + ((y < 0) ? SOUTH : NORTH);
+        case NAUTICAL: return dm(y) + ((y < 0) ? SOUTH : NORTH);
         case EAST_NORTH: return cDdFormatter.format(Main.proj.latlon2eastNorth(this).north());
         default: return "ERR";
@@ -105,10 +115,11 @@
     }
 
+    private final static String WEST = trc("compass", "W");
+    private final static String EAST = trc("compass", "E");
     public String lonToString(CoordinateFormat d) {
         switch(d) {
         case DECIMAL_DEGREES: return cDdFormatter.format(x);
-        case DEGREES_MINUTES_SECONDS: return dms(x) + ((x < 0) ?
-                /* short symbol for West */ trc("compass", "W") :
-                    /* short symbol for East */ trc("compass", "E"));
+        case DEGREES_MINUTES_SECONDS: return dms(x) + ((x < 0) ? WEST : EAST);
+        case NAUTICAL: return dm(x) + ((x < 0) ? WEST : EAST);
         case EAST_NORTH: return cDdFormatter.format(Main.proj.latlon2eastNorth(this).east());
         default: return "ERR";
