Index: src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java	(revision 11481)
+++ src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java	(working copy)
@@ -28,6 +28,8 @@
 import java.util.Date;
 import java.util.List;
 
+import javax.swing.ImageIcon;
+
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.SystemOfMeasurement;
 import org.openstreetmap.josm.data.SystemOfMeasurement.SoMChangeListener;
@@ -153,11 +155,8 @@
     private static Color[] heatMapLutColorJosmRed2Blue = createColorFromResource("red2blue");
 
     // user defined heatmap color
-    private Color[] heatMapLutUserColor = createColorLut(Color.BLACK, Color.WHITE);
+    private Color[] heatMapLutColor = createColorLut(Color.BLACK, Color.WHITE);
 
-    // heat map color in use
-    private Color[] heatMapLutColor;
-
     private void setupColors() {
         hdopAlpha = Main.pref.getInteger("hdop.color.alpha", -1);
         velocityScale = ColorScale.createHSBScale(256);
@@ -165,7 +164,6 @@
         hdopScale = ColorScale.createHSBScale(256).makeReversed().addTitle(tr("HDOP"));
         dateScale = ColorScale.createHSBScale(256).addTitle(tr("Time"));
         directionScale = ColorScale.createCyclicScale(256).setIntervalCount(4).addTitle(tr("Direction"));
-        heatMapLutColor = heatMapLutUserColor;
 
         systemOfMeasurementChanged(null, null);
     }
@@ -513,29 +511,11 @@
         }
 
         // heat mode
-        if (ColorMode.HEATMAP == colored && neutralColor != null) {
+        if (ColorMode.HEATMAP == colored) {
 
-            // generate new user color map
-            heatMapLutUserColor = createColorLut(Color.BLACK, neutralColor.darker(),
-                                                 neutralColor, neutralColor.brighter(), Color.WHITE);
+            // generate and get new user color map
+            heatMapLutColor = selectColorMap(neutralColor != null ? neutralColor : Color.WHITE, heatMapDrawColorTableIdx);
 
-            // decide what, keep order is sync with setting on GUI
-            Color[][] lut = {
-                    heatMapLutUserColor,
-                    heatMapLutColorJosmInferno,
-                    heatMapLutColorJosmViridis,
-                    heatMapLutColorJosmBrown2Green,
-                    heatMapLutColorJosmRed2Blue
-            };
-
-            // select by index
-            if (heatMapDrawColorTableIdx < lut.length) {
-                heatMapLutColor = lut[ heatMapDrawColorTableIdx ];
-            } else {
-                // fallback
-                heatMapLutColor = heatMapLutUserColor;
-            }
-
             // force redraw of image
             heatMapMapViewState = null;
         }
@@ -782,18 +762,18 @@
     }
 
     /**
-     * Creates a linear distributed colormap by linear blending between colors
-     * @param colors 1..n colors
-     * @return array of Color objects
+     * Generates a linear gradient map image
+     *
+     * @param width  image width
+     * @param height image height
+     * @param colors 1..n color descriptions
+     * @return image object
      */
-    protected static Color[] createColorLut(Color... colors) {
+    protected static BufferedImage createImageGradientMap(int width, int height, Color... colors) {
 
-        // number of lookup entries
-        int tableSize = 256;
-
         // create image an paint object
-        BufferedImage img = new BufferedImage(tableSize, 1, BufferedImage.TYPE_INT_RGB);
-        Graphics2D g = img.createGraphics();
+        final BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+        final Graphics2D g = img.createGraphics();
 
         float[] fract = new float[ colors.length ];
 
@@ -803,15 +783,29 @@
         }
 
         // draw the gradient map
-        LinearGradientPaint gradient = new LinearGradientPaint(0, 0, tableSize, 1, fract, colors,
+        LinearGradientPaint gradient = new LinearGradientPaint(0, 0, width, height, fract, colors,
                                                                MultipleGradientPaint.CycleMethod.NO_CYCLE);
         g.setPaint(gradient);
-        g.fillRect(0, 0, tableSize, 1);
+        g.fillRect(0, 0, width, height);
         g.dispose();
 
         // access it via raw interface
-        final Raster imgRaster = img.getData();
+        return img;
+    }
 
+    /**
+     * Creates a linear distributed colormap by linear blending between colors
+     * @param colors 1..n colors
+     * @return array of Color objects
+     */
+    protected static Color[] createColorLut(Color... colors) {
+
+        // number of lookup entries
+        final int tableSize = 256;
+
+        // access it via raw interface
+        final Raster imgRaster = createImageGradientMap(tableSize, 1, colors).getData();
+
         // the pixel storage
         int[] pixel = new int[1];
 
@@ -824,7 +818,7 @@
         for (int i = 0; i < tableSize; i++) {
 
             // get next single pixel
-            imgRaster.getDataElements((int) (i * (double) img.getWidth() / tableSize), 0, pixel);
+            imgRaster.getDataElements(i, 0, pixel);
 
             // get color and map
             Color c = new Color(pixel[0]);
@@ -925,6 +919,50 @@
     }
 
     /**
+     * Returns the next user color map
+     *
+     * @param userColor - default or fallback user color
+     * @param tableIdx  - selected user color index
+     * @return color array
+     */
+    protected static Color[] selectColorMap(Color userColor, int tableIdx) {
+
+        // generate new user color map
+        Color[] nextUserColor = createColorLut(Color.BLACK, userColor.darker(),
+                                               userColor, userColor.brighter(), Color.WHITE);
+
+        // decide what, keep order is sync with setting on GUI
+        Color[][] lut = {
+                nextUserColor,
+                heatMapLutColorJosmInferno,
+                heatMapLutColorJosmViridis,
+                heatMapLutColorJosmBrown2Green,
+                heatMapLutColorJosmRed2Blue
+        };
+
+        // select by index
+        if (tableIdx < lut.length) {
+            nextUserColor = lut[ tableIdx ];
+        }
+
+        return nextUserColor;
+    }
+
+    /**
+     * Generates a Icon
+     *
+     * @param userColor selected user color
+     * @param tableIdx tabled index
+     * @param size size of the image
+     * @return a image icon that shows the
+     */
+    public static ImageIcon getColorMapImageIcon(Color userColor, int tableIdx, int size) {
+
+        final BufferedImage img = createImageGradientMap(size, size, selectColorMap(userColor, tableIdx));
+        return new ImageIcon(img);
+    }
+
+    /**
      * Draw gray heat map with current Graphics2D setting
      * @param gB              the common draw object to use
      * @param mv              the meta data to current displayed area
Index: src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
===================================================================
--- src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(revision 11481)
+++ src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(working copy)
@@ -4,6 +4,7 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trc;
 
+import java.awt.Color;
 import java.awt.Component;
 import java.awt.GridBagLayout;
 import java.awt.event.ActionListener;
@@ -19,6 +20,7 @@
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExpertToggleAction;
+import org.openstreetmap.josm.gui.layer.gpx.GpxDrawHelper;
 import org.openstreetmap.josm.gui.layer.markerlayer.Marker;
 import org.openstreetmap.josm.gui.layer.markerlayer.Marker.TemplateEntryProperty;
 import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane.ValidationListener;
@@ -55,7 +57,7 @@
     private final JRadioButton colorTypeDirection = new JRadioButton(tr("Direction (red = west, yellow = north, green = east, blue = south)"));
     private final JRadioButton colorTypeDilution = new JRadioButton(tr("Dilution of Position (red = high, green = low, if available)"));
     private final JRadioButton colorTypeTime = new JRadioButton(tr("Track date"));
-    private final JRadioButton colorTypeHeatMap = new JRadioButton(tr("Heat Map (dark = few tracks, bright = many tracks)"));
+    private final JRadioButton colorTypeHeatMap = new JRadioButton(tr("Heat Map (dark = few, bright = many)"));
     private final JRadioButton colorTypeNone = new JRadioButton(tr("Single Color (can be customized for named layers)"));
     private final JRadioButton colorTypeGlobal = new JRadioButton(tr("Use global settings"));
     private final JosmComboBox<String> colorTypeVelocityTune = new JosmComboBox<>(new String[] {tr("Car"), tr("Bicycle"), tr("Foot")});
@@ -65,6 +67,7 @@
         trc("Heat map", "Viridis"),
         trc("Heat map", "Wood"),
         trc("Heat map", "Heat")});
+    private JLabel colorTypeHeatIconLabel;
     private final JCheckBox makeAutoMarkers = new JCheckBox(tr("Create markers when reading GPX"));
     private final JCheckBox drawGpsArrows = new JCheckBox(tr("Draw Direction Arrows"));
     private final JCheckBox drawGpsArrowsFast = new JCheckBox(tr("Fast drawing (looks uglier)"));
@@ -259,6 +262,7 @@
         colorTypeVelocityTune.setToolTipText(tr("Allows to tune the track coloring for different average speeds."));
 
         colorTypeHeatMapTune.setToolTipText(tr("Selects the color schema for heat map."));
+        colorTypeHeatIconLabel = new JLabel();
 
         add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0));
 
@@ -273,8 +277,17 @@
         add(colorTypeDilution, GBC.eol().insets(40, 0, 0, 0));
         add(colorTypeTime, GBC.eol().insets(40, 0, 0, 0));
         add(colorTypeHeatMap, GBC.std().insets(40, 0, 0, 0));
-        add(colorTypeHeatMapTune, GBC.eop().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
+        add(colorTypeHeatIconLabel, GBC.std().insets(5, 0, 0, 5));
+        add(colorTypeHeatMapTune, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 0, 0, 5));
 
+        colorTypeHeatMapTune.addPropertyChangeListener(e -> {
+            // get image size of environment
+            final int iconSize = (int) colorTypeHeatMapTune.getPreferredSize().getHeight();
+            // ask the GPX draw for the correct color of that layer
+            final Color color = GpxDrawHelper.DEFAULT_COLOR.getChildColor(layerName).get();
+            colorTypeHeatIconLabel.setIcon(GpxDrawHelper.getColorMapImageIcon(color, colorTypeHeatMapTune.getSelectedIndex(), iconSize));
+        });
+
         ExpertToggleAction.addVisibilitySwitcher(colorTypeDirection);
         ExpertToggleAction.addVisibilitySwitcher(colorTypeDilution);
 
