diff --git a/src/org/openstreetmap/josm/gui/layer/GpxLayer.java b/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
index 5ccbcfd..7adc791 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() | hdopAlpha << 24, true);
+            }
+        } else {
+            hdopColors = colors;
+        }
     }
 
     private final static Color[] colors_cyclic = new Color[256];
@@ -562,7 +573,7 @@ public class GpxLayer extends Layer {
                         // High hdop is bad, but high values in colors are green.
                         // Therefore inverse the logic
                         int hdopcolor = 255 - (hdoplvl > 255 ? 255 : hdoplvl);
-                        trkPnt.customColoring = colors[hdopcolor];
+                        trkPnt.customColoring = hdopColors[hdopcolor];
                     }
                     if (oldWp != null) {
                         double dist = c.greatCircleDistance(oldWp.getCoor());
