Index: src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java
===================================================================
--- src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java	(revision 19342)
+++ src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java	(working copy)
@@ -368,8 +368,11 @@
 
                     if (!suitable && preset.types.contains(TaggingPresetType.RELATION)
                             && preset.roles != null && !preset.roles.roles.isEmpty()) {
-                        suitable = preset.roles.roles.stream().anyMatch(
-                                object -> object.memberExpression != null && selectedPrimitives.stream().anyMatch(object.memberExpression));
+                        suitable = preset.roles.roles.stream()
+                                .filter(role -> role.memberExpression != null)
+                                .anyMatch(role -> selectedPrimitives.stream().parallel()
+                                        .anyMatch(p -> role.types.contains(TaggingPresetType.forPrimitive(p))
+                                                && role.memberExpression.match(p)));
                         // keep the preset to allow the creation of new relations
                     }
                     if (!suitable) {
