Index: trunk/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesWithReferrersTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesWithReferrersTask.java	(revision 16202)
+++ trunk/src/org/openstreetmap/josm/gui/io/DownloadPrimitivesWithReferrersTask.java	(revision 16203)
@@ -114,10 +114,15 @@
         currentTask.run();
         // Then, download referrers for each primitive
-        if (downloadReferrers) {
-            currentTask = new DownloadReferrersTask(tmpLayer, ids);
-            currentTask.run();
-            synchronized (this) {
-                if (currentTask.getProgressMonitor().isCanceled())
-                    cancel();
+        if (downloadReferrers && tmpLayer.data != null) {
+            // see #18895: don't try to download parents for invisible objects
+            List<PrimitiveId> visible = ids.stream().map(tmpLayer.data::getPrimitiveById)
+                    .filter(p -> p != null && p.isVisible()).collect(Collectors.toList());
+            if (!visible.isEmpty()) {
+                currentTask = new DownloadReferrersTask(tmpLayer, visible);
+                currentTask.run();
+                synchronized (this) {
+                    if (currentTask.getProgressMonitor().isCanceled())
+                        cancel();
+                }
             }
         }
Index: trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 16202)
+++ trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 16203)
@@ -578,6 +578,12 @@
                         return res;
                     }
-                    Logging.info(tr("Server replied with response code 404, retrying with an individual request for each object."));
-                    return singleGetIdPackage(type, pkg, progressMonitor);
+                    if (pkg.size() == 1) {
+                        FetchResult res = new FetchResult(new DataSet(), new HashSet<PrimitiveId>());
+                        res.missingPrimitives.add(new SimplePrimitiveId(pkg.iterator().next(), type));
+                        return res;
+                    } else {
+                        Logging.info(tr("Server replied with response code 404, retrying with an individual request for each object."));
+                        return singleGetIdPackage(type, pkg, progressMonitor);
+                    }
                 } else {
                     throw e;
