Index: /trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 19315)
+++ /trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 19316)
@@ -86,49 +86,15 @@
     /** remove if key equals */
     private static final String[] OBSOLETE_PREF_KEYS = {
-        "remotecontrol.https.enabled", /* remove entry after Dec. 2019 */
-        "remotecontrol.https.port", /* remove entry after Dec. 2019 */
-        "curves.circlearc.angle-separation", // see #19076
-        "update.selected.complete-relation" // see #19124
+        // nothing ATM
     };
 
     /** remove if key starts with */
     private static final String[] OBSOLETE_PREF_KEYS_START = {
-            //only remove layer specific prefs
-            "draw.rawgps.layer.wpt.",
-            "draw.rawgps.layer.audiowpt.",
-            "draw.rawgps.lines.force.",
-            "draw.rawgps.lines.alpha-blend.",
-            "draw.rawgps.lines.",
-            "markers.show ", //uses space as separator
-            "marker.makeautomarker.",
-            "clr.layer.",
-
-            //remove both layer specific and global prefs
-            "draw.rawgps.colors",
-            "draw.rawgps.direction",
-            "draw.rawgps.alternatedirection",
-            "draw.rawgps.linewidth",
-            "draw.rawgps.max-line-length.local",
-            "draw.rawgps.max-line-length",
-            "draw.rawgps.large",
-            "draw.rawgps.large.size",
-            "draw.rawgps.hdopcircle",
-            "draw.rawgps.min-arrow-distance",
-            "draw.rawgps.colorTracksTune",
-            "draw.rawgps.colors.dynamic",
-            "draw.rawgps.lines.local",
-            "draw.rawgps.heatmap"
+        // nothing ATM
     };
 
     /** keep subkey even if it starts with any of {@link #OBSOLETE_PREF_KEYS_START} */
     private static final List<String> KEEP_PREF_KEYS = Arrays.asList(
-            "draw.rawgps.lines.alpha-blend",
-            "draw.rawgps.lines.arrows",
-            "draw.rawgps.lines.arrows.fast",
-            "draw.rawgps.lines.arrows.min-distance",
-            "draw.rawgps.lines.force",
-            "draw.rawgps.lines.max-length",
-            "draw.rawgps.lines.max-length.local",
-            "draw.rawgps.lines.width"
+        // nothing ATM
     );
 
@@ -138,25 +104,6 @@
     private static Map<String, String> getUpdatePrefKeys() {
         HashMap<String, String> m = new HashMap<>();
-        m.put("draw.rawgps.direction", "draw.rawgps.lines.arrows");
-        m.put("draw.rawgps.alternatedirection", "draw.rawgps.lines.arrows.fast");
-        m.put("draw.rawgps.min-arrow-distance", "draw.rawgps.lines.arrows.min-distance");
-        m.put("draw.rawgps.linewidth", "draw.rawgps.lines.width");
-        m.put("draw.rawgps.max-line-length.local", "draw.rawgps.lines.max-length.local");
-        m.put("draw.rawgps.max-line-length", "draw.rawgps.lines.max-length");
-        m.put("draw.rawgps.large", "draw.rawgps.points.large");
-        m.put("draw.rawgps.large.alpha", "draw.rawgps.points.large.alpha");
-        m.put("draw.rawgps.large.size", "draw.rawgps.points.large.size");
-        m.put("draw.rawgps.hdopcircle", "draw.rawgps.points.hdopcircle");
-        m.put("draw.rawgps.layer.wpt.pattern", "draw.rawgps.markers.pattern");
-        m.put("draw.rawgps.layer.audiowpt.pattern", "draw.rawgps.markers.audio.pattern");
-        m.put("draw.rawgps.colors", "draw.rawgps.colormode");
-        m.put("draw.rawgps.colorTracksTune", "draw.rawgps.colormode.velocity.tune");
-        m.put("draw.rawgps.colors.dynamic", "draw.rawgps.colormode.dynamic-range");
-        m.put("draw.rawgps.heatmap.line-extra", "draw.rawgps.colormode.heatmap.line-extra");
-        m.put("draw.rawgps.heatmap.colormap", "draw.rawgps.colormode.heatmap.colormap");
-        m.put("draw.rawgps.heatmap.use-points", "draw.rawgps.colormode.heatmap.use-points");
-        m.put("draw.rawgps.heatmap.gain", "draw.rawgps.colormode.heatmap.gain");
-        m.put("draw.rawgps.heatmap.lower-limit", "draw.rawgps.colormode.heatmap.lower-limit");
-        m.put("draw.rawgps.date-coloring-min-dt", "draw.rawgps.colormode.time.min-distance");
+        m.put("hdop.color.alpha", "circle.color.alpha");
+        m.put("points.hdopcircle", "points.circle");
         return Collections.unmodifiableMap(m);
     }
Index: /trunk/src/org/openstreetmap/josm/data/gpx/GpxConstants.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/gpx/GpxConstants.java	(revision 19315)
+++ /trunk/src/org/openstreetmap/josm/data/gpx/GpxConstants.java	(revision 19316)
@@ -179,4 +179,10 @@
     String PT_DGPSID = "dgpsid";
 
+    /** Standard horizontal major deviation */
+    String PT_STD_HDEV = "stdhdev";
+    
+    /** Standard vertical major deviation */
+    String PT_STD_VDEV = "stdvdev";
+    
     /**
      * Ordered list of all possible waypoint keys.
@@ -184,5 +190,5 @@
     List<String> WPT_KEYS = Collections.unmodifiableList(Arrays.asList(PT_ELE, PT_TIME, PT_MAGVAR, PT_GEOIDHEIGHT,
             GPX_NAME, GPX_CMT, GPX_DESC, GPX_SRC, META_LINKS, PT_SYM, PT_TYPE,
-            PT_FIX, PT_SAT, PT_HDOP, PT_VDOP, PT_PDOP, PT_AGEOFDGPSDATA, PT_DGPSID));
+            PT_FIX, PT_SAT, PT_HDOP, PT_VDOP, PT_PDOP, PT_AGEOFDGPSDATA, PT_DGPSID, PT_STD_HDEV, PT_STD_VDEV));
 
     /**
Index: /trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java	(revision 19315)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java	(revision 19316)
@@ -92,5 +92,6 @@
     private boolean large;
     private int largesize;
-    private boolean hdopCircle;
+    private boolean drawCircle;
+    private int circleDataSource;
     /** paint direction arrow with alternate math. may be faster **/
     private boolean arrowsFast;
@@ -138,6 +139,6 @@
     private ColorScale directionScale;
 
-    /** Opacity for hdop points **/
-    private int hdopAlpha;
+    /** Opacity for circle points **/
+    private int circleAlpha;
 
     // lookup array to draw arrows without doing any math
@@ -243,5 +244,5 @@
 
     private void setupColors() {
-        hdopAlpha = Config.getPref().getInt("hdop.color.alpha", -1);
+        circleAlpha = Config.getPref().getInt("circle.color.alpha", -1);
         velocityScale = ColorScale.createHSBScale(256);
         /* Colors (without custom alpha channel, if given) for HDOP painting. */
@@ -380,5 +381,6 @@
         large = optBool("points.large");
         largesize = optInt("points.large.size");
-        hdopCircle = optBool("points.hdopcircle");
+        drawCircle = optBool("points.circle");
+        circleDataSource = optInt("points.circle.data.source");
         colored = getColorMode();
         velocityTune = optInt("colormode.velocity.tune");
@@ -857,8 +859,8 @@
 
     /****************************************************************
-     ********** STEP 3d - DRAW LARGE POINTS AND HDOP CIRCLE *********
+     ************ STEP 3d - DRAW LARGE POINTS AND CIRCLES ***********
      ****************************************************************/
     private void drawPointsStep3d(Graphics2D g, MapView mv, List<WayPoint> visibleSegments) {
-        if (large || hdopCircle) {
+        if (large || drawCircle) {
             final int halfSize = largesize / 2;
             for (WayPoint trkPnt : visibleSegments) {
@@ -869,18 +871,22 @@
                 Point screen = mv.getPoint(trkPnt);
 
-                if (hdopCircle && trkPnt.get(GpxConstants.PT_HDOP) != null) {
-                    // hdop value
-                    float hdop = ((Number) trkPnt.get(GpxConstants.PT_HDOP)).floatValue();
-                    if (hdop < 0) {
-                        hdop = 0;
+                if (drawCircle) {
+                    float circleSize;
+                    //hdop
+                    if (circleDataSource == 0 && trkPnt.get(GpxConstants.PT_HDOP) != null) {
+                        // circleSize value
+                        circleSize = ((Number) trkPnt.get(GpxConstants.PT_HDOP)).floatValue();
+                        drawCircle(g, mv, trkPnt, screen, circleSize);
                     }
-                    Color customColoringTransparent = hdopAlpha < 0 ? trkPnt.customColoring :
-                            new Color((trkPnt.customColoring.getRGB() & 0x00ffffff) | (hdopAlpha << 24), true);
-                    g.setColor(customColoringTransparent);
-                    // hdop circles
-                    int hdopp = mv.getPoint(new LatLon(
-                            trkPnt.getCoor().lat(),
-                            trkPnt.getCoor().lon() + 2d * 6 * hdop * 360 / 40000000d)).x - screen.x;
-                    g.drawArc(screen.x - hdopp / 2, screen.y - hdopp / 2, hdopp, hdopp, 0, 360);
+                    //horizontal standard deviation estimate
+                    if (circleDataSource == 1 && trkPnt.get(GpxConstants.PT_STD_HDEV) != null) {
+                        circleSize = ((Number) trkPnt.get(GpxConstants.PT_STD_HDEV)).floatValue();
+                        drawCircle(g, mv, trkPnt, screen, circleSize);
+                    }
+                    //age of correction
+                    if (circleDataSource == 2 && trkPnt.get(GpxConstants.PT_AGEOFDGPSDATA) != null) {
+                        circleSize = ((Number) trkPnt.get(GpxConstants.PT_AGEOFDGPSDATA)).floatValue();
+                        drawCircle(g, mv, trkPnt, screen, circleSize);
+                    }
                 }
                 if (large) {
@@ -901,5 +907,19 @@
                 }
             } // end for trkpnt
-        } // end if large || hdopcircle
+        } // end if large || drawCircle
+    }
+
+    private void drawCircle(Graphics2D g, MapView mv, WayPoint trkPnt, Point screen, float circleSize) {
+        if (circleSize < 0) {
+            circleSize = 0;
+        }
+        Color customColoringTransparent = circleAlpha < 0 ? trkPnt.customColoring :
+                new Color((trkPnt.customColoring.getRGB() & 0x00ffffff) | (circleAlpha << 24), true);
+        g.setColor(customColoringTransparent);
+        // circles
+        int circleSizep = mv.getPoint(new LatLon(
+                trkPnt.getCoor().lat(),
+                trkPnt.getCoor().lon() + 2d * 6 * circleSize * 360 / 40000000d)).x - screen.x;
+        g.drawArc(screen.x - circleSizep / 2, screen.y - circleSizep / 2, circleSizep, circleSizep, 0, 360);
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(revision 19315)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(revision 19316)
@@ -21,4 +21,5 @@
 import javax.swing.ButtonGroup;
 import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
@@ -66,5 +67,6 @@
     private final JCheckBox forceRawGpsLines = new JCheckBox(tr("Force lines if no segments imported"));
     private final JCheckBox largeGpsPoints = new JCheckBox(tr("Draw large GPS points"));
-    private final JCheckBox hdopCircleGpsPoints = new JCheckBox(tr("Draw a circle from HDOP value"));
+    private final JCheckBox circleGpsPoints = new JCheckBox(tr("Draw a circle from value"));
+    private final JComboBox<String> circleDataSource = new JosmComboBox<>(new String[] {tr("Hdop"), tr("Horizontal deviation estimate"), tr("Age of correction data")}); 
     private final JRadioButton colorTypeVelocity = new JRadioButton(tr("Velocity (red = slow, green = fast)"));
     private final JRadioButton colorTypeDirection = new JRadioButton(tr("Direction (red = west, yellow = north, green = east, blue = south)"));
@@ -133,5 +135,6 @@
         m.put("markers.pattern", Marker.LABEL_PATTERN_AUTO);
         m.put("markers.audio.pattern", "?{ '{name}' | '{desc}' | '{" + Marker.MARKER_FORMATTED_OFFSET + "}' }");
-        m.put("points.hdopcircle", false);
+        m.put("points.circle", false);
+        m.put("points.circle.data.source", 0);
         m.put("points.large", false);
         m.put("points.large.alpha", -1); //Expert mode only
@@ -421,8 +424,14 @@
         add(drawGpsArrowsMinDist, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
 
-        // hdopCircleGpsPoints
-        hdopCircleGpsPoints.setToolTipText(tr("Draw a circle from HDOP value"));
-        add(hdopCircleGpsPoints, GBC.eop().insets(20, 0, 0, 0));
-        ExpertToggleAction.addVisibilitySwitcher(hdopCircleGpsPoints);
+        // circleGpsPoints
+        circleGpsPoints.addItemListener(e -> {circleDataSource.setEnabled(circleGpsPoints.isSelected());});
+        circleGpsPoints.setToolTipText(tr("Draw a circle from value"));
+        circleDataSource.setToolTipText(tr("Source of the circle size"));
+        circleDataSource.setEnabled(false);
+
+        add(circleGpsPoints, GBC.std().insets(20, 0, 0, 0));
+        add(circleDataSource, GBC.eop().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
+        ExpertToggleAction.addVisibilitySwitcher(circleGpsPoints);
+        ExpertToggleAction.addVisibilitySwitcher(circleDataSource);
 
         // largeGpsPoints
@@ -623,5 +632,6 @@
         drawGpsArrowsFast.setSelected(prefBool("lines.arrows.fast"));
         drawGpsArrowsMinDist.setText(pref("lines.arrows.min-distance"));
-        hdopCircleGpsPoints.setSelected(prefBool("points.hdopcircle"));
+        circleGpsPoints.setSelected(prefBool("points.circle"));
+        circleDataSource.setSelectedIndex(prefInt("points.circle.data.source"));
         largeGpsPoints.setSelected(prefBool("points.large"));
         useGpsAntialiasing.setSelected(Config.getPref().getBoolean("mappaint.gpx.use-antialiasing", false));
@@ -699,5 +709,6 @@
         }
 
-        putPref("points.hdopcircle", hdopCircleGpsPoints.isSelected());
+        putPref("points.circle", circleGpsPoints.isSelected());
+        putPref("points.circle.data.source", circleDataSource.getSelectedIndex());
         putPref("points.large", largeGpsPoints.isSelected());
         putPref("lines.width", drawLineWidth.getText());
Index: /trunk/src/org/openstreetmap/josm/io/nmea/NmeaParser.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/nmea/NmeaParser.java	(revision 19315)
+++ /trunk/src/org/openstreetmap/josm/io/nmea/NmeaParser.java	(revision 19316)
@@ -24,5 +24,5 @@
 /**
  * Parses NMEA 0183 data. Based on information from
- * <a href="http://www.catb.org/gpsd/NMEA.html">http://www.catb.org/gpsd</a>.
+ * <a href="https://gpsd.gitlab.io/gpsd/NMEA.html">https://gpsd.gitlab.io/gpsd</a>.
  *
  * NMEA data is in printable ASCII form and may include information such as position,
@@ -134,4 +134,24 @@
         final int position;
         GSA(int position) {
+            this.position = position;
+        }
+    }
+
+    /**
+     * GST - GNSS Pseudorange Noise Statistics
+     * <p>
+     * RMS and Standard deviation estimated values.
+     */
+    enum GST {
+        TIME(1),
+        RMS_DEVIATION(2),        // Total RMS standard deviation of ranges inputs to the navigation solution
+        STDDEV_MAJOR(3),         // Standard deviation (meters) of semi-major axis of error ellipse
+        STDDEV_MINOR(4),         // Standard deviation (meters) of semi-minor axis of error ellipse
+        STDDEV_MAJOR_BEARING(5), // Orientation of semi-major axis of error ellipse (true north degrees)
+        STDDEV_LAT(6),           // Standard deviation (meters) of latitude error
+        STDDEV_LONG(7),          // Standard deviation (meters) of longitude error
+        STDDEV_HEIGHT(8);        // Standard deviation (meters) of altitude error
+        final int position;
+        GST(int position) {
             this.position = position;
         }
@@ -423,4 +443,9 @@
                     }
                 }
+                // Age of differential correction
+                accu = e[GGA.GPS_AGE.position];
+                if (!accu.isEmpty() && currentwp != null) {
+                    currentwp.put(GpxConstants.PT_AGEOFDGPSDATA, Float.valueOf(accu));
+                }
                 // reference ID
                 if (GGA.REF.position < e.length) {
@@ -465,4 +490,16 @@
                 if (!accu.isEmpty() && currentwp != null) {
                     currentwp.put(GpxConstants.PT_PDOP, Float.valueOf(accu));
+                }
+                // GST Sentence
+            } else if (isSentence(e[0], Sentence.GST)) {
+                // std horizontal deviation
+                accu = e[GST.STDDEV_MAJOR.position];
+                if (!accu.isEmpty() && currentwp != null) {
+                    currentwp.put(GpxConstants.PT_STD_HDEV, Float.valueOf(accu));
+                }
+                // std vertical deviation
+                accu = e[GST.STDDEV_HEIGHT.position];
+                if (!accu.isEmpty() && currentwp != null) {
+                    currentwp.put(GpxConstants.PT_STD_VDEV, Float.valueOf(accu));
                 }
             } else if (isSentence(e[0], Sentence.RMC)) {
Index: /trunk/src/org/openstreetmap/josm/io/nmea/NmeaReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/nmea/NmeaReader.java	(revision 19315)
+++ /trunk/src/org/openstreetmap/josm/io/nmea/NmeaReader.java	(revision 19316)
@@ -21,5 +21,5 @@
 /**
  * Reads a NMEA 0183 file. Based on information from
- * <a href="http://www.catb.org/gpsd/NMEA.html">http://www.catb.org/gpsd</a>.
+ * <a href="https://gpsd.gitlab.io/gpsd/NMEA.html">https://gpsd.gitlab.io/gpsd</a>.
  *
  * NMEA files are in printable ASCII form and may include information such as position,
Index: /trunk/src/org/openstreetmap/josm/io/nmea/Sentence.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/nmea/Sentence.java	(revision 19315)
+++ /trunk/src/org/openstreetmap/josm/io/nmea/Sentence.java	(revision 19316)
@@ -9,5 +9,5 @@
  * Newer ones conforming to NMEA 3.x may emit GBS as well.
  * Other NMEA sentences are usually only emitted by high-end maritime navigation systems.<p>
- * See <a href="http://www.catb.org/gpsd/NMEA.html#_nmea_encoding_conventions">NMEA Encoding Conventions</a>
+ * See <a href="https://gpsd.gitlab.io//gpsd/NMEA.html#_nmea_encoding_conventions">NMEA Encoding Conventions</a>
  * @since 12421
  */
@@ -32,5 +32,5 @@
      * <li>Checksum</li>
      * </ol>
-     * See <a href="http://www.catb.org/gpsd/NMEA.html#_gbs_gps_satellite_fault_detection">GBS</a>
+     * See <a href="https://gpsd.gitlab.io//gpsd/NMEA.html#_gbs_gps_satellite_fault_detection">GBS</a>
      */
     GBS,
@@ -72,5 +72,5 @@
      * <li>Checksum</li>
      * </ol>
-     * See <a href="http://www.catb.org/gpsd/NMEA.html#_gga_global_positioning_system_fix_data">GGA</a>
+     * See <a href="https://gpsd.gitlab.io/gpsd/NMEA.html#_gga_global_positioning_system_fix_data">GGA</a>
      */
     GGA,
@@ -103,5 +103,5 @@
      * <li>Checksum</li>
      * </ol>
-     * See <a href="http://www.catb.org/gpsd/NMEA.html#_gsa_gps_dop_and_active_satellites">GSA</a>
+     * See <a href="https://gpsd.gitlab.io/gpsd/NMEA.html#_gsa_gps_dop_and_active_satellites">GSA</a>
      */
     GSA,
@@ -123,5 +123,5 @@
      * <li>SNR in dB (00-99) (leading zeros sent) more satellite info quadruples like 4-7 n) checksum</li>
      * </ol>
-     * See <a href="http://www.catb.org/gpsd/NMEA.html#_gsv_satellites_in_view">GSV</a>
+     * See <a href="https://gpsd.gitlab.io/gpsd/NMEA.html#_gsv_satellites_in_view">GSV</a>
      */
     GSV,
@@ -144,7 +144,29 @@
      * <li>Checksum</li>
      * </ol>
-     * See <a href="http://www.catb.org/gpsd/NMEA.html#_gll_geographic_position_latitude_longitude">GLL</a>
+     * See <a href="https://gpsd.gitlab.io/gpsd/NMEA.html#_gll_geographic_position_latitude_longitude">GLL</a>
      */
     GLL,
+    
+    /**
+     * GST - GPS Pseudorange Noise Statistics
+     * <pre>
+     *              1    2 3 4 5 6 7 8   9
+     *              |    | | | | | | |   |
+     * $ --GST,hhmmss.ss,x,x,x,x,x,x,x*hh
+     * </pre>
+     * Field Number:<ol>
+     * <li>UTC time of associated GGA fix</li>
+     * <li>Total RMS standard deviation of ranges inputs to the navigation solution</li>
+     * <li>Standard deviation (meters) of semi-major axis of error ellipse</li>
+     * <li>Standard deviation (meters) of semi-minor axis of error ellipse</li>
+     * <li>Orientation of semi-major axis of error ellipse (true north degrees)</li>
+     * <li>Standard deviation (meters) of latitude error</li>
+     * <li>Standard deviation (meters) of longitude error</li>
+     * <li>Standard deviation (meters) of altitude error</li>
+     * <li>Checksum</li>
+     * </ol>
+     * See <a href="https://gpsd.gitlab.io/gpsd/NMEA.html#_gst_gps_pseudorange_noise_statistics">GST</a>
+     */
+    GST,
 
     /**
@@ -171,5 +193,5 @@
      * <li>Checksum</li>
      * </ol>
-     * See <a href="http://www.catb.org/gpsd/NMEA.html#_rmc_recommended_minimum_navigation_information">RMC</a>
+     * See <a href="https://gpsd.gitlab.io/gpsd/NMEA.html#_rmc_recommended_minimum_navigation_information">RMC</a>
      */
     RMC,
@@ -194,5 +216,5 @@
      * <li>Checksum</li>
      * </ol>
-     * See <a href="http://www.catb.org/gpsd/NMEA.html#_vtg_track_made_good_and_ground_speed">VTG</a>
+     * See <a href="https://gpsd.gitlab.io/gpsd/NMEA.html#_vtg_track_made_good_and_ground_speed">VTG</a>
      */
     VTG,
@@ -214,5 +236,5 @@
      * <li>Checksum</li>
      * </ol>
-     * See <a href="http://www.catb.org/gpsd/NMEA.html#_zda_time_amp_date_utc_day_month_year_and_local_time_zone">ZDA</a>
+     * See <a href="https://gpsd.gitlab.io/gpsd/NMEA.html#_zda_time_amp_date_utc_day_month_year_and_local_time_zone">ZDA</a>
      */
     ZDA
Index: /trunk/src/org/openstreetmap/josm/io/nmea/TalkerId.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/nmea/TalkerId.java	(revision 19315)
+++ /trunk/src/org/openstreetmap/josm/io/nmea/TalkerId.java	(revision 19316)
@@ -5,5 +5,5 @@
  * Talker identifiers mnemonics are the first two characters at the beginning of each sentence.
  * This enum lists the common ones (navigation systems).<p>
- * See <a href="http://www.catb.org/gpsd/NMEA.html#_talker_ids">Talker IDs</a>
+ * See <a href="https://gpsd.gitlab.io/gpsd/NMEA.html#_talker_ids">Talker IDs</a>
  * @since 12421
  */
Index: /trunk/src/org/openstreetmap/josm/io/nmea/package-info.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/nmea/package-info.java	(revision 19315)
+++ /trunk/src/org/openstreetmap/josm/io/nmea/package-info.java	(revision 19316)
@@ -4,5 +4,5 @@
  * Provides the classes for reading NMEA-0183 files.
  * <p>
- * See <a href="http://www.catb.org/gpsd/NMEA.html#_gbs_gps_satellite_fault_detection">NMEA Revealed</a>.
+ * See <a href="https://gpsd.gitlab.io/gpsd/NMEA.html">NMEA Revealed</a>.
  * @since 12421
  */
Index: /trunk/src/org/openstreetmap/josm/io/rtklib/RtkLibPosReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/rtklib/RtkLibPosReader.java	(revision 19315)
+++ /trunk/src/org/openstreetmap/josm/io/rtklib/RtkLibPosReader.java	(revision 19316)
@@ -91,5 +91,6 @@
                             double sdn = Double.parseDouble(fields[IDX_SDN]);
                             double sde = Double.parseDouble(fields[IDX_SDE]);
-                            currentwp.put(GpxConstants.PT_HDOP, (float) Math.sqrt(sdn*sdn + sde*sde));
+                            currentwp.put(GpxConstants.PT_STD_HDEV, (float) Math.sqrt(sdn*sdn + sde*sde));
+                            currentwp.put(GpxConstants.PT_STD_VDEV, fields[IDX_SDU]);
                             waypoints.add(currentwp);
                             success++;
Index: /trunk/test/unit/org/openstreetmap/josm/io/nmea/NmeaReaderTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/io/nmea/NmeaReaderTest.java	(revision 19315)
+++ /trunk/test/unit/org/openstreetmap/josm/io/nmea/NmeaReaderTest.java	(revision 19316)
@@ -63,5 +63,24 @@
         assertNull(wayPoints.get(0).get(GpxConstants.PT_PDOP));
     }
-
+    /**
+     * Tests reading a nmea file with GST sentences.
+     * @throws Exception if any error occurs
+     */
+    @Test
+    void testReader2() throws Exception {
+        final NmeaReader in = new NmeaReader(Files.newInputStream(Paths.get("nodist/data/btnmea_GST.nmea")));
+        in.parse(true);
+        assertEquals(9, in.getNumberOfCoordinates());
+        assertEquals(0, in.getParserMalformed());
+
+        final List<WayPoint> wayPoints = new ArrayList<>(in.data.tracks.iterator().next().getSegments().iterator().next().getWayPoints());
+        assertEquals("43.294", wayPoints.get(0).get(GpxConstants.PT_ELE));
+        assertEquals("12", wayPoints.get(0).get(GpxConstants.PT_SAT));
+        assertEquals("rtk", wayPoints.get(0).get(GpxConstants.PT_FIX));
+        assertEquals("0.52", wayPoints.get(0).get(GpxConstants.PT_HDOP).toString().trim());
+        assertEquals("0.78", wayPoints.get(0).get(GpxConstants.PT_VDOP).toString().trim());
+        assertEquals("0.94", wayPoints.get(0).get(GpxConstants.PT_PDOP).toString().trim());
+    }
+    
     private static void compareWithReference(int ticket, String filename, int numCoor) throws IOException, SAXException {
         GpxData gpx = GpxReaderTest.parseGpxData(TestUtils.getRegressionDataFile(ticket, filename+".gpx"));
Index: /trunk/test/unit/org/openstreetmap/josm/io/rtklib/RtkLibPosReaderTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/io/rtklib/RtkLibPosReaderTest.java	(revision 19315)
+++ /trunk/test/unit/org/openstreetmap/josm/io/rtklib/RtkLibPosReaderTest.java	(revision 19316)
@@ -54,5 +54,6 @@
         assertEquals("92.3955", wp0.get(GpxConstants.PT_ELE));
         assertEquals("2", wp0.get(GpxConstants.PT_SAT));
-        assertEquals("1.8191757", wp0.get(GpxConstants.PT_HDOP).toString().trim());
+        assertEquals("1.8191757", wp0.get(GpxConstants.PT_STD_HDEV).toString().trim());
+        assertEquals("0.8167", wp0.get(GpxConstants.PT_STD_VDEV).toString().trim());
 
         assertEquals("1.5620", wp0.get(GpxConstants.RTKLIB_SDN));
