Index: src/org/openstreetmap/josm/actions/AutoScaleAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 6592)
+++ src/org/openstreetmap/josm/actions/AutoScaleAction.java	(working copy)
@@ -238,10 +238,11 @@
             for (OsmPrimitive osm : sel) {
                 osm.accept(v);
             }
-            // increase bbox by 0.001 degrees on each side. this is required
-            // especially if the bbox contains one single node, but helpful
-            // in most other cases as well.
-            v.enlargeBoundingBox();
+
+            // Increase the bounding box by 100% to give more context. Make the bounding box
+            // at least 0.0007 degrees wide to ensure reasonable zoom level when zooming onto
+            // single nodes.
+            v.enlargeBoundingBoxByPercent(100, 0.0007);
         }
         else if (mode.equals("download")) {
             Bounds bounds = DownloadDialog.getSavedDownloadBounds();
Index: src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(revision 6592)
+++ src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(working copy)
@@ -122,6 +122,50 @@
                 Main.getProjection().latlon2eastNorth(new LatLon(maxLatlon.lat() + enlargeDegree, maxLatlon.lon() + enlargeDegree)));
     }
 
+    /**
+     * Enlarges the calculated bounding box by the specified percentage. A factor
+     * of 100 means that the bounding box will be twice as large.
+     * 
+     * Specify a degree larger than 0 in order to make the bounding box at least
+     * the specified amount of degrees high and wide. The minimum is applied after
+     * enlarging the bounding box by percentage. The value is ignored if the
+     * bounding box is already larger than the specified amount.
+     * 
+     * If the bounding box has not been set (<code>min</code> or <code>max</code>
+     * equal <code>null</code>) this method does not do anything.
+     * 
+     * @param enlargePercent
+     * @param minEnlargeEastNorth
+     */
+    public void enlargeBoundingBoxByPercent(double enlargePercent, double minDegree) {
+        if (bounds == null)
+            return;
+
+        double diffEast = (bounds.getMax().east() - bounds.getMin().east()) * enlargePercent/100;
+        double diffNorth = (bounds.getMax().north() - bounds.getMin().north()) * enlargePercent/100;
+
+        EastNorth minEnlarge = Main.getProjection().latlon2eastNorth(new LatLon(0, minDegree));
+        diffEast = Math.max(diffEast, minEnlarge.east());
+        diffNorth = Math.max(diffNorth, minEnlarge.north());
+
+        visit(bounds.getMin().add(-diffEast/2, -diffNorth/2));
+        visit(bounds.getMax().add(+diffEast/2, +diffNorth/2));
+    }
+
+    /**
+     * Enlarges the calculated bounding box by the specified percentage. A factor
+     * of 100 means that the bounding box will be twice as large.
+     * 
+     * If the bounding box has not been set (<code>min</code> or <code>max</code>
+     * equal <code>null</code>) this method does not do anything.
+     * 
+     * @param enlargePercent
+     */
+    public void enlargeBoundingBoxByPercent(double enlargePercent) {
+        enlargeBoundingBoxByPercent(enlargePercent, 0);
+    }
+
+
     @Override public String toString() {
         return "BoundingXYVisitor["+bounds+"]";
     }
