Index: trunk/data/preferences.xsd
===================================================================
--- trunk/data/preferences.xsd	(revision 4655)
+++ trunk/data/preferences.xsd	(revision 4656)
@@ -11,4 +11,6 @@
 				<element name="collection" type="tns:collection" />
 				<element name="list" type="tns:list" />
+				<element name="lists" type="tns:lists" />
+				<element name="maps" type="tns:maps" />
 			</choice>
 		</sequence>
@@ -36,7 +38,9 @@
 			    <element name="entry" type="tns:entry" minOccurs="0" maxOccurs="unbounded"/>
             </sequence>
+            <!-- deprecated: remove mid 2012 -->
             <sequence>
 			    <element name="list" type="tns:slist" minOccurs="0" maxOccurs="unbounded"/>
             </sequence>
+            <!-- deprecated: remove mid 2012 -->
             <sequence>
 			    <element name="map" type="tns:map" minOccurs="0" maxOccurs="unbounded"/>
@@ -46,4 +50,18 @@
 	</complexType>
 	
+	<complexType name="lists">
+        <sequence>
+		    <element name="list" type="tns:slist" minOccurs="0" maxOccurs="unbounded"/>
+        </sequence>
+		<attribute name="key" type="string" use="required" />
+	</complexType>
+
+	<complexType name="maps">
+        <sequence>
+		    <element name="map" type="tns:map" minOccurs="0" maxOccurs="unbounded"/>
+        </sequence>
+		<attribute name="key" type="string" use="required" />
+	</complexType>
+
 	<complexType name="slist">
         <sequence>
Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 4655)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 4656)
@@ -1344,5 +1344,7 @@
             }
             public void visit(ListListSetting setting) {
-                changed = putArray(key, (Collection) setting.getValue());
+                @SuppressWarnings("unchecked")
+                boolean changed = putArray(key, (Collection) setting.getValue());
+                this.changed = changed;
             }
             public void visit(MapListSetting setting) {
@@ -1465,5 +1467,9 @@
                     properties.put(parser.getAttributeValue(null, "key"), parser.getAttributeValue(null, "value"));
                     jumpToEnd();
-                } else if (parser.getLocalName().equals("list") || parser.getLocalName().equals("collection")) {
+                } else if (parser.getLocalName().equals("list") ||
+                        parser.getLocalName().equals("collection") ||
+                        parser.getLocalName().equals("lists") ||
+                        parser.getLocalName().equals("maps")
+                ) {
                     parseToplevelList();
                 } else {
@@ -1489,4 +1495,6 @@
     protected void parseToplevelList() throws XMLStreamException {
         String key = parser.getAttributeValue(null, "key");
+        String name = parser.getLocalName();
+
         List<String> entries = null;
         List<List<String>> lists = null;
@@ -1520,10 +1528,16 @@
         if (entries != null) {
             collectionProperties.put(key, Collections.unmodifiableList(entries));
-        }
-        if (lists != null) {
+        } else if (lists != null) {
             arrayProperties.put(key, Collections.unmodifiableList(lists));
-        }
-        if (maps != null) {
+        } else if (maps != null) {
             listOfStructsProperties.put(key, Collections.unmodifiableList(maps));
+        } else {
+            if (name.equals("lists")) {
+                arrayProperties.put(key, Collections.<List<String>>emptyList());
+            } else if (name.equals("maps")) {
+                listOfStructsProperties.put(key, Collections.<Map<String, String>>emptyList());
+            } else {
+                collectionProperties.put(key, Collections.<String>emptyList());
+            }
         }
     }
@@ -1623,5 +1637,5 @@
 
         public void visit(ListListSetting setting) {
-            b.append("  <list key='").append(XmlWriter.encode(key)).append("'>\n");
+            b.append("  <lists key='").append(XmlWriter.encode(key)).append("'>\n");
             for (List<String> list : setting.getValue()) {
                 b.append("    <list>\n");
@@ -1631,9 +1645,9 @@
                 b.append("    </list>\n");
             }
-            b.append("  </list>\n");
+            b.append("  </lists>\n");
         }
 
         public void visit(MapListSetting setting) {
-            b.append("  <list key='").append(XmlWriter.encode(key)).append("'>\n");
+            b.append("  <maps key='").append(XmlWriter.encode(key)).append("'>\n");
             for (Map<String, String> struct : setting.getValue()) {
                 b.append("    <map>\n");
@@ -1643,5 +1657,5 @@
                 b.append("    </map>\n");
             }
-            b.append("  </list>\n");
+            b.append("  </maps>\n");
         }
     }
