Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 18000)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 18001)
@@ -238,7 +238,8 @@
      * @param ways ways to clone
      * @param relations relations to clone
-     * @since 17981
-     */
-    public void clonePrimitives(Iterable<Node> nodes, Iterable<Way> ways, Iterable<Relation> relations) {
+     * @return the map of cloned primitives indexed by their original version
+     * @since 18001
+     */
+    public Map<OsmPrimitive, OsmPrimitive> clonePrimitives(Iterable<Node> nodes, Iterable<Way> ways, Iterable<Relation> relations) {
         Map<OsmPrimitive, OsmPrimitive> primMap = new HashMap<>();
         for (Node n : nodes) {
@@ -268,4 +269,5 @@
                     .collect(Collectors.toList()));
         }
+        return primMap;
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetValidation.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetValidation.java	(revision 18000)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetValidation.java	(revision 18001)
@@ -80,9 +80,9 @@
         DataSet ds = new DataSet();
         Collection<OsmPrimitive> primitives = FilterModel.getAffectedPrimitives(singleton(original));
-        ds.clonePrimitives(
+        OsmPrimitive primitive = ds.clonePrimitives(
                 new SubclassFilteredCollection<>(primitives, INode.class::isInstance),
                 new SubclassFilteredCollection<>(primitives, IWay.class::isInstance),
-                new SubclassFilteredCollection<>(primitives, IRelation.class::isInstance));
-        OsmPrimitive primitive = ds.getPrimitiveById(original.getOsmPrimitiveId());
+                new SubclassFilteredCollection<>(primitives, IRelation.class::isInstance))
+                .get(original);
         Command command = TaggingPreset.createCommand(singleton(primitive), changedTags);
         if (command != null) {
Index: /trunk/test/unit/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetValidationTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetValidationTest.java	(revision 18000)
+++ /trunk/test/unit/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetValidationTest.java	(revision 18001)
@@ -2,5 +2,12 @@
 package org.openstreetmap.josm.gui.tagging.presets;
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.Arrays;
+import java.util.Locale;
+
+import javax.swing.JLabel;
+
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -9,11 +16,9 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.OsmUtils;
+import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.data.validation.OsmValidator;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
-import javax.swing.JLabel;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
 /**
@@ -31,4 +36,5 @@
     @BeforeEach
     void setUp() {
+        Locale.setDefault(Locale.ENGLISH);
         OsmValidator.initialize();
     }
@@ -38,5 +44,5 @@
      */
     @Test
-    void validate() {
+    void testValidate() {
         JLabel label = new JLabel();
         OsmPrimitive primitive = OsmUtils.createPrimitive("way incline=10m width=1mm opening_hours=\"Mo-Fr 8-10\"");
@@ -53,3 +59,15 @@
                 "<li>suspicious tag combination (incline on suspicious object)</li></ul>", label.getToolTipText());
     }
+
+    /**
+     * Tests {@link TaggingPresetValidation#applyChangedTags}
+     */
+    @Test
+    void testApplyChangedTags() {
+        OsmPrimitive primitive = OsmUtils.createPrimitive("way incline=10m width=1mm opening_hours=\"Mo-Fr 8-10\"");
+        new DataSet(primitive);
+        OsmPrimitive clone = TaggingPresetValidation.applyChangedTags(primitive, Arrays.asList(new Tag("incline", "20m")));
+        assertEquals("20m", clone.get("incline"));
+        assertEquals("1mm", clone.get("width"));
+    }
 }
