Index: trunk/src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 6313)
+++ trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 6314)
@@ -24,4 +24,5 @@
 import java.awt.event.MouseListener;
 import java.awt.event.MouseMotionListener;
+import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -341,5 +342,8 @@
                             }
                         });
-                    } catch (Exception e) {
+                    } catch (InterruptedException e) {
+                        // Occurs frequently during JOSM shutdown, log set to debug only
+                        Main.debug("InterruptedException in "+MapStatus.class.getSimpleName());
+                    } catch (InvocationTargetException e) {
                         Main.warn(e);
                     }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesCellRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesCellRenderer.java	(revision 6314)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesCellRenderer.java	(revision 6314)
@@ -0,0 +1,78 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.dialogs.properties;
+
+import static org.openstreetmap.josm.tools.I18n.marktr;
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Font;
+import java.util.Map;
+
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.UIDefaults;
+import javax.swing.table.DefaultTableCellRenderer;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
+
+/**
+ * Cell renderer of properties table.
+ * @since 6314
+ */
+public class PropertiesCellRenderer extends DefaultTableCellRenderer {
+
+    private void setColors(Component c, String key, boolean isSelected, boolean hasFocus) {
+        UIDefaults defaults = javax.swing.UIManager.getDefaults();
+        if (OsmPrimitive.getDiscardableKeys().contains(key)) {
+            if (isSelected) {
+                c.setForeground(Main.pref.getColor(marktr("Discardable key: selection Foreground"), Color.GRAY));
+                c.setBackground(Main.pref.getColor(marktr("Discardable key: selection Background"), defaults.getColor("Table.selectionBackground")));
+            } else {
+                c.setForeground(Main.pref.getColor(marktr("Discardable key: foreground"), Color.GRAY));
+                c.setBackground(Main.pref.getColor(marktr("Discardable key: background"), defaults.getColor("Table.background")));
+            }
+        } else {
+            c.setForeground(defaults.getColor("Table."+(isSelected ? "selectionF" : "f")+"oreground"));
+            c.setBackground(defaults.getColor("Table."+(isSelected ? "selectionB" : "b")+"ackground"));
+        }
+    }
+    
+    @Override 
+    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+        Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
+        if (value == null)
+            return this;
+        if (c instanceof JLabel) {
+            String str = null;
+            if (value instanceof String) {
+                str = (String) value;
+            } else if (value instanceof Map<?, ?>) {
+                Map<?, ?> v = (Map<?, ?>) value;
+                if (v.size() != 1) {
+                    str=tr("<different>");
+                    c.setFont(c.getFont().deriveFont(Font.ITALIC));
+                } else {
+                    final Map.Entry<?, ?> entry = v.entrySet().iterator().next();
+                    str = (String) entry.getKey();
+                }
+            }
+            ((JLabel)c).putClientProperty("html.disable", Boolean.TRUE); // Fix #8730
+            ((JLabel)c).setText(str);
+            if (Main.pref.getBoolean("display.discardable-keys", false)) {
+                String key = null;
+                if (column == 0) {
+                    key = str;
+                } else if (column == 1) {
+                    Object value0 = table.getModel().getValueAt(row, 0);
+                    if (value0 instanceof String) {
+                        key = (String) value0;
+                    }
+                }
+                setColors(c, key, isSelected, hasFocus);
+            }
+        }
+        return c;
+    }
+}
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 6313)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 6314)
@@ -60,4 +60,6 @@
 import org.openstreetmap.josm.command.ChangePropertyCommand;
 import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangeEvent;
+import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.osm.IRelation;
@@ -113,5 +115,5 @@
  * @author imi
  */
-public class PropertiesDialog extends ToggleDialog implements SelectionChangedListener, MapView.EditLayerChangeListener, DataSetListenerAdapter.Listener {
+public class PropertiesDialog extends ToggleDialog implements SelectionChangedListener, MapView.EditLayerChangeListener, DataSetListenerAdapter.Listener, PreferenceChangedListener {
 
     /**
@@ -272,4 +274,6 @@
 
         editHelper.loadTagsIfNeeded();
+        
+        Main.pref.addPreferenceChangeListener(this);
     }
 
@@ -281,30 +285,7 @@
         propertyTable.getTableHeader().setReorderingAllowed(false);
 
-        propertyTable.getColumnModel().getColumn(1).setCellRenderer(new DefaultTableCellRenderer(){
-            @Override public Component getTableCellRendererComponent(JTable table, Object value,
-                    boolean isSelected, boolean hasFocus, int row, int column) {
-                Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
-                if (value == null)
-                    return this;
-                if (c instanceof JLabel) {
-                    String str = null;
-                    if (value instanceof String) {
-                        str = (String) value;
-                    } else if (value instanceof Map<?, ?>) {
-                        Map<?, ?> v = (Map<?, ?>) value;
-                        if (v.size() != 1) {
-                            str=tr("<different>");
-                            c.setFont(c.getFont().deriveFont(Font.ITALIC));
-                        } else {
-                            final Map.Entry<?, ?> entry = v.entrySet().iterator().next();
-                            str = (String) entry.getKey();
-                        }
-                    }
-                    ((JLabel)c).putClientProperty("html.disable", Boolean.TRUE); // Fix #8730
-                    ((JLabel)c).setText(str);
-                }
-                return c;
-            }
-        });
+        PropertiesCellRenderer cellRenderer = new PropertiesCellRenderer();
+        propertyTable.getColumnModel().getColumn(0).setCellRenderer(cellRenderer);
+        propertyTable.getColumnModel().getColumn(1).setCellRenderer(cellRenderer);
     }
 
@@ -562,4 +543,5 @@
     public void destroy() {
         super.destroy();
+        Main.pref.removePreferenceChangeListener(this);
         for (JosmAction action : josmActions) {
             action.destroy();
@@ -594,4 +576,5 @@
         propertyData.setRowCount(0);
 
+        final boolean displayDiscardableKeys = Main.pref.getBoolean("display.discardable-keys", false);
         final Map<String, Integer> keyCount = new HashMap<String, Integer>();
         final Map<String, String> tags = new HashMap<String, String>();
@@ -601,13 +584,15 @@
             types.add(TaggingPresetType.forPrimitive(osm));
             for (String key : osm.keySet()) {
-                String value = osm.get(key);
-                keyCount.put(key, keyCount.containsKey(key) ? keyCount.get(key) + 1 : 1);
-                if (valueCount.containsKey(key)) {
-                    Map<String, Integer> v = valueCount.get(key);
-                    v.put(value, v.containsKey(value) ? v.get(value) + 1 : 1);
-                } else {
-                    TreeMap<String, Integer> v = new TreeMap<String, Integer>();
-                    v.put(value, 1);
-                    valueCount.put(key, v);
+                if (displayDiscardableKeys || !OsmPrimitive.getDiscardableKeys().contains(key)) {
+                    String value = osm.get(key);
+                    keyCount.put(key, keyCount.containsKey(key) ? keyCount.get(key) + 1 : 1);
+                    if (valueCount.containsKey(key)) {
+                        Map<String, Integer> v = valueCount.get(key);
+                        v.put(value, v.containsKey(value) ? v.get(value) + 1 : 1);
+                    } else {
+                        TreeMap<String, Integer> v = new TreeMap<String, Integer>();
+                        v.put(value, 1);
+                        valueCount.put(key, v);
+                    }
                 }
             }
@@ -1254,3 +1239,13 @@
         }
     }
+
+    @Override
+    public void preferenceChanged(PreferenceChangeEvent e) {
+        if ("display.discardable-keys".equals(e.getKey())) {
+            if (Main.main.getCurrentDataSet() != null) {
+                // Re-load data when display preference change
+                selectionChanged(Main.main.getCurrentDataSet().getSelected());
+            }
+        }
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java	(revision 6313)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java	(revision 6314)
@@ -41,4 +41,5 @@
     private JCheckBox virtualNodes = new JCheckBox(tr("Draw virtual nodes in select mode"));
     private JCheckBox inactive = new JCheckBox(tr("Draw inactive layers in other color"));
+    private JCheckBox discardableKeys = new JCheckBox(tr("Display discardable keys"));
 
     // Options that affect performance
@@ -117,7 +118,11 @@
 
         // outlineOnly
+        outlineOnly.setToolTipText(tr("This option suppresses the filling of areas, overriding anything specified in the selected style."));
         outlineOnly.setSelected(Main.pref.getBoolean("draw.data.area_outline_only", false));
-        outlineOnly.setToolTipText(tr("This option suppresses the filling of areas, overriding anything specified in the selected style."));
-
+
+        // discardable keys
+        discardableKeys.setToolTipText(tr("Display keys which have been deemed uninteresting to the point that they can be silently removed."));
+        discardableKeys.setSelected(Main.pref.getBoolean("display.discardable-keys", false));
+        
         JLabel performanceLabel = new JLabel(tr("Options that affect drawing performance"));
 
@@ -144,4 +149,5 @@
         panel.add(sourceBounds, GBC.eop().insets(20,0,0,0));
         panel.add(inactive, GBC.eop().insets(20,0,0,0));
+        panel.add(discardableKeys, GBC.eop().insets(20,0,0,0));
 
         ExpertToggleAction.addVisibilitySwitcher(performanceLabel);
@@ -150,4 +156,5 @@
         ExpertToggleAction.addVisibilitySwitcher(useHighlighting);
         ExpertToggleAction.addVisibilitySwitcher(outlineOnly);
+        ExpertToggleAction.addVisibilitySwitcher(discardableKeys);
 
         panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
@@ -171,4 +178,5 @@
         Main.pref.put("draw.target-highlight", useHighlighting.isSelected());
         Main.pref.put("draw.helper-line", drawHelperLine.isSelected());
+        Main.pref.put("display.discardable-keys", discardableKeys.isSelected());
         int vn = Main.pref.getInteger("mappaint.node.virtual-size", 8);
         if (virtualNodes.isSelected()) {
