Index: trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 16415)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 16416)
@@ -49,4 +49,5 @@
 import javax.swing.JTree;
 import javax.swing.ListCellRenderer;
+import javax.swing.ListSelectionModel;
 import javax.swing.MenuElement;
 import javax.swing.TransferHandler;
@@ -71,4 +72,5 @@
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.gui.util.ReorderableTableModel;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
@@ -708,19 +710,7 @@
                     }
                 } else if ("up".equals(e.getActionCommand())) {
-                    int i = selectedList.getSelectedIndex();
-                    ActionDefinition o = selected.get(i);
-                    if (i != 0) {
-                        selected.remove(i);
-                        selected.add(i-1, o);
-                        selectedList.setSelectedIndex(i-1);
-                    }
+                    selected.moveUp();
                 } else if ("down".equals(e.getActionCommand())) {
-                    int i = selectedList.getSelectedIndex();
-                    ActionDefinition o = selected.get(i);
-                    if (i != selected.size()-1) {
-                        selected.remove(i);
-                        selected.add(i+1, o);
-                        selectedList.setSelectedIndex(i+1);
-                    }
+                    selected.moveDown();
                 }
             }
@@ -753,7 +743,29 @@
         }
 
+        private class ActionDefinitionModel extends DefaultListModel<ActionDefinition> implements ReorderableTableModel<ActionDefinition> {
+            @Override
+            public ListSelectionModel getSelectionModel() {
+                return selectedList.getSelectionModel();
+            }
+
+            @Override
+            public int getRowCount() {
+                return getSize();
+            }
+
+            @Override
+            public ActionDefinition getValue(int index) {
+                return getElementAt(index);
+            }
+
+            @Override
+            public ActionDefinition setValue(int index, ActionDefinition value) {
+                return set(index, value);
+            }
+        }
+
         private final Move moveAction = new Move();
 
-        private final DefaultListModel<ActionDefinition> selected = new DefaultListModel<>();
+        private final ActionDefinitionModel selected = new ActionDefinitionModel();
         private final JList<ActionDefinition> selectedList = new JList<>(selected);
 
Index: trunk/src/org/openstreetmap/josm/gui/util/ReorderableTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/util/ReorderableTableModel.java	(revision 16415)
+++ trunk/src/org/openstreetmap/josm/gui/util/ReorderableTableModel.java	(revision 16416)
@@ -2,4 +2,7 @@
 package org.openstreetmap.josm.gui.util;
 
+import javax.swing.JList;
+import javax.swing.JTable;
+import javax.swing.ListModel;
 import javax.swing.ListSelectionModel;
 import javax.swing.table.TableModel;
@@ -8,15 +11,25 @@
 
 /**
- * Defines a table model that can be reordered.
+ * Defines a list/table model that can be reordered.
  * @param <T> item type
  * @since 15226
  */
-public interface ReorderableTableModel<T> extends TableModel, ReorderableModel<T> {
+public interface ReorderableTableModel<T> extends ReorderableModel<T> {
 
     /**
      * Returns the selection model.
      * @return the selection model (never null)
+     * @see JList#getSelectionModel()
+     * @see JTable#getSelectionModel()
      */
     ListSelectionModel getSelectionModel();
+
+    /**
+     * Returns the number of rows in the list/table.
+     * @return the number of rows in the list/table
+     * @see ListModel#getSize()
+     * @see TableModel#getRowCount()
+     */
+    int getRowCount();
 
     /**
