Index: src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
===================================================================
--- src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 17293)
+++ src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(working copy)
@@ -401,8 +401,12 @@
     public void showAndApply(Collection<OsmPrimitive> primitives) {
         // Display dialog even if no data layer (used by preset-tagging-tester plugin)
         Collection<OsmPrimitive> sel = createSelection(primitives);
-        int answer = showDialog(sel, supportsRelation());
+        boolean showNewRelation = supportsRelation() &&
+                primitives.stream().allMatch(prim -> roles.roles.stream()
+                        .anyMatch(role -> role.types.contains(TaggingPresetType.forPrimitive(prim))));
 
+        int answer = showDialog(sel, showNewRelation);
+
         if (!sel.isEmpty() && answer == DIALOG_ANSWER_APPLY) {
             Command cmd = createCommand(sel, getChangedTags());
             if (cmd != null) {
@@ -492,7 +496,7 @@
         PresetPanel p = createPanel(sel);
 
         int answer = 1;
-        boolean canCreateRelation = types == null || types.contains(TaggingPresetType.RELATION);
+        boolean canCreateRelation = supportsRelation();
         if (originalSelectionEmpty && !canCreateRelation) {
             new Notification(
                     tr("The preset <i>{0}</i> cannot be applied since nothing has been selected!", getLocaleName()))
