Index: /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsAcquirer.java
===================================================================
--- /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsAcquirer.java	(revision 26541)
+++ /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsAcquirer.java	(revision 26542)
@@ -265,4 +265,6 @@
         float speed = 0;
         float course = 0;
+        float epx = 0;
+        float epy = 0;
 
         try {
@@ -281,6 +283,8 @@
             speed = (new Float(report.getDouble("speed"))).floatValue();
             course = (new Float(report.getDouble("track"))).floatValue();
-
-            return new LiveGpsData(lat, lon, course, speed, true);
+            epx = (new Float(report.getDouble("epx"))).floatValue();
+            epy = (new Float(report.getDouble("epy"))).floatValue();
+
+            return new LiveGpsData(lat, lon, course, speed, epx, epy);
         } catch (JSONException je) {}
 
@@ -318,5 +322,5 @@
                         course = Float.parseFloat(status[8]);
                     } catch (NumberFormatException nex) {}
-                    return new LiveGpsData(lat, lon, course, speed, true);
+                    return new LiveGpsData(lat, lon, course, speed);
                 }
                 break;
@@ -329,5 +333,5 @@
                     speed = Float.NaN;
                     course = Float.NaN;
-                    return new LiveGpsData(lat, lon, course, speed, true);
+                    return new LiveGpsData(lat, lon, course, speed);
                 }
                 break;
Index: /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsData.java
===================================================================
--- /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsData.java	(revision 26541)
+++ /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsData.java	(revision 26542)
@@ -18,8 +18,9 @@
  */
 public class LiveGpsData {
+    private boolean fix;
     private LatLon latLon;
     private float course;
     private float speed;
-    private boolean fix;
+    private float epx, epy;
     private String wayString;
     private Way way;
@@ -32,17 +33,30 @@
      * @param haveFix
      */
-    public LiveGpsData(double latitude, double longitude, float course, float speed, boolean haveFix) {
+    public LiveGpsData(double latitude, double longitude, float course, float speed) {
         super();
+        this.fix = true;
         this.latLon = new LatLon(latitude, longitude);
         this.course = course;
         this.speed = speed;
-        this.fix = haveFix;
-    }
-    /**
-     *
-     */
-    public LiveGpsData() {
-        // TODO Auto-generated constructor stub
-    }
+    }
+    /**
+     * @param latitude
+     * @param longitude
+     * @param course
+     * @param speed
+     * @param haveFix
+     * @param epx
+     * @param epy
+     */
+    public LiveGpsData(double latitude, double longitude, float course, float speed, float epx, float epy) {
+        super();
+        this.fix = true;
+        this.latLon = new LatLon(latitude, longitude);
+        this.course = course;
+        this.speed = speed;
+	this.epx = epx;
+	this.epy = epy;
+    }
+
     /**
      * @return the course
@@ -106,4 +120,20 @@
     public void setLatLon(LatLon latLon) {
         this.latLon = latLon;
+    }
+
+    public void setEpy(float epy) {
+	this.epy = epy;
+    }
+
+    public void setEpx(float epx) {
+	this.epx = epx;
+    }
+
+    public float getEpy() {
+	return this.epy;
+    }
+
+    public float getEpx() {
+	return this.epx;
     }
 
Index: /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsLayer.java
===================================================================
--- /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsLayer.java	(revision 26541)
+++ /applications/editors/josm/plugins/livegps/src/livegps/LiveGpsLayer.java	(revision 26542)
@@ -26,5 +26,6 @@
 public class LiveGpsLayer extends GpxLayer implements PropertyChangeListener {
     public static final String LAYER_NAME = tr("LiveGPS layer");
-    public static final String KEY_LIVEGPS_COLOR = "color.livegps.position";
+    public static final String C_LIVEGPS_COLOR_POSITION = "color.livegps.position";
+    public static final String C_LIVEGPS_COLOR_POSITION_ESTIMATE = "color.livegps.position_estimate";
 
     private static final int DEFAULT_REFRESH_INTERVAL = 250;
@@ -43,9 +44,8 @@
     private long lastCenter = 0;
 
+    LiveGpsData lastData;
     LatLon lastPos;
     WayPoint lastPoint;
     private final AppendableGpxTrackSegment trackSegment;
-    float speed;
-    float course;
     boolean autocenter;
     private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
@@ -99,19 +99,4 @@
     }
 
-    // void setStatus(String status)
-    // {
-    // this.status = status;
-    // Main.map.repaint();
-    // System.out.println("LiveGps status: " + status);
-    // }
-
-    void setSpeed(float metresPerSecond) {
-        speed = metresPerSecond;
-    }
-
-    void setCourse(float degrees) {
-        course = degrees;
-    }
-
     public void setAutoCenter(boolean ac) {
         autocenter = ac;
@@ -126,5 +111,5 @@
 
 	Point screen = mv.getPoint(lastPoint.getCoor());
-	g.setColor(Main.pref.getColor(KEY_LIVEGPS_COLOR, Color.RED));
+	g.setColor(Main.pref.getColor(C_LIVEGPS_COLOR_POSITION, Color.RED));
 
 	int TriaHeight = Main.pref.getInteger(C_CURSOR_H, 20);
@@ -133,4 +118,5 @@
 	int[] x = new int[4];
 	int[] y = new int[4];
+	float course = lastData.getCourse();
 
 	x[0] = screen.x + Math.round(TriaHeight * (float )Math.sin(Math.toRadians(course)));
@@ -144,4 +130,21 @@
 
 	g.drawPolygon(x, y, 4);
+
+	g.setColor(Main.pref.getColor(C_LIVEGPS_COLOR_POSITION_ESTIMATE, Color.CYAN));
+
+	int w, h;
+	double ppm = 100 / mv.getDist100Pixel();	/* pixels per metre */
+
+	w = (int )Math.round(lastData.getEpx() * ppm);
+	h = (int )Math.round(lastData.getEpy() * ppm);
+
+	if (w > TriaWidth || h > TriaWidth) {
+		int xo, yo;
+
+		yo = screen.y - Math.round(h/2);
+		xo = screen.x - Math.round(w/2);
+
+		g.drawOval(xo, yo, w, h);
+	}
     }
 
@@ -154,13 +157,7 @@
         }
         if ("gpsdata".equals(evt.getPropertyName())) {
-            LiveGpsData data = (LiveGpsData) evt.getNewValue();
-            if (data.isFix()) {
-                setCurrentPosition(data.getLatitude(), data.getLongitude());
-                if (!Float.isNaN(data.getSpeed())) {
-                    setSpeed(data.getSpeed());
-                }
-                if (!Float.isNaN(data.getCourse())) {
-                    setCourse(data.getCourse());
-                }
+            lastData = (LiveGpsData) evt.getNewValue();
+            if (lastData.isFix()) {
+                setCurrentPosition(lastData.getLatitude(), lastData.getLongitude());
                 if (allowRedraw())
                     Main.map.repaint();
