Index: trunk/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java	(revision 16939)
+++ trunk/src/org/openstreetmap/josm/gui/layer/gpx/ChooseTrackVisibilityAction.java	(revision 16940)
@@ -13,5 +13,4 @@
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
-import java.io.Serializable;
 import java.util.Arrays;
 import java.util.Comparator;
@@ -34,4 +33,5 @@
 import javax.swing.ListSelectionModel;
 import javax.swing.event.TableModelEvent;
+import javax.swing.table.DefaultTableCellRenderer;
 import javax.swing.table.DefaultTableModel;
 import javax.swing.table.TableCellRenderer;
@@ -75,44 +75,4 @@
 
     /**
-     * Class to format a length according to SystemOfMesurement.
-     */
-    private static final class TrackLength {
-        private final 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 SystemOfMeasurement.getSystemOfMeasurement().getDistText(value);
-        }
-    }
-
-    /**
-     * Comparator for TrackLength objects
-     */
-    private static final class LengthContentComparator implements Comparator<TrackLength>, Serializable {
-
-        private static final long serialVersionUID = 1L;
-
-        /**
-         * Compare 2 TrackLength objects relative to the real length
-         */
-        @Override
-        public int compare(TrackLength l0, TrackLength l1) {
-            return Double.compare(l0.value, l1.value);
-        }
-    }
-
-    /**
      * Gathers all available data for the tracks and returns them as array of arrays
      * in the expected column order.
@@ -127,7 +87,6 @@
             String desc = (String) Optional.ofNullable(attr.get(GpxConstants.GPX_DESC)).orElse("");
             String time = GpxLayer.getTimespanForTrack(trk);
-            TrackLength length = new TrackLength(trk.length());
             String url = (String) Optional.ofNullable(attr.get("url")).orElse("");
-            tracks[i] = new Object[]{name, desc, time, length, url, trk};
+            tracks[i] = new Object[]{name, desc, time, trk.length(), url, trk};
             i++;
         }
@@ -179,5 +138,5 @@
         t.setRowSorter(rowSorter);
         rowSorter.setModel(model);
-        rowSorter.setComparator(3, new LengthContentComparator());
+        rowSorter.setComparator(3, Comparator.comparingDouble(length -> (double) length));
         // default column widths
         t.getColumnModel().getColumn(0).setPreferredWidth(220);
@@ -185,4 +144,12 @@
         t.getColumnModel().getColumn(2).setPreferredWidth(200);
         t.getColumnModel().getColumn(3).setPreferredWidth(50);
+        t.getColumnModel().getColumn(3).setCellRenderer(new DefaultTableCellRenderer() {
+            @Override
+            public Component getTableCellRendererComponent(
+                    JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+                value = SystemOfMeasurement.getSystemOfMeasurement().getDistText((Double) value);
+                return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+            }
+        });
         t.getColumnModel().getColumn(4).setPreferredWidth(100);
         // make the link clickable
