Index: trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 4032)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 4033)
@@ -75,4 +75,5 @@
         private String name = "";
         private String icon = "";
+        private ImageIcon ico = null;
         private final Map<String, Object> parameters = new HashMap<String, Object>();
 
@@ -100,8 +101,25 @@
         }
 
+        public String getDisplayName() {
+            return name.isEmpty() ? (String) action.getValue(Action.NAME) : name;
+        }
+
+        public String getDisplayTooltip() {
+            if(!name.isEmpty())
+                return name;
+
+            Object tt = action.getValue(TaggingPreset.OPTIONAL_TOOLTIP_TEXT);
+            if (tt != null)
+                return (String) tt;
+
+            return (String) action.getValue(Action.SHORT_DESCRIPTION);
+        }
+
+        public Icon getDisplayIcon() {
+            return ico != null ? ico : (Icon) action.getValue(Action.SMALL_ICON);
+        }
+
         public void setName(String name) {
             this.name = name;
-            action.putValue(AbstractAction.SHORT_DESCRIPTION, Main.platform.makeTooltip(name, null));
-            action.putValue(AbstractAction.NAME, name);
         }
 
@@ -112,7 +130,5 @@
         public void setIcon(String icon) {
             this.icon = icon;
-            ImageIcon ico = ImageProvider.getIfAvailable("", icon);
-            if(ico != null)
-                action.putValue(AbstractAction.SMALL_ICON, ico);
+            ico = ImageProvider.getIfAvailable("", icon);
         }
 
@@ -279,9 +295,9 @@
 
         public int getRowCount() {
+            int adaptable = ((currentAction.getAction() instanceof AdaptableAction) ? 2 : 0);
             if (currentAction.isSeparator() || !(currentAction.getAction() instanceof ParameterizedAction))
-                return 0;
+                return adaptable;
             ParameterizedAction pa = (ParameterizedAction)currentAction.getAction();
-            return pa.getActionParameters().size()
-            + ((currentAction.getAction() instanceof ParameterizedAction) ? 2 : 0);
+            return pa.getActionParameters().size() + adaptable;
         }
 
@@ -293,5 +309,5 @@
 
         public Object getValueAt(int rowIndex, int columnIndex) {
-            if(currentAction.getAction() instanceof ParameterizedAction)
+            if(currentAction.getAction() instanceof AdaptableAction)
             {
                 if (rowIndex < 2) {
@@ -325,5 +341,5 @@
         @Override
         public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
-            if(currentAction.getAction() instanceof ParameterizedAction)
+            if(currentAction.getAction() instanceof AdaptableAction)
             {
                 if (rowIndex == 0) {
@@ -503,6 +519,6 @@
                     ActionDefinition action = (ActionDefinition)value;
                     if (!action.isSeparator()) {
-                        s = (String) action.getAction().getValue(Action.NAME);
-                        i = (Icon) action.getAction().getValue(Action.SMALL_ICON);
+                        s = action.getDisplayName();
+                        i = action.getDisplayIcon();
                     } else {
                         i = ImageProvider.get("preferences/separator");
@@ -799,5 +815,12 @@
     }
 
-    private static final String[] deftoolbar = {"open", "save", "download", "upload", "|", "undo", "redo", "|", "dialogs/search", "preference", "|", "splitway", "combineway", "wayflip", "|", "imagery-offset", "|", "tagginggroup_Highways/Streets", "tagginggroup_Highways/Ways", "tagginggroup_Highways/Waypoints", "tagginggroup_Highways/Barriers", "|", "tagginggroup_Transport/Car", "tagginggroup_Transport/Public Transport", "|", "tagginggroup_Travel/Tourism", "tagginggroup_Travel/Food+Drinks", "|", "tagginggroup_Travel/Historic Places", "|", "tagginggroup_Man-Made/Man Made"};
+    private static final String[] deftoolbar = {"open", "save", "download", "upload", "|",
+    "undo", "redo", "|", "dialogs/search", "preference", "|", "splitway", "combineway",
+    "wayflip", "|", "imagery-offset", "|", "tagginggroup_Highways/Streets",
+    "tagginggroup_Highways/Ways", "tagginggroup_Highways/Waypoints",
+    "tagginggroup_Highways/Barriers", "|", "tagginggroup_Transport/Car",
+    "tagginggroup_Transport/Public Transport", "|", "tagginggroup_Facilities/Tourism",
+    "tagginggroup_Facilities/Food+Drinks", "|", "tagginggroup_Man Made/Historic Places", "|",
+    "tagginggroup_Man Made/Man Made"};
 
     private static Collection<String> getToolString() {
@@ -826,4 +849,6 @@
                 if(a != null) {
                     result.add(a);
+                } else {
+                    System.out.println("Could not load tool definition "+s);
                 }
             }
@@ -854,10 +879,11 @@
                 control.addSeparator();
             } else {
-                Action a = action.getParametrizedAction();
-                JButton b = control.add(a);
-                Object tt = a.getValue(TaggingPreset.OPTIONAL_TOOLTIP_TEXT);
-                if (tt != null) {
-                    b.setToolTipText((String)tt);
-                }
+                JButton b = control.add(action.getParametrizedAction());
+                String tt = action.getDisplayTooltip();
+                if (tt != null && !tt.isEmpty())
+                    b.setToolTipText(tt);
+                Icon i = action.getDisplayIcon();
+                if (i != null)
+                    b.setIcon(i);
             }
         }
