Index: /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 8813)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPreset.java	(revision 8814)
@@ -26,4 +26,5 @@
 import javax.swing.ImageIcon;
 import javax.swing.JLabel;
+import javax.swing.JOptionPane;
 import javax.swing.JPanel;
 import javax.swing.JToggleButton;
@@ -43,4 +44,5 @@
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
 import org.openstreetmap.josm.gui.layer.Layer;
@@ -377,5 +379,18 @@
 
         int answer = 1;
-        if (p.getComponentCount() != 0 && (sel.isEmpty() || p.hasElements)) {
+        boolean canCreateRelation = types == null || types.contains(TaggingPresetType.RELATION);
+        if (originalSelectionEmpty && !canCreateRelation) {
+            new Notification(
+                    tr("The preset <i>{0}</i> cannot be applied since nothing has been selected!", getLocaleName()))
+                    .setIcon(JOptionPane.WARNING_MESSAGE)
+                    .show();
+            return DIALOG_ANSWER_CANCEL;
+        } else if (sel.isEmpty() && !canCreateRelation) {
+            new Notification(
+                    tr("The preset <i>{0}</i> cannot be applied since the selection is unsuitable!", getLocaleName()))
+                    .setIcon(JOptionPane.WARNING_MESSAGE)
+                    .show();
+            return DIALOG_ANSWER_CANCEL;
+        } else if (p.getComponentCount() != 0 && (sel.isEmpty() || p.hasElements)) {
             String title = trn("Change {0} object", "Change {0} objects", sel.size(), sel.size());
             if (sel.isEmpty()) {
