Index: trunk/src/org/openstreetmap/josm/gui/preferences/PrefJPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/PrefJPanel.java	(revision 3246)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/PrefJPanel.java	(revision 3247)
@@ -13,4 +13,5 @@
 import java.util.Map;
 
+import javax.swing.AbstractAction;
 import javax.swing.JEditorPane;
 import javax.swing.JScrollPane;
@@ -370,5 +371,5 @@
     // even have some duplicated code. Feel free to refactor, If you have
     // more expirience with GUI coding than I have.
-    private class cbAction extends javax.swing.AbstractAction implements ListSelectionListener {
+    private class cbAction extends AbstractAction implements ListSelectionListener {
         private PrefJPanel panel;
         public cbAction (PrefJPanel panel) {
Index: trunk/src/org/openstreetmap/josm/gui/preferences/ShortcutPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/ShortcutPreference.java	(revision 3246)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/ShortcutPreference.java	(revision 3247)
@@ -4,5 +4,5 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.util.Collection;
+import java.util.List;
 
 import javax.swing.JPanel;
@@ -36,12 +36,12 @@
 
     public boolean ok() {
-        return false;
+        return Shortcut.savePrefs();
     }
 
     // Maybe move this to prefPanel? There's no need for it to be here.
     private static class scListModel extends AbstractTableModel {
-//      private String[] columnNames = new String[]{tr("Action"), tr("Shortcut"), tr("Group"), tr("ID")};
         private String[] columnNames = new String[]{tr("Action"), tr("Shortcut")};
-        private Collection<Shortcut> data;
+        private List<Shortcut> data;
+
         public scListModel() {
             data = Shortcut.listAll();
@@ -53,42 +53,21 @@
             return data.size();
         }
+        @Override
         public String getColumnName(int col) {
             return columnNames[col];
         }
         public Object getValueAt(int row, int col) {
-            Shortcut sc = (Shortcut)data.toArray()[row];
-            if (col == 0) {
+            Shortcut sc = data.get(row);
+            if (col == 0)
                 return sc.getLongText();
-            } else if (col == 1) {
+            else if (col == 1)
                 return sc.getKeyText();
-            } /*else if (col == 2) {
-                if (sc.getRequestedGroup() == Shortcut.GROUP_NONE) {
-                    return tr("None");
-                } else if (sc.getRequestedGroup() == Shortcut.GROUP_HOTKEY) {
-                    return tr("Hotkey");
-                } else if (sc.getRequestedGroup() == Shortcut.GROUP_MENU) {
-                    return tr("Menu");
-                } else if (sc.getRequestedGroup() == Shortcut.GROUP_EDIT) {
-                    return tr("Edit");
-                } else if (sc.getRequestedGroup() == Shortcut.GROUP_LAYER) {
-                    return tr("Subwindow");
-                } else if (sc.getRequestedGroup() == Shortcut.GROUP_DIRECT) {
-                    return tr("Direct");
-                } else if (sc.getRequestedGroup() == Shortcut.GROUP_MNEMONIC) {
-                    return tr("Mnemonic");
-                } else if (sc.getRequestedGroup() == Shortcut.GROUP_RESERVED) {
-                    return tr("System");
-                } else {
-                    return tr("Unknown");
-                }
-            } else if (col == 3) {
-                return sc.getShortText();
-            } */else {
+            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;
-            }
         }
+        @Override
         public boolean isCellEditable(int row, int col) {
             return false;
Index: trunk/src/org/openstreetmap/josm/tools/Shortcut.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 3246)
+++ trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 3247)
@@ -5,7 +5,8 @@
 
 import java.awt.event.KeyEvent;
-import java.util.Collection;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 
@@ -231,6 +232,6 @@
      * FOR PREF PANE ONLY
      */
-    public static Collection<Shortcut> listAll() {
-        return shortcuts.values();
+    public static List<Shortcut> listAll() {
+        return new ArrayList<Shortcut>(shortcuts.values());
     }
 
@@ -313,18 +314,20 @@
 
     // shutdown handling
-    public static void savePrefs() {
+    public static boolean savePrefs() {
         //      we save this directly from the preferences pane, so don't overwrite these values here
         //      for (int i = GROUP_NONE; i < GROUP__MAX+GROUPS_ALT2; i++) {
         //      Main.pref.put("shortcut.groups."+i, Groups.get(i).toString());
         //      }
+        boolean changed = false;
         int i = 0;
         for (Shortcut sc : shortcuts.values()) {
             //          TODO: Remove sc.getAssignedUser() when we fixed all internal conflicts
             if (!sc.getAutomatic() && !sc.getReset() && sc.getAssignedUser()) {
-                Main.pref.put("shortcut.shortcut."+i, sc.asPrefString());
+                changed = changed | Main.pref.put("shortcut.shortcut."+i, sc.asPrefString());
                 i++;
             }
         }
-        Main.pref.put("shortcut.shortcut."+i, "");
+        changed = changed | Main.pref.put("shortcut.shortcut."+i, "");
+        return changed;
     }
 
@@ -465,5 +468,5 @@
      * 'Ctrl-C' on windows or 'Meta-C' on a Mac. null, if the platform specific
      * copy command isn't known.
-     * 
+     *
      * @return the platform specific key stroke for the  'Copy' command
      */
@@ -478,5 +481,5 @@
      * 'Ctrl-V' on windows or 'Meta-V' on a Mac. null, if the platform specific
      * paste command isn't known.
-     * 
+     *
      * @return the platform specific key stroke for the 'Paste' command
      */
@@ -491,5 +494,5 @@
      * 'Ctrl-X' on windows or 'Meta-X' on a Mac. null, if the platform specific
      * 'Cut' command isn't known.
-     * 
+     *
      * @return the platform specific key stroke for the 'Cut' command
      */
