Index: trunk/src/org/openstreetmap/josm/io/nmea/NmeaReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/nmea/NmeaReader.java	(revision 14082)
+++ trunk/src/org/openstreetmap/josm/io/nmea/NmeaReader.java	(revision 14083)
@@ -432,6 +432,5 @@
                     if (!accu.isEmpty() && currentwp != null) {
                         double speed = Double.parseDouble(accu);
-                        speed /= 3.6; // speed in m/s
-                        currentwp.put("speed", Double.toString(speed));
+                        currentwp.put("speed", Double.toString(speed)); // speed in km/h
                     }
                 }
@@ -481,5 +480,5 @@
                 if (!accu.isEmpty() && !currentwp.attr.containsKey("speed")) {
                     double speed = Double.parseDouble(accu);
-                    speed *= 0.514444444; // to m/s
+                    speed *= 0.514444444 * 3.6; // to km/h
                     currentwp.put("speed", Double.toString(speed));
                 }
Index: trunk/test/unit/org/openstreetmap/josm/io/nmea/NmeaReaderTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/io/nmea/NmeaReaderTest.java	(revision 14082)
+++ trunk/test/unit/org/openstreetmap/josm/io/nmea/NmeaReaderTest.java	(revision 14083)
@@ -160,8 +160,20 @@
     }
 
-    private static Date readDate(String nmeaLine) throws IOException, SAXException {
+    private static GpxData read(String nmeaLine) throws IOException, SAXException {
         NmeaReader in = new NmeaReader(new ByteArrayInputStream(nmeaLine.getBytes(StandardCharsets.UTF_8)));
         in.parse(true);
-        return in.data.tracks.iterator().next().getSegments().iterator().next().getWayPoints().iterator().next().getTime();
+        return in.data;
+    }
+
+    private static WayPoint readWayPoint(String nmeaLine) throws IOException, SAXException {
+        return read(nmeaLine).tracks.iterator().next().getSegments().iterator().next().getWayPoints().iterator().next();
+    }
+
+    private static Date readDate(String nmeaLine) throws IOException, SAXException {
+        return readWayPoint(nmeaLine).getTime();
+    }
+
+    private static double readSpeed(String nmeaLine) throws IOException, SAXException {
+        return Double.parseDouble(readWayPoint(nmeaLine).getString("speed"));
     }
 
@@ -179,3 +191,16 @@
                 readDate("$GNRMC,162859.4,A,4543.03388,N,00058.19870,W,45.252,209.07,300518,,,D,V*13")));
     }
+
+    /**
+     * Non-regression test for <a href="https://josm.openstreetmap.de/ticket/16554">Bug #16554</a>.
+     * @throws Exception if an error occurs
+     */
+    @Test
+    public void testTicket16554() throws Exception {
+        assertEquals(63.2420959, readSpeed(
+                  "$GNRMC,141448.80,A,4659.05514,N,00130.44695,W,34.148,289.80,300718,,,D,V*26"), 1e-7);
+        assertEquals(63.2430000, readSpeed(
+                  "$GNRMC,141448.80,A,4659.05514,N,00130.44695,W,34.148,289.80,300718,,,D,V*26"
+                + "$GNVTG,289.80,T,,M,34.148,N,63.243,K,D*27"), 1e-7);
+    }
 }
