Index: trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java	(revision 17593)
+++ trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java	(revision 17594)
@@ -20,4 +20,5 @@
 import java.util.stream.Collectors;
 
+import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
 import javax.swing.JOptionPane;
@@ -25,4 +26,5 @@
 import javax.swing.JScrollPane;
 
+import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.imagery.DefaultLayer;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
@@ -203,5 +205,4 @@
     private static LayerSelection askToSelectLayers(WMSImagery wms) {
         final WMSLayerTree tree = new WMSLayerTree();
-        tree.updateTree(wms);
 
         Collection<String> wmsFormats = wms.getFormats();
@@ -209,4 +210,16 @@
         formats.setSelectedItem(wms.getPreferredFormat());
         formats.setToolTipText(tr("Select image format for WMS layer"));
+
+        JCheckBox checkBounds = new JCheckBox(tr("Show only layers for current view"), true);
+        Runnable updateTree = () -> {
+            LatLon latLon = checkBounds.isSelected() && MainApplication.isDisplayingMapView()
+                    ? MainApplication.getMap().mapView.getProjection().eastNorth2latlon(MainApplication.getMap().mapView.getCenter())
+                    : null;
+            tree.setCheckBounds(latLon);
+            tree.updateTree(wms);
+            System.out.println(wms);
+        };
+        checkBounds.addActionListener(ignore -> updateTree.run());
+        updateTree.run();
 
         if (!GraphicsEnvironment.isHeadless()) {
@@ -217,4 +230,5 @@
             final JPanel panel = new JPanel(new GridBagLayout());
             panel.add(scrollPane, GBC.eol().fill());
+            panel.add(checkBounds, GBC.eol().fill(GBC.HORIZONTAL));
             panel.add(formats, GBC.eol().fill(GBC.HORIZONTAL));
             dialog.setContent(panel);
Index: trunk/src/org/openstreetmap/josm/gui/preferences/imagery/WMSLayerTree.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/imagery/WMSLayerTree.java	(revision 17593)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/imagery/WMSLayerTree.java	(revision 17594)
@@ -4,4 +4,5 @@
 import java.awt.Component;
 import java.util.Collection;
+import java.util.Comparator;
 import java.util.LinkedList;
 import java.util.List;
@@ -16,4 +17,5 @@
 import javax.swing.tree.TreePath;
 
+import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.imagery.LayerDetails;
 import org.openstreetmap.josm.io.imagery.WMSImagery;
@@ -27,4 +29,5 @@
     private final JTree layerTree = new JTree(treeData);
     private final List<LayerDetails> selectedLayers = new LinkedList<>();
+    private LatLon checkBounds = null;
 
     /**
@@ -60,7 +63,17 @@
     }
 
+    /**
+     * Set coordinate to check {@linkplain LayerDetails#getBounds() layer bounds}
+     * when {@linkplain #updateTree updating the tree}.
+     * @param checkBounds the coordinate
+     */
+    public void setCheckBounds(LatLon checkBounds) {
+        this.checkBounds = checkBounds;
+    }
+
     void addLayersToTreeData(MutableTreeNode parent, Collection<LayerDetails> layers) {
         for (LayerDetails layerDetails : layers.stream()
-                .sorted((l1, l2) -> -1 * l1.toString().compareTo(l2.toString()))
+                .filter(l -> checkBounds == null || l.getBounds() == null || l.getBounds().contains(checkBounds))
+                .sorted(Comparator.comparing(LayerDetails::toString).reversed())
                 .toArray(LayerDetails[]::new)
                 ) {
@@ -89,4 +102,5 @@
     public void updateTreeList(Collection<LayerDetails> layers) {
         addLayersToTreeData(getTreeRootNode(), layers);
+        treeData.nodeStructureChanged(getTreeRootNode());
         getLayerTree().expandRow(0);
         getLayerTree().expandRow(1);
