Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 18606)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 18607)
@@ -445,5 +445,8 @@
         }
 
-        if (selected.size() == 1 && USE_VALIDATOR.get()) {
+        if (selected.size() == 1 && Boolean.TRUE.equals(USE_VALIDATOR.get())) {
+            // Fail early -- validateAsync requires the primitive(s) to be part of a dataset. Failing later in validateAsync ''does not'' give us
+            // a usable stack trace. See #21829 for details.
+            selected.forEach(OsmPrimitive::checkDataset);
             itemGuiSupport.addListener((source, key, newValue) ->
                     TaggingPresetValidation.validateAsync(selected.iterator().next(), validationLabel, getChangedTags()));
