Index: /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 1282)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 1283)
@@ -87,4 +87,5 @@
     private Color computeCacheColorUsed;
     private boolean computeCacheColored;
+    private int computeCacheColorTracksTune;
 
     public GpxLayer(GpxData d) {
@@ -389,5 +390,5 @@
         int delta = Main.pref.getInteger("draw.rawgps.min-arrow-distance", 0);
         // don't draw arrows nearer to each other than this
-
+        int colorTracksTune = Main.pref.getInteger("draw.rawgps.colorTracksTune", 45); // allows to tweak line coloring for different speed levels.
         /****************************************************************
          ********** STEP 2a - CHECK CACHE VALIDITY **********************
@@ -395,5 +396,6 @@
         if (computeCacheInSync && ((computeCacheMaxLineLengthUsed != maxLineLength) ||
                                    (!neutralColor.equals(computeCacheColorUsed)) ||
-                                   (computeCacheColored != colored))) {
+                                   (computeCacheColored != colored) ||
+                                   (computeCacheColorTracksTune != colorTracksTune))) {
 //          System.out.println("(re-)computing gpx line styles, reason: CCIS=" + computeCacheInSync + " CCMLLU=" + (computeCacheMaxLineLengthUsed != maxLineLength) + " CCCU=" +  (!neutralColor.equals(computeCacheColorUsed)) + " CCC=" + (computeCacheColored != colored));
             computeCacheMaxLineLengthUsed = maxLineLength;
@@ -401,4 +403,5 @@
             computeCacheColorUsed = neutralColor;
             computeCacheColored = colored;
+            computeCacheColorTracksTune = colorTracksTune;
         }
 
@@ -421,11 +424,12 @@
                             double dtime = trkPnt.time - oldWp.time;
                             double vel = dist/dtime;
+                            double velColor = vel/colorTracksTune*255;
 
                             if (!colored) {
                                 trkPnt.speedLineColor = neutralColor;
-                            } else if (dtime <= 0 || vel < 0 || vel > 36) { // attn: bad case first
+                            } else if (dtime <= 0 || vel < 0 || velColor > 255) { // attn: bad case first
                                 trkPnt.speedLineColor = colors[255];
                             } else {
-                                trkPnt.speedLineColor = colors[(int) (7*vel)];
+                                trkPnt.speedLineColor = colors[(int) (velColor)];
                             }
                             if (maxLineLength == -1 || dist <= maxLineLength) {
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java	(revision 1282)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java	(revision 1283)
@@ -11,4 +11,5 @@
 import javax.swing.BorderFactory;
 import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
 import javax.swing.JLabel;
 import javax.swing.JTextField;
@@ -27,4 +28,5 @@
     private JCheckBox largeGpsPoints = new JCheckBox(tr("Draw large GPS points."));
     private JCheckBox colorTracks = new JCheckBox(tr("Color tracks by velocity."));
+    private JComboBox colorTracksTune = new JComboBox(new String[] {tr("Car"), tr("Bicycle"), tr("Foot")});
     private JCheckBox directionHint = new JCheckBox(tr("Draw Direction Arrows"));
     private JCheckBox drawGpsArrows = new JCheckBox(tr("Draw Direction Arrows"));
@@ -52,4 +54,5 @@
                             drawGpsArrowsMinDist.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled());
                             colorTracks.setEnabled(drawRawGpsLines.isSelected());
+                            colorTracksTune.setEnabled(colorTracks.isSelected() && drawRawGpsLines.isSelected());
             }
         });
@@ -97,9 +100,21 @@
 
         // colorTracks
+        colorTracks.addActionListener(new ActionListener(){
+            public void actionPerformed(ActionEvent e) {
+                            colorTracksTune.setEnabled(colorTracks.isSelected() && drawRawGpsLines.isSelected());
+            }
+        });
         colorTracks.setSelected(Main.pref.getBoolean("draw.rawgps.colors"));
         colorTracks.setToolTipText(tr("Choose the hue for the track color by the velocity at that point."));
         colorTracks.setEnabled(drawRawGpsLines.isSelected());
-        panel.add(colorTracks, GBC.eop().insets(40,0,0,0));
-
+        panel.add(colorTracks, GBC.std().insets(40,0,0,0));
+        
+        // color Tracks by Velocity Tune
+        int ccts = Main.pref.getInteger("draw.rawgps.colorTracksTune", 45);
+        colorTracksTune.setSelectedIndex(ccts==10 ? 2 : (ccts==20 ? 1 : 0));
+        colorTracksTune.setToolTipText(tr("Allows to tune the track coloring for different average speeds."));
+        colorTracksTune.setEnabled(colorTracks.isSelected() && colorTracks.isEnabled());
+        panel.add(colorTracksTune, GBC.eop().insets(5,0,0,5));
+        
         // largeGpsPoints
         largeGpsPoints.setSelected(Main.pref.getBoolean("draw.rawgps.large"));
@@ -174,4 +189,6 @@
         Main.pref.put("draw.rawgps.min-arrow-distance", drawGpsArrowsMinDist.getText());
         Main.pref.put("draw.rawgps.colors", colorTracks.isSelected());
+        int ccti=colorTracksTune.getSelectedIndex();
+        Main.pref.putInteger("draw.rawgps.colorTracksTune", ccti==2 ? 10 : (ccti==1 ? 20 : 45));
         Main.pref.put("draw.rawgps.large", largeGpsPoints.isSelected());
         Main.pref.put("draw.segment.direction", directionHint.isSelected());
