Index: trunk/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java	(revision 4138)
+++ trunk/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java	(revision 4139)
@@ -37,7 +37,9 @@
                 tr("Toggle fullscreen view"),
                 Shortcut.registerShortcut("menu:view:fullscreen", tr("Toggle fullscreen view"),KeyEvent.VK_F11, Shortcut.GROUP_DIRECT),
-                true /* register shortcut */
+                false /* register */
         );
         putValue("help", ht("/Action/FullscreenView"));
+        putValue("toolbar", "fullscreen");
+        Main.toolbar.register(this);
         gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
         selected = Main.pref.getBoolean("draw.fullscreen", false);
@@ -77,5 +79,13 @@
         Main.pref.put("draw.fullscreen", selected);
         notifySelectedState();
+        setMode();
+    }
 
+    public void initial() {
+        if(selected)
+            setMode();
+    }
+
+    protected void setMode() {
         Frame frame = (Frame) Main.parent;
 
Index: trunk/src/org/openstreetmap/josm/actions/HelpAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/HelpAction.java	(revision 4138)
+++ trunk/src/org/openstreetmap/josm/actions/HelpAction.java	(revision 4139)
@@ -24,4 +24,5 @@
     public HelpAction() {
         super(tr("Help"), ImageProvider.get("help"));
+        putValue("toolbar", "help");
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/HistoryInfoAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/HistoryInfoAction.java	(revision 4138)
+++ trunk/src/org/openstreetmap/josm/actions/HistoryInfoAction.java	(revision 4139)
@@ -6,4 +6,5 @@
 import java.awt.event.KeyEvent;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
@@ -17,6 +18,8 @@
                 tr("Display history information about OSM ways, nodes, or relations."),
                 Shortcut.registerShortcut("core:history",
-                        tr("Object history"), KeyEvent.VK_H, Shortcut.GROUP_HOTKEY), true);
+                        tr("Object history"), KeyEvent.VK_H, Shortcut.GROUP_HOTKEY), false);
         putValue("help", ht("/Action/ObjectHistory"));
+        putValue("toolbar", "action/historyinfo");
+        Main.toolbar.register(this);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/InfoAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/InfoAction.java	(revision 4138)
+++ trunk/src/org/openstreetmap/josm/actions/InfoAction.java	(revision 4139)
@@ -7,4 +7,5 @@
 import java.awt.event.KeyEvent;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
@@ -17,6 +18,8 @@
                 tr("Display object information about OSM nodes, ways, or relations."),
                 Shortcut.registerShortcut("core:information",
-                        tr("Info about Element"), KeyEvent.VK_I, Shortcut.GROUP_HOTKEY), true);
+                        tr("Info about Element"), KeyEvent.VK_I, Shortcut.GROUP_HOTKEY), false);
         putValue("help", ht("/Action/InfoAboutElements"));
+        putValue("toolbar", "action/info");
+        Main.toolbar.register(this);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/JosmAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/JosmAction.java	(revision 4138)
+++ trunk/src/org/openstreetmap/josm/actions/JosmAction.java	(revision 4139)
@@ -86,5 +86,7 @@
         }
         putValue(SHORT_DESCRIPTION, Main.platform.makeTooltip(tooltip, sc));
-        putValue("toolbar", iconName);
+        if (getValue("toolbar") == null) {
+            putValue("toolbar", iconName);
+        }
         if (register) {
             Main.toolbar.register(this);
Index: trunk/src/org/openstreetmap/josm/actions/JumpToAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/JumpToAction.java	(revision 4138)
+++ trunk/src/org/openstreetmap/josm/actions/JumpToAction.java	(revision 4139)
@@ -30,5 +30,7 @@
     public JumpToAction() {
         super(tr("Jump To Position"), null, tr("Opens a dialog that allows to jump to a specific location"), Shortcut.registerShortcut("tools:jumpto", tr("Tool: {0}", tr("Jump To Position")),
-        KeyEvent.VK_G, Shortcut.GROUP_HOTKEY), true);
+        KeyEvent.VK_G, Shortcut.GROUP_HOTKEY), false);
+        putValue("toolbar", "action/jumpto");
+        Main.toolbar.register(this);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/MergeLayerAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/MergeLayerAction.java	(revision 4138)
+++ trunk/src/org/openstreetmap/josm/actions/MergeLayerAction.java	(revision 4139)
@@ -19,7 +19,9 @@
         super(tr("Merge layer"), "dialogs/mergedown", tr("Merge the current layer into another layer"), Shortcut
                 .registerShortcut("system:merge", tr("Edit: {0}", tr("Merge")), KeyEvent.VK_M, Shortcut.GROUP_MENU),
-                true /* register */
+                false /* register */
         );
         putValue("help", ht("/Action/MergeLayer"));
+        putValue("toolbar", "action/mergelayer");
+        Main.toolbar.register(this);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/MoveAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/MoveAction.java	(revision 4138)
+++ trunk/src/org/openstreetmap/josm/actions/MoveAction.java	(revision 4139)
@@ -32,32 +32,49 @@
 
     // any better idea?
-    private static Object calltosupermustbefirststatementinconstructor(Direction dir, boolean text) {
-        Shortcut sc;
+    private static String calltosupermustbefirststatementinconstructor_text(Direction dir) {
         String directiontext;
         if        (dir == Direction.UP)   {
             directiontext = tr("up");
-            sc = Shortcut.registerShortcut("core:moveup",    tr("Move objects {0}", directiontext), KeyEvent.VK_UP,    Shortcut.GROUPS_ALT1+Shortcut.GROUP_DIRECT);
         } else if (dir == Direction.DOWN)  {
             directiontext = tr("down");
-            sc = Shortcut.registerShortcut("core:movedown",  tr("Move objects {0}", directiontext), KeyEvent.VK_DOWN,  Shortcut.GROUPS_ALT1+Shortcut.GROUP_DIRECT);
         } else if (dir == Direction.LEFT)  {
             directiontext = tr("left");
-            sc = Shortcut.registerShortcut("core:moveleft",  tr("Move objects {0}", directiontext), KeyEvent.VK_LEFT,  Shortcut.GROUPS_ALT1+Shortcut.GROUP_DIRECT);
         } else { //dir == Direction.RIGHT) {
             directiontext = tr("right");
-            sc = Shortcut.registerShortcut("core:moveright", tr("Move objects {0}", directiontext), KeyEvent.VK_RIGHT, Shortcut.GROUPS_ALT1+Shortcut.GROUP_DIRECT);
         }
-        if (text)
-            return directiontext;
-        else
-            return sc;
+        return directiontext;
+    }
+
+    // any better idea?
+    private static Shortcut calltosupermustbefirststatementinconstructor(Direction dir) {
+        Shortcut sc;
+        if        (dir == Direction.UP)   {
+            sc = Shortcut.registerShortcut("core:moveup",    tr("Move objects {0}", tr("up")), KeyEvent.VK_UP,    Shortcut.GROUPS_ALT1+Shortcut.GROUP_DIRECT);
+        } else if (dir == Direction.DOWN)  {
+            sc = Shortcut.registerShortcut("core:movedown",  tr("Move objects {0}", tr("down")), KeyEvent.VK_DOWN,  Shortcut.GROUPS_ALT1+Shortcut.GROUP_DIRECT);
+        } else if (dir == Direction.LEFT)  {
+            sc = Shortcut.registerShortcut("core:moveleft",  tr("Move objects {0}", tr("left")), KeyEvent.VK_LEFT,  Shortcut.GROUPS_ALT1+Shortcut.GROUP_DIRECT);
+        } else { //dir == Direction.RIGHT) {
+            sc = Shortcut.registerShortcut("core:moveright", tr("Move objects {0}", tr("right")), KeyEvent.VK_RIGHT, Shortcut.GROUPS_ALT1+Shortcut.GROUP_DIRECT);
+        }
+        return sc;
     }
 
     public MoveAction(Direction dir) {
-        super(tr("Move {0}", calltosupermustbefirststatementinconstructor(dir, true)), null,
-                tr("Moves Objects {0}", calltosupermustbefirststatementinconstructor(dir, true)),
-                (Shortcut)calltosupermustbefirststatementinconstructor(dir, false), true);
+        super(tr("Move {0}", calltosupermustbefirststatementinconstructor_text(dir)), null,
+                tr("Moves Objects {0}", calltosupermustbefirststatementinconstructor_text(dir)),
+                calltosupermustbefirststatementinconstructor(dir), false);
         myDirection = dir;
         putValue("help", ht("/Action/Move"));
+        if        (dir == Direction.UP)   {
+            putValue("toolbar", "action/move/up");
+        } else if (dir == Direction.DOWN)  {
+            putValue("toolbar", "action/move/down");
+        } else if (dir == Direction.LEFT)  {
+            putValue("toolbar", "action/move/left");
+        } else { //dir == Direction.RIGHT) {
+            putValue("toolbar", "action/move/right");
+        }
+        Main.toolbar.register(this);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java	(revision 4138)
+++ trunk/src/org/openstreetmap/josm/actions/OrthogonalizeAction.java	(revision 4139)
@@ -81,5 +81,7 @@
                     Shortcut.registerShortcut("tools:orthogonalizeUndo", tr("Tool: {0}", tr("Orthogonalize Shape / Undo")),
                             KeyEvent.VK_Q,
-                            Shortcut.GROUP_EDIT, Shortcut.SHIFT_DEFAULT), true);
+                            Shortcut.GROUP_EDIT, Shortcut.SHIFT_DEFAULT), false);
+            putValue("toolbar", "action/orthogonalize/undo");
+            Main.toolbar.register(this);
         }
         public void actionPerformed(ActionEvent e) {
Index: trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java	(revision 4138)
+++ trunk/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java	(revision 4139)
@@ -44,4 +44,5 @@
 
         putValue("help", ht("/Action/ShowStatusReport"));
+        putValue("toolbar", "help/showstatusreport");
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/WireframeToggleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/WireframeToggleAction.java	(revision 4138)
+++ trunk/src/org/openstreetmap/josm/actions/WireframeToggleAction.java	(revision 4139)
@@ -20,6 +20,8 @@
                 tr("Enable/disable rendering the map as wireframe only"),
                 Shortcut.registerShortcut("menu:view:wireframe", tr("Toggle Wireframe view"),KeyEvent.VK_W, Shortcut.GROUP_MENU),
-                true /* register shortcut */
+                false /* register toolbar */
         );
+        putValue("toolbar", "wireframe");
+        Main.toolbar.register(this);
         putValue(SELECTED_KEY, MapRendererFactory.getInstance().isWireframeMapRendererActive());
     }
Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 4138)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 4139)
@@ -252,4 +252,6 @@
             // Main.debug("Main window not maximized");
         }
+        if(main.menu.fullscreenToggleAction != null)
+            main.menu.fullscreenToggleAction.initial();
 
         SwingUtilities.invokeLater(new Runnable() {
Index: trunk/src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 4138)
+++ trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 4139)
@@ -196,5 +196,5 @@
 
     public final TaggingPresetSearchAction presetSearchAction = new TaggingPresetSearchAction();
-
+    public FullscreenToggleAction fullscreenToggleAction = null;
     /**
      * Add a JosmAction to a menu.
@@ -304,5 +304,5 @@
         if(!Main.applet) {
             // -- fullscreen toggle action
-            FullscreenToggleAction fullscreenToggleAction = new FullscreenToggleAction();
+            fullscreenToggleAction = new FullscreenToggleAction();
             if (fullscreenToggleAction.canFullscreen()) {
                 final JCheckBoxMenuItem fullscreen = new JCheckBoxMenuItem(fullscreenToggleAction);
Index: trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 4138)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 4139)
@@ -243,5 +243,8 @@
             result.setLength(0);
 
-            escape((String) action.getAction().getValue("toolbar"));
+            String val = (String) action.getAction().getValue("toolbar");
+            if(val == null)
+                return null;
+            escape(val);
             if (action.getAction() instanceof ParameterizedAction) {
                 result.append('(');
@@ -753,5 +756,7 @@
                     t.add("|");
                 } else {
-                    t.add(parser.saveAction(action));
+                    String res = parser.saveAction(action);
+                    if(res != null)
+                        t.add(res);
                 }
             }
@@ -783,5 +788,16 @@
                     Action action = menuItem.getAction();
                     userObject = action;
-                    actions.put((String) action.getValue("toolbar"), action);
+                    String toolbar = (String) action.getValue("toolbar");
+                    if(toolbar == null) {
+                        System.out.println(tr("Toolbar action without name: {0}",
+                        action.getClass().getName()));
+                    } else {
+                        Action r = actions.get(toolbar);
+                        if(r != null &&  r != action) {
+                            System.out.println(tr("Toolbar action {0} overwritten: {1} gets {2}",
+                            toolbar, r.getClass().getName(), action.getClass().getName()));
+                        }
+                    }
+                    actions.put(toolbar, action);
                 } else {
                     userObject = menuItem.getText();
@@ -862,5 +878,16 @@
      */
     public Action register(Action action) {
-        regactions.put((String) action.getValue("toolbar"), action);
+        String toolbar = (String) action.getValue("toolbar");
+        if(toolbar == null) {
+            System.out.println(tr("Registered toolbar action without name: {0}",
+            action.getClass().getName()));
+        } else {
+            Action r = regactions.get(toolbar);
+            if(r != null) {
+                System.out.println(tr("Registered toolbar action {0} overwritten: {1} gets {2}",
+                toolbar, r.getClass().getName(), action.getClass().getName()));
+            }
+        }
+        regactions.put(toolbar, action);
         return action;
     }
