Index: trunk/test/data/preset_chunk.xml
===================================================================
--- trunk/test/data/preset_chunk.xml	(revision 6562)
+++ trunk/test/data/preset_chunk.xml	(revision 6562)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<presets xmlns="http://josm.openstreetmap.de/tagging-preset-1.0">
+    <chunk id="A1">
+        <key key="A1" value="true"/>
+    </chunk>
+    <chunk id="A3">
+        <key key="A3" value="true"/>
+    </chunk>
+    <chunk id="A">
+        <reference ref="A1"/>
+        <key key="A2" value="true"/>
+        <reference ref="A3"/>
+    </chunk>
+    <chunk id="C">
+        <key key="C1" value="true"/>
+        <key key="C2" value="true"/>
+        <key key="C3" value="true"/>
+    </chunk>
+    <item name="ABC">
+        <reference ref="A"/>
+        <key key="B1" value="true"/>
+        <key key="B2" value="true"/>
+        <key key="B3" value="true"/>
+        <reference ref="C"/>
+    </item>
+</presets>
Index: trunk/test/unit/org/openstreetmap/TestUtils.java
===================================================================
--- trunk/test/unit/org/openstreetmap/TestUtils.java	(revision 6562)
+++ trunk/test/unit/org/openstreetmap/TestUtils.java	(revision 6562)
@@ -0,0 +1,22 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap;
+
+import org.junit.Ignore;
+
+@Ignore
+public class TestUtils {
+    private TestUtils() {
+    }
+
+    /**
+     * Returns the path to test data root directory.
+     */
+    public static String getTestDataRoot() {
+        String testDataRoot = System.getProperty("josm.test.data");
+        if (testDataRoot == null || testDataRoot.isEmpty()) {
+            testDataRoot = "test/data";
+            System.out.println("System property josm.test.data is not set, using '" + testDataRoot + "'");
+        }
+        return testDataRoot.endsWith("/") ? testDataRoot : testDataRoot + "/";
+    }
+}
Index: trunk/test/unit/org/openstreetmap/josm/gui/tagging/TaggingPresetReaderTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/tagging/TaggingPresetReaderTest.java	(revision 6561)
+++ trunk/test/unit/org/openstreetmap/josm/gui/tagging/TaggingPresetReaderTest.java	(revision 6562)
@@ -1,14 +1,20 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.tagging;
-
-import java.io.IOException;
-import java.util.Collection;
 
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.openstreetmap.TestUtils;
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.Preferences;
+import org.openstreetmap.josm.tools.Utils;
 import org.xml.sax.SAXException;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.List;
+
+import static org.CustomMatchers.hasSize;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 
 /**
@@ -16,17 +22,8 @@
  */
 public class TaggingPresetReaderTest {
-    /**
-     * path to test data root directory
-     */
-    private static String testdataroot;
-    
+
     @BeforeClass
     public static void setUpClass() {
         Main.initApplicationPreferences();
-        testdataroot = System.getProperty("josm.test.data");
-        if (testdataroot == null || testdataroot.isEmpty()) {
-            testdataroot = "test/data";
-            System.out.println("System property josm.test.data is not set, using '" + testdataroot + "'");
-        }
     }
 
@@ -37,5 +34,5 @@
      */
     protected static String getRegressionDataDir(int ticketid) {
-        return testdataroot + "/regress/" + ticketid;
+        return TestUtils.getTestDataRoot() + "/regress/" + ticketid;
     }
 
@@ -64,4 +61,18 @@
     }
 
+    @Test
+    public void testNestedChunks() throws Exception {
+        final Collection<TaggingPreset> presets = TaggingPresetReader.readAll(TestUtils.getTestDataRoot() + "preset_chunk.xml", true);
+        assertThat(presets, hasSize(1));
+        final TaggingPreset abc =  presets.iterator().next();
+        final List<String> keys = Utils.transform(abc.data, new Utils.Function<TaggingPresetItem, String>() {
+            @Override
+            public String apply(TaggingPresetItem x) {
+                return ((TaggingPresetItems.Key) x).key;
+            }
+        });
+        assertThat(keys.toString(), is("[A1, A2, A3, B1, B2, B3, C1, C2, C3]"));
+    }
+
     /**
      * Validate internal presets
