Index: DrawAction.java
===================================================================
--- DrawAction.java	(revision 4776)
+++ DrawAction.java	(working copy)
@@ -36,6 +36,7 @@
 
 import javax.swing.SwingUtilities;
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.command.AddCommand;
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.Command;
@@ -50,6 +51,7 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.WaySegment;
 import org.openstreetmap.josm.data.osm.visitor.paint.PaintColors;
+import org.openstreetmap.josm.gui.MainMenu;
 import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -100,6 +102,20 @@
         extraShortcut = Shortcut.registerShortcut("mapmode:drawfocus", tr("Mode: Draw Focus"), KeyEvent.VK_N, Shortcut.GROUP_EDIT);
         Main.registerActionShortcut(this, extraShortcut);
 
+        MainMenu.addWithCheckbox(Main.main.menu.editMenu, new JosmAction(
+                tr("Angle snapping"), "help",
+                tr("Switches angle snapping mode while drawing"),
+                Shortcut.registerShortcut("draw:anglesnap", tr("Draw: {0}",tr("Angle snapping")),
+                KeyEvent.VK_TAB, Shortcut.GROUP_DIRECT), false) {
+                   {
+                        putValue("selected", false);
+                   }  
+                   @Override
+                    public void actionPerformed(ActionEvent e) {
+                        if (snapHelper!=null) snapHelper.nextSnapMode();
+                        putValue("selected", true);
+                    }
+                },MainMenu.WINDOW_MENU_GROUP.VOLATILE);
         cursorJoinNode = ImageProvider.getCursor("crosshair", "joinnode");
         cursorJoinWay = ImageProvider.getCursor("crosshair", "joinway");
     }
@@ -181,13 +197,13 @@
     public void eventDispatched(AWTEvent event) {
         if(Main.map == null || Main.map.mapView == null || !Main.map.mapView.isActiveLayerDrawable())
             return;
-        if (event instanceof KeyEvent) {
-                KeyEvent ke = (KeyEvent) event;
-                if (ke.getKeyCode() == KeyEvent.VK_TAB && 
-                    ke.getID()==KeyEvent.KEY_PRESSED) {
-                    snapHelper.nextSnapMode();
-                }
-        } //  toggle angle snapping
+//        if (event instanceof KeyEvent) {
+//                KeyEvent ke = (KeyEvent) event;
+//                if (ke.getKeyCode() == KeyEvent.VK_TAB && 
+//                    ke.getID()==KeyEvent.KEY_PRESSED) {
+//                    snapHelper.nextSnapMode();
+//                }
+//        } //  toggle angle snapping
         updateKeyModifiers((InputEvent) event);
         computeHelperLine();
         addHighlighting();
