Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 3488)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 3490)
@@ -36,4 +36,5 @@
 import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.gui.help.Helpful;
+import org.openstreetmap.josm.gui.preferences.ProjectionPreference;
 import org.openstreetmap.josm.tools.Predicate;
 
@@ -116,9 +117,5 @@
 
     public static String getDistText(double dist) {
-        SystemOfMeasurement som = SYSTEMS_OF_MEASUREMENT.get(Main.pref.get("system_of_measurement", "Metric"));
-        if (som == null) {
-            som = METRIC_SOM;
-        }
-        return som.getDistText(dist);
+        return getSystemOfMeasurement().getDistText(dist);
     }
 
@@ -718,4 +715,11 @@
     }
 
+    public static SystemOfMeasurement getSystemOfMeasurement() {
+        SystemOfMeasurement som = SYSTEMS_OF_MEASUREMENT.get(ProjectionPreference.PROP_SYSTEM_OF_MEASUREMENT.get());
+        if (som == null)
+            return METRIC_SOM;
+        return som;
+    }
+
     public static class SystemOfMeasurement {
         public final double aValue;
Index: trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 3488)
+++ trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 3490)
@@ -10,4 +10,5 @@
 import java.awt.BasicStroke;
 import java.awt.Color;
+import java.awt.Dimension;
 import java.awt.Graphics2D;
 import java.awt.GridBagLayout;
@@ -18,5 +19,4 @@
 import java.io.File;
 import java.text.DateFormat;
-import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -40,4 +40,6 @@
 import javax.swing.JPanel;
 import javax.swing.JRadioButton;
+import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
 import javax.swing.filechooser.FileFilter;
 
@@ -59,4 +61,5 @@
 import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.NavigatableComponent;
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
 import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
@@ -65,4 +68,5 @@
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor;
+import org.openstreetmap.josm.gui.widgets.HtmlPanel;
 import org.openstreetmap.josm.io.JpgImporter;
 import org.openstreetmap.josm.tools.AudioUtil;
@@ -119,5 +123,94 @@
     @Override
     public Object getInfoComponent() {
-        return getToolTipText();
+        StringBuilder info = new StringBuilder();
+
+        if (data.attr.containsKey("name")) {
+            info.append(tr("Name: {0}", data.attr.get(GpxData.META_NAME))).append("<br>");
+        }
+
+        if (data.attr.containsKey("desc")) {
+            info.append(tr("Description: {0}", data.attr.get(GpxData.META_DESC))).append("<br>");
+        }
+
+        if (data.tracks.size() > 0) {
+            info.append("<table><thead align='center'><tr><td colspan='5'>"
+                    + trn("{0} track", "{0} tracks", data.tracks.size(), data.tracks.size())
+                    + "</td></tr><tr align='center'><td>" + tr("Name") + "</td><td>"
+                    + tr("Description") + "</td><td>" + tr("Timespan")
+                    + "</td><td>" + tr("Length") + "</td><td>" + tr("URL")
+                    + "</td></tr></thead>");
+
+            for (GpxTrack trk : data.tracks) {
+                WayPoint earliest = null, latest = null;
+
+                info.append("<tr><td>");
+                if (trk.getAttributes().containsKey("name")) {
+                    info.append(trk.getAttributes().get("name"));
+                }
+                info.append("</td><td>");
+                if (trk.getAttributes().containsKey("desc")) {
+                    info.append(" ").append(trk.getAttributes().get("desc"));
+                }
+                info.append("</td><td>");
+
+                for (GpxTrackSegment seg : trk.getSegments()) {
+                    for (WayPoint pnt : seg.getWayPoints()) {
+                        if (latest == null) {
+                            latest = earliest = pnt;
+                        } else {
+                            if (pnt.compareTo(earliest) < 0) {
+                                earliest = pnt;
+                            } else {
+                                latest = pnt;
+                            }
+                        }
+                    }
+                }
+
+                if (earliest != null && latest != null) {
+                    DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
+                    String earliestDate = df.format(earliest.getTime());
+                    String latestDate = df.format(latest.getTime());
+
+                    if (earliestDate.equals(latestDate)) {
+                        DateFormat tf = DateFormat.getTimeInstance(DateFormat.SHORT);
+                        info.append(earliestDate).append(" ");
+                        info.append(tf.format(earliest.getTime())).append(" - ").append(tf.format(latest.getTime()));
+                    } else {
+                        DateFormat dtf = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
+                        info.append(dtf.format(earliest.getTime())).append(" - ").append(dtf.format(latest.getTime()));
+                    }
+
+                    int diff = (int) (latest.time - earliest.time);
+                    info.append(String.format(" (%d:%02d)", diff / 3600, (diff % 3600) / 60));
+                }
+
+                info.append("</td><td>");
+                info.append(NavigatableComponent.getSystemOfMeasurement().getDistText(trk.length()));
+                info.append("</td><td>");
+                if (trk.getAttributes().containsKey("url")) {
+                    info.append(trk.getAttributes().get("url"));
+                }
+                info.append("</td></tr>");
+            }
+
+            info.append("</table><br><br>");
+
+        }
+
+        info.append(tr("Length: {0}", NavigatableComponent.getSystemOfMeasurement().getDistText(data.length()))).append("<br>");
+
+        info.append(trn("{0} route, ", "{0} routes, ", data.routes.size(), data.routes.size())).append(
+                trn("{0} waypoint", "{0} waypoints", data.waypoints.size(), data.waypoints.size())).append("<br>");
+
+        final JScrollPane sp = new JScrollPane(new HtmlPanel(info.toString()), JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+        sp.setPreferredSize(new Dimension(sp.getPreferredSize().width, 350));
+        SwingUtilities.invokeLater(new Runnable() {
+            @Override
+            public void run() {
+                sp.getVerticalScrollBar().setValue(0);
+            }
+        });
+        return sp;
     }
 
@@ -171,75 +264,10 @@
         }
 
-        if (data.tracks.size() > 0) {
-            info.append("<table><thead align='center'><tr><td colspan='5'>"
-                    + trn("{0} track", "{0} tracks", data.tracks.size(), data.tracks.size())
-                    + "</td></tr><tr align='center'><td>" + tr("Name") + "</td><td>"
-                    + tr("Description") + "</td><td>" + tr("Timespan")
-                    + "</td><td>" + tr("Length") + "</td><td>" + tr("URL")
-                    + "</td></tr></thead>");
-
-            for (GpxTrack trk : data.tracks) {
-                WayPoint earliest = null, latest = null;
-
-                info.append("<tr><td>");
-                if (trk.getAttributes().containsKey("name")) {
-                    info.append(trk.getAttributes().get("name"));
-                }
-                info.append("</td><td>");
-                if (trk.getAttributes().containsKey("desc")) {
-                    info.append(" ").append(trk.getAttributes().get("desc"));
-                }
-                info.append("</td><td>");
-
-                for (GpxTrackSegment seg : trk.getSegments()) {
-                    for (WayPoint pnt : seg.getWayPoints()) {
-                        if (latest == null) {
-                            latest = earliest = pnt;
-                        } else {
-                            if (pnt.compareTo(earliest) < 0) {
-                                earliest = pnt;
-                            } else {
-                                latest = pnt;
-                            }
-                        }
-                    }
-                }
-
-                if (earliest != null && latest != null) {
-                    DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
-                    String earliestDate = df.format(earliest.getTime());
-                    String latestDate = df.format(latest.getTime());
-
-                    if (earliestDate.equals(latestDate)) {
-                        DateFormat tf = DateFormat.getTimeInstance(DateFormat.SHORT);
-                        info.append(earliestDate).append(" ");
-                        info.append(tf.format(earliest.getTime())).append(" - ").append(tf.format(latest.getTime()));
-                    } else {
-                        DateFormat dtf = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
-                        info.append(dtf.format(earliest.getTime())).append(" - ").append(dtf.format(latest.getTime()));
-                    }
-
-                    int diff = (int) (latest.time - earliest.time);
-                    info.append(String.format(" (%d:%02d)", diff / 3600, (diff % 3600) / 60));
-                }
-
-                info.append("</td><td>");
-                info.append(new DecimalFormat("#0.00").format(trk.length() / 1000) + "km");
-                info.append("</td><td>");
-                if (trk.getAttributes().containsKey("url")) {
-                    info.append(trk.getAttributes().get("url"));
-                }
-                info.append("</td></tr>");
-            }
-
-            info.append("</table><br><br>");
-
-        }
-
-        info.append(tr("Length: ") + new DecimalFormat("#0.00").format(data.length() / 1000) + "km");
+        info.append(trn("{0} track, ", "{0} tracks, ", data.tracks.size(), data.tracks.size()));
+        info.append(trn("{0} route, ", "{0} routes, ", data.routes.size(), data.routes.size()));
+        info.append(trn("{0} waypoint", "{0} waypoints", data.waypoints.size(), data.waypoints.size())).append("<br>");
+
+        info.append(tr("Length: {0}", NavigatableComponent.getSystemOfMeasurement().getDistText(data.length())));
         info.append("<br>");
-
-        info.append(trn("{0} route, ", "{0} routes, ", data.routes.size(), data.routes.size())).append(
-                trn("{0} waypoint", "{0} waypoints", data.waypoints.size(), data.waypoints.size())).append("<br>");
 
         return info.append("</html>").toString();
Index: trunk/src/org/openstreetmap/josm/gui/preferences/ProjectionPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/ProjectionPreference.java	(revision 3488)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/ProjectionPreference.java	(revision 3490)
@@ -54,5 +54,5 @@
         }
     };
-    private static final StringProperty PROP_SYSTEM_OF_MEASUREMENT = new StringProperty("system_of_measurement", "Metric");
+    public static final StringProperty PROP_SYSTEM_OF_MEASUREMENT = new StringProperty("system_of_measurement", "Metric");
     private static final String[] unitsValues = (new ArrayList<String>(NavigatableComponent.SYSTEMS_OF_MEASUREMENT.keySet())).toArray(new String[0]);
     private static final String[] unitsValuesTr = new String[unitsValues.length];
Index: trunk/src/org/openstreetmap/josm/tools/Shortcut.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 3488)
+++ trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 3490)
@@ -236,6 +236,7 @@
         for(Shortcut c : shortcuts.values())
         {
-            if(!c.shortText.equals("core:none"))
+            if(!c.shortText.equals("core:none")) {
                 l.add(c);
+            }
         }
         return l;
