Index: trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java	(revision 11482)
+++ trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java	(revision 11483)
@@ -29,4 +29,6 @@
 import java.util.List;
 
+import javax.swing.ImageIcon;
+
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.SystemOfMeasurement;
@@ -154,8 +156,5 @@
 
     // user defined heatmap color
-    private Color[] heatMapLutUserColor = createColorLut(Color.BLACK, Color.WHITE);
-
-    // heat map color in use
-    private Color[] heatMapLutColor;
+    private Color[] heatMapLutColor = createColorLut(Color.BLACK, Color.WHITE);
 
     private void setupColors() {
@@ -166,5 +165,4 @@
         dateScale = ColorScale.createHSBScale(256).addTitle(tr("Time"));
         directionScale = ColorScale.createCyclicScale(256).setIntervalCount(4).addTitle(tr("Direction"));
-        heatMapLutColor = heatMapLutUserColor;
 
         systemOfMeasurementChanged(null, null);
@@ -514,26 +512,8 @@
 
         // heat mode
-        if (ColorMode.HEATMAP == colored && neutralColor != null) {
-
-            // generate new user color map
-            heatMapLutUserColor = createColorLut(Color.BLACK, neutralColor.darker(),
-                                                 neutralColor, neutralColor.brighter(), Color.WHITE);
-
-            // 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;
-            }
+        if (ColorMode.HEATMAP == colored) {
+
+            // generate and get new user color map
+            heatMapLutColor = selectColorMap(neutralColor != null ? neutralColor : Color.WHITE, heatMapDrawColorTableIdx);
 
             // force redraw of image
@@ -783,4 +763,36 @@
 
     /**
+     * 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 BufferedImage createImageGradientMap(int width, int height, Color... colors) {
+
+        // create image an paint object
+        final BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+        final Graphics2D g = img.createGraphics();
+
+        float[] fract = new float[ colors.length ];
+
+        // distribute fractions (define position of color in map)
+        for (int i = 0; i < colors.length; ++i) {
+            fract[i] = i * (1.0f / colors.length);
+        }
+
+        // draw the gradient map
+        LinearGradientPaint gradient = new LinearGradientPaint(0, 0, width, height, fract, colors,
+                                                               MultipleGradientPaint.CycleMethod.NO_CYCLE);
+        g.setPaint(gradient);
+        g.fillRect(0, 0, width, height);
+        g.dispose();
+
+        // access it via raw interface
+        return img;
+    }
+
+    /**
      * Creates a linear distributed colormap by linear blending between colors
      * @param colors 1..n colors
@@ -790,26 +802,8 @@
 
         // 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();
-
-        float[] fract = new float[ colors.length ];
-
-        // distribute fractions (define position of color in map)
-        for (int i = 0; i < colors.length; ++i) {
-            fract[i] = i * (1.0f / colors.length);
-        }
-
-        // draw the gradient map
-        LinearGradientPaint gradient = new LinearGradientPaint(0, 0, tableSize, 1, fract, colors,
-                                                               MultipleGradientPaint.CycleMethod.NO_CYCLE);
-        g.setPaint(gradient);
-        g.fillRect(0, 0, tableSize, 1);
-        g.dispose();
+        final int tableSize = 256;
 
         // access it via raw interface
-        final Raster imgRaster = img.getData();
+        final Raster imgRaster = createImageGradientMap(tableSize, 1, colors).getData();
 
         // the pixel storage
@@ -825,5 +819,5 @@
 
             // get next single pixel
-            imgRaster.getDataElements((int) (i * (double) img.getWidth() / tableSize), 0, pixel);
+            imgRaster.getDataElements(i, 0, pixel);
 
             // get color and map
@@ -923,4 +917,46 @@
 
         return createColorLut(colorList.toArray(new Color[ colorList.size() ]));
+    }
+
+    /**
+     * 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) {
+        return new ImageIcon(createImageGradientMap(size, size, selectColorMap(userColor, tableIdx)));
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(revision 11482)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(revision 11483)
@@ -5,4 +5,5 @@
 import static org.openstreetmap.josm.tools.I18n.trc;
 
+import java.awt.Color;
 import java.awt.Component;
 import java.awt.GridBagLayout;
@@ -20,4 +21,5 @@
 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;
@@ -56,5 +58,5 @@
     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"));
@@ -260,4 +262,5 @@
 
         colorTypeHeatMapTune.setToolTipText(tr("Selects the color schema for heat map."));
+        JLabel colorTypeHeatIconLabel = new JLabel();
 
         add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0));
@@ -274,5 +277,14 @@
         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 != null ? layerName : "").get();
+            colorTypeHeatIconLabel.setIcon(GpxDrawHelper.getColorMapImageIcon(color, colorTypeHeatMapTune.getSelectedIndex(), iconSize));
+        });
 
         ExpertToggleAction.addVisibilitySwitcher(colorTypeDirection);
