Index: trunk/src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 6787)
+++ trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 6789)
@@ -3,7 +3,9 @@
 
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.AWTEvent;
+import java.awt.Color;
 import java.awt.Component;
 import java.awt.Cursor;
@@ -47,4 +49,6 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.coor.CoordinateFormat;
 import org.openstreetmap.josm.data.coor.LatLon;
@@ -52,4 +56,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.preferences.ColorProperty;
 import org.openstreetmap.josm.gui.NavigatableComponent.SoMChangeListener;
 import org.openstreetmap.josm.gui.help.Helpful;
@@ -77,5 +82,33 @@
  * @author imi
  */
-public class MapStatus extends JPanel implements Helpful, Destroyable {
+public class MapStatus extends JPanel implements Helpful, Destroyable, PreferenceChangedListener {
+
+    /**
+     * Property for map status background color.
+     * @since 6789
+     */
+    public static final ColorProperty PROP_BACKGROUND_COLOR = new ColorProperty(
+            marktr("Status bar background"), Color.decode("#b8cfe5"));
+
+    /**
+     * Property for map status background color (active state).
+     * @since 6789
+     */
+    public static final ColorProperty PROP_ACTIVE_BACKGROUND_COLOR = new ColorProperty(
+            marktr("Status bar background: active"), Color.decode("#aaff5e"));
+
+    /**
+     * Property for map status foreground color.
+     * @since 6789
+     */
+    public static final ColorProperty PROP_FOREGROUND_COLOR = new ColorProperty(
+            marktr("Status bar foreground"), Color.black);
+
+    /**
+     * Property for map status foreground color (active state).
+     * @since 6789
+     */
+    public static final ColorProperty PROP_ACTIVE_FOREGROUND_COLOR = new ColorProperty(
+            marktr("Status bar foreground: active"), Color.black);
 
     /**
@@ -137,11 +170,11 @@
     }
 
-    final ImageLabel lonText = new ImageLabel("lon", tr("The geographic longitude at the mouse pointer."), 11);
-    final ImageLabel nameText = new ImageLabel("name", tr("The name of the object at the mouse pointer."), 20);
+    final ImageLabel latText = new ImageLabel("lat", tr("The geographic latitude at the mouse pointer."), 11, PROP_BACKGROUND_COLOR.get());
+    final ImageLabel lonText = new ImageLabel("lon", tr("The geographic longitude at the mouse pointer."), 11, PROP_BACKGROUND_COLOR.get());
+    final ImageLabel headingText = new ImageLabel("heading", tr("The (compass) heading of the line segment being drawn."), 6, PROP_BACKGROUND_COLOR.get());
+    final ImageLabel angleText = new ImageLabel("angle", tr("The angle between the previous and the current way segment."), 6, PROP_BACKGROUND_COLOR.get());
+    final ImageLabel distText = new ImageLabel("dist", tr("The length of the new way segment being drawn."), 10, PROP_BACKGROUND_COLOR.get());
+    final ImageLabel nameText = new ImageLabel("name", tr("The name of the object at the mouse pointer."), 20, PROP_BACKGROUND_COLOR.get());
     final JosmTextField helpText = new JosmTextField();
-    final ImageLabel latText = new ImageLabel("lat", tr("The geographic latitude at the mouse pointer."), 11);
-    final ImageLabel angleText = new ImageLabel("angle", tr("The angle between the previous and the current way segment."), 6);
-    final ImageLabel headingText = new ImageLabel("heading", tr("The (compass) heading of the line segment being drawn."), 6);
-    final ImageLabel distText = new ImageLabel("dist", tr("The length of the new way segment being drawn."), 10);
     final JProgressBar progressBar = new JProgressBar();
     public final BackgroundProgressMonitor progressMonitor = new BackgroundProgressMonitor();
@@ -149,5 +182,9 @@
     private final SoMChangeListener somListener;
 
-    private double distValue; // Distance value displayed in distText, stored if refresh needed after a change of system of measurement
+    // Distance value displayed in distText, stored if refresh needed after a change of system of measurement
+    private double distValue;
+
+    // Determines if angle panel is enabled or not
+    private boolean angleEnabled = false;
 
     /**
@@ -771,5 +808,6 @@
 
         NavigatableComponent.addSoMChangeListener(somListener = new SoMChangeListener() {
-            @Override public void systemOfMeasurementChanged(String oldSoM, String newSoM) {
+            @Override
+            public void systemOfMeasurementChanged(String oldSoM, String newSoM) {
                 setDist(distValue);
             }
@@ -798,4 +836,6 @@
         });
 
+        Main.pref.addPreferenceChangeListener(this);
+
         // The background thread
         thread = new Thread(collector, "Map Status Collector");
@@ -823,4 +863,5 @@
         setHelpText(null, t);
     }
+
     public void setHelpText(Object id, final String text)  {
 
@@ -838,4 +879,5 @@
         });
     }
+
     public void resetHelpText(Object id) {
         if (statusText.isEmpty())
@@ -853,10 +895,13 @@
         statusText.remove(entry);
     }
+
     public void setAngle(double a) {
         angleText.setText(a < 0 ? "--" : Math.round(a*10)/10.0 + " \u00B0");
     }
+
     public void setHeading(double h) {
         headingText.setText(h < 0 ? "--" : Math.round(h*10)/10.0 + " \u00B0");
     }
+
     /**
      * Sets the distance text to the given value
@@ -867,4 +912,5 @@
         distText.setText(dist < 0 ? "--" : NavigatableComponent.getDistText(dist));
     }
+
     /**
      * Sets the distance text to the total sum of given ways length
@@ -885,6 +931,17 @@
         setDist(dist);
     }
+
+    /**
+     * Activates the angle panel.
+     * @param activeFlag {@code true} to activate it, {@code false} to deactivate it
+     */
     public void activateAnglePanel(boolean activeFlag) {
-        angleText.setBackground(activeFlag ? ImageLabel.backColorActive : ImageLabel.backColor);
+        angleEnabled = activeFlag;
+        refreshAnglePanel();
+    }
+
+    private void refreshAnglePanel() {
+        angleText.setBackground(angleEnabled ? PROP_ACTIVE_BACKGROUND_COLOR.get() : PROP_BACKGROUND_COLOR.get());
+        angleText.setForeground(angleEnabled ? PROP_ACTIVE_FOREGROUND_COLOR.get() : PROP_FOREGROUND_COLOR.get());
     }
 
@@ -892,4 +949,5 @@
     public void destroy() {
         NavigatableComponent.removeSoMChangeListener(somListener);
+        Main.pref.removePreferenceChangeListener(this);
 
         // MapFrame gets destroyed when the last layer is removed, but the status line background
@@ -903,3 +961,31 @@
         }
     }
+
+    @Override
+    public void preferenceChanged(PreferenceChangeEvent e) {
+        String key = e.getKey();
+        if (key.startsWith("color.")) {
+            key = key.substring("color.".length());
+            if (PROP_BACKGROUND_COLOR.getKey().equals(key) || PROP_FOREGROUND_COLOR.getKey().equals(key)) {
+                for (ImageLabel il : new ImageLabel[]{latText, lonText, headingText, distText, nameText}) {
+                    il.setBackground(PROP_BACKGROUND_COLOR.get());
+                    il.setForeground(PROP_FOREGROUND_COLOR.get());
+                }
+                refreshAnglePanel();
+            } else if (PROP_ACTIVE_BACKGROUND_COLOR.getKey().equals(key) || PROP_ACTIVE_FOREGROUND_COLOR.getKey().equals(key)) {
+                refreshAnglePanel();
+            }
+        }
+    }
+
+    /**
+     * Loads all colors from preferences.
+     * @since 6789
+     */
+    public static void getColors() {
+        PROP_BACKGROUND_COLOR.get();
+        PROP_FOREGROUND_COLOR.get();
+        PROP_ACTIVE_BACKGROUND_COLOR.get();
+        PROP_ACTIVE_FOREGROUND_COLOR.get();
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 6787)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/ColorPreference.java	(revision 6789)
@@ -35,4 +35,5 @@
 import org.openstreetmap.josm.data.validation.Severity;
 import org.openstreetmap.josm.gui.MapScaler;
+import org.openstreetmap.josm.gui.MapStatus;
 import org.openstreetmap.josm.gui.conflict.ConflictColors;
 import org.openstreetmap.josm.gui.dialogs.ConflictDialog;
@@ -269,4 +270,5 @@
         ImageryLayer.getFadeColor();
         MapScaler.getColor();
+        MapStatus.getColors();
         ConflictDialog.getColor();
     }
Index: trunk/src/org/openstreetmap/josm/gui/widgets/ImageLabel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/widgets/ImageLabel.java	(revision 6787)
+++ trunk/src/org/openstreetmap/josm/gui/widgets/ImageLabel.java	(revision 6789)
@@ -5,26 +5,30 @@
 import java.awt.Dimension;
 import java.awt.GridBagLayout;
+
 import javax.swing.JLabel;
 import javax.swing.JPanel;
+
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
-
 
 /**
  * A small user interface component that consists of an image label and
  * a fixed text content to the right of the image.
- * Moved from @link org.openstreetmap.josm.gui.MapStatus @since 5965
+ * @since 5965
  */
 public class ImageLabel extends JPanel {
-    public static final Color backColor = Color.decode("#b8cfe5");
-    public static final Color backColorActive = Color.decode("#aaff5e");
-
     private JLabel tf;
     private int charCount;
-    
-    public ImageLabel(String img, String tooltip, int charCount) {
-        super();
+
+    /**
+     * Constructs a new {@code ImageLabel}.
+     * @param img Image name (without .png extension) to find in {@code statusline} directory
+     * @param tooltip Tooltip text to display
+     * @param charCount Character count used to compute min/preferred size
+     * @param background The background color
+     */
+    public ImageLabel(String img, String tooltip, int charCount, Color background) {
         setLayout(new GridBagLayout());
-        setBackground(backColor);
+        setBackground(background);
         add(new JLabel(ImageProvider.get("statusline/"+img+".png")), GBC.std().anchor(GBC.WEST).insets(0,1,1,0));
         add(tf = new JLabel(), GBC.std().fill(GBC.BOTH).anchor(GBC.WEST).insets(2,1,1,0));
@@ -32,12 +36,20 @@
         this.charCount = charCount;
     }
-    
+
+    /**
+     * Sets the text to display.
+     * @param t text to display
+     */
     public void setText(String t) {
         tf.setText(t);
     }
-    @Override public Dimension getPreferredSize() {
+
+    @Override
+    public Dimension getPreferredSize() {
         return new Dimension(25 + charCount*tf.getFontMetrics(tf.getFont()).charWidth('0'), super.getPreferredSize().height);
     }
-    @Override public Dimension getMinimumSize() {
+
+    @Override
+    public Dimension getMinimumSize() {
         return new Dimension(25 + charCount*tf.getFontMetrics(tf.getFont()).charWidth('0'), super.getMinimumSize().height);
     }
