Index: src/org/openstreetmap/josm/actions/FullscreenToggleAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/FullscreenToggleAction.java	(revision 0)
+++ src/org/openstreetmap/josm/actions/FullscreenToggleAction.java	(revision 0)
@@ -0,0 +1,107 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.actions;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.ButtonModel;
+
+/* For enabling fullscreen */
+import java.awt.Frame;
+import java.awt.GraphicsDevice;
+import java.awt.GraphicsEnvironment;
+import org.openstreetmap.josm.tools.PlatformHookUnixoid;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.tools.Shortcut;
+
+public class FullscreenToggleAction extends JosmAction {
+    private final List<ButtonModel> buttonModels = new ArrayList<ButtonModel>();
+    //FIXME: replace with property Action.SELECTED_KEY when migrating to
+    // Java 6
+    private boolean selected;
+    private GraphicsDevice gd;
+    public FullscreenToggleAction() {
+        super(
+                tr("Fullscreen View"),
+                null, /* no icon */
+                tr("Toggle fullscreen view"),
+                Shortcut.registerShortcut("menu:view:fullscreen", tr("Toggle Fullscreen view"),KeyEvent.VK_F11, Shortcut.GROUP_DIRECT),
+                true /* register shortcut */
+        );
+        gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
+        selected = Main.pref.getBoolean("draw.fullscreen", false);
+        notifySelectedState();
+    }
+
+    public boolean canFullscreen() {
+        /* We only support fullscreen, see
+         * http://lists.openstreetmap.org/pipermail/josm-dev/2009-March/002659.html
+         * for why
+         */
+        return Main.platform instanceof PlatformHookUnixoid && gd.isFullScreenSupported();
+    }
+         /*
+            final JCheckBoxMenuItem fullscreen = new JCheckBoxMenuItem(tr("Full Screen"));
+            fullscreen.setSelected(Main.pref.getBoolean("draw.fullscreen", false));
+            fullscreen.setAccelerator(Shortcut.registerShortcut("menu:view:fullscreen", tr("Toggle Full Screen view"),
+                    KeyEvent.VK_F11, Shortcut.GROUP_DIRECT).getKeyStroke());
+
+            fullscreen.addActionListener(new ActionListener() {
+                public void actionPerformed(ActionEvent ev) {
+                    Main.pref.put("draw.fullscreen", fullscreen.isSelected());
+
+                    if (Main.pref.getBoolean("draw.fullscreen")) {
+                        Frame frame = (Frame)Main.parent;
+                        gd.setFullScreenWindow(frame);
+                    } else {
+                        gd.setFullScreenWindow(null);
+                    }
+                }
+            });
+            viewMenu.addSeparator();
+            viewMenu.add(fullscreen);
+        }
+        */
+
+    public void addButtonModel(ButtonModel model) {
+        if (model != null && !buttonModels.contains(model)) {
+            buttonModels.add(model);
+        }
+    }
+
+    public void removeButtonModel(ButtonModel model) {
+        if (model != null && buttonModels.contains(model)) {
+            buttonModels.remove(model);
+        }
+    }
+
+    protected void notifySelectedState() {
+        for (ButtonModel model: buttonModels) {
+            if (model.isSelected() != selected) {
+                model.setSelected(selected);
+            }
+        }
+    }
+
+    protected void toggleSelectedState() {
+        selected = !selected;
+        Main.pref.put("draw.fullscreen", selected);
+        notifySelectedState();
+
+        if (selected) {
+            Frame frame = (Frame)Main.parent;
+            gd.setFullScreenWindow(frame);
+        } else {
+            gd.setFullScreenWindow(null);
+        }
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        toggleSelectedState();
+    }
+}
Index: src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- src/org/openstreetmap/josm/gui/MainMenu.java	(revision 2530)
+++ src/org/openstreetmap/josm/gui/MainMenu.java	(working copy)
@@ -6,9 +6,6 @@
 import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.awt.Frame;
-import java.awt.GraphicsDevice;
-import java.awt.GraphicsEnvironment;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
@@ -68,6 +65,7 @@
 import org.openstreetmap.josm.actions.UploadAction;
 import org.openstreetmap.josm.actions.UploadSelectionAction;
 import org.openstreetmap.josm.actions.WireframeToggleAction;
+import org.openstreetmap.josm.actions.FullscreenToggleAction;
 import org.openstreetmap.josm.actions.ZoomInAction;
 import org.openstreetmap.josm.actions.ZoomOutAction;
 import org.openstreetmap.josm.actions.audio.AudioBackAction;
@@ -80,7 +78,6 @@
 import org.openstreetmap.josm.actions.search.SearchAction;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
-import org.openstreetmap.josm.tools.PlatformHookUnixoid;
 import org.openstreetmap.josm.tools.Shortcut;
 /**
  * This is the JOSM main menu bar. It is overwritten to initialize itself and provide all menu
@@ -253,31 +250,14 @@
             add(viewMenu, autoScaleAction);
         }
 
-        //
-        // Full Screen action
-        //
-        final GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
-
-        if (Main.platform instanceof PlatformHookUnixoid && gd.isFullScreenSupported()) {
-            final JCheckBoxMenuItem fullscreen = new JCheckBoxMenuItem(tr("Full Screen"));
-            fullscreen.setSelected(Main.pref.getBoolean("draw.fullscreen", false));
-            fullscreen.setAccelerator(Shortcut.registerShortcut("menu:view:fullscreen", tr("Toggle Full Screen view"),
-                    KeyEvent.VK_F11, Shortcut.GROUP_DIRECT).getKeyStroke());
-
-            fullscreen.addActionListener(new ActionListener() {
-                public void actionPerformed(ActionEvent ev) {
-                    Main.pref.put("draw.fullscreen", fullscreen.isSelected());
-
-                    if (Main.pref.getBoolean("draw.fullscreen")) {
-                        Frame frame = (Frame)Main.parent;
-                        gd.setFullScreenWindow(frame);
-                    } else {
-                        gd.setFullScreenWindow(null);
-                    }
-                }
-            });
+        // -- fullscreen toggle action
+        FullscreenToggleAction fullscreenToggleAction = new FullscreenToggleAction();
+        if (fullscreenToggleAction.canFullscreen()) {
+            final JCheckBoxMenuItem fullscreen = new JCheckBoxMenuItem(fullscreenToggleAction);
             viewMenu.addSeparator();
             viewMenu.add(fullscreen);
+            fullscreen.setAccelerator(fullscreenToggleAction.getShortcut().getKeyStroke());
+            fullscreenToggleAction.addButtonModel(fullscreen.getModel());
         }
 
         add(toolsMenu, splitWay);
