Index: trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 14732)
+++ trunk/src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 14734)
@@ -164,8 +164,4 @@
         BoundingXYVisitor bboxCalculator = new BoundingXYVisitor();
         bboxCalculator.computeBoundingBox(sel);
-        // increase bbox. This is required
-        // especially if the bbox contains one single node, but helpful
-        // in most other cases as well.
-        bboxCalculator.enlargeBoundingBox();
         if (bboxCalculator.getBounds() != null) {
             MainApplication.getMap().mapView.zoomTo(bboxCalculator);
@@ -396,15 +392,5 @@
         }
 
-        // Do not zoom if the current scale covers the selection, #16706
-        final MapView mapView = MainApplication.getMap().mapView;
-        final double mapScale = mapView.getScale();
-        final double minScale = v.getBounds().getScale(mapView.getWidth(), mapView.getHeight());
-        v.enlargeBoundingBoxLogarithmically();
-        final double maxScale = v.getBounds().getScale(mapView.getWidth(), mapView.getHeight());
-        if (minScale <= mapScale && mapScale < maxScale) {
-            mapView.zoomTo(v.getBounds().getCenter());
-        } else {
-            mapView.zoomTo(v);
-        }
+        MainApplication.getMap().mapView.zoomTo(v);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(revision 14732)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(revision 14734)
@@ -28,4 +28,6 @@
  */
 public class BoundingXYVisitor implements OsmPrimitiveVisitor, PrimitiveVisitor {
+    /** default value for setting "edit.zoom-enlarge-bbox" */
+    private static final double ENLARGE_DEFAULT = 0.0002;
 
     private ProjectionBounds bounds;
@@ -140,10 +142,11 @@
 
     /**
-     * Enlarges the calculated bounding box by 0.001 degrees.
+     * Enlarges the calculated bounding box by 0.0002 degrees or user value
+     * given in edit.zoom-enlarge-bbox.
      * 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.
      */
     public void enlargeBoundingBox() {
-        final double enlarge = Config.getPref().getDouble("edit.zoom-enlarge-bbox", 0.001);
+        final double enlarge = Config.getPref().getDouble("edit.zoom-enlarge-bbox", ENLARGE_DEFAULT);
         enlargeBoundingBox(enlarge, enlarge);
     }
@@ -171,6 +174,6 @@
 
     /**
-     * Enlarges the bounding box up to 0.001 degrees, depending on
-     * its size. If the bounding box is small, it will be enlarged more in relation
+     * Enlarges the bounding box up to 0.0002 degrees, depending on its size and user
+     * settings in edit.zoom-enlarge-bbox. 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 0.0 degrees.
@@ -188,10 +191,16 @@
         final double deltaLat = max.lat() - min.lat();
         final double deltaLon = max.lon() - min.lon();
-        // [0.001, 0.1] degree -> [0.001, 0.0] degree enlargement
-        final DoubleUnaryOperator enlargement = deg -> deg < 0.001
-                ? 0.001
-                : deg < 0.1
-                ? 0.001 - deg / 100
-                : 0.0;
+        final double enlarge = Config.getPref().getDouble("edit.zoom-enlarge-bbox", ENLARGE_DEFAULT);
+
+        final DoubleUnaryOperator enlargement = deltaDegress -> {
+            if (deltaDegress < enlarge) {
+                // delta is very small, use configured minimum value
+                return enlarge;
+            }
+            if (deltaDegress < 0.1) {
+                return enlarge - deltaDegress / 100;
+            }
+            return 0.0;
+        };
         enlargeBoundingBox(enlargement.applyAsDouble(deltaLon), enlargement.applyAsDouble(deltaLat));
     }
Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 14732)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 14734)
@@ -811,7 +811,7 @@
         if (viewport == null) return;
         if (viewport.getBounds() != null) {
-            BoundingXYVisitor box = new BoundingXYVisitor();
-            box.visit(viewport.getBounds());
-            zoomTo(box);
+            BoundingXYVisitor v = new BoundingXYVisitor();
+            v.visit(viewport.getBounds());
+            zoomTo(v);
         } else {
             zoomTo(viewport.getCenter(), viewport.getScale(), true);
@@ -821,18 +821,28 @@
     /**
      * Set the new dimension to the view.
-     * @param box box to zoom to
-     */
-    public void zoomTo(BoundingXYVisitor box) {
-        if (box == null) {
-            box = new BoundingXYVisitor();
-        }
-        if (box.getBounds() == null) {
-            box.visit(getProjection().getWorldBoundsLatLon());
-        }
-        if (!box.hasExtend()) {
-            box.enlargeBoundingBox();
-        }
-
-        zoomTo(box.getBounds());
+     * @param v box to zoom to
+     */
+    public void zoomTo(BoundingXYVisitor v) {
+        if (v == null) {
+            v = new BoundingXYVisitor();
+        }
+        if (v.getBounds() == null) {
+            v.visit(getProjection().getWorldBoundsLatLon());
+        }
+
+        // increase bbox. This is required
+        // especially if the bbox contains one single node, but helpful
+        // in most other cases as well.
+        // Do not zoom if the current scale covers the selection, #16706
+        final MapView mapView = MainApplication.getMap().mapView;
+        final double mapScale = mapView.getScale();
+        final double minScale = v.getBounds().getScale(mapView.getWidth(), mapView.getHeight());
+        v.enlargeBoundingBoxLogarithmically();
+        final double maxScale = v.getBounds().getScale(mapView.getWidth(), mapView.getHeight());
+        if (minScale <= mapScale && mapScale < maxScale) {
+            mapView.zoomTo(v.getBounds().getCenter());
+        } else {
+            zoomTo(v.getBounds());
+        }
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 14732)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 14734)
@@ -433,12 +433,11 @@
         @Override
         public void actionPerformed(ActionEvent e) {
-            BoundingXYVisitor box = new BoundingXYVisitor();
+            BoundingXYVisitor v = new BoundingXYVisitor();
             Collection<OsmPrimitive> sel = model.getSelected();
             if (sel.isEmpty()) return;
-            box.computeBoundingBox(sel);
-            if (box.getBounds() == null)
+            v.computeBoundingBox(sel);
+            if (v.getBounds() == null)
                 return;
-            box.enlargeBoundingBox();
-            MainApplication.getMap().mapView.zoomTo(box);
+            MainApplication.getMap().mapView.zoomTo(v);
         }
 
