Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 4229)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 4230)
@@ -290,4 +290,12 @@
     }
 
+    synchronized public boolean getBoolean(final String key, final String specName, final boolean def) {
+        putDefault(key, Boolean.toString(def));
+        String skey = key+"."+specName;
+        if(properties.containsKey(skey))
+            return Boolean.parseBoolean(properties.get(skey));
+        return properties.containsKey(key) ? Boolean.parseBoolean(properties.get(key)) : def;
+    }
+
     /**
      * Set a value for a certain setting. The changed setting is saved
@@ -608,4 +616,20 @@
     }
 
+    synchronized public int getInteger(String key, String specName, int def) {
+        putDefault(key, Integer.toString(def));
+        String v = get(key+"."+specName);
+        if(null == v)
+            v = get(key);
+        if(null == v)
+            return def;
+
+        try {
+            return Integer.parseInt(v);
+        } catch(NumberFormatException e) {
+            // fall out
+        }
+        return def;
+    }
+
     synchronized public long getLong(String key, long def) {
         putDefault(key, Long.toString(def));
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 4229)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListDialog.java	(revision 4230)
@@ -5,4 +5,5 @@
 
 import java.awt.BorderLayout;
+import java.awt.Color;
 import java.awt.Component;
 import java.awt.Dimension;
@@ -821,5 +822,5 @@
     }
 
-    private static class LayerNameCellRenderer extends DefaultTableCellRenderer {
+    private class LayerNameCellRenderer extends DefaultTableCellRenderer {
 
         protected boolean isActiveLayer(Layer layer) {
@@ -838,4 +839,23 @@
             if (isActiveLayer(layer)) {
                 label.setFont(label.getFont().deriveFont(Font.BOLD));
+            }
+            if(Main.pref.getBoolean("dialog.layer.colorname", true)) {
+                Color c = layer.getColor(false);
+                if(c != null) {
+                    Color oc = null;
+                    for(Layer l : model.getLayers()) {
+                        oc = l.getColor(false);
+                        if(oc != null) {
+                            if(oc.equals(c))
+                                oc = null;
+                            else
+                                break;
+                        }
+                    }
+                    if(oc == null) /* not more than one color, don't use coloring */
+                        c = null;
+                }
+                /* Setting foreground properly handles null as default! */
+                label.setForeground(c);
             }
             label.setIcon(layer.getIcon());
@@ -1231,5 +1251,5 @@
          * Never null, but can be empty.
          */
-        protected List<Layer> getLayers() {
+        public List<Layer> getLayers() {
             if (Main.map == null || Main.map.mapView == null)
                 return Collections.<Layer>emptyList();
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListPopup.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListPopup.java	(revision 4229)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/LayerListPopup.java	(revision 4230)
@@ -19,4 +19,5 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.Layer.LayerAction;
+import org.openstreetmap.josm.gui.layer.Layer.MultiLayerAction;
 import org.openstreetmap.josm.gui.layer.Layer.SeparatorLayerAction;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -59,4 +60,6 @@
                 } else if (a instanceof LayerAction && ((LayerAction)a).supportLayers(selectedLayers)) {
                     separatorAdded = false;
+                    if(a instanceof MultiLayerAction)
+                        a = ((MultiLayerAction)a).getMultiLayerAction(selectedLayers);
                     actions.add(a);
                 }
@@ -66,5 +69,6 @@
                 separatorAdded = false;
                 for (Action a: selectedLayers.get(i).getMenuEntries()) {
-                    if (a instanceof LayerAction && ((LayerAction)a).supportLayers(selectedLayers) && !actions.contains(a)) {
+                    if (a instanceof LayerAction && !(a instanceof MultiLayerAction)
+                    && ((LayerAction)a).supportLayers(selectedLayers) && !actions.contains(a)) {
                         if (!separatorAdded) {
                             separatorAdded = true;
Index: trunk/src/org/openstreetmap/josm/gui/layer/CustomizeColor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/CustomizeColor.java	(revision 4230)
+++ trunk/src/org/openstreetmap/josm/gui/layer/CustomizeColor.java	(revision 4230)
@@ -0,0 +1,91 @@
+// License: GPL. See LICENSE file for details.
+package org.openstreetmap.josm.gui.layer;
+
+import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+
+import javax.swing.AbstractAction;
+import javax.swing.Action;
+import javax.swing.JColorChooser;
+import javax.swing.JMenuItem;
+import javax.swing.JOptionPane;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.layer.Layer.LayerAction;
+import org.openstreetmap.josm.gui.layer.Layer.MultiLayerAction;
+import org.openstreetmap.josm.tools.ImageProvider;
+
+public class CustomizeColor extends AbstractAction implements LayerAction, MultiLayerAction {
+    List<Layer> layers;
+
+    public CustomizeColor(List<Layer> l) {
+        this();
+        layers = l;
+    }
+
+    public CustomizeColor(Layer l) {
+        this();
+        layers = new LinkedList<Layer>();
+        layers.add(l); 
+    }
+
+    private CustomizeColor() {
+        super(tr("Customize Color"), ImageProvider.get("colorchooser"));
+        putValue("help", ht("/Action/LayerCustomizeColor"));
+    }
+
+    @Override
+    public boolean supportLayers(List<Layer> layers) {
+        for(Layer layer: layers) {
+            if(layer.getColor(false) == null)
+                return false;
+        }
+        return true;
+    }
+
+    @Override
+    public Component createMenuComponent() {
+        return new JMenuItem(this);
+    }
+
+    @Override
+    public Action getMultiLayerAction(List<Layer> layers) {
+        return new CustomizeColor(layers);
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        JColorChooser c = new JColorChooser(layers.get(0).getColor(false));
+        Object[] options = new Object[]{tr("OK"), tr("Cancel"), tr("Default")};
+        int answer = JOptionPane.showOptionDialog(
+                Main.parent,
+                c,
+                tr("Choose a color"),
+                JOptionPane.OK_CANCEL_OPTION,
+                JOptionPane.PLAIN_MESSAGE,
+                null,
+                options,
+                options[0]
+        );
+        switch (answer) {
+        case 0:
+            for(Layer layer : layers)
+                Main.pref.putColor("layer "+layer.getName(), c.getColor());
+            break;
+        case 1:
+            return;
+        case 2:
+            for(Layer layer : layers)
+                Main.pref.putColor("layer "+layer.getName(), null);
+            break;
+        }
+        Main.map.repaint();
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 4229)
+++ trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 4230)
@@ -10,4 +10,5 @@
 import java.awt.BasicStroke;
 import java.awt.Color;
+import java.awt.Component;
 import java.awt.Dimension;
 import java.awt.Graphics2D;
@@ -34,8 +35,8 @@
 import javax.swing.ButtonGroup;
 import javax.swing.Icon;
-import javax.swing.JColorChooser;
 import javax.swing.JFileChooser;
 import javax.swing.JLabel;
 import javax.swing.JList;
+import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
@@ -219,6 +220,22 @@
     }
 
-    static public Color getColor(String name) {
-        return Main.pref.getColor(marktr("gps point"), name != null ? "layer " + name : null, Color.gray);
+    @Override
+    public Color getColor(boolean ignoreCustom) {
+        Color c = Main.pref.getColor(marktr("gps point"), "layer " + getName(), Color.gray);
+
+        return ignoreCustom || getColorMode() == colorModes.none ? c : null;
+    }
+
+    public colorModes getColorMode() {
+        try {
+            return colorModes.values()[Main.pref.getInteger("draw.rawgps.colors", "layer "+getName(), 0)];
+        } catch (Exception e) {
+        }
+        return colorModes.none;
+    }
+
+    /* for preferences */
+    static public Color getGenericColor() {
+        return Main.pref.getColor(marktr("gps point"), Color.gray);
     }
 
@@ -230,6 +247,6 @@
                 LayerListDialog.getInstance().createDeleteLayerAction(),
                 SeparatorLayerAction.INSTANCE,
-                new CustomizeColor(),
-                new CustomizeLineDrawing(),
+                new CustomizeColor(this),
+                new CustomizeLineDrawing(this),
                 new ConvertToDataLayerAction(),
                 SeparatorLayerAction.INSTANCE,
@@ -243,6 +260,6 @@
                 new LayerSaveAction(this),
                 new LayerSaveAsAction(this),
-                new CustomizeColor(),
-                new CustomizeLineDrawing(),
+                new CustomizeColor(this),
+                new CustomizeLineDrawing(this),
                 new ImportImages(),
                 new ImportAudio(),
@@ -375,41 +392,33 @@
          ****************************************************************/
         // Long startTime = System.currentTimeMillis();
-        Color neutralColor = getColor(getName());
+        Color neutralColor = getColor(true);
         // also draw lines between points belonging to different segments
-        boolean forceLines = Main.pref.getBoolean("draw.rawgps.lines.force");
+        boolean forceLines = Main.pref.getBoolean("draw.rawgps.lines.force", "layer "+getName(), false);
         // draw direction arrows on the lines
-        boolean direction = Main.pref.getBoolean("draw.rawgps.direction");
+        boolean direction = Main.pref.getBoolean("draw.rawgps.direction", "layer "+getName(), false);
         // don't draw lines if longer than x meters
-        int lineWidth = Main.pref.getInteger("draw.rawgps.linewidth",0);
+        int lineWidth = Main.pref.getInteger("draw.rawgps.linewidth", "layer "+getName(), 0);
 
         int maxLineLength;
+        boolean lines;
         if (this.isLocalFile) {
-            maxLineLength = Main.pref.getInteger("draw.rawgps.max-line-length.local", -1);
+            maxLineLength = Main.pref.getInteger("draw.rawgps.max-line-length.local", "layer "+getName(), -1);
+            lines = Main.pref.getBoolean("draw.rawgps.lines.local", "layer "+getName(), true);
         } else {
-            maxLineLength = Main.pref.getInteger("draw.rawgps.max-line-length", 200);
-        }
-        // draw line between points, global setting
-        boolean lines = (Main.pref.getBoolean("draw.rawgps.lines", true) || (Main.pref
-                .getBoolean("draw.rawgps.lines.localfiles") && this.isLocalFile));
-        String linesKey = "draw.rawgps.lines.layer " + getName();
-        // draw lines, per-layer setting
-        if (Main.pref.hasKey(linesKey)) {
-            lines = Main.pref.getBoolean(linesKey);
+            maxLineLength = Main.pref.getInteger("draw.rawgps.max-line-length", "layer "+getName(), 200);
+            lines = Main.pref.getBoolean("draw.rawgps.lines", "layer "+getName(), true);
         }
         // paint large dots for points
-        boolean large = Main.pref.getBoolean("draw.rawgps.large");
-        boolean hdopcircle = Main.pref.getBoolean("draw.rawgps.hdopcircle", true);
+        boolean large = Main.pref.getBoolean("draw.rawgps.large", "layer "+getName(), false);
+        int largesize = Main.pref.getInteger("draw.rawgps.large.size", "layer "+getName(), 3);
+        boolean hdopcircle = Main.pref.getBoolean("draw.rawgps.hdopcircle", "layer "+getName(), false);
         // color the lines
-        colorModes colored = colorModes.none;
-        try {
-            colored = colorModes.values()[Main.pref.getInteger("draw.rawgps.colors", 0)];
-        } catch (Exception e) {
-        }
+        colorModes colored = getColorMode();
         // paint direction arrow with alternate math. may be faster
-        boolean alternatedirection = Main.pref.getBoolean("draw.rawgps.alternatedirection");
+        boolean alternatedirection = Main.pref.getBoolean("draw.rawgps.alternatedirection", "layer "+getName(), false);
         // don't draw arrows nearer to each other than this
-        int delta = Main.pref.getInteger("draw.rawgps.min-arrow-distance", 40);
+        int delta = Main.pref.getInteger("draw.rawgps.min-arrow-distance", "layer "+getName(), 40);
         // allows to tweak line coloring for different speed levels.
-        int colorTracksTune = Main.pref.getInteger("draw.rawgps.colorTracksTune", 45);
+        int colorTracksTune = Main.pref.getInteger("draw.rawgps.colorTracksTune", "layer "+getName(), 45);
 
         if(lineWidth != 0)
@@ -640,5 +649,5 @@
                 }
                 if (large) {
-                    g.fillRect(screen.x-1, screen.y-1, 3, 3);
+                    g.fillRect(screen.x-1, screen.y-1, largesize, largesize);
                 }
             } // end for trkpnt
@@ -1296,12 +1305,46 @@
     }
 
-    private class CustomizeLineDrawing extends AbstractAction {
-
-        CustomizeLineDrawing() {
+    private class CustomizeLineDrawing extends AbstractAction implements LayerAction, MultiLayerAction {
+        List<Layer> layers;
+
+        public CustomizeLineDrawing(List<Layer> l) {
+            this();
+            layers = l;
+        }
+
+        public CustomizeLineDrawing(Layer l) {
+            this();
+            layers = new LinkedList<Layer>();
+            layers.add(l); 
+        }
+
+        private CustomizeLineDrawing() {
             super(tr("Customize line drawing"), ImageProvider.get("mapmode/addsegment"));
+        }
+
+        @Override
+        public boolean supportLayers(List<Layer> layers) {
+            for(Layer layer: layers) {
+                if(!(layer instanceof GpxLayer))
+                    return false;
+            }
+            return true;
+        }
+
+        @Override
+        public Component createMenuComponent() {
+            return new JMenuItem(this);
+        }
+
+        @Override
+        public Action getMultiLayerAction(List<Layer> layers) {
+            return new CustomizeLineDrawing(layers);
         }
 
         @Override
         public void actionPerformed(ActionEvent e) {
+            /* FIXME: Add all the other GPX settings here as well. Unify with DrawingPreferences
+               Each option should be able to "use global settings". Attention with the handling
+               of local layer for the two local layer options! */
             JRadioButton[] r = new JRadioButton[3];
             r[0] = new JRadioButton(tr("Use global settings."));
@@ -1314,5 +1357,6 @@
                 panel.add(b);
             }
-            String propName = "draw.rawgps.lines.layer " + getName();
+            String propbase = isLocalFile ? "draw.rawgps.lines.local" : "draw.rawgps.lines";
+            String propName = propbase + ".layer " + layers.get(0).getName();
             if (Main.pref.hasKey(propName)) {
                 group.setSelected(r[Main.pref.getBoolean(propName) ? 1 : 2].getModel(), true);
@@ -1329,46 +1373,14 @@
                 // continue
             }
-            if (group.getSelection() == r[0].getModel()) {
-                Main.pref.put(propName, null);
-            } else {
-                Main.pref.put(propName, group.getSelection() == r[1].getModel());
+            for(Layer layer : layers) {
+                propName = propbase + ".layer " + layer.getName();
+                if (group.getSelection() == r[0].getModel()) {
+                    Main.pref.put(propName, null);
+                } else {
+                    Main.pref.put(propName, group.getSelection() == r[1].getModel());
+                }
             }
             Main.map.repaint();
         }
-    }
-
-    private class CustomizeColor extends AbstractAction {
-
-        public CustomizeColor() {
-            super(tr("Customize Color"), ImageProvider.get("colorchooser"));
-            putValue("help", ht("/Action/LayerCustomizeColor"));
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            JColorChooser c = new JColorChooser(getColor(getName()));
-            Object[] options = new Object[] { tr("OK"), tr("Cancel"), tr("Default") };
-            int answer = JOptionPane.showOptionDialog(
-                    Main.parent,
-                    c,
-                    tr("Choose a color"),
-                    JOptionPane.OK_CANCEL_OPTION,
-                    JOptionPane.PLAIN_MESSAGE,
-                    null,
-                    options, options[0]
-            );
-            switch (answer) {
-            case 0:
-                Main.pref.putColor("layer " + getName(), c.getColor());
-                break;
-            case 1:
-                return;
-            case 2:
-                Main.pref.putColor("layer " + getName(), null);
-                break;
-            }
-            Main.map.repaint();
-        }
-
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/Layer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/Layer.java	(revision 4229)
+++ trunk/src/org/openstreetmap/josm/gui/layer/Layer.java	(revision 4230)
@@ -5,4 +5,5 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.Color;
 import java.awt.Component;
 import java.awt.Graphics2D;
@@ -53,4 +54,9 @@
     }
 
+    public interface MultiLayerAction {
+        Action getMultiLayerAction(List<Layer> layers);
+    }
+
+
     /**
      * Special class that can be returned by getMenuEntries when JSeparator needs to be created
@@ -128,4 +134,14 @@
      */
     abstract public Icon getIcon();
+
+    /**
+     * Return a Color for this layer. Return null when no color specified.
+     * @param ignoreCustom Custom color should return null, as no default color
+     *      is used. When this is true, then even for custom coloring the base
+     *      color is returned - mainly for layer internal use.
+     */
+    public Color getColor(boolean ignoreCustom) {
+        return null;
+    }
 
     /**
Index: trunk/src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/RawGpsLayer.java	(revision 4229)
+++ 	(revision )
@@ -1,304 +1,0 @@
-// License: GPL. Copyright 2007 by Immanuel Scholz and others
-package org.openstreetmap.josm.gui.layer;
-
-import static org.openstreetmap.josm.tools.I18n.marktr;
-import static org.openstreetmap.josm.tools.I18n.tr;
-import static org.openstreetmap.josm.tools.I18n.trn;
-import static org.openstreetmap.josm.tools.I18n.trnc;
-
-import java.awt.Color;
-import java.awt.Graphics2D;
-import java.awt.GridBagLayout;
-import java.awt.Point;
-import java.awt.event.ActionEvent;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.Box;
-import javax.swing.ButtonGroup;
-import javax.swing.Icon;
-import javax.swing.JColorChooser;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-
-import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.RenameLayerAction;
-import org.openstreetmap.josm.data.Bounds;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
-import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
-import org.openstreetmap.josm.data.coor.EastNorth;
-import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.Node;
-import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
-import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
-import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
-import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
-import org.openstreetmap.josm.tools.GBC;
-import org.openstreetmap.josm.tools.ImageProvider;
-import org.openstreetmap.josm.tools.UrlLabel;
-
-/**
- * A layer holding data from a gps source.
- * The data is read only.
- *
- * @author imi
- */
-public class RawGpsLayer extends Layer implements PreferenceChangedListener {
-
-    public class ConvertToDataLayerAction extends AbstractAction {
-        public ConvertToDataLayerAction() {
-            super(tr("Convert to data layer"), ImageProvider.get("converttoosm"));
-        }
-        public void actionPerformed(ActionEvent e) {
-            JPanel msg = new JPanel(new GridBagLayout());
-            msg.add(new JLabel(tr("<html>Upload of unprocessed GPS data as map data is considered harmful.<br>If you want to upload traces, look here:</html>")), GBC.eol());
-            msg.add(new UrlLabel(tr("http://www.openstreetmap.org/traces")), GBC.eop());
-            if (!ConditionalOptionPaneUtil.showConfirmationDialog(
-                    "convert_to_data",
-                    Main.parent,
-                    msg,
-                    tr("Warning"),
-                    JOptionPane.OK_CANCEL_OPTION,
-                    JOptionPane.WARNING_MESSAGE,
-                    JOptionPane.OK_OPTION))
-                return;
-            DataSet ds = new DataSet();
-            for (Collection<GpsPoint> c : data) {
-                List<Node> nodes = new ArrayList<Node>();
-                for (GpsPoint p : c) {
-                    Node n = new Node(p.latlon);
-                    ds.addPrimitive(n);
-                    nodes.add(n);
-                }
-                Way w = new Way();
-                w.setNodes(nodes);
-                ds.addPrimitive(w);
-            }
-            Main.main.addLayer(new OsmDataLayer(ds, tr("Converted from: {0}", RawGpsLayer.this.getName()), null));
-            Main.main.removeLayer(RawGpsLayer.this);
-        }
-    }
-
-    public static class GpsPoint {
-        public final LatLon latlon;
-        public final EastNorth eastNorth;
-        public final String time;
-        public GpsPoint(LatLon ll, String t) {
-            latlon = ll;
-            eastNorth = Main.getProjection().latlon2eastNorth(ll);
-            time = t;
-        }
-    }
-
-    /**
-     * A list of ways which containing a list of points.
-     */
-    public final Collection<Collection<GpsPoint>> data;
-    public final boolean fromServer;
-
-    public RawGpsLayer(boolean fromServer, Collection<Collection<GpsPoint>> data, String name, File associatedFile) {
-        super(name);
-        this.fromServer = fromServer;
-        setAssociatedFile(associatedFile);
-        this.data = data;
-        Main.pref.addPreferenceChangeListener(this);
-    }
-
-    /**
-     * Return a static icon.
-     */
-    @Override public Icon getIcon() {
-        return ImageProvider.get("layer", "rawgps_small");
-    }
-
-    @Override public void paint(Graphics2D g, MapView mv, Bounds box) {
-        g.setColor(Main.pref.getColor(marktr("gps point"), "layer "+getName(), Color.gray));
-        Point old = null;
-
-        boolean force = Main.pref.getBoolean("draw.rawgps.lines.force");
-        boolean lines = Main.pref.getBoolean("draw.rawgps.lines", true);
-        String linesKey = "draw.rawgps.lines.layer "+getName();
-        if (Main.pref.hasKey(linesKey)) {
-            lines = Main.pref.getBoolean(linesKey);
-        }
-        boolean large = Main.pref.getBoolean("draw.rawgps.large");
-        for (Collection<GpsPoint> c : data) {
-            if (!force) {
-                old = null;
-            }
-            for (GpsPoint p : c) {
-                Point screen = mv.getPoint(p.eastNorth);
-                if (lines && old != null) {
-                    g.drawLine(old.x, old.y, screen.x, screen.y);
-                } else if (!large) {
-                    g.drawRect(screen.x, screen.y, 0, 0);
-                }
-                if (large) {
-                    g.fillRect(screen.x-1, screen.y-1, 3, 3);
-                }
-                old = screen;
-            }
-        }
-    }
-
-    @Override public String getToolTipText() {
-        int points = 0;
-        for (Collection<GpsPoint> c : data) {
-            points += c.size();
-        }
-        String tool = data.size()+" "+trnc("gps", "track", "tracks", data.size())
-        +" "+points+" "+trn("point", "points", points);
-        File f = getAssociatedFile();
-        if (f != null) {
-            tool = "<html>"+tool+"<br>"+f.getPath()+"</html>";
-        }
-        return tool;
-    }
-
-    @Override public void mergeFrom(Layer from) {
-        RawGpsLayer layer = (RawGpsLayer)from;
-        data.addAll(layer.data);
-    }
-
-    @Override public boolean isMergable(Layer other) {
-        return other instanceof RawGpsLayer;
-    }
-
-    @Override public void visitBoundingBox(BoundingXYVisitor v) {
-        for (Collection<GpsPoint> c : data) {
-            for (GpsPoint p : c) {
-                v.visit(p.eastNorth);
-            }
-        }
-    }
-
-    @Override public Object getInfoComponent() {
-        StringBuilder b = new StringBuilder();
-        int points = 0;
-        for (Collection<GpsPoint> c : data) {
-            b.append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"+trn("a track with {0} point","a track with {0} points", c.size(), c.size())+"<br>");
-            points += c.size();
-        }
-        b.append("</html>");
-        return "<html>"+trn("{0} consists of {1} track", "{0} consists of {1} tracks", data.size(), getName(), data.size())+" ("+trn("{0} point", "{0} points", points, points)+")<br>"+b.toString();
-    }
-
-    @Override public Action[] getMenuEntries() {
-        if (Main.applet)
-            return new Action[]{
-                LayerListDialog.getInstance().createShowHideLayerAction(),
-                LayerListDialog.getInstance().createDeleteLayerAction(),
-                SeparatorLayerAction.INSTANCE,
-                new CustomizeColor(),
-                new CustomizeLineDrawing(),
-                new ConvertToDataLayerAction(),
-                SeparatorLayerAction.INSTANCE,
-                new RenameLayerAction(getAssociatedFile(), this),
-                SeparatorLayerAction.INSTANCE,
-                new LayerListPopup.InfoAction(this)};
-        else
-            return new Action[]{
-                LayerListDialog.getInstance().createShowHideLayerAction(),
-                LayerListDialog.getInstance().createDeleteLayerAction(),
-                SeparatorLayerAction.INSTANCE,
-                new LayerGpxExportAction(this),
-                new CustomizeColor(),
-                new CustomizeLineDrawing(),
-                new ConvertToDataLayerAction(),
-                SeparatorLayerAction.INSTANCE,
-                new RenameLayerAction(getAssociatedFile(), this),
-                SeparatorLayerAction.INSTANCE,
-                new LayerListPopup.InfoAction(this)};
-    }
-
-    public void preferenceChanged(PreferenceChangeEvent e) {
-        if (Main.map != null && (e.getKey().equals("draw.rawgps.lines") || e.getKey().equals("draw.rawgps.lines.force"))) {
-            Main.map.repaint();
-        }
-    }
-
-    @Override public void destroy() {
-        Main.pref.removePreferenceChangeListener(this);
-    }
-
-    private class CustomizeLineDrawing extends AbstractAction {
-
-        public CustomizeLineDrawing() {
-            super(tr("Customize line drawing"), ImageProvider.get("mapmode/addsegment"));
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            JRadioButton[] r = new JRadioButton[3];
-            r[0] = new JRadioButton(tr("Use global settings."));
-            r[1] = new JRadioButton(tr("Draw lines between points for this layer."));
-            r[2] = new JRadioButton(tr("Do not draw lines between points for this layer."));
-            ButtonGroup group = new ButtonGroup();
-            Box panel = Box.createVerticalBox();
-            for (JRadioButton b : r) {
-                group.add(b);
-                panel.add(b);
-            }
-            String propName = "draw.rawgps.lines.layer "+getName();
-            if (Main.pref.hasKey(propName)) {
-                group.setSelected(r[Main.pref.getBoolean(propName) ? 1:2].getModel(), true);
-            } else {
-                group.setSelected(r[0].getModel(), true);
-            }
-            int answer = JOptionPane.showConfirmDialog(
-                    Main.parent,
-                    panel,
-                    tr("Select line drawing options"),
-                    JOptionPane.OK_CANCEL_OPTION,
-                    JOptionPane.PLAIN_MESSAGE
-            );
-            if (answer == JOptionPane.CANCEL_OPTION)
-                return;
-            if (group.getSelection() == r[0].getModel()) {
-                Main.pref.put(propName, null);
-            } else {
-                Main.pref.put(propName, group.getSelection() == r[1].getModel());
-            }
-            Main.map.repaint();
-        }
-    }
-
-    private class CustomizeColor extends AbstractAction {
-
-        public CustomizeColor() {
-            super(tr("Customize Color"), ImageProvider.get("colorchooser"));
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            JColorChooser c = new JColorChooser(Main.pref.getColor(marktr("gps point"), "layer "+getName(), Color.gray));
-            Object[] options = new Object[]{tr("OK"), tr("Cancel"), tr("Default")};
-            int answer = JOptionPane.showOptionDialog(
-                    Main.parent,
-                    c,
-                    tr("Choose a color"),
-                    JOptionPane.OK_CANCEL_OPTION,
-                    JOptionPane.PLAIN_MESSAGE, null,options, options[0]);
-            switch (answer) {
-            case 0:
-                Main.pref.putColor("layer "+getName(), c.getColor());
-                break;
-            case 1:
-                return;
-            case 2:
-                Main.pref.putColor("layer "+getName(), null);
-                break;
-            }
-            Main.map.repaint();
-        }
-    }
-}
Index: trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 4229)
+++ trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 4230)
@@ -24,5 +24,4 @@
 import javax.swing.Icon;
 import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JColorChooser;
 import javax.swing.JOptionPane;
 import javax.swing.SwingUtilities;
@@ -39,4 +38,5 @@
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
 import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
+import org.openstreetmap.josm.gui.layer.CustomizeColor;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -149,12 +149,20 @@
     }
 
-    static public Color getColor(String name)
+    @Override
+    public Color getColor(boolean ignoreCustom)
     {
+        String name = getName();
         return Main.pref.getColor(marktr("gps marker"), name != null ? "layer "+name : null, Color.gray);
+    }
+
+    /* for preferences */
+    static public Color getGenericColor()
+    {
+        return Main.pref.getColor(marktr("gps marker"), Color.gray);
     }
 
     @Override public void paint(Graphics2D g, MapView mv, Bounds box) {
         boolean showTextOrIcon = isTextOrIconShown();
-        g.setColor(getColor(getName()));
+        g.setColor(getColor(true));
 
         if (mousePressed) {
@@ -203,5 +211,5 @@
         components.add(LayerListDialog.getInstance().createDeleteLayerAction());
         components.add(SeparatorLayerAction.INSTANCE);
-        components.add(new CustomizeColor());
+        components.add(new CustomizeColor(this));
         components.add(SeparatorLayerAction.INSTANCE);
         components.add(new SynchronizeAudio());
@@ -396,43 +404,7 @@
         }
 
-
         @Override
         public boolean supportLayers(List<Layer> layers) {
             return layers.size() == 1 && layers.get(0) instanceof MarkerLayer;
-        }
-    }
-
-    private class CustomizeColor extends AbstractAction {
-
-        public CustomizeColor() {
-            super(tr("Customize Color"), ImageProvider.get("colorchooser"));
-            putValue("help", ht("/Action/LayerCustomizeColor"));
-        }
-
-        @Override
-        public void actionPerformed(ActionEvent e) {
-            JColorChooser c = new JColorChooser(getColor(getName()));
-            Object[] options = new Object[]{tr("OK"), tr("Cancel"), tr("Default")};
-            int answer = JOptionPane.showOptionDialog(
-                    Main.parent,
-                    c,
-                    tr("Choose a color"),
-                    JOptionPane.OK_CANCEL_OPTION,
-                    JOptionPane.PLAIN_MESSAGE,
-                    null,
-                    options,
-                    options[0]
-            );
-            switch (answer) {
-            case 0:
-                Main.pref.putColor("layer "+getName(), c.getColor());
-                break;
-            case 1:
-                return;
-            case 2:
-                Main.pref.putColor("layer "+getName(), null);
-                break;
-            }
-            Main.map.repaint();
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/ColorPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/ColorPreference.java	(revision 4229)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/ColorPreference.java	(revision 4230)
@@ -249,6 +249,6 @@
         ConflictColors.getColors();
         Severity.getColors();
-        MarkerLayer.getColor(null);
-        GpxLayer.getColor(null);
+        MarkerLayer.getGenericColor();
+        GpxLayer.getGenericColor();
         OsmDataLayer.getOutsideColor();
         ImageryLayer.getFadeColor();
Index: trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java	(revision 4229)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java	(revision 4230)
@@ -83,5 +83,5 @@
 
         /* ensure that default is in data base */
-        Boolean lf = Main.pref.getBoolean("draw.rawgps.lines.localfiles", false);
+        Boolean lf = Main.pref.getBoolean("draw.rawgps.lines.local", true);
         if(Main.pref.getBoolean("draw.rawgps.lines", true)) {
             drawRawGpsLinesAll.setSelected(true);
@@ -158,5 +158,5 @@
 
         // hdopCircleGpsPoints
-        hdopCircleGpsPoints.setSelected(Main.pref.getBoolean("draw.rawgps.hdopcircle", true));
+        hdopCircleGpsPoints.setSelected(Main.pref.getBoolean("draw.rawgps.hdopcircle", false));
         hdopCircleGpsPoints.setToolTipText(tr("Draw a circle form HDOP value."));
         panel.add(hdopCircleGpsPoints, GBC.eop().insets(20,0,0,0));
@@ -296,5 +296,5 @@
         Main.pref.put("draw.data.area_outline_only", outlineOnly.isSelected());
         Main.pref.put("draw.rawgps.lines", drawRawGpsLinesAll.isSelected());
-        Main.pref.put("draw.rawgps.lines.localfiles", drawRawGpsLinesLocal.isSelected());
+        Main.pref.put("draw.rawgps.lines.local", drawRawGpsLinesAll.isSelected() || drawRawGpsLinesLocal.isSelected());
         Main.pref.put("draw.rawgps.max-line-length", drawRawGpsMaxLineLength.getText());
         Main.pref.put("draw.rawgps.max-line-length.local", drawRawGpsMaxLineLengthLocal.getText());
