Index: /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSelector.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSelector.java	(revision 7206)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSelector.java	(revision 7207)
@@ -341,15 +341,19 @@
             presetClassification.classification = 0;
 
-            if (onlyApplicable && !preset.typeMatches(getTypesInSelection())) {
-                final Predicate<Role> memberExpressionMatchesOnePrimitive = new Predicate<Role>() {
-                    @Override
-                    public boolean evaluate(Role object) {
-                        return object.memberExpression != null && Utils.exists(Main.main.getCurrentDataSet().getSelected(), object.memberExpression);
-                    }
-                };
-                if (preset.types.contains(TaggingPresetType.RELATION) && preset.roles != null
-                        && Utils.exists(preset.roles.roles, memberExpressionMatchesOnePrimitive)) {
-                    // keep to allow the creation of new relations
-                } else {
+            if (onlyApplicable) {
+                boolean suitable = preset.typeMatches(getTypesInSelection());
+
+                if (!suitable && preset.types.contains(TaggingPresetType.RELATION) && preset.roles != null) {
+                    final Predicate<Role> memberExpressionMatchesOnePrimitive = new Predicate<Role>() {
+                        final Collection<OsmPrimitive> selected = Main.main.getCurrentDataSet().getSelected();
+                        @Override public boolean evaluate(Role object) {
+                            return object.memberExpression != null
+                                    && Utils.exists(selected, object.memberExpression);
+                        }
+                    };
+                    suitable = Utils.exists(preset.roles.roles, memberExpressionMatchesOnePrimitive);
+                    // keep the preset to allow the creation of new relations
+                }
+                if (!suitable) {
                     continue;
                 }
@@ -400,7 +404,9 @@
                         typesInSelection.add(TaggingPresetType.NODE);
                     } else if (primitive instanceof Way) {
-                        typesInSelection.add(TaggingPresetType.WAY);
                         if (((Way) primitive).isClosed()) {
                             typesInSelection.add(TaggingPresetType.CLOSEDWAY);
+                        } else {
+                            // closedway is not a way for preset checking, the types are mutually exclusive
+                            typesInSelection.add(TaggingPresetType.WAY);
                         }
                     } else if (primitive instanceof Relation) {
