Index: src/org/openstreetmap/josm/actions/CombineWayAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/CombineWayAction.java	(revision 19106)
+++ src/org/openstreetmap/josm/actions/CombineWayAction.java	(working copy)
@@ -10,12 +10,10 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Objects;
-import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
@@ -279,20 +277,6 @@
             return;
         }
 
-        // see #18083: check if we will combine ways at nodes outside of the download area
-        Set<Node> endNodesOutside = new HashSet<>();
-        for (Way w : selectedWays) {
-            final Node[] endnodes = {w.firstNode(), w.lastNode()};
-            for (Node n : endnodes) {
-                if (!n.isNew() && !n.isReferrersDownloaded() && !endNodesOutside.add(n)) {
-                    new Notification(tr("Combine ways refused<br>" + "(A shared node may have additional referrers)"))
-                            .setIcon(JOptionPane.INFORMATION_MESSAGE).show();
-                    return;
-
-                }
-            }
-        }
-
         // combine and update gui
         Pair<Way, Command> combineResult;
         try {
@@ -305,6 +289,10 @@
         if (combineResult == null)
             return;
 
+        // see #18083: check if we will combine ways at nodes outside of the download area
+        if (!checkAndConfirmCombineOutlyingWays(selectedWays))
+            return;
+
         final Way selectedWay = combineResult.a;
         UndoRedoHandler.getInstance().add(combineResult.b);
         Test test = new OverlappingWays();
@@ -346,4 +334,23 @@
         setEnabled(numWays >= 2);
     }
 
+    /**
+     * Check whether user is about to combine ways with unknown parents.
+     * Request confirmation if he is.
+     * @param ways the primitives to operate on
+     * @return true, if operating on outlying primitives is OK; false, otherwise
+     * @since xxx
+     */
+    public static boolean checkAndConfirmCombineOutlyingWays(Collection<Way> ways) {
+        return Boolean.TRUE.equals(GuiHelper.runInEDTAndWaitAndReturn(() -> checkAndConfirmOutlyingOperation("combine",
+                tr("Combine confirmation"),
+                tr("You are about to combine ways which can have other referrers not yet downloaded."
+                        + "<br>"
+                        + "This can cause problems because other objects (that you do not see) might use them."
+                        + "<br>"
+                        + "Do you really want to combine?"),
+                "", // not used, we never combine incomplete ways
+                ways, Collections.emptyList())));
+    }
+
 }
