Index: trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 621)
+++ trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 622)
@@ -287,4 +287,11 @@
 	}
 
+	private static Color[] colors = new Color[256];
+	static {
+		for (int i = 0; i < colors.length; i++) {
+			colors[i] = Color.getHSBColor(i/300.0f, 1, 1);
+		}
+	}
+
 	@Override public void paint(Graphics g, MapView mv) {
 		String gpsCol = Main.pref.get("color.gps point");
@@ -306,4 +313,5 @@
 			lines = Main.pref.getBoolean(linesKey);
 		boolean large = Main.pref.getBoolean("draw.rawgps.large");
+		boolean colored = Main.pref.getBoolean("draw.rawgps.colors");
 
 		Point old = null;
@@ -319,7 +327,19 @@
 					Point screen = mv.getPoint(trkPnt.eastNorth);
 					if (lines && old != null) {
+						double dist = trkPnt.latlon.greatCircleDistance(oldWp.latlon);
+						double dtime = trkPnt.time - oldWp.time;
+						double vel = dist/dtime;
+
+						if (colored && dtime > 0) {
+							// scale linearly until 130km/h = 36.1m/s
+							if (vel < 0 || vel > 36) {
+								g.setColor(colors[255]);
+							} else {
+								g.setColor(colors[(int) (7*vel)]);
+							}
+						}
 						
                                             // draw line, if no maxLineLength is set or the line is shorter.
-                                            if (maxLineLength == -1 || trkPnt.latlon.greatCircleDistance(oldWp.latlon) <= maxLineLength){
+                                            if (maxLineLength == -1 || dist <= maxLineLength){
                                                 g.drawLine(old.x, old.y, screen.x, screen.y);
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java	(revision 621)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java	(revision 622)
@@ -17,4 +17,5 @@
 	private JCheckBox forceRawGpsLines = new JCheckBox(tr("Force lines if no segments imported."));
 	private JCheckBox largeGpsPoints = new JCheckBox(tr("Draw large GPS points."));
+	private JCheckBox colorTracks = new JCheckBox(tr("Color tracks by velocity."));
 	private JCheckBox directionHint = new JCheckBox(tr("Draw Direction Arrows"));
 	private JCheckBox drawGpsArrows = new JCheckBox(tr("Draw Direction Arrows"));
@@ -34,4 +35,5 @@
                             forceRawGpsLines.setEnabled(drawRawGpsLines.isSelected());
                             drawGpsArrows.setEnabled(drawRawGpsLines.isSelected());
+                            colorTracks.setEnabled(drawRawGpsLines.isSelected());
 			}
 		});
@@ -51,4 +53,10 @@
 		drawGpsArrows.setEnabled(drawRawGpsLines.isSelected());
 		gui.display.add(drawGpsArrows, GBC.eop().insets(40,0,0,0));
+
+		// colorTracks
+		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());
+		gui.display.add(colorTracks, GBC.eop().insets(40,0,0,0));
 		
 		// largeGpsPoints
@@ -98,4 +106,5 @@
 		Main.pref.put("draw.rawgps.lines.force", forceRawGpsLines.isSelected());
 		Main.pref.put("draw.rawgps.direction", drawGpsArrows.isSelected());
+		Main.pref.put("draw.rawgps.colors", colorTracks.isSelected());
 		Main.pref.put("draw.rawgps.large", largeGpsPoints.isSelected());
 		Main.pref.put("draw.segment.direction", directionHint.isSelected());
