Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java	(revision 16688)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/ComboMultiSelect.java	(revision 16689)
@@ -18,5 +18,4 @@
 import java.util.Objects;
 import java.util.Set;
-import java.util.TreeSet;
 import java.util.concurrent.CopyOnWriteArraySet;
 import java.util.stream.Collectors;
@@ -29,5 +28,4 @@
 import javax.swing.JPanel;
 import javax.swing.ListCellRenderer;
-import javax.swing.ListModel;
 
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -154,54 +152,4 @@
 
             return lbl;
-        }
-    }
-
-    /**
-     * Class that allows list values to be assigned and retrieved as a comma-delimited
-     * string (extracted from TaggingPreset)
-     */
-    protected static class ConcatenatingJList extends JList<PresetListEntry> {
-        private final char delimiter;
-
-        protected ConcatenatingJList(char del, PresetListEntry... o) {
-            super(o);
-            delimiter = del;
-        }
-
-        public void setSelectedItem(Object o) {
-            if (o == null) {
-                clearSelection();
-            } else {
-                String s = o.toString();
-                Set<String> parts = new TreeSet<>(Arrays.asList(s.split(String.valueOf(delimiter), -1)));
-                ListModel<PresetListEntry> lm = getModel();
-                int[] intParts = new int[lm.getSize()];
-                int j = 0;
-                for (int i = 0; i < lm.getSize(); i++) {
-                    final String value = lm.getElementAt(i).value;
-                    if (parts.contains(value)) {
-                        intParts[j++] = i;
-                        parts.remove(value);
-                    }
-                }
-                setSelectedIndices(Arrays.copyOf(intParts, j));
-                // check if we have actually managed to represent the full
-                // value with our presets. if not, cop out; we will not offer
-                // a selection list that threatens to ruin the value.
-                setEnabled(parts.isEmpty());
-            }
-        }
-
-        public String getSelectedItem() {
-            ListModel<PresetListEntry> lm = getModel();
-            int[] si = getSelectedIndices();
-            StringBuilder builder = new StringBuilder();
-            for (int i = 0; i < si.length; i++) {
-                if (i > 0) {
-                    builder.append(delimiter);
-                }
-                builder.append(lm.getElementAt(si[i]).value);
-            }
-            return builder.toString();
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/MultiSelect.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/MultiSelect.java	(revision 16688)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/MultiSelect.java	(revision 16689)
@@ -3,9 +3,14 @@
 
 import java.awt.Dimension;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
 
+import javax.swing.JList;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.ListCellRenderer;
+import javax.swing.ListModel;
 
 import org.openstreetmap.josm.data.osm.Tag;
@@ -55,3 +60,53 @@
         }
     }
+
+    /**
+     * Class that allows list values to be assigned and retrieved as a comma-delimited
+     * string (extracted from TaggingPreset)
+     */
+    private static class ConcatenatingJList extends JList<PresetListEntry> {
+        private final char delimiter;
+
+        protected ConcatenatingJList(char del, PresetListEntry... o) {
+            super(o);
+            delimiter = del;
+        }
+
+        public void setSelectedItem(Object o) {
+            if (o == null) {
+                clearSelection();
+            } else {
+                String s = o.toString();
+                Set<String> parts = new TreeSet<>(Arrays.asList(s.split(String.valueOf(delimiter), -1)));
+                ListModel<PresetListEntry> lm = getModel();
+                int[] intParts = new int[lm.getSize()];
+                int j = 0;
+                for (int i = 0; i < lm.getSize(); i++) {
+                    final String value = lm.getElementAt(i).value;
+                    if (parts.contains(value)) {
+                        intParts[j++] = i;
+                        parts.remove(value);
+                    }
+                }
+                setSelectedIndices(Arrays.copyOf(intParts, j));
+                // check if we have actually managed to represent the full
+                // value with our presets. if not, cop out; we will not offer
+                // a selection list that threatens to ruin the value.
+                setEnabled(parts.isEmpty());
+            }
+        }
+
+        public String getSelectedItem() {
+            ListModel<PresetListEntry> lm = getModel();
+            int[] si = getSelectedIndices();
+            StringBuilder builder = new StringBuilder();
+            for (int i = 0; i < si.length; i++) {
+                if (i > 0) {
+                    builder.append(delimiter);
+                }
+                builder.append(lm.getElementAt(si[i]).value);
+            }
+            return builder.toString();
+        }
+    }
 }
