Index: trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 15654)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 15655)
@@ -28,5 +28,4 @@
 import javax.swing.AbstractAction;
 import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
 import javax.swing.SwingUtilities;
@@ -61,5 +60,4 @@
 import org.openstreetmap.josm.gui.MapViewState.MapViewPoint;
 import org.openstreetmap.josm.gui.NavigatableComponent;
-import org.openstreetmap.josm.gui.WindowMenu;
 import org.openstreetmap.josm.gui.draw.MapPath2D;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -189,11 +187,5 @@
     private JCheckBoxMenuItem addMenuItem() {
         int n = MainApplication.getMenu().editMenu.getItemCount();
-        for (int i = n-1; i > 0; i--) {
-            JMenuItem item = MainApplication.getMenu().editMenu.getItem(i);
-            if (item != null && item.getAction() != null && item.getAction() instanceof SnapChangeAction) {
-                MainApplication.getMenu().editMenu.remove(i);
-            }
-        }
-        return MainMenu.addWithCheckbox(MainApplication.getMenu().editMenu, snapChangeAction, WindowMenu.WINDOW_MENU_GROUP.VOLATILE);
+        return MainMenu.addWithCheckbox(MainApplication.getMenu().editMenu, snapChangeAction, n-5, false);
     }
 
@@ -1376,4 +1368,5 @@
         super.destroy();
         finishDrawing();
+        MainApplication.getMenu().editMenu.remove(snapCheckboxMenuItem);
         snapChangeAction.destroy();
     }
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 15654)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 15655)
@@ -27,5 +27,4 @@
 
 import javax.swing.JCheckBoxMenuItem;
-import javax.swing.JMenuItem;
 
 import org.openstreetmap.josm.actions.JosmAction;
@@ -51,5 +50,4 @@
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapView;
-import org.openstreetmap.josm.gui.WindowMenu;
 import org.openstreetmap.josm.gui.draw.MapViewPath;
 import org.openstreetmap.josm.gui.draw.SymbolShape;
@@ -241,4 +239,5 @@
     public void destroy() {
         super.destroy();
+        MainApplication.getMenu().editMenu.remove(dualAlignCheckboxMenuItem);
         dualAlignChangeAction.destroy();
     }
@@ -246,11 +245,5 @@
     private JCheckBoxMenuItem addDualAlignMenuItem() {
         int n = MainApplication.getMenu().editMenu.getItemCount();
-        for (int i = n-1; i > 0; i--) {
-            JMenuItem item = MainApplication.getMenu().editMenu.getItem(i);
-            if (item != null && item.getAction() != null && item.getAction() instanceof DualAlignChangeAction) {
-                MainApplication.getMenu().editMenu.remove(i);
-            }
-        }
-        return MainMenu.addWithCheckbox(MainApplication.getMenu().editMenu, dualAlignChangeAction, WindowMenu.WINDOW_MENU_GROUP.VOLATILE);
+        return MainMenu.addWithCheckbox(MainApplication.getMenu().editMenu, dualAlignChangeAction, n-5, false);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 15654)
+++ trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 15655)
@@ -145,4 +145,17 @@
 public class MainMenu extends JMenuBar {
 
+    /**
+     * The possible item groups of the Windows menu.
+     * @see MainMenu#addWithCheckbox
+     */
+    public enum WINDOW_MENU_GROUP {
+        /** Entries always displayed, at the top */
+        ALWAYS,
+        /** Entries displayed only for visible toggle dialogs */
+        TOGGLE_DIALOG,
+        /** Volatile entries displayed at the end */
+        VOLATILE
+    }
+
     /* File menu */
     /** File / New Layer **/
@@ -556,6 +569,5 @@
      * @param menu to add the action to
      * @param action the action that should get a menu item
-     * @param group the item should be added to. Groups are split by a separator.
-     *        0 is the first group, -1 will add the item to the end.
+     * @param group the item should be added to. Groups are split by a separator. null will add the item to the end.
      * @return The created menu item
      */
@@ -563,5 +575,5 @@
         if (action.getShortcut().isAutomatic())
             return null;
-        int i = getInsertionIndexForGroup(menu, group.ordinal(), false);
+        int i = group != null ? getInsertionIndexForGroup(menu, group.ordinal(), false) : -1;
         JMenuItem menuitem = (JMenuItem) menu.add(new JMenuItem(action), i);
         KeyStroke ks = action.getShortcut().getKeyStroke();
@@ -595,5 +607,5 @@
      * @param group the item should be added to. Groups are split by a separator. Use
      *        one of the enums that are defined for some of the menus to tell in which
-     *        group the item should go.
+     *        group the item should go. null will add the item to the end.
      * @param isEntryExpert whether the entry should only be visible if the expert mode is activated
      * @param isGroupSeparatorExpert whether the group separator should only be visible if the expert mode is activated
@@ -603,5 +615,20 @@
     public static <E extends Enum<E>> JCheckBoxMenuItem addWithCheckbox(JMenu menu, JosmAction action, Enum<E> group,
             boolean isEntryExpert, boolean isGroupSeparatorExpert) {
-        int i = getInsertionIndexForGroup(menu, group.ordinal(), isGroupSeparatorExpert);
+        int i = group != null ? getInsertionIndexForGroup(menu, group.ordinal(), isGroupSeparatorExpert) : -1;
+        return addWithCheckbox(menu, action, i, isEntryExpert);
+    }
+
+    /**
+     * Add a JosmAction to a menu and automatically prints accelerator if available.
+     * Also adds a checkbox that may be toggled.
+     * @param <E> group enum item type
+     * @param menu to add the action to
+     * @param action the action that should get a menu item
+     * @param i the item position in the menu. -1 will add the item to the end.
+     * @param isEntryExpert whether the entry should only be visible if the expert mode is activated
+     * @return The created menu item
+     * @since 15655
+     */
+    public static <E extends Enum<E>> JCheckBoxMenuItem addWithCheckbox(JMenu menu, JosmAction action, int i, boolean isEntryExpert) {
         final JCheckBoxMenuItem mi = new JCheckBoxMenuItem(action);
         final KeyStroke ks = action.getShortcut().getKeyStroke();
@@ -855,5 +882,5 @@
         // -- changeset manager toggle action
         final JCheckBoxMenuItem mi = MainMenu.addWithCheckbox(windowMenu, changesetManager,
-                WindowMenu.WINDOW_MENU_GROUP.ALWAYS, true, false);
+                WINDOW_MENU_GROUP.ALWAYS, true, false);
         changesetManager.addButtonModel(mi.getModel());
 
Index: trunk/src/org/openstreetmap/josm/gui/WindowMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/WindowMenu.java	(revision 15654)
+++ trunk/src/org/openstreetmap/josm/gui/WindowMenu.java	(revision 15655)
@@ -18,17 +18,4 @@
  */
 public class WindowMenu extends JMenu implements ContainerListener, ExpertModeChangeListener {
-
-    /**
-     * The possible item groups of the Windows menu.
-     * @see MainMenu#addWithCheckbox
-     */
-    public enum WINDOW_MENU_GROUP {
-        /** Entries always displayed, at the top */
-        ALWAYS,
-        /** Entries displayed only for visible toggle dialogs */
-        TOGGLE_DIALOG,
-        /** Volatile entries displayed at the end */
-        VOLATILE
-    }
 
     /**
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 15654)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 15655)
@@ -54,5 +54,4 @@
 import org.openstreetmap.josm.gui.ShowHideButtonListener;
 import org.openstreetmap.josm.gui.SideButton;
-import org.openstreetmap.josm.gui.WindowMenu;
 import org.openstreetmap.josm.gui.dialogs.DialogsPanel.Action;
 import org.openstreetmap.josm.gui.help.HelpUtil;
@@ -286,5 +285,5 @@
         windowMenuItem = MainMenu.addWithCheckbox(MainApplication.getMenu().windowMenu,
                 (JosmAction) getToggleAction(),
-                WindowMenu.WINDOW_MENU_GROUP.TOGGLE_DIALOG, isExpert, true);
+                MainMenu.WINDOW_MENU_GROUP.TOGGLE_DIALOG, isExpert, true);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 15654)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 15655)
@@ -60,5 +60,4 @@
 import org.openstreetmap.josm.gui.MainMenu;
 import org.openstreetmap.josm.gui.ScrollViewport;
-import org.openstreetmap.josm.gui.WindowMenu;
 import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
 import org.openstreetmap.josm.gui.dialogs.relation.actions.AbstractRelationEditorAction;
@@ -766,5 +765,5 @@
         };
         focusAction.putValue("relationEditor", re);
-        return MainMenu.add(MainApplication.getMenu().windowMenu, focusAction, WindowMenu.WINDOW_MENU_GROUP.VOLATILE);
+        return MainMenu.add(MainApplication.getMenu().windowMenu, focusAction, MainMenu.WINDOW_MENU_GROUP.VOLATILE);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/help/HelpBrowser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/help/HelpBrowser.java	(revision 15654)
+++ trunk/src/org/openstreetmap/josm/gui/help/HelpBrowser.java	(revision 15655)
@@ -37,5 +37,4 @@
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MainMenu;
-import org.openstreetmap.josm.gui.WindowMenu;
 import org.openstreetmap.josm.gui.util.WindowGeometry;
 import org.openstreetmap.josm.gui.widgets.JosmEditorPane;
@@ -215,5 +214,5 @@
             }
             if (windowMenuItem == null && visible) {
-                windowMenuItem = MainMenu.add(menu.windowMenu, FOCUS_ACTION, WindowMenu.WINDOW_MENU_GROUP.VOLATILE);
+                windowMenuItem = MainMenu.add(menu.windowMenu, FOCUS_ACTION, MainMenu.WINDOW_MENU_GROUP.VOLATILE);
             }
         }
