Index: trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 6836)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 6838)
@@ -1054,4 +1054,5 @@
         control.setFocusTraversalKeysEnabled(!unregisterTab);
         control.setVisible(control.getComponentCount() != 0);
+        control.repaint();
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 6836)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 6838)
@@ -24,4 +24,5 @@
 import javax.swing.JLabel;
 import javax.swing.JPanel;
+import javax.swing.JToggleButton;
 import javax.swing.SwingUtilities;
 
@@ -42,4 +43,5 @@
 import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
 import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.preferences.ToolbarPreferences;
 import org.openstreetmap.josm.gui.preferences.map.TaggingPresetPreference;
 import org.openstreetmap.josm.gui.tagging.TaggingPresetItems.Link;
@@ -252,5 +254,9 @@
             link.addToPanel(p, selected, presetInitiallyMatches);
         }
-
+        
+        // "Add toolbar button"
+        JToggleButton tb = new JToggleButton(new ToolbarButtonAction());
+        tb.setFocusable(false);
+        p.add(tb, GBC.std(0,0).anchor(GBC.LINE_END));
         return p;
     }
@@ -496,3 +502,41 @@
         });
     }
+    
+    /**
+     * Action that adds or removes the button on main toolbar
+     */
+    public class ToolbarButtonAction extends AbstractAction {
+        private final int toolbarIndex;
+        public ToolbarButtonAction() {
+            super("", ImageProvider.get("styles\\standard\\waypoint","pin"));
+            putValue(SHORT_DESCRIPTION, tr("Add or remove toolbar button"));
+            LinkedList<String> t = new LinkedList<String>(ToolbarPreferences.getToolString());
+            toolbarIndex = t.indexOf(getToolbarString());
+            putValue(SELECTED_KEY, toolbarIndex >= 0);
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent ae) {
+            String res = getToolbarString();
+            LinkedList<String> t = new LinkedList<String>(ToolbarPreferences.getToolString());
+            if (t.contains(res)) {
+                t.remove(res);
+            } else {
+                if (toolbarIndex>=0) {
+                    t.add(toolbarIndex, res); // add to the old place
+                } else {
+                    t.add(res); // add to the end
+                }
+            }
+            Main.pref.putCollection("toolbar", t);
+            Main.toolbar.refreshToolbarControl();
+            }
+    }
+    
+    public String getToolbarString() {
+        ToolbarPreferences.ActionDefinition aDef
+            = new ToolbarPreferences.ActionDefinition(this);
+        ToolbarPreferences.ActionParser actionParser = new ToolbarPreferences.ActionParser(null);
+        return actionParser.saveAction(aDef);
+    }
 }
