Index: /src/org/openstreetmap/josm/actions/AutoScaleAction.java
===================================================================
--- /src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 213)
+++ /src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 214)
@@ -5,18 +5,12 @@
 
 import java.awt.event.ActionEvent;
-import java.awt.event.KeyEvent;
 import java.util.Collection;
 
-import javax.swing.AbstractAction;
-
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
-import org.openstreetmap.josm.gui.MapFrame;
 import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -24,7 +18,7 @@
  * @author imi
  */
-public class AutoScaleAction extends GroupAction {
+public class AutoScaleAction extends JosmAction {
 
-	private static final String[] modes = {
+	public static final String[] modes = {
 		marktr("data"),
 		marktr("selection"),
@@ -32,49 +26,28 @@
 		marktr("conflict")
 	};
-	private String mode = "data";
-	private final MapFrame mapFrame;
+	private final String mode;
 
-	private class Action extends AbstractAction {
-		private final String mode;
-		public Action(String mode) {
-			super(tr("Auto Scale: {0}", tr(mode)), ImageProvider.get("dialogs/autoscale/"+mode));
-			String modeHelp = Character.toUpperCase(mode.charAt(0))+mode.substring(1);
-			putValue("help", "Action/AutoScale/"+modeHelp);
-			putValue(SHORT_DESCRIPTION, tr("Auto zoom the view (to {0}. Disabled if the view is moved)", tr(mode)));
-			this.mode = mode;
-		}
-		public void actionPerformed(ActionEvent e) {
-			AutoScaleAction.this.mode = mode;
-			if (mapFrame.mapView.isAutoScale())
-            	mapFrame.mapView.recalculateCenterScale();
-            else
-            	mapFrame.mapView.setAutoScale(true);
-			putValue("active", true);
-		}
+	public AutoScaleAction(String mode) {
+		super(tr(mode), "dialogs/autoscale/"+mode, tr("Zoom the view to {0}."), 0, 0, true);
+		String modeHelp = Character.toUpperCase(mode.charAt(0))+mode.substring(1);
+		putValue("help", "Action/AutoScale/"+modeHelp);
+		this.mode = mode;
 	}
 
-	public AutoScaleAction(final MapFrame mapFrame) {
-		super(KeyEvent.VK_A, 0);
-		for (String mode : modes)
-			actions.add(new Action(mode));
-		setCurrent(0);
-		this.mapFrame = mapFrame;
-		Main.ds.listeners.add(new SelectionChangedListener(){
-			public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
-				if (mode.equals("selection"))
-					mapFrame.mapView.recalculateCenterScale();
-			}
-		});
+	public void actionPerformed(ActionEvent e) {
+		if (Main.map != null)
+			Main.map.mapView.recalculateCenterScale(getBoundingBox());
+		putValue("active", true);
 	}
 
-	public BoundingXYVisitor getBoundingBox() {
+	private BoundingXYVisitor getBoundingBox() {
 		BoundingXYVisitor v = new BoundingXYVisitor();
 		if (mode.equals("data")) {
-			for (Layer l : mapFrame.mapView.getAllLayers())
+			for (Layer l : Main.map.mapView.getAllLayers())
 				l.visitBoundingBox(v);
 		} else if (mode.equals("layer"))
-			mapFrame.mapView.getActiveLayer().visitBoundingBox(v);
+			Main.map.mapView.getActiveLayer().visitBoundingBox(v);
 		else if (mode.equals("selection") || mode.equals("conflict")) {
-			Collection<OsmPrimitive> sel = mode.equals("selection") ? Main.ds.getSelected() : mapFrame.conflictDialog.conflicts.keySet();
+			Collection<OsmPrimitive> sel = mode.equals("selection") ? Main.ds.getSelected() : Main.map.conflictDialog.conflicts.keySet();
 			for (OsmPrimitive osm : sel)
 				osm.visit(v);
Index: /src/org/openstreetmap/josm/command/ConflictResolveCommand.java
===================================================================
--- /src/org/openstreetmap/josm/command/ConflictResolveCommand.java	(revision 213)
+++ /src/org/openstreetmap/josm/command/ConflictResolveCommand.java	(revision 214)
@@ -55,5 +55,4 @@
 				conflictDialog.conflicts.remove(k);
 			conflictDialog.rebuildList();
-			Main.map.mapView.recalculateCenterScale(); // in case of auto-zoom
  		}
 	}
Index: /src/org/openstreetmap/josm/data/osm/visitor/NameVisitor.java
===================================================================
--- /src/org/openstreetmap/josm/data/osm/visitor/NameVisitor.java	(revision 213)
+++ /src/org/openstreetmap/josm/data/osm/visitor/NameVisitor.java	(revision 214)
@@ -80,5 +80,4 @@
 		if (name == null) {
 			AllNodesVisitor.getAllNodes(w.segments);
-			boolean incomplete = false;
 			Set<Node> nodes = new HashSet<Node>();
 			for (Segment ls : w.segments) {
@@ -86,11 +85,10 @@
 					nodes.add(ls.from);
 					nodes.add(ls.to);
-				} else
-					incomplete = true;
+				}
 			}
 			name = trn("{0} node", "{0} nodes", nodes.size(), nodes.size());
-			if (incomplete)
-				name += " ("+tr("incomplete")+")";
 		}
+		if (w.isIncomplete())
+			name += " ("+tr("incomplete")+")";
 		addId(w);
 		icon = ImageProvider.get("data", "way");
Index: /src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- /src/org/openstreetmap/josm/gui/MainMenu.java	(revision 213)
+++ /src/org/openstreetmap/josm/gui/MainMenu.java	(revision 214)
@@ -11,4 +11,5 @@
 import org.openstreetmap.josm.actions.AlignInCircleAction;
 import org.openstreetmap.josm.actions.AlignInLineAction;
+import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.actions.CombineWayAction;
 import org.openstreetmap.josm.actions.DownloadAction;
@@ -65,11 +66,14 @@
 	public final Action about = new AboutAction();
 	public final DownloadIncompleteAction downloadIncomplete = new DownloadIncompleteAction();
-
+	
 	public final JMenu layerMenu = new JMenu(tr("Layer"));
 	public final JMenu editMenu = new JMenu(tr("Edit"));
+	public final JMenu viewMenu = new JMenu(tr("View"));
 	public final JMenu helpMenu = new JMenu(tr("Help"));
 	public final JMenu fileMenu = new JMenu(tr("Files"));
 	public final JMenu connectionMenu = new JMenu(tr("Connection"));
 	public final JMenu toolsMenu = new JMenu(tr("Tools"));
+
+	public final JMenu zoomToMenu = new JMenu(tr("Zoom To"));
 
 
@@ -96,4 +100,11 @@
 		editMenu.add(preferences);
 		add(editMenu);
+		
+		viewMenu.setMnemonic('V');
+		viewMenu.setVisible(false);
+		viewMenu.add(zoomToMenu);
+		for (String mode : AutoScaleAction.modes)
+			zoomToMenu.add(new AutoScaleAction(mode));
+		add(viewMenu);
 
 		toolsMenu.setMnemonic('T');
Index: /src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- /src/org/openstreetmap/josm/gui/MapFrame.java	(revision 213)
+++ /src/org/openstreetmap/josm/gui/MapFrame.java	(revision 214)
@@ -4,8 +4,4 @@
 import java.awt.Component;
 import java.awt.Container;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
 
 import javax.swing.AbstractButton;
@@ -17,5 +13,4 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.actions.mapmode.AddSegmentAction;
 import org.openstreetmap.josm.actions.mapmode.AddWayAction;
@@ -81,6 +76,8 @@
 		setLayout(new BorderLayout());
 
-		final AutoScaleAction autoScaleAction = new AutoScaleAction(this);
-		add(mapView = new MapView(autoScaleAction), BorderLayout.CENTER);
+		add(mapView = new MapView(), BorderLayout.CENTER);
+
+		// show menu entry
+		Main.main.menu.viewMenu.setVisible(true);
 
 		// toolbar
@@ -98,27 +95,7 @@
 			toolGroup.add((AbstractButton)c);
 		toolGroup.setSelected(((AbstractButton)toolBarActions.getComponent(0)).getModel(), true);
-
-		// autoScale
+		
 		toolBarActions.addSeparator();
-		final IconToggleButton autoScaleButton = new IconToggleButton(autoScaleAction);
-		toolBarActions.add(autoScaleButton);
-		autoScaleButton.setText(null);
-		autoScaleButton.setSelected(mapView.isAutoScale());
-		autoScaleAction.putValue("active", true);
-		mapView.addPropertyChangeListener(new PropertyChangeListener(){
-			public void propertyChange(PropertyChangeEvent evt) {
-				if (evt.getPropertyName().equals("autoScale")) {
-					autoScaleAction.putValue("active", evt.getNewValue());
-					autoScaleButton.setSelected((Boolean)evt.getNewValue());
-				}
-			}
-		});
-		autoScaleButton.addActionListener(new ActionListener(){
-			public void actionPerformed(ActionEvent e) {
-				if (!autoScaleButton.groupbutton)
-					autoScaleButton.setSelected(true);
-			}
-		});
-
+		
 		add(toggleDialogs, BorderLayout.EAST);
 		toggleDialogs.setLayout(new BoxLayout(toggleDialogs, BoxLayout.Y_AXIS));
@@ -144,4 +121,7 @@
 			if (toolBarActions.getComponent(i) instanceof Destroyable)
 				((Destroyable)toolBarActions).destroy();
+		
+		// remove menu entries
+		Main.main.menu.viewMenu.setVisible(false);
     }
 
Index: /src/org/openstreetmap/josm/gui/MapView.java
===================================================================
--- /src/org/openstreetmap/josm/gui/MapView.java	(revision 213)
+++ /src/org/openstreetmap/josm/gui/MapView.java	(revision 214)
@@ -16,5 +16,4 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.SelectionChangedListener;
@@ -55,9 +54,4 @@
 
 	/**
-	 * Whether to adjust the scale property on every resize.
-	 */
-	private boolean autoScale = true;
-
-	/**
 	 * A list of all layers currently loaded.
 	 */
@@ -76,14 +70,12 @@
 	private Collection<LayerChangeListener> listeners = new LinkedList<LayerChangeListener>();
 
-	private final AutoScaleAction autoScaleAction;
-
-
-	public MapView(AutoScaleAction autoScaleAction) {
-		this.autoScaleAction = autoScaleAction;
+	public MapView() {
 		addComponentListener(new ComponentAdapter(){
 			@Override public void componentResized(ComponentEvent e) {
-				recalculateCenterScale();
+				recalculateCenterScale(null);
+				removeComponentListener(this);
 			}
 		});
+
 		new MapMover(this, true);
 
@@ -113,6 +105,4 @@
 			if (editLayer != null) {
 				editLayer.mergeFrom(layer);
-				if (autoScale)
-					recalculateCenterScale();
 				repaint();
 				return;
@@ -204,61 +194,37 @@
 
 	/**
-	 * @return Returns the autoScale.
-	 */
-	public boolean isAutoScale() {
-		return autoScale;
-	}
-
-	/**
-	 * @param autoScale The autoScale to set.
-	 */
-	public void setAutoScale(boolean autoScale) {
-		if (this.autoScale != autoScale) {
-			this.autoScale = autoScale;
-			firePropertyChange("autoScale", !autoScale, autoScale);
-			recalculateCenterScale();
-		}
-	}
-	/**
 	 * Set the new dimension to the projection class. Also adjust the components
 	 * scale, if in autoScale mode.
 	 */
-	public void recalculateCenterScale() {
-		if (autoScale) {
-			// -20 to leave some border
-			int w = getWidth()-20;
-			if (w < 20)
-				w = 20;
-			int h = getHeight()-20;
-			if (h < 20)
-				h = 20;
-
-			BoundingXYVisitor v = autoScaleAction.getBoundingBox();
-
-			boolean oldAutoScale = autoScale;
-			EastNorth oldCenter = center;
-			double oldScale = this.scale;
-
-			if (v.min == null || v.max == null || v.min.equals(v.max)) {
-				// no bounds means whole world
-				center = getProjection().latlon2eastNorth(new LatLon(0,0));
-				EastNorth world = getProjection().latlon2eastNorth(new LatLon(Projection.MAX_LAT,Projection.MAX_LON));
-				double scaleX = world.east()*2/w;
-				double scaleY = world.north()*2/h;
-				scale = Math.max(scaleX, scaleY); // minimum scale to see all of the screen
-			} else {
-				center = new EastNorth(v.min.east()/2+v.max.east()/2, v.min.north()/2+v.max.north()/2);
-				double scaleX = (v.max.east()-v.min.east())/w;
-				double scaleY = (v.max.north()-v.min.north())/h;
-				scale = Math.max(scaleX, scaleY); // minimum scale to see all of the screen
-			}
-
-			if (!center.equals(oldCenter))
-				firePropertyChange("center", oldCenter, center);
-			if (oldAutoScale != autoScale)
-				firePropertyChange("autoScale", oldAutoScale, autoScale);
-			if (oldScale != scale)
-				firePropertyChange("scale", oldScale, scale);
-		}
+	public void recalculateCenterScale(BoundingXYVisitor box) {
+		// -20 to leave some border
+		int w = getWidth()-20;
+		if (w < 20)
+			w = 20;
+		int h = getHeight()-20;
+		if (h < 20)
+			h = 20;
+
+		EastNorth oldCenter = center;
+		double oldScale = this.scale;
+
+		if (box == null || box.min == null || box.max == null || box.min.equals(box.max)) {
+			// no bounds means whole world
+			center = getProjection().latlon2eastNorth(new LatLon(0,0));
+			EastNorth world = getProjection().latlon2eastNorth(new LatLon(Projection.MAX_LAT,Projection.MAX_LON));
+			double scaleX = world.east()*2/w;
+			double scaleY = world.north()*2/h;
+			scale = Math.max(scaleX, scaleY); // minimum scale to see all of the screen
+		} else {
+			center = new EastNorth(box.min.east()/2+box.max.east()/2, box.min.north()/2+box.max.north()/2);
+			double scaleX = (box.max.east()-box.min.east())/w;
+			double scaleY = (box.max.north()-box.min.north())/h;
+			scale = Math.max(scaleX, scaleY); // minimum scale to see all of the screen
+		}
+
+		if (!center.equals(oldCenter))
+			firePropertyChange("center", oldCenter, center);
+		if (oldScale != scale)
+			firePropertyChange("scale", oldScale, scale);
 		repaint();
 	}
@@ -296,9 +262,7 @@
 		Layer old = activeLayer;
 		activeLayer = layer;
-		if (old != layer) {
+		if (old != layer)
 			for (LayerChangeListener l : listeners)
 				l.activeLayerChange(old, layer);
-			recalculateCenterScale();
-		}
 	}
 
@@ -315,17 +279,9 @@
 	 */
 	@Override public void zoomTo(EastNorth newCenter, double scale) {
-		boolean oldAutoScale = autoScale;
 		EastNorth oldCenter = center;
 		double oldScale = this.scale;
-		autoScale = false;
-
 		super.zoomTo(newCenter, scale);
-
-		recalculateCenterScale();
-
 		if ((oldCenter == null && center != null) || !oldCenter.equals(center))
 			firePropertyChange("center", oldCenter, center);
-		if (oldAutoScale != autoScale)
-			firePropertyChange("autoScale", oldAutoScale, autoScale);
 		if (oldScale != scale)
 			firePropertyChange("scale", oldScale, scale);
