diff --git a/src/org/openstreetmap/josm/data/gpx/WayPoint.java b/src/org/openstreetmap/josm/data/gpx/WayPoint.java
index 4dfa7fd..cc94d47 100644
--- a/src/org/openstreetmap/josm/data/gpx/WayPoint.java
+++ b/src/org/openstreetmap/josm/data/gpx/WayPoint.java
@@ -24,6 +24,7 @@ public class WayPoint extends WithAttributes implements Comparable<WayPoint>, Te
 
     public double time;
     public Color customColoring;
+    public Color customColoringTransparent;
     public boolean drawLine;
     public int dir;
 
@@ -35,6 +36,7 @@ public class WayPoint extends WithAttributes implements Comparable<WayPoint>, Te
         north = p.north;
         time = p.time;
         customColoring = p.customColoring;
+        customColoringTransparent = p.customColoringTransparent;
         drawLine = p.drawLine;
         dir = p.dir;
     }
diff --git a/src/org/openstreetmap/josm/gui/layer/GpxLayer.java b/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
index 5ccbcfd..45ee328 100644
--- a/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
+++ b/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
@@ -363,10 +363,21 @@ public class GpxLayer extends Layer {
     }
 
     private final static Color[] colors = new Color[256];
+    /** Colors (with custom alpha channel, if given) for HDOP painting. */
+    private final static Color[] hdopColors;
     static {
         for (int i = 0; i < colors.length; i++) {
             colors[i] = Color.getHSBColor(i / 300.0f, 1, 1);
         }
+        final int hdopAlpha = Main.pref.getInteger("hdop.color.alpha", -1);
+        if (hdopAlpha >= 0) {
+            hdopColors = new Color[256];
+            for (int i = 0; i < hdopColors.length; i++) {
+                hdopColors[i] = new Color((colors[i].getRGB() & 0xFFFFFF) | ((hdopAlpha & 0xFF) << 24), true);
+            }
+        } else {
+            hdopColors = colors;
+        }
     }
 
     private final static Color[] colors_cyclic = new Color[256];
@@ -563,6 +574,7 @@ public class GpxLayer extends Layer {
                         // Therefore inverse the logic
                         int hdopcolor = 255 - (hdoplvl > 255 ? 255 : hdoplvl);
                         trkPnt.customColoring = colors[hdopcolor];
+                        trkPnt.customColoringTransparent = hdopColors[hdopcolor];
                     }
                     if (oldWp != null) {
                         double dist = c.greatCircleDistance(oldWp.getCoor());
@@ -738,7 +750,7 @@ public class GpxLayer extends Layer {
                     continue;
                 }
                 Point screen = mv.getPoint(trkPnt.getEastNorth());
-                g.setColor(trkPnt.customColoring);
+                g.setColor(trkPnt.customColoringTransparent);
                 if (hdopcircle && trkPnt.attr.get("hdop") != null) {
                     // hdop value
                     float hdop = ((Float)trkPnt.attr.get("hdop")).floatValue();
