Index: trunk/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java	(revision 5005)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/shortcut/PrefJPanel.java	(revision 5006)
@@ -2,4 +2,6 @@
 package org.openstreetmap.josm.gui.preferences.shortcut;
 
+import java.awt.Color;
+import java.awt.Component;
 import java.awt.Dimension;
 import java.awt.GridBagConstraints;
@@ -8,4 +10,5 @@
 import java.awt.Toolkit;
 
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -40,4 +43,6 @@
 import javax.swing.table.AbstractTableModel;
 import javax.swing.table.TableModel;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableColumnModel;
 
 import javax.swing.table.TableRowSorter;
@@ -144,4 +149,39 @@
     }
 
+    private static class ShortcutTableCellRenderer extends DefaultTableCellRenderer {
+
+        private boolean name;
+
+        public ShortcutTableCellRenderer(boolean name) {
+            this.name = name;
+        }
+
+        @Override
+        public Component getTableCellRendererComponent(JTable table, Object value, boolean
+                isSelected, boolean hasFocus, int row, int column) {
+            if(value instanceof Shortcut)
+            {
+                Shortcut sc = (Shortcut) value;
+                JLabel label = (JLabel) super.getTableCellRendererComponent(
+                    table, name ? sc.getLongText() : sc.getKeyText(), isSelected, hasFocus, row, column);
+                label.setBackground(Main.pref.getUIColor("Table.background"));
+                if (isSelected) {
+                    label.setForeground(Main.pref.getUIColor("Table.foreground"));
+                }
+                if(sc.getAssignedUser()) {
+                    label.setBackground(Main.pref.getColor(
+                            marktr("Shortcut Background: User"),
+                            new Color(200,255,200)));
+                } else if(!sc.getAssignedDefault()) {
+                    label.setBackground(Main.pref.getColor(
+                            marktr("Shortcut Background: Modified"),
+                            new Color(255,255,200)));
+                }
+                return label;
+            }
+            return null;
+        }
+    }
+
     private void initComponents() {
         JPanel listPane = new JPanel();
@@ -160,4 +200,7 @@
         shortcutTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
         shortcutTable.setAutoCreateRowSorter(true);
+        TableColumnModel mod = shortcutTable.getColumnModel();
+        mod.getColumn(0).setCellRenderer(new ShortcutTableCellRenderer(true));
+        mod.getColumn(1).setCellRenderer(new ShortcutTableCellRenderer(false));
         listScrollPane.setViewportView(shortcutTable);
 
@@ -268,5 +311,5 @@
                     actionPerformed(null);
                 }
-                model.fireTableCellUpdated(row, 1);
+                model.fireTableRowsUpdated(row, row);
             } else {
                 panel.disableAllModifierCheckboxes();
Index: trunk/src/org/openstreetmap/josm/gui/preferences/shortcut/ShortcutPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/shortcut/ShortcutPreference.java	(revision 5005)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/shortcut/ShortcutPreference.java	(revision 5006)
@@ -65,14 +65,5 @@
         }
         public Object getValueAt(int row, int col) {
-            Shortcut sc = data.get(row);
-            if (col == 0)
-                return sc.getLongText();
-            else if (col == 1)
-                return sc.getKeyText();
-            else
-                // This is a kind of hack that allows the actions on the editing controls
-                // to access the underlying shortcut object without introducing another
-                // method. I opted to stay within the interface.
-                return sc;
+            return data.get(row);
         }
         @Override
