Index: trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 7431)
+++ trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 7432)
@@ -19,5 +19,5 @@
 
 /**
- * An relation, having a set of tags and any number (0...n) of members.
+ * A relation, having a set of tags and any number (0...n) of members.
  *
  * @author Frederik Ramm
@@ -502,5 +502,5 @@
 
     /**
-     * Replies true if at least one child primitive is incomplete
+     * Determines if at least one child primitive is incomplete.
      *
      * @return true if at least one child primitive is incomplete
@@ -515,6 +515,5 @@
 
     /**
-     * Replies a collection with the incomplete children this relation
-     * refers to
+     * Replies a collection with the incomplete children this relation refers to.
      *
      * @return the incomplete children. Empty collection if no children are incomplete.
Index: trunk/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java	(revision 7431)
+++ trunk/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesTask.java	(revision 7432)
@@ -29,4 +29,8 @@
 import org.xml.sax.SAXException;
 
+/**
+ * Task downloading a set of OSM primitives.
+ * @since 4081
+ */
 public class DownloadPrimitivesTask extends PleaseWaitRunnable {
     private DataSet ds;
@@ -43,5 +47,5 @@
 
     /**
-     * Creates the  task
+     * Constructs a new {@code DownloadPrimitivesTask}.
      *
      * @param layer the layer in which primitives are updated. Must not be null.
@@ -57,5 +61,5 @@
 
     /**
-     * Creates the  task
+     * Constructs a new {@code DownloadPrimitivesTask}.
      *
      * @param layer the layer in which primitives are updated. Must not be null.
@@ -68,6 +72,6 @@
      */
     public DownloadPrimitivesTask(OsmDataLayer layer, List<PrimitiveId> ids, boolean fullRelation,
-            ProgressMonitor progessMonitor) throws IllegalArgumentException {
-        super(tr("Download objects"), progessMonitor, false /* don't ignore exception */);
+            ProgressMonitor progressMonitor) throws IllegalArgumentException {
+        super(tr("Download objects"), progressMonitor, false /* don't ignore exception */);
         ensureParameterNotNull(layer, "layer");
         this.ids = ids;
@@ -151,5 +155,7 @@
             for (Relation r : ds.getRelations()) {
                 if (canceled) return;
-                if (r.hasIncompleteMembers()) {
+                // Relations may be incomplete in case of nested relations if child relations are accessed before their parent
+                // (it may happen because "relations" has no deterministic sort order, see #10388)
+                if (r.isIncomplete() || r.hasIncompleteMembers()) {
                     synchronized(this) {
                         if (canceled) return;
Index: trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 7431)
+++ trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 7432)
@@ -387,5 +387,6 @@
     public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {
         int n = nodes.size() + ways.size() + relations.size();
-        progressMonitor.beginTask(trn("Downloading {0} object from ''{1}''", "Downloading {0} objects from ''{1}''", n, n, OsmApi.getOsmApi().getBaseUrl()));
+        progressMonitor.beginTask(trn("Downloading {0} object from ''{1}''",
+                "Downloading {0} objects from ''{1}''", n, n, OsmApi.getOsmApi().getBaseUrl()));
         try {
             missingPrimitives = new HashSet<>();
Index: trunk/src/org/openstreetmap/josm/io/OsmServerObjectReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerObjectReader.java	(revision 7431)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerObjectReader.java	(revision 7432)
@@ -104,6 +104,5 @@
      * Downloads and parses the data.
      *
-     * @param progressMonitor the progress monitor. Set to {@link NullProgressMonitor#INSTANCE} if
-     * null
+     * @param progressMonitor the progress monitor. Set to {@link NullProgressMonitor#INSTANCE} if null
      * @return the downloaded data
      * @throws OsmTransferException
