Index: src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java
===================================================================
--- src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(revision 4583)
+++ src/org/openstreetmap/josm/gui/preferences/PreferenceTabbedPane.java	(working copy)
@@ -3,6 +3,7 @@
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.Component;
 import java.awt.Font;
 import java.awt.GridBagLayout;
 import java.awt.ScrollPane;
@@ -10,9 +11,11 @@
 import java.awt.event.MouseWheelListener;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 
 import javax.swing.BorderFactory;
 import javax.swing.JComponent;
@@ -51,6 +54,8 @@
         boolean validatePreferences();
     }
 
+    // all created tabs
+    private final Map<String,Component> tabs = new HashMap<String,Component>();
     private final static Collection<PreferenceSettingFactory> settingsFactory = new LinkedList<PreferenceSettingFactory>();
     private final List<PreferenceSetting> settings = new ArrayList<PreferenceSetting>();
 
@@ -114,10 +119,16 @@
             JScrollPane sp = new JScrollPane(p);
             tab = sp;
         }
+        tabs.put(icon,tab);
         addTab(null, ImageProvider.get("preferences", icon), tab);
         setToolTipTextAt(getTabCount()-1, "<html>"+desc+"</html>");
         return p;
     }
+    
+    public void selectTabByName(String name) {
+        Component c = tabs.get(name);
+        if (c!=null) setSelectedComponent(c);
+    }
 
     protected PluginPreference getPluginPreference() {
         for (PreferenceSetting setting: settings) {
Index: src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
===================================================================
--- src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 4583)
+++ src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(working copy)
@@ -26,7 +26,6 @@
 import java.util.List;
 import java.util.Map;
 
-import javax.swing.AbstractAction;
 import javax.swing.Action;
 import javax.swing.DefaultListCellRenderer;
 import javax.swing.DefaultListModel;
@@ -62,6 +61,7 @@
 import org.openstreetmap.josm.actions.ParameterizedAction;
 import org.openstreetmap.josm.actions.ParameterizedActionDecorator;
 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
+import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
 
@@ -366,6 +366,34 @@
 
     }
 
+    private static class ToolbarPopupMenu extends JPopupMenu {
+        public ToolbarPopupMenu(final ActionDefinition action) {
+            
+            add(tr("Remove from toolbar",action.getDisplayName()))
+                    .addActionListener(new ActionListener() {
+                        public void actionPerformed(ActionEvent e) {
+                            Collection<String> t = new LinkedList<String>(getToolString());
+                            ActionParser parser = new ActionParser(null);
+                            // get text definition of current action
+                            String res = parser.saveAction(action);
+                            // remove the button from toolbar preferences
+                            t.remove( res );
+                            Main.pref.putCollection("toolbar", t);
+                            Main.toolbar.refreshToolbarControl();                
+                        }
+            });
+            
+            add(tr("Configure toolbar")).addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent e) {
+                    final PreferenceDialog p =new PreferenceDialog(Main.parent);
+                    p.selectPreferencesTabByName("toolbar");
+                    p.setVisible(true);
+                }
+            });
+            
+        }
+    }
+
     /**
      * Key: Registered name (property "toolbar" of action).
      * Value: The action to execute.
@@ -920,6 +948,7 @@
                 Icon i = action.getDisplayIcon();
                 if (i != null)
                     b.setIcon(i);
+                b.addMouseListener(new PopupMenuLauncher( new ToolbarPopupMenu(action)));
             }
         }
         control.setVisible(control.getComponentCount() != 0);
Index: src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java	(revision 4583)
+++ src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java	(working copy)
@@ -99,6 +99,10 @@
         super.setVisible(visible);
     }
 
+    void selectPreferencesTabByName(String name) {
+        tpPreferences.selectTabByName(name);
+    }
+
     class CancelAction extends AbstractAction {
         public CancelAction() {
             putValue(NAME, tr("Cancel"));
