Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Combo.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Combo.java	(revision 16042)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Combo.java	(revision 16043)
@@ -30,5 +30,5 @@
      */
     public Combo() {
-        delimiter = ",";
+        delimiter = ',';
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java	(revision 16042)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java	(revision 16043)
@@ -90,5 +90,5 @@
      * In case of {@link MultiSelect} the default is semicolon and this will also be used to separate selected values in the tag.
      */
-    public String delimiter = ";"; // NOSONAR
+    public char delimiter = ';'; // NOSONAR
     /** whether the last value is used as default. Using "force" enforces this behaviour also for already tagged objects. Default is "false".*/
     public String use_last_as_default = "false"; // NOSONAR
@@ -158,7 +158,7 @@
      */
     protected static class ConcatenatingJList extends JList<PresetListEntry> {
-        private final String delimiter;
-
-        protected ConcatenatingJList(String del, PresetListEntry... o) {
+        private final char delimiter;
+
+        protected ConcatenatingJList(char del, PresetListEntry... o) {
             super(o);
             delimiter = del;
@@ -170,5 +170,5 @@
             } else {
                 String s = o.toString();
-                Set<String> parts = new TreeSet<>(Arrays.asList(s.split(delimiter)));
+                Set<String> parts = new TreeSet<>(Arrays.asList(s.split(String.valueOf(delimiter))));
                 ListModel<PresetListEntry> lm = getModel();
                 int[] intParts = new int[lm.getSize()];
@@ -351,8 +351,4 @@
     protected abstract void addToPanelAnchor(JPanel p, String def, boolean presetInitiallyMatches);
 
-    protected char getDelChar() {
-        return delimiter.isEmpty() ? ';' : delimiter.charAt(0);
-    }
-
     @Override
     public Collection<String> getValues() {
@@ -423,5 +419,4 @@
 
     private void initListEntriesFromAttributes() {
-        char delChar = getDelChar();
 
         String[] valueArray = null;
@@ -450,5 +445,5 @@
 
         if (valueArray == null) {
-            valueArray = splitEscaped(delChar, values);
+            valueArray = splitEscaped(delimiter, values);
         }
 
@@ -456,9 +451,9 @@
         if (!values_no_i18n) {
             final String displ = Utils.firstNonNull(locale_display_values, display_values);
-            displayArray = displ == null ? valueArray : splitEscaped(delChar, displ);
+            displayArray = displ == null ? valueArray : splitEscaped(delimiter, displ);
         }
 
         final String descr = Utils.firstNonNull(locale_short_descriptions, short_descriptions);
-        String[] shortDescriptionsArray = descr == null ? null : splitEscaped(delChar, descr);
+        String[] shortDescriptionsArray = descr == null ? null : splitEscaped(delimiter, descr);
 
         if (displayArray.length != valueArray.length) {
Index: trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java	(revision 16042)
+++ trunk/src/org/openstreetmap/josm/tools/XmlObjectParser.java	(revision 16043)
@@ -126,4 +126,6 @@
             if (boolean.class.equals(klass))
                 return parseBoolean(value);
+            else if (char.class.equals(klass))
+                return value.charAt(0);
             else if (Integer.class.equals(klass))
                 return Integer.valueOf(value);
@@ -154,5 +156,5 @@
                 }
                 if (f != null && Modifier.isPublic(f.getModifiers()) && (
-                        String.class.equals(f.getType()) || boolean.class.equals(f.getType()) ||
+                        String.class.equals(f.getType()) || boolean.class.equals(f.getType()) || char.class.equals(f.getType()) ||
                         Float.class.equals(f.getType()) || Double.class.equals(f.getType()) ||
                         Long.class.equals(f.getType()) || Integer.class.equals(f.getType()))) {
