Index: trunk/src/org/openstreetmap/josm/data/CustomConfigurator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/CustomConfigurator.java	(revision 9523)
+++ trunk/src/org/openstreetmap/josm/data/CustomConfigurator.java	(revision 9524)
@@ -97,4 +97,16 @@
     }
 
+    /**
+     * Resets the log.
+     */
+    public static void resetLog() {
+        summary = new StringBuilder();
+    }
+
+    /**
+     * Read configuration script from XML file, modifying main preferences
+     * @param dir - directory
+     * @param fileName - XML file name
+     */
     public static void readXML(String dir, String fileName) {
         readXML(new File(dir, fileName));
@@ -474,6 +486,6 @@
             try {
                 this.mainPrefs = mainPrefs;
-                summary = new StringBuilder();
-                engine = new ScriptEngineManager().getEngineByName("rhino");
+                resetLog();
+                engine = new ScriptEngineManager().getEngineByName("JavaScript");
                 engine.eval("API={}; API.pref={}; API.fragments={};");
 
@@ -493,4 +505,5 @@
             } catch (Exception ex) {
                 log("Error: initializing script engine: "+ex.getMessage());
+                Main.error(ex);
             }
         }
Index: trunk/test/data/customconfigurator/append.xml
===================================================================
--- trunk/test/data/customconfigurator/append.xml	(revision 9524)
+++ trunk/test/data/customconfigurator/append.xml	(revision 9524)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<config>
+<preferences operation="append">
+<list key="test">
+    <entry value="11111111"/>
+    <entry value="2222222"/>
+    <entry value="333333333"/>
+  </list>
+</preferences>
+</config>
Index: trunk/test/data/customconfigurator/replace.xml
===================================================================
--- trunk/test/data/customconfigurator/replace.xml	(revision 9524)
+++ trunk/test/data/customconfigurator/replace.xml	(revision 9524)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<config>
+<preferences operation="replace">
+<list key="lorem_ipsum">
+    <entry value="Lorem ipsum dolor sit amet, consectetur adipiscing elit."/>
+    <entry value="Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor."/>
+    <entry value="Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi."/>
+    <entry value="Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat."/>
+    <entry value="Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim."/>
+    <entry value="Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue."/>
+    <entry value="Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales."/>
+    <entry value="Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh."/>
+    <entry value="Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit."/>
+  </list>
+</preferences>
+</config>
Index: trunk/test/unit/org/openstreetmap/josm/data/CustomConfiguratorTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/CustomConfiguratorTest.java	(revision 9523)
+++ trunk/test/unit/org/openstreetmap/josm/data/CustomConfiguratorTest.java	(revision 9524)
@@ -3,4 +3,5 @@
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
@@ -10,9 +11,12 @@
 import java.nio.file.Files;
 import java.util.Arrays;
+import java.util.Collections;
 
+import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.openstreetmap.josm.JOSMFixture;
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -26,6 +30,14 @@
      */
     @BeforeClass
-    public static void setUp() {
+    public static void setUpBeforeClass() {
         JOSMFixture.createUnitTestFixture().init();
+    }
+
+    /**
+     * Setup test.
+     */
+    @Before
+    public void setUp() {
+        CustomConfigurator.resetLog();
     }
 
@@ -79,3 +91,29 @@
         Utils.deleteFile(tmp);
     }
+
+    /**
+     * Test method for {@link CustomConfigurator#readXML}.
+     * @throws IOException if any I/O error occurs
+     */
+    @Test
+    public void testReadXML() throws IOException {
+        // Test 1 - read(dir, file) + append
+        Main.pref.putCollection("test", Collections.<String>emptyList());
+        assertTrue(Main.pref.getCollection("test").isEmpty());
+        CustomConfigurator.readXML(TestUtils.getTestDataRoot() + "customconfigurator", "append.xml");
+        String log = CustomConfigurator.getLog();
+        System.out.println(log);
+        assertFalse(log.contains("Error"));
+        assertFalse(Main.pref.getCollection("test").isEmpty());
+
+        // Test 1 - read(file, pref) + replace
+        Preferences pref = new Preferences();
+        pref.putCollection("lorem_ipsum", Arrays.asList("only 1 string"));
+        assertEquals(1, pref.getCollection("lorem_ipsum").size());
+        CustomConfigurator.readXML(new File(TestUtils.getTestDataRoot() + "customconfigurator", "replace.xml"), pref);
+        log = CustomConfigurator.getLog();
+        System.out.println(log);
+        assertFalse(log.contains("Error"));
+        assertEquals(9, pref.getCollection("lorem_ipsum").size());
+    }
 }
