Index: trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 6607)
+++ trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 6608)
@@ -239,8 +239,10 @@
                 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 up to 100% to give more context.
+            v.enlargeBoundingBoxLogarithmically(100);
+            // Make the bounding box at least 0.0005 degrees (≈ 56 m) wide to
+            // ensure reasonable zoom level when zooming onto single nodes.
+            v.enlargeToMinDegrees(0.0005);
         }
         else if (mode.equals("download")) {
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(revision 6607)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(revision 6608)
@@ -123,4 +123,68 @@
     }
 
+    /**
+     * Enlarges the bounding box up to <code>maxEnlargePercent</code>, depending on
+     * its size. If the bounding box is small, it will be enlarged more in relation
+     * to its beginning size. The larger the bounding box, the smaller the change,
+     * down to the minimum of 1% enlargement.
+     * 
+     * Warning: if the bounding box only contains a single node, no expansion takes
+     * place because a node has no width/height. Use <code>enlargeToMinDegrees</code>
+     * instead.
+     * 
+     * Example: You specify enlargement to be up to 100%.
+     * 
+     *          Bounding box is a small house: enlargement will be 95–100%, i.e.
+     *          making enough space so that the house fits twice on the screen in
+     *          each direction.
+     * 
+     *          Bounding box is a large landuse, like a forest: Enlargement will
+     *          be 1–10%, i.e. just add a little border around the landuse.
+     * 
+     * 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 maxEnlargePercent
+     */
+    public void enlargeBoundingBoxLogarithmically(double maxEnlargePercent) {
+        if (bounds == null)
+            return;
+
+        double diffEast = bounds.getMax().east() - bounds.getMin().east();
+        double diffNorth = bounds.getMax().north() - bounds.getMin().north();
+
+        double enlargeEast = Math.min(maxEnlargePercent - 10*Math.log(diffEast), 1)/100;
+        double enlargeNorth = Math.min(maxEnlargePercent - 10*Math.log(diffNorth), 1)/100;
+        System.out.println(enlargeEast);
+
+        visit(bounds.getMin().add(-enlargeEast/2, -enlargeNorth/2));
+        visit(bounds.getMax().add(+enlargeEast/2, +enlargeNorth/2));
+    }
+
+
+    /**
+     * Specify a degree larger than 0 in order to make the bounding box at least
+     * the specified amount of degrees high and wide. 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.
+     * 
+     * If the bounding box contains objects and is to be enlarged, the objects
+     * will be centered within the new bounding box.
+     * 
+     * @param minDegrees
+     */
+    public void enlargeToMinDegrees(double minDegrees) {
+        if (bounds == null)
+            return;
+
+        EastNorth minEnlarge = Main.getProjection().latlon2eastNorth(new LatLon(0, minDegrees));
+
+        visit(bounds.getMin().add(-minEnlarge.east()/2, -minEnlarge.north()/2));
+        visit(bounds.getMax().add(+minEnlarge.east()/2, +minEnlarge.north()/2));
+    }
+
+
     @Override public String toString() {
         return "BoundingXYVisitor["+bounds+"]";
