Index: trunk/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java	(revision 6957)
+++ trunk/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java	(revision 6958)
@@ -14,4 +14,5 @@
 import java.awt.event.MouseListener;
 import java.util.Arrays;
+import java.util.Comparator;
 import java.util.Map;
 
@@ -26,5 +27,7 @@
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
+import javax.swing.table.DefaultTableModel;
 import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableRowSorter;
 
 import org.openstreetmap.josm.Main;
@@ -56,4 +59,46 @@
         this.layer = layer;
         putValue("help", ht("/Action/ChooseTrackVisibility"));
+    }
+
+    /**
+     * Class to format a length according to SystemOfMesurement.
+     */
+    private final class TrackLength {
+        private double value;
+
+        /**
+         * Constructs a new {@code TrackLength} object with a given length.
+         * @param value length of the track
+         */
+        TrackLength(double value) {
+            this.value = value;
+        }
+
+        /**
+         * Provides string representation.
+         * @return String representation depending of SystemOfMeasurement
+         */
+        @Override
+        public String toString() {
+            return NavigatableComponent.getSystemOfMeasurement().getDistText(value);
+        }
+    }
+
+    /**
+     * Comparator for TrackLength objects
+     */
+    private final class LengthContentComparator implements Comparator<TrackLength> {
+
+        /**
+         * Compare 2 TrackLength objects relative to the real length
+         */
+        @Override
+        public int compare(TrackLength l0, TrackLength l1) {
+            if(l0.value < l1.value)
+                return -1;
+            else if(l0.value > l1.value)
+                return 1;
+            return 0;
+        }
     }
 
@@ -69,7 +114,7 @@
             String desc = (String) (attr.containsKey("desc") ? attr.get("desc") : "");
             String time = GpxLayer.getTimespanForTrack(trk);
-            String length = NavigatableComponent.getSystemOfMeasurement().getDistText(trk.length());
+            TrackLength length = new TrackLength(trk.length());
             String url = (String) (attr.containsKey("url") ? attr.get("url") : "");
-            tracks[i] = new String[]{name, desc, time, length, url};
+            tracks[i] = new Object[]{name, desc, time, length, url};
             i++;
         }
@@ -82,5 +127,6 @@
     private JTable buildTable(Object[][] content) {
         final String[] headers = {tr("Name"), tr("Description"), tr("Timespan"), tr("Length"), tr("URL")};
-        final JTable t = new JTable(content, headers) {
+        DefaultTableModel model = new DefaultTableModel(content, headers);
+        final JTable t = new JTable(model) {
             @Override
             public Component prepareRenderer(TableCellRenderer renderer, int row, int col) {
@@ -88,5 +134,5 @@
                 if (c instanceof JComponent) {
                     JComponent jc = (JComponent) c;
-                    jc.setToolTipText((String) getValueAt(row, col));
+                    jc.setToolTipText(getValueAt(row, col).toString());
                 }
                 return c;
@@ -98,4 +144,9 @@
             }
         };
+        // define how to sort row
+        TableRowSorter<DefaultTableModel> rowSorter = new TableRowSorter<DefaultTableModel>();
+        t.setRowSorter(rowSorter);
+        rowSorter.setModel(model);
+        rowSorter.setComparator(3, new LengthContentComparator());
         // default column widths
         t.getColumnModel().getColumn(0).setPreferredWidth(220);
@@ -124,5 +175,4 @@
             }
         };
-        t.setAutoCreateRowSorter(true);
         t.addMouseListener(urlOpener);
         t.setFillsViewportHeight(true);
