Index: src/org/openstreetmap/josm/gui/dialogs/PropertiesMembershipChoiceDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/PropertiesMembershipChoiceDialog.java	(revision 16243)
+++ src/org/openstreetmap/josm/gui/dialogs/PropertiesMembershipChoiceDialog.java	(working copy)
@@ -5,7 +5,7 @@
 
 import java.awt.GridBagLayout;
 import java.util.Collection;
-import java.util.Objects;
+import java.util.Collections;
 import java.util.Optional;
 
 import javax.swing.AbstractButton;
@@ -15,6 +15,7 @@
 import javax.swing.JToggleButton;
 
 import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MainApplication;
@@ -137,7 +138,7 @@
     public static PropertiesMembershipChoiceDialog showIfNecessary(Collection<Node> selectedNodes, boolean preselectNew)
             throws UserCancelException {
         final boolean queryTags = isTagged(selectedNodes);
-        final boolean queryMemberships = isUsedInRelations(selectedNodes);
+        final boolean queryMemberships = isMembershipUsableByNew(selectedNodes);
         if (queryTags || queryMemberships) {
             final PropertiesMembershipChoiceDialog dialog = new PropertiesMembershipChoiceDialog(preselectNew, queryTags, queryMemberships);
             dialog.showDialog();
@@ -153,8 +154,21 @@
         return existingNodes.stream().anyMatch(Node::hasKeys);
     }
 
-    private static boolean isUsedInRelations(final Collection<Node> existingNodes) {
-        return existingNodes.stream().anyMatch(
-                selectedNode -> selectedNode.referrers(Relation.class).anyMatch(Objects::nonNull));
+    /**
+     * If the node is member of a relation the membership might be wanted on the copy, but that is rarely useful.
+     * @param selectedNodes selected nodes
+     * @return true if it might be useful to copy/move the membership.
+     */
+    private static boolean isMembershipUsableByNew(final Collection<Node> selectedNodes) {
+        final String[] noCopyRoles = {"via"};
+        for (Relation r : OsmPrimitive.getParentRelations(selectedNodes)) {
+            if (r.hasTag("type", "restriction", "connectivity"))
+                    continue;
+            for (Node n: selectedNodes) {
+                if (r.getMembersFor(Collections.singleton(n)).stream().anyMatch(rm -> !rm.hasRole(noCopyRoles)))
+                    return true;
+            }
+        }
+        return false;
     }
 }
