Index: src/org/openstreetmap/josm/actions/AutoScaleAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/AutoScaleAction.java	(revision 14726)
+++ src/org/openstreetmap/josm/actions/AutoScaleAction.java	(working copy)
@@ -163,10 +163,6 @@
     public static void zoomTo(Collection<? extends IPrimitive> sel) {
         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);
         }
@@ -395,17 +391,7 @@
             return;
         }
 
-        // 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);
     }
 
     private void modeDownload(BoundingXYVisitor v) {
Index: src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(revision 14726)
+++ src/org/openstreetmap/josm/data/osm/visitor/BoundingXYVisitor.java	(working copy)
@@ -27,6 +27,8 @@
  * @author imi
  */
 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;
 
@@ -139,12 +141,13 @@
     }
 
     /**
-     * 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);
     }
 
@@ -170,8 +173,8 @@
     }
 
     /**
-     * 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.
      *
@@ -187,12 +190,18 @@
         final LatLon max = ProjectionRegistry.getProjection().eastNorth2latlon(bounds.getMax());
         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: src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 14726)
+++ src/org/openstreetmap/josm/gui/NavigatableComponent.java	(working copy)
@@ -810,9 +810,9 @@
     public void zoomTo(ViewportData viewport) {
         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);
         }
@@ -820,20 +820,30 @@
 
     /**
      * Set the new dimension to the view.
-     * @param box box to zoom to
+     * @param v box to zoom to
      */
-    public void zoomTo(BoundingXYVisitor box) {
-        if (box == null) {
-            box = new BoundingXYVisitor();
+    public void zoomTo(BoundingXYVisitor v) {
+        if (v == null) {
+            v = new BoundingXYVisitor();
         }
-        if (box.getBounds() == null) {
-            box.visit(getProjection().getWorldBoundsLatLon());
+        if (v.getBounds() == null) {
+            v.visit(getProjection().getWorldBoundsLatLon());
         }
-        if (!box.hasExtend()) {
-            box.enlargeBoundingBox();
+
+        // 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());
         }
-
-        zoomTo(box.getBounds());
     }
 
     private static class ZoomData {
Index: src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 14726)
+++ src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(working copy)
@@ -432,14 +432,13 @@
 
         @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);
         }
 
         protected void updateEnabledState() {
