Index: /applications/editors/josm/plugins/buildings_tools/src/org/openstreetmap/josm/plugins/buildings_tools/MergeAddrPointsAction.java
===================================================================
--- /applications/editors/josm/plugins/buildings_tools/src/org/openstreetmap/josm/plugins/buildings_tools/MergeAddrPointsAction.java	(revision 34981)
+++ /applications/editors/josm/plugins/buildings_tools/src/org/openstreetmap/josm/plugins/buildings_tools/MergeAddrPointsAction.java	(revision 34982)
@@ -7,11 +7,13 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
-import java.util.AbstractMap;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Set;
 
 import javax.swing.JOptionPane;
@@ -56,11 +58,16 @@
         List<Node> addrNodes = new LinkedList<>();
         List<Way> buildings = new LinkedList<>();
-        scanSelection:
         for (OsmPrimitive p : selection) {
             if (p.getType() == OsmPrimitiveType.NODE) {
+                boolean refsOK = true;
                 for (OsmPrimitive r : p.getReferrers()) {
-                    if (r.getType() == OsmPrimitiveType.WAY)
-                       continue scanSelection; // Don't use nodes if they're referenced by ways
+                    if (r.getType() == OsmPrimitiveType.WAY) {
+                        // Don't use nodes if they're referenced by ways
+                        refsOK = false;
+                        break;
+                    }
                 }
+                if (!refsOK)
+                    continue;
                 for (String key : p.getKeys().keySet()) {
                     if (key.startsWith("addr:")) {
@@ -82,9 +89,28 @@
             return;
         }
+
+        // find nodes covered by more than one building, see #17625
+        Map<Node, Way> nodeToWayMap = new HashMap<>();
+        Set<Way> overlappingWays = new HashSet<>();
+        for (Way w : buildings) {
+            for (Node n : addrNodes) {
+                if (Geometry.nodeInsidePolygon(n, w.getNodes())) {
+                    Way old = nodeToWayMap.put(n, w);
+                    if (old != null) {
+                        overlappingWays.add(w);
+                        overlappingWays.add(old);
+                    }
+                }
+            }
+        }
+        buildings.removeAll(overlappingWays);
+
         List<Command> cmds = new LinkedList<>();
         int multi = 0;
         int conflicts = 0;
-        buildingsLoop: for (Way w : buildings) {
+
+        for (Way w : buildings) {
             Node mergeNode = null;
+            int oldMulti = multi;
             for (Node n : addrNodes) {
                 if (Geometry.nodeInsidePolygon(n, w.getNodes()))
@@ -93,11 +119,13 @@
                         // Multiple address nodes inside one building --
                         // skipping
-                        continue buildingsLoop;
+                        break;
                     } else
                         mergeNode = n;
             }
+            if (oldMulti != multi)
+                continue;
             if (mergeNode != null) {
                 boolean hasConflicts = false;
-                AbstractMap<String, String> tags = new HashMap<>();
+                Map<String, String> tags = new HashMap<>();
                 for (Entry<String, String> entry : mergeNode.getKeys().entrySet()) {
                     String newValue = entry.getValue();
@@ -141,5 +169,8 @@
                             "There are {0} buildings with address conflicts", conflicts, conflicts))
                     .setIcon(JOptionPane.WARNING_MESSAGE).show();
-        if (cmds.isEmpty() && multi == 0 && conflicts == 0)
+        if (!overlappingWays.isEmpty())
+            new Notification(tr("There are {0} buildings covering the same address node", overlappingWays.size()))
+                    .setIcon(JOptionPane.WARNING_MESSAGE).show();
+        if (cmds.isEmpty() && multi == 0 && conflicts == 0 && overlappingWays.isEmpty())
             new Notification(tr("No address nodes inside buildings found"))
                     .setIcon(JOptionPane.INFORMATION_MESSAGE).show();
