Index: trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 15525)
+++ trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 15531)
@@ -32,4 +32,5 @@
 import org.openstreetmap.josm.data.UndoRedoHandler;
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.IPrimitive;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmUtils;
@@ -50,4 +51,5 @@
 import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.Shortcut;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -70,4 +72,5 @@
 
     private final boolean update;
+    private static final int MAX_MEMBERS_TO_DOWNLOAD = 100;
 
     /**
@@ -170,12 +173,20 @@
         if (multipolygonRelation != null && editLayer != null && editLayer.isDownloadable()) {
             if (!multipolygonRelation.isNew() && multipolygonRelation.isIncomplete()) {
-                MainApplication.worker.submit(
-                        new DownloadRelationTask(Collections.singleton(multipolygonRelation), editLayer));
+                MainApplication.worker
+                        .submit(new DownloadRelationTask(Collections.singleton(multipolygonRelation), editLayer));
             } else if (multipolygonRelation.hasIncompleteMembers()) {
-                MainApplication.worker.submit(new DownloadRelationMemberTask(multipolygonRelation,
-                        Utils.filteredCollection(
-                            DownloadSelectedIncompleteMembersAction.buildSetOfIncompleteMembers(
-                                    Collections.singleton(multipolygonRelation)), OsmPrimitive.class),
-                        editLayer));
+                // with complex relations the download of the full relation is much faster than download of almost all members, see #18341
+                SubclassFilteredCollection<IPrimitive, OsmPrimitive> incompleteMembers = Utils
+                        .filteredCollection(DownloadSelectedIncompleteMembersAction.buildSetOfIncompleteMembers(
+                                Collections.singleton(multipolygonRelation)), OsmPrimitive.class);
+
+                if (incompleteMembers.size() <= MAX_MEMBERS_TO_DOWNLOAD) {
+                    MainApplication.worker
+                            .submit(new DownloadRelationMemberTask(multipolygonRelation, incompleteMembers, editLayer));
+                } else {
+                    MainApplication.worker
+                            .submit(new DownloadRelationTask(Collections.singleton(multipolygonRelation), editLayer));
+
+                }
             }
         }
