Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java	(revision 7888)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetReader.java	(revision 7889)
@@ -10,7 +10,8 @@
 import java.io.InputStreamReader;
 import java.io.Reader;
-import java.nio.charset.StandardCharsets;
+import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Deque;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -19,5 +20,4 @@
 import java.util.Map;
 import java.util.Set;
-import java.util.Stack;
 
 import javax.swing.JOptionPane;
@@ -72,5 +72,5 @@
     }
 
-    public static List<TaggingPreset> readAll(Reader in, boolean validate) throws SAXException {
+    private static XmlObjectParser buildParser() {
         XmlObjectParser parser = new XmlObjectParser();
         parser.mapOnStart("item", TaggingPreset.class);
@@ -94,6 +94,18 @@
         parser.mapBoth("chunk", Chunk.class);
         parser.map("reference", Reference.class);
-
-        LinkedList<TaggingPreset> all = new LinkedList<>();
+        return parser;
+    }
+
+    /**
+     * Reads all tagging presets from the input reader.
+     * @param in The input reader
+     * @param validate if {@code true}, XML validation will be performed
+     * @return collection of tagging presets
+     * @throws SAXException if any XML error occurs
+     */
+    public static Collection<TaggingPreset> readAll(Reader in, boolean validate) throws SAXException {
+        XmlObjectParser parser = buildParser();
+
+        Deque<TaggingPreset> all = new LinkedList<>();
         TaggingPresetMenu lastmenu = null;
         TaggingPresetItems.Roles lastrole = null;
@@ -101,7 +113,7 @@
         List<TaggingPresetItems.PresetListEntry> listEntries = new LinkedList<>();
         final Map<String, List<Object>> byId = new HashMap<>();
-        final Stack<String> lastIds = new Stack<>();
+        final Deque<String> lastIds = new ArrayDeque<>();
         /** lastIdIterators contains non empty iterators of items to be handled before obtaining the next item from the XML parser */
-        final Stack<Iterator<Object>> lastIdIterators = new Stack<>();
+        final Deque<Iterator<Object>> lastIdIterators = new ArrayDeque<>();
 
         if (validate) {
@@ -200,4 +212,7 @@
                     } else if (o instanceof TaggingPresetItems.CheckGroup) {
                         all.getLast().data.add((TaggingPresetItem) o);
+                        // Make sure list of checks is empty to avoid adding checks several times
+                        // when used in chunks (fix #10801)
+                        ((TaggingPresetItems.CheckGroup) o).checks.clear();
                         ((TaggingPresetItems.CheckGroup) o).checks.addAll(checks);
                         checks.clear();
@@ -229,4 +244,12 @@
     }
 
+    /**
+     * Reads all tagging presets from the given source.
+     * @param source a given filename, URL or internal resource
+     * @param validate if {@code true}, XML validation will be performed
+     * @return collection of tagging presets
+     * @throws SAXException if any XML error occurs
+     * @throws IOException if any I/O error occurs
+     */
     public static Collection<TaggingPreset> readAll(String source, boolean validate) throws SAXException, IOException {
         Collection<TaggingPreset> tp;
Index: trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java	(revision 7888)
+++ trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java	(revision 7889)
@@ -271,4 +271,10 @@
     }
 
+    /**
+     * Starts parsing from the given input reader, without validation.
+     * @param in The input reader
+     * @return iterable collection of objects
+     * @throws SAXException if any XML or I/O error occurs
+     */
     public Iterable<Object> start(final Reader in) throws SAXException {
         try {
@@ -279,4 +285,12 @@
     }
 
+    /**
+     * Starts parsing from the given input reader, with XSD validation.
+     * @param in The input reader
+     * @param namespace default namespace
+     * @param schemaSource XSD schema
+     * @return iterable collection of objects
+     * @throws SAXException if any XML or I/O error occurs
+     */
     public Iterable<Object> startWithValidation(final Reader in, String namespace, String schemaSource) throws SAXException {
         SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
