Index: src/org/openstreetmap/josm/gui/layer/GpxLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 2622)
+++ src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(working copy)
@@ -513,6 +513,13 @@
         // paint large dots for points
         boolean large = Main.pref.getBoolean("draw.rawgps.large");
         boolean hdopcircle = Main.pref.getBoolean("draw.rawgps.hdopcircle", true);
+        boolean ehpecircle = Main.pref.getBoolean("draw.rawgps.ehpecircle", true);
+        double ehpefactor;
+        try {
+            ehpefactor = Main.pref.getDouble("draw.rawgps.ehpefactor", 1.0d);
+        } catch (Exception e) {
+            ehpefactor = 1.0d;
+        }
         // color the lines
         colorModes colored = colorModes.none;
         try {
@@ -707,7 +714,7 @@
         /****************************************************************
          ********** STEP 3d - DRAW LARGE POINTS AND HDOP CIRCLE *********
          ****************************************************************/
-        if (large || hdopcircle) {
+        if (large || hdopcircle || ehpecircle) {
             g.setColor(neutralColor);
             for (GpxTrack trk : data.tracks) {
                 for (Collection<WayPoint> segment : trk.trackSegs) {
@@ -728,6 +735,16 @@
                             int hdopp = mv.getPoint(new LatLon(trkPnt.getCoor().lat(), trkPnt.getCoor().lon() + 2*6*hdop*360/40000000)).x - screen.x;
                             g.drawArc(screen.x-hdopp/2, screen.y-hdopp/2, hdopp, hdopp, 0, 360);
                         }
+                        if (ehpecircle && trkPnt.attr.get("ehpe") != null) {
+                            // ehpe value
+                            float ehpe = ((Float) trkPnt.attr.get("ehpe")).floatValue();
+                            if (ehpe < 0) {
+                                ehpe = 0;
+                            }
+                            // ehpe pixels; 1 arcdeg of latitude is about 111,000m
+                            int ehpep = Math.abs(mv.getPoint(new LatLon(trkPnt.getCoor().lat() + ehpefactor*ehpe/111000, trkPnt.getCoor().lon())).y - screen.y);
+                            g.drawArc(screen.x - ehpep / 2, screen.y - ehpep / 2, ehpep, ehpep, 0, 360);
+                        }
                         if (large) {
                             g.fillRect(screen.x-1, screen.y-1, 3, 3);
                         }
Index: src/org/openstreetmap/josm/io/GpxReader.java
===================================================================
--- src/org/openstreetmap/josm/io/GpxReader.java	(revision 2622)
+++ src/org/openstreetmap/josm/io/GpxReader.java	(working copy)
@@ -314,7 +314,13 @@
                 case ext:
                     if (qName.equals("extensions")) {
                         currentState = states.pop();
+                    } else if (qName.equals("ehpe")) {
+                        try {
+                            currentWayPoint.attr.put(qName, Float.parseFloat(accumulator.toString()));
+                        } catch (Exception e) {
+                            currentWayPoint.attr.put(qName, new Float(0));
                     }
+                    }                    
                     break;
                 default:
                     if (qName.equals("wpt")) {
