Index: trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/actions/CreateMultipolygonAction.java	(revision 12841)
@@ -398,5 +398,5 @@
         }
 
-        for (String linearTag : Main.pref.getCollection("multipoly.lineartagstokeep", DEFAULT_LINEAR_TAGS)) {
+        for (String linearTag : Main.pref.getList("multipoly.lineartagstokeep", DEFAULT_LINEAR_TAGS)) {
             values.remove(linearTag);
         }
Index: trunk/src/org/openstreetmap/josm/actions/DialogsToggleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/DialogsToggleAction.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/actions/DialogsToggleAction.java	(revision 12841)
@@ -43,5 +43,5 @@
     public void actionPerformed(ActionEvent e) {
         toggleSelectedState(e);
-        Main.pref.put("draw.dialogspanel", isSelected());
+        Main.pref.putBoolean("draw.dialogspanel", isSelected());
         notifySelectedState();
         setMode();
@@ -61,8 +61,8 @@
             // Toolbars listen to preference changes, use it here
             if (!Main.pref.getBoolean("toolbar.always-visible", true) && (!selected || toolbarPreviouslyVisible)) {
-                Main.pref.put("toolbar.visible", selected);
+                Main.pref.putBoolean("toolbar.visible", selected);
             }
             if (!Main.pref.getBoolean("sidetoolbar.always-visible", true) && (!selected || sideToolbarPreviouslyVisible)) {
-                Main.pref.put("sidetoolbar.visible", selected);
+                Main.pref.putBoolean("sidetoolbar.visible", selected);
             }
             map.mapView.rememberLastPositionOnScreen();
Index: trunk/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/actions/FullscreenToggleAction.java	(revision 12841)
@@ -53,5 +53,5 @@
     public void actionPerformed(ActionEvent e) {
         toggleSelectedState(e);
-        Main.pref.put("draw.fullscreen", isSelected());
+        Main.pref.putBoolean("draw.fullscreen", isSelected());
         notifySelectedState();
         setMode();
Index: trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 12841)
@@ -114,5 +114,5 @@
             return candidates.get(0);
 
-        switch (Main.pref.getInteger("merge-nodes.mode", 0)) {
+        switch (Main.pref.getInt("merge-nodes.mode", 0)) {
         case 0:
             return candidates.get(size - 1);
Index: trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java	(revision 12841)
@@ -330,9 +330,9 @@
 
             if (recordHistory) {
-                Collection<String> oldFileHistory = Main.pref.getCollection("file-open.history");
+                Collection<String> oldFileHistory = Main.pref.getList("file-open.history");
                 fileHistory.addAll(oldFileHistory);
                 // remove the files which failed to load from the list
                 fileHistory.removeAll(failedAll);
-                int maxsize = Math.max(0, Main.pref.getInteger("file-open.history.max-size", 15));
+                int maxsize = Math.max(0, Main.pref.getInt("file-open.history.max-size", 15));
                 Main.pref.putCollectionBounded("file-open.history", maxsize, fileHistory);
             }
Index: trunk/src/org/openstreetmap/josm/actions/OpenLocationAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/OpenLocationAction.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/actions/OpenLocationAction.java	(revision 12841)
@@ -104,5 +104,5 @@
      */
     protected void restoreUploadAddressHistory(HistoryComboBox cbHistory) {
-        List<String> cmtHistory = new LinkedList<>(Main.pref.getCollection(getClass().getName() + ".uploadAddressHistory",
+        List<String> cmtHistory = new LinkedList<>(Main.pref.getList(getClass().getName() + ".uploadAddressHistory",
                 new LinkedList<String>()));
         // we have to reverse the history, because ComboBoxHistory will reverse it again in addElement()
@@ -118,5 +118,5 @@
     protected void remindUploadAddressHistory(HistoryComboBox cbHistory) {
         cbHistory.addCurrentItemToHistory();
-        Main.pref.putCollection(getClass().getName() + ".uploadAddressHistory", cbHistory.getHistory());
+        Main.pref.putList(getClass().getName() + ".uploadAddressHistory", cbHistory.getHistory());
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/PurgeAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/PurgeAction.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/actions/PurgeAction.java	(revision 12841)
@@ -99,5 +99,5 @@
 
             clearUndoRedo = cbClearUndoRedo.isSelected();
-            Main.pref.put("purge.clear_undo_redo", clearUndoRedo);
+            Main.pref.putBoolean("purge.clear_undo_redo", clearUndoRedo);
         }
 
Index: trunk/src/org/openstreetmap/josm/actions/RenameLayerAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/RenameLayerAction.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/actions/RenameLayerAction.java	(revision 12841)
@@ -81,5 +81,5 @@
         String nameText = name.getText();
         if (filerename.isEnabled()) {
-            Main.pref.put("layer.rename-file", filerename.isSelected());
+            Main.pref.putBoolean("layer.rename-file", filerename.isSelected());
             if (filerename.isSelected()) {
                 String newname = nameText;
Index: trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/actions/SaveActionBase.java	(revision 12841)
@@ -229,6 +229,6 @@
         }
 
-        int maxsize = Math.max(0, Main.pref.getInteger("file-open.history.max-size", 15));
-        Collection<String> oldHistory = Main.pref.getCollection("file-open.history");
+        int maxsize = Math.max(0, Main.pref.getInt("file-open.history.max-size", 15));
+        Collection<String> oldHistory = Main.pref.getList("file-open.history");
         List<String> history = new LinkedList<>(oldHistory);
         history.remove(filepath);
Index: trunk/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/actions/SearchNotesDownloadAction.java	(revision 12841)
@@ -41,5 +41,5 @@
     public void actionPerformed(ActionEvent e) {
         HistoryComboBox searchTermBox = new HistoryComboBox();
-        List<String> searchHistory = new LinkedList<>(Main.pref.getCollection(HISTORY_KEY, new LinkedList<String>()));
+        List<String> searchHistory = new LinkedList<>(Main.pref.getList(HISTORY_KEY, new LinkedList<String>()));
         Collections.reverse(searchHistory);
         searchTermBox.setPossibleItems(searchHistory);
@@ -70,5 +70,5 @@
 
         searchTermBox.addCurrentItemToHistory();
-        Main.pref.putCollection(HISTORY_KEY, searchTermBox.getHistory());
+        Main.pref.putList(HISTORY_KEY, searchTermBox.getHistory());
 
         performSearch(searchTerm);
@@ -91,6 +91,6 @@
         }
 
-        int noteLimit = Main.pref.getInteger("osm.notes.downloadLimit", 1000);
-        int closedLimit = Main.pref.getInteger("osm.notes.daysClosed", 7);
+        int noteLimit = Main.pref.getInt("osm.notes.downloadLimit", 1000);
+        int closedLimit = Main.pref.getInt("osm.notes.daysClosed", 7);
 
         StringBuilder sb = new StringBuilder(128);
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/DrawSnapHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/DrawSnapHelper.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/DrawSnapHelper.java	(revision 12841)
@@ -237,5 +237,5 @@
 
     private void computeSnapAngles() {
-        snapAngles = Main.pref.getCollection(DRAW_ANGLESNAP_ANGLES,
+        snapAngles = Main.pref.getList(DRAW_ANGLESNAP_ANGLES,
                 Arrays.asList("0", "30", "45", "60", "90", "120", "135", "150", "180"))
                 .stream()
@@ -259,5 +259,5 @@
      */
     public void saveAngles(String... angles) {
-        Main.pref.putCollection(DRAW_ANGLESNAP_ANGLES, Arrays.asList(angles));
+        Main.pref.putList(DRAW_ANGLESNAP_ANGLES, Arrays.asList(angles));
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 12841)
@@ -307,6 +307,6 @@
     @Override
     protected void readPreferences() {
-        initialMoveDelay = Main.pref.getInteger("edit.initial-move-delay", 200);
-        initialMoveThreshold = Main.pref.getInteger("extrude.initial-move-threshold", 1);
+        initialMoveDelay = Main.pref.getInt("edit.initial-move-delay", 200);
+        initialMoveThreshold = Main.pref.getInt("extrude.initial-move-threshold", 1);
         mainColor = new ColorProperty(marktr("Extrude: main line"), Color.RED).get();
         helperColor = new ColorProperty(marktr("Extrude: helper line"), Color.ORANGE).get();
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 12841)
@@ -202,8 +202,8 @@
         mv.addMouseListener(this);
         mv.addMouseMotionListener(this);
-        mv.setVirtualNodesEnabled(Main.pref.getInteger("mappaint.node.virtual-size", 8) != 0);
+        mv.setVirtualNodesEnabled(Main.pref.getInt("mappaint.node.virtual-size", 8) != 0);
         drawTargetHighlight = Main.pref.getBoolean("draw.target-highlight", true);
-        initialMoveDelay = Main.pref.getInteger("edit.initial-move-delay", 200);
-        initialMoveThreshold = Main.pref.getInteger("edit.initial-move-threshold", 5);
+        initialMoveDelay = Main.pref.getInt("edit.initial-move-delay", 200);
+        initialMoveThreshold = Main.pref.getInt("edit.initial-move-threshold", 5);
         repeatedKeySwitchLassoOption = Main.pref.getBoolean("mappaint.select.toggle-lasso-on-repeated-S", true);
         cycleManager.init();
@@ -828,5 +828,5 @@
             }
         }
-        int max = Main.pref.getInteger("warn.move.maxelements", 20), limit = max;
+        int max = Main.pref.getInt("warn.move.maxelements", 20), limit = max;
         for (OsmPrimitive osm : getLayerManager().getEditDataSet().getSelected()) {
             if (osm instanceof Way) {
@@ -1175,8 +1175,8 @@
 
         private void init() {
-            nodeVirtualSize = Main.pref.getInteger("mappaint.node.virtual-size", 8);
-            int virtualSnapDistSq = Main.pref.getInteger("mappaint.node.virtual-snap-distance", 8);
+            nodeVirtualSize = Main.pref.getInt("mappaint.node.virtual-size", 8);
+            int virtualSnapDistSq = Main.pref.getInt("mappaint.node.virtual-snap-distance", 8);
             virtualSnapDistSq2 = virtualSnapDistSq*virtualSnapDistSq;
-            virtualSpace = Main.pref.getInteger("mappaint.node.virtual-space", 70);
+            virtualSpace = Main.pref.getInt("mappaint.node.virtual-space", 70);
         }
 
Index: trunk/src/org/openstreetmap/josm/actions/relation/EditRelationAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/relation/EditRelationAction.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/actions/relation/EditRelationAction.java	(revision 12841)
@@ -70,5 +70,5 @@
     public void actionPerformed(ActionEvent e) {
         if (!isEnabled() || relations.isEmpty()) return;
-        if (relations.size() > Main.pref.getInteger("warn.open.maxrelations", 5) &&
+        if (relations.size() > Main.pref.getInt("warn.open.maxrelations", 5) &&
             /* I18N english text for value 1 makes no real sense, never called for values <= maxrel (usually 5) */
             JOptionPane.OK_OPTION != JOptionPane.showConfirmDialog(Main.parent,
Index: trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 12841)
@@ -112,5 +112,5 @@
         });
 
-        for (String s: Main.pref.getCollection("search.history", Collections.<String>emptyList())) {
+        for (String s: Main.pref.getList("search.history", Collections.<String>emptyList())) {
             SearchSetting ss = SearchSetting.readFromString(s);
             if (ss != null) {
@@ -140,5 +140,5 @@
             searchHistory.addFirst(new SearchSetting(s));
         }
-        int maxsize = Main.pref.getInteger("search.history-size", DEFAULT_SEARCH_HISTORY_SIZE);
+        int maxsize = Main.pref.getInt("search.history-size", DEFAULT_SEARCH_HISTORY_SIZE);
         while (searchHistory.size() > maxsize) {
             searchHistory.removeLast();
@@ -148,5 +148,5 @@
             savedHistory.add(item.writeToString());
         }
-        Main.pref.putCollection("search.history", savedHistory);
+        Main.pref.putList("search.history", new ArrayList<>(savedHistory));
     }
 
Index: trunk/src/org/openstreetmap/josm/command/SplitWayCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/SplitWayCommand.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/command/SplitWayCommand.java	(revision 12841)
@@ -273,5 +273,5 @@
 
         Collection<Command> commandList = new ArrayList<>(newWays.size());
-        Collection<String> nowarnroles = Main.pref.getCollection("way.split.roles.nowarn",
+        Collection<String> nowarnroles = Main.pref.getList("way.split.roles.nowarn",
                 Arrays.asList("outer", "inner", "forward", "backward", "north", "south", "east", "west"));
 
Index: trunk/src/org/openstreetmap/josm/data/PreferencesUtils.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/PreferencesUtils.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/PreferencesUtils.java	(revision 12841)
@@ -99,5 +99,5 @@
             } else if (entry.getValue() instanceof ListSetting) {
                 ListSetting lSetting = (ListSetting) entry.getValue();
-                Collection<String> newItems = getCollection(mainpref, key, true);
+                List<String> newItems = getList(mainpref, key, true);
                 if (newItems == null) continue;
                 for (String item : lSetting.getValue()) {
@@ -107,11 +107,11 @@
                     }
                 }
-                mainpref.putCollection(key, newItems);
+                mainpref.putList(key, newItems);
             } else if (entry.getValue() instanceof ListListSetting) {
                 ListListSetting llSetting = (ListListSetting) entry.getValue();
-                Collection<Collection<String>> newLists = getArray(mainpref, key, true);
+                List<List<String>> newLists = getListOfLists(mainpref, key, true);
                 if (newLists == null) continue;
 
-                for (Collection<String> list : llSetting.getValue()) {
+                for (List<String> list : llSetting.getValue()) {
                     // add nonexisting list (equals comparison for lists is used implicitly)
                     if (!newLists.contains(list)) {
@@ -119,5 +119,5 @@
                     }
                 }
-                mainpref.putArray(key, newLists);
+                mainpref.putListOfLists(key, newLists);
             } else if (entry.getValue() instanceof MapListSetting) {
                 MapListSetting mlSetting = (MapListSetting) entry.getValue();
@@ -133,5 +133,5 @@
                     }
                 }
-                mainpref.putListOfStructs(entry.getKey(), newMaps);
+                mainpref.putListOfMaps(entry.getKey(), newMaps);
             }
         }
@@ -155,5 +155,5 @@
             } else if (entry.getValue() instanceof ListSetting) {
                 ListSetting lSetting = (ListSetting) entry.getValue();
-                Collection<String> newItems = getCollection(mainpref, key, true);
+                List<String> newItems = getList(mainpref, key, true);
                 if (newItems == null) continue;
 
@@ -163,12 +163,12 @@
                     newItems.remove(item);
                 }
-                mainpref.putCollection(entry.getKey(), newItems);
+                mainpref.putList(entry.getKey(), newItems);
             } else if (entry.getValue() instanceof ListListSetting) {
                 ListListSetting llSetting = (ListListSetting) entry.getValue();
-                Collection<Collection<String>> newLists = getArray(mainpref, key, true);
+                List<List<String>> newLists = getListOfLists(mainpref, key, true);
                 if (newLists == null) continue;
 
                 // if items are found in one of lists, remove that list!
-                Iterator<Collection<String>> listIterator = newLists.iterator();
+                Iterator<List<String>> listIterator = newLists.iterator();
                 while (listIterator.hasNext()) {
                     Collection<String> list = listIterator.next();
@@ -182,5 +182,5 @@
                 }
 
-                mainpref.putArray(key, newLists);
+                mainpref.putListOfLists(key, newLists);
             } else if (entry.getValue() instanceof MapListSetting) {
                 MapListSetting mlSetting = (MapListSetting) entry.getValue();
@@ -199,5 +199,5 @@
                     }
                 }
-                mainpref.putListOfStructs(entry.getKey(), newMaps);
+                mainpref.putListOfMaps(entry.getKey(), newMaps);
             }
         }
@@ -223,5 +223,5 @@
     }
 
-    private static Collection<String> getCollection(Preferences mainpref, String key, boolean warnUnknownDefault) {
+    private static List<String> getList(Preferences mainpref, String key, boolean warnUnknownDefault) {
         ListSetting existing = Utils.cast(mainpref.settingsMap.get(key), ListSetting.class);
         ListSetting defaults = Utils.cast(mainpref.defaultsMap.get(key), ListSetting.class);
@@ -236,5 +236,5 @@
     }
 
-    private static Collection<Collection<String>> getArray(Preferences mainpref, String key, boolean warnUnknownDefault) {
+    private static List<List<String>> getListOfLists(Preferences mainpref, String key, boolean warnUnknownDefault) {
         ListListSetting existing = Utils.cast(mainpref.settingsMap.get(key), ListListSetting.class);
         ListListSetting defaults = Utils.cast(mainpref.defaultsMap.get(key), ListListSetting.class);
Index: trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/UndoRedoHandler.java	(revision 12841)
@@ -74,5 +74,5 @@
         // Currently you have to undo the commands one by one. If
         // this changes, a higher default value may be reasonable.
-        if (commands.size() > Main.pref.getInteger("undo.max", 1000)) {
+        if (commands.size() > Main.pref.getInt("undo.max", 1000)) {
             commands.removeFirst();
         }
Index: trunk/src/org/openstreetmap/josm/data/imagery/CachedTileLoaderFactory.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/CachedTileLoaderFactory.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/imagery/CachedTileLoaderFactory.java	(revision 12841)
@@ -72,6 +72,6 @@
 
         return getLoader(listener, cache,
-                (int) TimeUnit.SECONDS.toMillis(Main.pref.getInteger("socket.timeout.connect", 15)),
-                (int) TimeUnit.SECONDS.toMillis(Main.pref.getInteger("socket.timeout.read", 30)),
+                (int) TimeUnit.SECONDS.toMillis(Main.pref.getInt("socket.timeout.connect", 15)),
+                (int) TimeUnit.SECONDS.toMillis(Main.pref.getInt("socket.timeout.read", 30)),
                 headers);
     }
Index: trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java	(revision 12841)
@@ -817,7 +817,7 @@
     public void clearId() {
         if (this.id != null) {
-            Collection<String> newAddedIds = new TreeSet<>(Main.pref.getCollection("imagery.layers.addedIds"));
+            Collection<String> newAddedIds = new TreeSet<>(Main.pref.getList("imagery.layers.addedIds"));
             newAddedIds.add(this.id);
-            Main.pref.putCollection("imagery.layers.addedIds", newAddedIds);
+            Main.pref.putList("imagery.layers.addedIds", new ArrayList<>(newAddedIds));
         }
         setId(null);
Index: trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java	(revision 12841)
@@ -57,5 +57,5 @@
      */
     public static Collection<String> getImageryLayersSites() {
-        return Main.pref.getCollection("imagery.layers.sites", Arrays.asList(DEFAULT_LAYER_SITES));
+        return Main.pref.getList("imagery.layers.sites", Arrays.asList(DEFAULT_LAYER_SITES));
     }
 
@@ -236,5 +236,5 @@
         // add new default entries to the user selection
         boolean changed = false;
-        Collection<String> knownDefaults = new TreeSet<>(Main.pref.getCollection("imagery.layers.default"));
+        Collection<String> knownDefaults = new TreeSet<>(Main.pref.getList("imagery.layers.default"));
         Collection<String> newKnownDefaults = new TreeSet<>();
         for (ImageryInfo def : defaultLayers) {
@@ -279,5 +279,5 @@
             newKnownDefaults.addAll(knownDefaults);
         }
-        Main.pref.putCollection("imagery.layers.default", newKnownDefaults);
+        Main.pref.putList("imagery.layers.default", new ArrayList<>(newKnownDefaults));
 
         // automatically update user entries with same id as a default entry
Index: trunk/src/org/openstreetmap/josm/data/oauth/OAuthAccessTokenHolder.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/oauth/OAuthAccessTokenHolder.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/oauth/OAuthAccessTokenHolder.java	(revision 12841)
@@ -177,5 +177,5 @@
         CheckParameterUtil.ensureParameterNotNull(preferences, "preferences");
         CheckParameterUtil.ensureParameterNotNull(cm, "cm");
-        preferences.put("oauth.access-token.save-to-preferences", saveToPreferences);
+        preferences.putBoolean("oauth.access-token.save-to-preferences", saveToPreferences);
         try {
             if (!saveToPreferences) {
Index: trunk/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/osm/DefaultNameFormatter.java	(revision 12841)
@@ -105,5 +105,5 @@
         if (namingTagsForRelations == null) {
             namingTagsForRelations = new ArrayList<>(
-                    Main.pref.getCollection("relation.nameOrder", Arrays.asList(DEFAULT_NAMING_TAGS_FOR_RELATIONS))
+                    Main.pref.getList("relation.nameOrder", Arrays.asList(DEFAULT_NAMING_TAGS_FOR_RELATIONS))
                     );
         }
Index: trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 12841)
@@ -650,5 +650,5 @@
             l.addAll(getDiscardableKeys());
             l.addAll(getWorkInProgressKeys());
-            uninteresting = new HashSet<>(Main.pref.getCollection("tags.uninteresting", l));
+            uninteresting = new HashSet<>(Main.pref.getList("tags.uninteresting", l));
         }
         return uninteresting;
@@ -662,5 +662,5 @@
     public static Collection<String> getDiscardableKeys() {
         if (discardable == null) {
-            discardable = new HashSet<>(Main.pref.getCollection("tags.discardable",
+            discardable = new HashSet<>(Main.pref.getList("tags.discardable",
                     Arrays.asList(
                             "created_by",
@@ -720,5 +720,5 @@
     public static Collection<String> getWorkInProgressKeys() {
         if (workinprogress == null) {
-            workinprogress = new HashSet<>(Main.pref.getCollection("tags.workinprogress",
+            workinprogress = new HashSet<>(Main.pref.getList("tags.workinprogress",
                     Arrays.asList("note", "fixme", "FIXME")));
         }
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/AbstractMapRenderer.java	(revision 12841)
@@ -182,7 +182,7 @@
      */
     protected void getSettings(boolean virtual) {
-        this.virtualNodeSize = virtual ? Main.pref.getInteger("mappaint.node.virtual-size", 8) / 2 : 0;
-        this.virtualNodeSpace = Main.pref.getInteger("mappaint.node.virtual-space", 70);
-        this.segmentNumberSpace = Main.pref.getInteger("mappaint.segmentnumber.space", 40);
+        this.virtualNodeSize = virtual ? Main.pref.getInt("mappaint.node.virtual-size", 8) / 2 : 0;
+        this.virtualNodeSpace = Main.pref.getInt("mappaint.node.virtual-space", 70);
+        this.segmentNumberSpace = Main.pref.getInt("mappaint.segmentnumber.space", 40);
         getColors();
     }
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/ComputeStyleListWorker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/ComputeStyleListWorker.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/ComputeStyleListWorker.java	(revision 12841)
@@ -60,5 +60,5 @@
         this.output = output;
         this.directExecutionTaskSize = directExecutionTaskSize;
-        this.drawArea = circum <= Main.pref.getInteger("mappaint.fillareas", 10_000_000);
+        this.drawArea = circum <= Main.pref.getInt("mappaint.fillareas", 10_000_000);
         this.drawMultipolygon = drawArea && Main.pref.getBoolean("mappaint.multipolygon", true);
         this.drawRestriction = Main.pref.getBoolean("mappaint.restriction", true);
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPaintSettings.java	(revision 12841)
@@ -76,5 +76,5 @@
         showOnewayArrow = Main.pref.getBoolean("draw.oneway", true);
         useRealWidth = Main.pref.getBoolean("mappaint.useRealWidth", false);
-        defaultSegmentWidth = Main.pref.getInteger("mappaint.segment.default-width", 2);
+        defaultSegmentWidth = Main.pref.getInt("mappaint.segment.default-width", 2);
 
         selectedColor = PaintColors.SELECTED.get();
@@ -95,12 +95,12 @@
         showHeadArrowOnly = Main.pref.getBoolean("draw.segment.head_only", false);
 
-        showNamesDistance = Main.pref.getInteger("mappaint.shownames", 10_000_000);
-        useStrokesDistance = Main.pref.getInteger("mappaint.strokes", 10_000_000);
-        showIconsDistance = Main.pref.getInteger("mappaint.showicons", 10_000_000);
-
-        selectedNodeSize = Main.pref.getInteger("mappaint.node.selected-size", 5);
-        unselectedNodeSize = Main.pref.getInteger("mappaint.node.unselected-size", 3);
-        connectionNodeSize = Main.pref.getInteger("mappaint.node.connection-size", 5);
-        taggedNodeSize = Main.pref.getInteger("mappaint.node.tagged-size", 3);
+        showNamesDistance = Main.pref.getInt("mappaint.shownames", 10_000_000);
+        useStrokesDistance = Main.pref.getInt("mappaint.strokes", 10_000_000);
+        showIconsDistance = Main.pref.getInt("mappaint.showicons", 10_000_000);
+
+        selectedNodeSize = Main.pref.getInt("mappaint.node.selected-size", 5);
+        unselectedNodeSize = Main.pref.getInt("mappaint.node.unselected-size", 3);
+        connectionNodeSize = Main.pref.getInt("mappaint.node.connection-size", 5);
+        taggedNodeSize = Main.pref.getInt("mappaint.node.tagged-size", 3);
         fillSelectedNode = Main.pref.getBoolean("mappaint.node.fill-selected", true);
         fillUnselectedNode = Main.pref.getBoolean("mappaint.node.fill-unselected", false);
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/Multipolygon.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/Multipolygon.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/relations/Multipolygon.java	(revision 12841)
@@ -98,17 +98,17 @@
             if (Main.pref == null) return;
             Collection<String> literals;
-            literals = Main.pref.getCollection(PREF_KEY_OUTER_ROLES);
+            literals = Main.pref.getList(PREF_KEY_OUTER_ROLES);
             if (literals != null && !literals.isEmpty()) {
                 setNormalized(literals, outerExactRoles);
             }
-            literals = Main.pref.getCollection(PREF_KEY_OUTER_ROLE_PREFIXES);
+            literals = Main.pref.getList(PREF_KEY_OUTER_ROLE_PREFIXES);
             if (literals != null && !literals.isEmpty()) {
                 setNormalized(literals, outerRolePrefixes);
             }
-            literals = Main.pref.getCollection(PREF_KEY_INNER_ROLES);
+            literals = Main.pref.getList(PREF_KEY_INNER_ROLES);
             if (literals != null && !literals.isEmpty()) {
                 setNormalized(literals, innerExactRoles);
             }
-            literals = Main.pref.getCollection(PREF_KEY_INNER_ROLE_PREFIXES);
+            literals = Main.pref.getList(PREF_KEY_INNER_ROLE_PREFIXES);
             if (literals != null && !literals.isEmpty()) {
                 setNormalized(literals, innerRolePrefixes);
Index: trunk/src/org/openstreetmap/josm/data/preferences/sources/MapPaintPrefHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/preferences/sources/MapPaintPrefHelper.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/preferences/sources/MapPaintPrefHelper.java	(revision 12841)
@@ -4,4 +4,5 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -52,5 +53,5 @@
         boolean changed = false;
 
-        Collection<String> knownDefaults = new TreeSet<>(Main.pref.getCollection("mappaint.style.known-defaults"));
+        Collection<String> knownDefaults = new TreeSet<>(Main.pref.getList("mappaint.style.known-defaults"));
 
         Collection<ExtendedSourceEntry> defaults = getDefault();
@@ -70,5 +71,5 @@
             knownDefaults.add(def.url);
         }
-        Main.pref.putCollection("mappaint.style.known-defaults", knownDefaults);
+        Main.pref.putList("mappaint.style.known-defaults", new ArrayList<>(knownDefaults));
 
         // XML style is not bundled anymore
Index: trunk/src/org/openstreetmap/josm/data/preferences/sources/SourcePrefHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/preferences/sources/SourcePrefHelper.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/preferences/sources/SourcePrefHelper.java	(revision 12841)
@@ -58,5 +58,5 @@
     public List<SourceEntry> get() {
 
-        Collection<Map<String, String>> src = Main.pref.getListOfStructs(pref, (Collection<Map<String, String>>) null);
+        List<Map<String, String>> src = Main.pref.getListOfMaps(pref, null);
         if (src == null)
             return new ArrayList<>(getDefault());
@@ -78,6 +78,6 @@
      */
     public boolean put(Collection<? extends SourceEntry> entries) {
-        Collection<Map<String, String>> setting = serializeList(entries);
-        boolean unset = Main.pref.getListOfStructs(pref, (Collection<Map<String, String>>) null) == null;
+        List<Map<String, String>> setting = serializeList(entries);
+        boolean unset = Main.pref.getListOfMaps(pref, null) == null;
         if (unset) {
             Collection<Map<String, String>> def = serializeList(getDefault());
@@ -85,9 +85,9 @@
                 return false;
         }
-        return Main.pref.putListOfStructs(pref, setting);
+        return Main.pref.putListOfMaps(pref, setting);
     }
 
-    private Collection<Map<String, String>> serializeList(Collection<? extends SourceEntry> entries) {
-        Collection<Map<String, String>> setting = new ArrayList<>(entries.size());
+    private List<Map<String, String>> serializeList(Collection<? extends SourceEntry> entries) {
+        List<Map<String, String>> setting = new ArrayList<>(entries.size());
         for (SourceEntry e : entries) {
             setting.add(serialize(e));
Index: trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/validation/OsmValidator.java	(revision 12841)
@@ -282,5 +282,5 @@
 
     private static void applyPrefs(Map<String, Test> tests, boolean beforeUpload) {
-        for (String testName : Main.pref.getCollection(beforeUpload
+        for (String testName : Main.pref.getList(beforeUpload
         ? ValidatorPrefHelper.PREF_SKIP_TESTS_BEFORE_UPLOAD : ValidatorPrefHelper.PREF_SKIP_TESTS)) {
             Test test = tests.get(testName);
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/LongSegment.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/LongSegment.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/LongSegment.java	(revision 12841)
@@ -112,5 +112,5 @@
     public void startTest(ProgressMonitor monitor) {
         super.startTest(monitor);
-        maxlength = Main.pref.getInteger("validator.maximum.segment.length", 15_000);
+        maxlength = Main.pref.getInt("validator.maximum.segment.length", 15_000);
         reported = new HashSet<>();
         visitedWays = new HashSet<>();
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java	(revision 12841)
@@ -23,5 +23,5 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.WaySegment;
-import org.openstreetmap.josm.data.preferences.CollectionProperty;
+import org.openstreetmap.josm.data.preferences.ListProperty;
 import org.openstreetmap.josm.data.validation.Severity;
 import org.openstreetmap.josm.data.validation.Test;
@@ -50,5 +50,5 @@
     protected static final int DUPLICATE_WAY_SEGMENT = 121;
 
-    protected static final CollectionProperty IGNORED_KEYS = new CollectionProperty(
+    protected static final ListProperty IGNORED_KEYS = new ListProperty(
             "overlapping-ways.ignored-keys", Arrays.asList("barrier", "building", "historic:building", "man_made"));
 
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/TagChecker.java	(revision 12841)
@@ -13,5 +13,4 @@
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
@@ -159,5 +158,5 @@
     protected EditableList sourcesList;
 
-    private static final Set<String> DEFAULT_SOURCES = new HashSet<>(Arrays.asList(/*DATA_FILE, */IGNORE_FILE, SPELL_FILE));
+    private static final List<String> DEFAULT_SOURCES = Arrays.asList(/*DATA_FILE, */IGNORE_FILE, SPELL_FILE);
 
     /**
@@ -191,5 +190,5 @@
 
         StringBuilder errorSources = new StringBuilder();
-        for (String source : Main.pref.getCollection(PREF_SOURCES, DEFAULT_SOURCES)) {
+        for (String source : Main.pref.getList(PREF_SOURCES, DEFAULT_SOURCES)) {
             try (
                 CachedFile cf = new CachedFile(source);
@@ -293,5 +292,5 @@
             }
             // TODO directionKeys are no longer in OsmPrimitive (search pattern is used instead)
-            for (String a : Main.pref.getCollection(ValidatorPrefHelper.PREFIX + ".knownkeys",
+            for (String a : Main.pref.getList(ValidatorPrefHelper.PREFIX + ".knownkeys",
                     Arrays.asList("is_in", "int_ref", "fixme", "population"))) {
                 additionalPresetsValueData.putVoid(a);
@@ -636,5 +635,5 @@
         testPanel.add(prefCheckComplexBeforeUpload, a);
 
-        final Collection<String> sources = Main.pref.getCollection(PREF_SOURCES, DEFAULT_SOURCES);
+        final Collection<String> sources = Main.pref.getList(PREF_SOURCES, DEFAULT_SOURCES);
         sourcesList = new EditableList(tr("TagChecker source"));
         sourcesList.setItems(sources);
@@ -682,13 +681,13 @@
                 || prefCheckFixmesBeforeUpload.isSelected() || prefCheckComplexBeforeUpload.isSelected();
 
-        Main.pref.put(PREF_CHECK_VALUES, prefCheckValues.isSelected());
-        Main.pref.put(PREF_CHECK_COMPLEX, prefCheckComplex.isSelected());
-        Main.pref.put(PREF_CHECK_KEYS, prefCheckKeys.isSelected());
-        Main.pref.put(PREF_CHECK_FIXMES, prefCheckFixmes.isSelected());
-        Main.pref.put(PREF_CHECK_VALUES_BEFORE_UPLOAD, prefCheckValuesBeforeUpload.isSelected());
-        Main.pref.put(PREF_CHECK_COMPLEX_BEFORE_UPLOAD, prefCheckComplexBeforeUpload.isSelected());
-        Main.pref.put(PREF_CHECK_KEYS_BEFORE_UPLOAD, prefCheckKeysBeforeUpload.isSelected());
-        Main.pref.put(PREF_CHECK_FIXMES_BEFORE_UPLOAD, prefCheckFixmesBeforeUpload.isSelected());
-        return Main.pref.putCollection(PREF_SOURCES, sourcesList.getItems());
+        Main.pref.putBoolean(PREF_CHECK_VALUES, prefCheckValues.isSelected());
+        Main.pref.putBoolean(PREF_CHECK_COMPLEX, prefCheckComplex.isSelected());
+        Main.pref.putBoolean(PREF_CHECK_KEYS, prefCheckKeys.isSelected());
+        Main.pref.putBoolean(PREF_CHECK_FIXMES, prefCheckFixmes.isSelected());
+        Main.pref.putBoolean(PREF_CHECK_VALUES_BEFORE_UPLOAD, prefCheckValuesBeforeUpload.isSelected());
+        Main.pref.putBoolean(PREF_CHECK_COMPLEX_BEFORE_UPLOAD, prefCheckComplexBeforeUpload.isSelected());
+        Main.pref.putBoolean(PREF_CHECK_KEYS_BEFORE_UPLOAD, prefCheckKeysBeforeUpload.isSelected());
+        Main.pref.putBoolean(PREF_CHECK_FIXMES_BEFORE_UPLOAD, prefCheckFixmesBeforeUpload.isSelected());
+        return Main.pref.putList(PREF_SOURCES, sourcesList.getItems());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/ConditionalOptionPaneUtil.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/ConditionalOptionPaneUtil.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/ConditionalOptionPaneUtil.java	(revision 12841)
@@ -60,5 +60,5 @@
                 immediateChoices.get(prefKey),
                 sessionChoices.get(prefKey),
-                !Main.pref.getBoolean("message." + prefKey, true) ? Main.pref.getInteger("message." + prefKey + ".value", -1) : -1
+                !Main.pref.getBoolean("message." + prefKey, true) ? Main.pref.getInt("message." + prefKey + ".value", -1) : -1
         );
     }
@@ -239,6 +239,6 @@
                     break;
                 case PERMANENT:
-                    Main.pref.put("message." + prefKey, false);
-                    Main.pref.putInteger("message." + prefKey + ".value", value);
+                    Main.pref.putBoolean("message." + prefKey, false);
+                    Main.pref.putInt("message." + prefKey + ".value", value);
                     break;
             }
Index: trunk/src/org/openstreetmap/josm/gui/GettingStarted.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/GettingStarted.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/GettingStarted.java	(revision 12841)
@@ -95,5 +95,5 @@
             String motd = new WikiReader().readLang("StartupPage");
             // Save this to prefs in case JOSM is updated so MOTD can be refreshed
-            Main.pref.putInteger("cache.motd.html.version", myVersion);
+            Main.pref.putInt("cache.motd.html.version", myVersion);
             Main.pref.put("cache.motd.html.java", myJava);
             Main.pref.put("cache.motd.html.lang", myLang);
@@ -115,5 +115,5 @@
             // 2. Cannot be written (e.g. while developing). Obviously we don't want to update
             // everytime because of something we can't read.
-            return (Main.pref.getInteger("cache.motd.html.version", -999) == myVersion)
+            return (Main.pref.getInt("cache.motd.html.version", -999) == myVersion)
             && Main.pref.get("cache.motd.html.java").equals(myJava)
             && Main.pref.get("cache.motd.html.lang").equals(myLang);
Index: trunk/src/org/openstreetmap/josm/gui/IconToggleButton.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/IconToggleButton.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/IconToggleButton.java	(revision 12841)
@@ -120,5 +120,5 @@
             Main.pref.put(getPreferenceKey(), null);
         } else {
-            Main.pref.put(getPreferenceKey(), b);
+            Main.pref.putBoolean(getPreferenceKey(), b);
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 12841)
@@ -1252,5 +1252,5 @@
                 if (wasv6 && !hasv6) {
                     Logging.info(tr("Detected no useable IPv6 network, prefering IPv4 over IPv6 after next restart."));
-                    Main.pref.put("validated.ipv6", hasv6); // be sure it is stored before the restart!
+                    Main.pref.putBoolean("validated.ipv6", hasv6); // be sure it is stored before the restart!
                     try {
                         RestartAction.restartJOSM();
@@ -1259,5 +1259,5 @@
                     }
                 }
-                Main.pref.put("validated.ipv6", hasv6);
+                Main.pref.putBoolean("validated.ipv6", hasv6);
             }, "IPv6-checker").start();
         }
Index: trunk/src/org/openstreetmap/josm/gui/MainFrame.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainFrame.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/MainFrame.java	(revision 12841)
@@ -110,5 +110,5 @@
             geometry.remember("gui.geometry");
         }
-        Main.pref.put("gui.maximized", (windowState & JFrame.MAXIMIZED_BOTH) != 0);
+        Main.pref.putBoolean("gui.maximized", (windowState & JFrame.MAXIMIZED_BOTH) != 0);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/MapFrame.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/MapFrame.java	(revision 12841)
@@ -583,5 +583,5 @@
             public void actionPerformed(ActionEvent e) {
                 boolean sel = ((JCheckBoxMenuItem) e.getSource()).getState();
-                Main.pref.put("sidetoolbar.always-visible", sel);
+                Main.pref.putBoolean("sidetoolbar.always-visible", sel);
             }
         });
@@ -625,5 +625,5 @@
                 @Override
                 public void actionPerformed(ActionEvent e) {
-                    Main.pref.put("sidetoolbar.visible", false);
+                    Main.pref.putBoolean("sidetoolbar.visible", false);
                 }
             });
Index: trunk/src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 12841)
@@ -775,5 +775,5 @@
             public void actionPerformed(ActionEvent e) {
                 boolean sel = ((JCheckBoxMenuItem) e.getSource()).getState();
-                Main.pref.put("statusbar.always-visible", sel);
+                Main.pref.putBoolean("statusbar.always-visible", sel);
             }
         });
@@ -1079,5 +1079,5 @@
         // Compute total length of selected way(s) until an arbitrary limit set to 250 ways
         // in order to prevent performance issue if a large number of ways are selected (old behaviour kept in that case, see #8403)
-        int maxWays = Math.max(1, Main.pref.getInteger("selection.max-ways-for-statusline", 250));
+        int maxWays = Math.max(1, Main.pref.getInt("selection.max-ways-for-statusline", 250));
         if (!ways.isEmpty() && ways.size() <= maxWays) {
             dist = 0.0;
Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 12841)
@@ -871,5 +871,5 @@
         if ((now.getTime() - zoomTimestamp.getTime()) > (Main.pref.getDouble("zoom.undo.delay", 1.0) * 1000)) {
             zoomUndoBuffer.push(new ZoomData(center, scale));
-            if (zoomUndoBuffer.size() > Main.pref.getInteger("zoom.undo.max", 50)) {
+            if (zoomUndoBuffer.size() > Main.pref.getInt("zoom.undo.max", 50)) {
                 zoomUndoBuffer.remove(0);
             }
@@ -1144,8 +1144,8 @@
 
         if (ds != null) {
-            double snapDistanceSq = Main.pref.getInteger("mappaint.segment.snap-distance", 10);
+            double snapDistanceSq = Main.pref.getInt("mappaint.segment.snap-distance", 10);
             snapDistanceSq *= snapDistanceSq;
 
-            for (Way w : ds.searchWays(getBBox(p, Main.pref.getInteger("mappaint.segment.snap-distance", 10)))) {
+            for (Way w : ds.searchWays(getBBox(p, Main.pref.getInt("mappaint.segment.snap-distance", 10)))) {
                 if (!predicate.test(w)) {
                     continue;
Index: trunk/src/org/openstreetmap/josm/gui/Notification.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/Notification.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/Notification.java	(revision 12841)
@@ -43,15 +43,15 @@
      * E.g. "Please select at least one node".
      */
-    public static final int TIME_SHORT = Main.pref.getInteger("notification-time-short-ms", 3000);
+    public static final int TIME_SHORT = Main.pref.getInt("notification-time-short-ms", 3000);
 
     /**
      * Short message of one or two lines (5 s).
      */
-    public static final int TIME_DEFAULT = Main.pref.getInteger("notification-time-default-ms", 5000);
+    public static final int TIME_DEFAULT = Main.pref.getInt("notification-time-default-ms", 5000);
 
     /**
      * Somewhat longer message (10 s).
      */
-    public static final int TIME_LONG = Main.pref.getInteger("notification-time-long-ms", 10_000);
+    public static final int TIME_LONG = Main.pref.getInt("notification-time-long-ms", 10_000);
 
     /**
@@ -59,5 +59,5 @@
      * (Make sure is still sensible to show as a notification)
      */
-    public static final int TIME_VERY_LONG = Main.pref.getInteger("notification-time-very_long-ms", 20_000);
+    public static final int TIME_VERY_LONG = Main.pref.getInt("notification-time-very_long-ms", 20_000);
 
     private Component content;
Index: trunk/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java	(revision 12841)
@@ -82,5 +82,5 @@
                 int w = getWidth();
                 if (w > 200) {
-                    Main.pref.putInteger("progressdialog.size", w);
+                    Main.pref.putInt("progressdialog.size", w);
                 }
             }
@@ -98,5 +98,5 @@
         setDropTarget(null); // Workaround to JDK bug 7027598/7100524/7169912 (#8613)
         pack();
-        setSize(Main.pref.getInteger("progressdialog.size", 600), getSize().height);
+        setSize(Main.pref.getInt("progressdialog.size", 600), getSize().height);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java	(revision 12841)
@@ -162,5 +162,5 @@
             setFileCacheEnabled(Main.pref.getBoolean("slippy_map_chooser.file_cache", true));
         }
-        setMaxTilesInMemory(Main.pref.getInteger("slippy_map_chooser.max_tiles", 1000));
+        setMaxTilesInMemory(Main.pref.getInt("slippy_map_chooser.max_tiles", 1000));
 
         List<TileSource> tileSources = getAllTileSources();
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolver.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolver.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/TagConflictResolver.java	(revision 12841)
@@ -78,6 +78,6 @@
      */
     public void rememberPreferences() {
-        Main.pref.put(getClass().getName() + ".showTagsWithConflictsOnly", cbShowTagsWithConflictsOnly.isSelected());
-        Main.pref.put(getClass().getName() + ".showTagsWithMultiValuesOnly", cbShowTagsWithMultiValuesOnly.isSelected());
+        Main.pref.putBoolean(getClass().getName() + ".showTagsWithConflictsOnly", cbShowTagsWithConflictsOnly.isSelected());
+        Main.pref.putBoolean(getClass().getName() + ".showTagsWithMultiValuesOnly", cbShowTagsWithMultiValuesOnly.isSelected());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ChangesetDialog.java	(revision 12841)
@@ -275,5 +275,5 @@
         @Override
         public void itemStateChanged(ItemEvent e) {
-            Main.pref.put("changeset-dialog.for-selected-objects-only", cbInSelectionOnly.isSelected());
+            Main.pref.putBoolean("changeset-dialog.for-selected-objects-only", cbInSelectionOnly.isSelected());
             pnlList.removeAll();
             if (cbInSelectionOnly.isSelected()) {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/OsmIdSelectionDialog.java	(revision 12841)
@@ -180,5 +180,5 @@
     protected void restorePrimitivesHistory(HistoryComboBox cbHistory) {
         List<String> cmtHistory = new LinkedList<>(
-                Main.pref.getCollection(getClass().getName() + ".primitivesHistory", new LinkedList<String>()));
+                Main.pref.getList(getClass().getName() + ".primitivesHistory", new LinkedList<String>()));
         // we have to reverse the history, because ComboBoxHistory will reverse it again in addElement()
         Collections.reverse(cmtHistory);
@@ -193,5 +193,5 @@
     protected void remindPrimitivesHistory(HistoryComboBox cbHistory) {
         cbHistory.addCurrentItemToHistory();
-        Main.pref.putCollection(getClass().getName() + ".primitivesHistory", cbHistory.getHistory());
+        Main.pref.putList(getClass().getName() + ".primitivesHistory", cbHistory.getHistory());
     }
 
@@ -208,5 +208,5 @@
     public void setupDialog() {
         setContent(panel, false);
-        cbType.setSelectedIndex(Main.pref.getInteger("downloadprimitive.lasttype", 0));
+        cbType.setSelectedIndex(Main.pref.getInt("downloadprimitive.lasttype", 0));
         tfId.setType(cbType.getType());
         if (Main.pref.getBoolean("downloadprimitive.autopaste", true)) {
@@ -221,5 +221,5 @@
         String buf = ClipboardUtils.getClipboardStringContent();
         if (buf == null || buf.isEmpty()) return;
-        if (buf.length() > Main.pref.getInteger("downloadprimitive.max-autopaste-length", 2000)) return;
+        if (buf.length() > Main.pref.getInt("downloadprimitive.max-autopaste-length", 2000)) return;
         final List<SimplePrimitiveId> ids = SimplePrimitiveId.fuzzyParse(buf);
         if (!ids.isEmpty()) {
@@ -244,5 +244,5 @@
     @Override public void windowClosed(WindowEvent e) {
         if (e != null && e.getComponent() == this && getValue() == getContinueButtonIndex()) {
-            Main.pref.putInteger("downloadprimitive.lasttype", cbType.getSelectedIndex());
+            Main.pref.putInt("downloadprimitive.lasttype", cbType.getSelectedIndex());
 
             if (!tfId.readIds()) {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 12841)
@@ -524,5 +524,5 @@
                 }
             }
-            int maxsize = Main.pref.getInteger("select.history-size", SELECTION_HISTORY_SIZE);
+            int maxsize = Main.pref.getInt("select.history-size", SELECTION_HISTORY_SIZE);
             while (history.size() > maxsize) {
                 history.removeLast();
@@ -662,6 +662,6 @@
          */
         public synchronized void sort() {
-            if (selection.size() <= Main.pref.getInteger("selection.no_sort_above", 100_000)) {
-                boolean quick = selection.size() > Main.pref.getInteger("selection.fast_sort_above", 10_000);
+            if (selection.size() <= Main.pref.getInt("selection.no_sort_above", 100_000)) {
+                boolean quick = selection.size() > Main.pref.getInt("selection.fast_sort_above", 10_000);
                 Comparator<OsmPrimitive> c = Main.pref.getBoolean("selection.sort_relations_before_ways", true)
                         ? OsmPrimitiveComparator.orderingRelationsWaysNodes()
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 12841)
@@ -773,5 +773,5 @@
     protected void setIsShowing(boolean val) {
         isShowing = val;
-        Main.pref.put(preferencePrefix+".visible", val);
+        Main.pref.putBoolean(preferencePrefix+".visible", val);
         stateChanged();
     }
@@ -782,5 +782,5 @@
         }
         isDocked = val;
-        Main.pref.put(preferencePrefix+".docked", val);
+        Main.pref.putBoolean(preferencePrefix+".docked", val);
         stateChanged();
     }
@@ -788,5 +788,5 @@
     protected void setIsCollapsed(boolean val) {
         isCollapsed = val;
-        Main.pref.put(preferencePrefix+".minimized", val);
+        Main.pref.putBoolean(preferencePrefix+".minimized", val);
         stateChanged();
     }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/AdvancedChangesetQueryPanel.java	(revision 12841)
@@ -209,8 +209,8 @@
      */
     public void rememberSettings() {
-        Main.pref.put("changeset-query.advanced.user-restrictions", cbUserRestriction.isSelected());
-        Main.pref.put("changeset-query.advanced.open-restrictions", cbOpenAndCloseRestrictions.isSelected());
-        Main.pref.put("changeset-query.advanced.time-restrictions", cbTimeRestrictions.isSelected());
-        Main.pref.put("changeset-query.advanced.bbox-restrictions", cbBoundingBoxRestriction.isSelected());
+        Main.pref.putBoolean("changeset-query.advanced.user-restrictions", cbUserRestriction.isSelected());
+        Main.pref.putBoolean("changeset-query.advanced.open-restrictions", cbOpenAndCloseRestrictions.isSelected());
+        Main.pref.putBoolean("changeset-query.advanced.time-restrictions", cbTimeRestrictions.isSelected());
+        Main.pref.putBoolean("changeset-query.advanced.bbox-restrictions", cbBoundingBoxRestriction.isSelected());
 
         pnlUserRestriction.rememberSettings();
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/BasicChangesetQueryPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/BasicChangesetQueryPanel.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/BasicChangesetQueryPanel.java	(revision 12841)
@@ -191,5 +191,5 @@
             Main.pref.put("changeset-query.basic.query", q.toString());
         }
-        Main.pref.put("changeset-query.basic.my-changesets-only", cbMyChangesetsOnly.isSelected());
+        Main.pref.putBoolean("changeset-query.basic.my-changesets-only", cbMyChangesetsOnly.isSelected());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollection.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/RecentTagCollection.java	(revision 12841)
@@ -12,5 +12,5 @@
 import org.openstreetmap.josm.data.osm.search.SearchSetting;
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
-import org.openstreetmap.josm.data.preferences.CollectionProperty;
+import org.openstreetmap.josm.data.preferences.ListProperty;
 
 /**
@@ -44,5 +44,5 @@
     }
 
-    public void loadFromPreference(CollectionProperty property) {
+    public void loadFromPreference(ListProperty property) {
         recentTags.clear();
         Iterator<String> it = property.get().iterator();
@@ -54,5 +54,5 @@
     }
 
-    public void saveToPreference(CollectionProperty property) {
+    public void saveToPreference(ListProperty property) {
         List<String> c = new ArrayList<>(recentTags.size() * 2);
         for (Tag t : recentTags.keySet()) {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(revision 12841)
@@ -73,5 +73,5 @@
 import org.openstreetmap.josm.data.osm.search.SearchSetting;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
-import org.openstreetmap.josm.data.preferences.CollectionProperty;
+import org.openstreetmap.josm.data.preferences.ListProperty;
 import org.openstreetmap.josm.data.preferences.EnumProperty;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
@@ -128,5 +128,5 @@
             DEFAULT_LRU_TAGS_NUMBER);
     /** The preference storage of recent tags */
-    public static final CollectionProperty PROPERTY_RECENT_TAGS = new CollectionProperty("properties.recent-tags",
+    public static final ListProperty PROPERTY_RECENT_TAGS = new ListProperty("properties.recent-tags",
             Collections.<String>emptyList());
     public static final StringProperty PROPERTY_TAGS_TO_IGNORE = new StringProperty("properties.recent-tags.ignore",
Index: trunk/src/org/openstreetmap/josm/gui/download/BookmarkList.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/download/BookmarkList.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/download/BookmarkList.java	(revision 12841)
@@ -300,5 +300,5 @@
      */
     public final void save() {
-        List<Collection<String>> coll = new LinkedList<>();
+        List<List<String>> coll = new LinkedList<>();
         for (Object o : ((DefaultListModel<Bookmark>) getModel()).toArray()) {
             if (o instanceof HomeLocationBookmark || o instanceof ChangesetBookmark) {
@@ -315,5 +315,5 @@
             coll.add(Arrays.asList(array));
         }
-        Main.pref.putArray("bookmarks", coll);
+        Main.pref.putListOfLists("bookmarks", coll);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/download/DownloadObjectDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/download/DownloadObjectDialog.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/download/DownloadObjectDialog.java	(revision 12841)
@@ -103,7 +103,7 @@
         super.windowClosed(e);
         if (e != null && e.getComponent() == this && getValue() == 1) {
-            Main.pref.put("downloadprimitive.referrers", referrers.isSelected());
-            Main.pref.put("downloadprimitive.full", fullRel.isSelected());
-            Main.pref.put("download.newlayer", newLayer.isSelected());
+            Main.pref.putBoolean("downloadprimitive.referrers", referrers.isSelected());
+            Main.pref.putBoolean("downloadprimitive.full", fullRel.isSelected());
+            Main.pref.putBoolean("download.newlayer", newLayer.isSelected());
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/download/OverpassQueryList.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/download/OverpassQueryList.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/download/OverpassQueryList.java	(revision 12841)
@@ -244,5 +244,5 @@
      */
     private void savePreferences() {
-        Collection<Map<String, String>> toSave = new ArrayList<>(this.items.size());
+        List<Map<String, String>> toSave = new ArrayList<>(this.items.size());
         for (SelectorItem item : this.items.values()) {
             Map<String, String> it = new HashMap<>();
@@ -254,5 +254,5 @@
         }
 
-        Main.pref.putListOfStructs(PREFERENCE_ITEMS, toSave);
+        Main.pref.putListOfMaps(PREFERENCE_ITEMS, toSave);
     }
 
@@ -263,5 +263,5 @@
     private static Map<String, SelectorItem> restorePreferences() {
         Collection<Map<String, String>> toRetrieve =
-                Main.pref.getListOfStructs(PREFERENCE_ITEMS, Collections.emptyList());
+                Main.pref.getListOfMaps(PREFERENCE_ITEMS, Collections.emptyList());
         Map<String, SelectorItem> result = new HashMap<>();
 
Index: trunk/src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/download/OverpassQueryWizardDialog.java	(revision 12841)
@@ -20,5 +20,5 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.preferences.CollectionProperty;
+import org.openstreetmap.josm.data.preferences.ListProperty;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -47,6 +47,6 @@
     private static final String SPAN_START = "<span>";
     private static final String SPAN_END = "</span>";
-    private static final CollectionProperty OVERPASS_WIZARD_HISTORY =
-            new CollectionProperty("download.overpass.wizard", new ArrayList<String>());
+    private static final ListProperty OVERPASS_WIZARD_HISTORY =
+            new ListProperty("download.overpass.wizard", new ArrayList<String>());
     private final transient OverpassTurboQueryWizard overpassQueryBuilder;
 
Index: trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java	(revision 12841)
@@ -115,5 +115,5 @@
         cbSearchExpression = new HistoryComboBox();
         cbSearchExpression.setToolTipText(tr("Enter a place name to search for"));
-        List<String> cmtHistory = new LinkedList<>(Main.pref.getCollection(HISTORY_KEY, new LinkedList<String>()));
+        List<String> cmtHistory = new LinkedList<>(Main.pref.getList(HISTORY_KEY, new LinkedList<String>()));
         Collections.reverse(cmtHistory);
         cbSearchExpression.setPossibleItems(cmtHistory);
@@ -189,5 +189,5 @@
                 return;
             cbSearchExpression.addCurrentItemToHistory();
-            Main.pref.putCollection(HISTORY_KEY, cbSearchExpression.getHistory());
+            Main.pref.putList(HISTORY_KEY, cbSearchExpression.getHistory());
             NameQueryTask task = new NameQueryTask(cbSearchExpression.getText());
             MainApplication.worker.submit(task);
Index: trunk/src/org/openstreetmap/josm/gui/history/VersionTable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/VersionTable.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/history/VersionTable.java	(revision 12841)
@@ -341,5 +341,5 @@
         Object val = tbl.getColumnModel().getColumn(col).getHeaderValue();
         Component comp = tcr.getTableCellRendererComponent(tbl, val, false, false, -1, col);
-        maxwidth = Math.max(comp.getPreferredSize().width + Main.pref.getInteger("table.header-inset", 0), maxwidth);
+        maxwidth = Math.max(comp.getPreferredSize().width + Main.pref.getInt("table.header-inset", 0), maxwidth);
 
         int spacing = tbl.getIntercellSpacing().width;
Index: trunk/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java	(revision 12841)
@@ -78,5 +78,5 @@
         hcbUploadComment.setToolTipText(tr("Enter an upload comment"));
         hcbUploadComment.setMaxTextLength(Changeset.MAX_CHANGESET_TAG_LENGTH);
-        List<String> cmtHistory = new LinkedList<>(Main.pref.getCollection(HISTORY_KEY, new LinkedList<String>()));
+        List<String> cmtHistory = new LinkedList<>(Main.pref.getList(HISTORY_KEY, new LinkedList<String>()));
         Collections.reverse(cmtHistory); // we have to reverse the history, because ComboBoxHistory will reverse it again in addElement()
         hcbUploadComment.setPossibleItems(cmtHistory);
@@ -100,5 +100,5 @@
         hcbUploadSource.setToolTipText(tr("Enter a source"));
         hcbUploadSource.setMaxTextLength(Changeset.MAX_CHANGESET_TAG_LENGTH);
-        List<String> sourceHistory = new LinkedList<>(Main.pref.getCollection(SOURCE_HISTORY_KEY, getDefaultSources()));
+        List<String> sourceHistory = new LinkedList<>(Main.pref.getList(SOURCE_HISTORY_KEY, getDefaultSources()));
         Collections.reverse(sourceHistory); // we have to reverse the history, because ComboBoxHistory will reverse it again in addElement()
         hcbUploadSource.setPossibleItems(sourceHistory);
@@ -166,9 +166,9 @@
         // store the history of comments
         hcbUploadComment.addCurrentItemToHistory();
-        Main.pref.putCollection(HISTORY_KEY, hcbUploadComment.getHistory());
-        Main.pref.putInteger(HISTORY_LAST_USED_KEY, (int) (TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())));
+        Main.pref.putList(HISTORY_KEY, hcbUploadComment.getHistory());
+        Main.pref.putInt(HISTORY_LAST_USED_KEY, (int) (TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())));
         // store the history of sources
         hcbUploadSource.addCurrentItemToHistory();
-        Main.pref.putCollection(SOURCE_HISTORY_KEY, hcbUploadSource.getHistory());
+        Main.pref.putList(SOURCE_HISTORY_KEY, hcbUploadSource.getHistory());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java	(revision 12841)
@@ -256,9 +256,9 @@
             case ItemEvent.SELECTED:
                 firePropertyChange(CLOSE_CHANGESET_AFTER_UPLOAD, false, true);
-                Main.pref.put("upload.changeset.close", true);
+                Main.pref.putBoolean("upload.changeset.close", true);
                 break;
             case ItemEvent.DESELECTED:
                 firePropertyChange(CLOSE_CHANGESET_AFTER_UPLOAD, true, false);
-                Main.pref.put("upload.changeset.close", false);
+                Main.pref.putBoolean("upload.changeset.close", false);
                 break;
             default: // Do nothing
Index: trunk/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/io/CustomConfigurator.java	(revision 12841)
@@ -400,5 +400,5 @@
                         MainApplication.worker.submit(pluginDownloadTask);
                     }
-                    Collection<String> pls = new ArrayList<>(Main.pref.getCollection("plugins"));
+                    List<String> pls = new ArrayList<>(Main.pref.getList("plugins"));
                     for (PluginInformation pi2: toInstallPlugins) {
                         if (!pls.contains(pi2.name)) {
@@ -413,5 +413,5 @@
                         new File(Main.pref.getPluginsDirectory(), pi4.name+".jar").deleteOnExit();
                     }
-                    Main.pref.putCollection("plugins", pls);
+                    Main.pref.putList("plugins", pls);
                 });
             }
Index: trunk/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/io/RecentlyOpenedFilesMenu.java	(revision 12841)
@@ -58,5 +58,5 @@
     private void rebuild() {
         removeAll();
-        Collection<String> fileHistory = Main.pref.getCollection("file-open.history");
+        Collection<String> fileHistory = Main.pref.getList("file-open.history");
 
         for (final String file : fileHistory) {
@@ -101,5 +101,5 @@
         @Override
         public void actionPerformed(ActionEvent e) {
-            Main.pref.putCollection("file-open.history", null);
+            Main.pref.putList("file-open.history", null);
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 12841)
@@ -653,6 +653,6 @@
 
     private static String getLastChangesetTagFromHistory(String historyKey, List<String> def) {
-        Collection<String> history = Main.pref.getCollection(historyKey, def);
-        int age = (int) (System.currentTimeMillis() / 1000 - Main.pref.getInteger(BasicUploadSettingsPanel.HISTORY_LAST_USED_KEY, 0));
+        Collection<String> history = Main.pref.getList(historyKey, def);
+        int age = (int) (System.currentTimeMillis() / 1000 - Main.pref.getInt(BasicUploadSettingsPanel.HISTORY_LAST_USED_KEY, 0));
         if (history != null && age < Main.pref.getLong(BasicUploadSettingsPanel.HISTORY_MAX_AGE_KEY, TimeUnit.HOURS.toMillis(4))
                 && !history.isEmpty()) {
Index: trunk/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java	(revision 12841)
@@ -323,5 +323,5 @@
         UploadStrategy strategy = UploadStrategy.getFromPreferences();
         rbStrategy.get(strategy).setSelected(true);
-        int chunkSize = Main.pref.getInteger("osm-server.upload-strategy.chunk-size", 1);
+        int chunkSize = Main.pref.getInt("osm-server.upload-strategy.chunk-size", 1);
         tfChunkSize.setText(Integer.toString(chunkSize));
         updateNumRequestsLabels();
@@ -337,5 +337,5 @@
         try {
             chunkSize = Integer.parseInt(tfChunkSize.getText().trim());
-            Main.pref.putInteger("osm-server.upload-strategy.chunk-size", chunkSize);
+            Main.pref.putInt("osm-server.upload-strategy.chunk-size", chunkSize);
         } catch (NumberFormatException e) {
             // don't save invalid value to preferences
Index: trunk/src/org/openstreetmap/josm/gui/io/importexport/GpxExporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/importexport/GpxExporter.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/io/importexport/GpxExporter.java	(revision 12841)
@@ -162,5 +162,5 @@
         setCanceled(false);
 
-        Main.pref.put("lastAddAuthor", author.isSelected());
+        Main.pref.putBoolean("lastAddAuthor", author.isSelected());
         if (!authorName.getText().isEmpty()) {
             Main.pref.put("lastAuthorName", authorName.getText());
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java	(revision 12841)
@@ -174,5 +174,5 @@
                 Main.pref.put("geoimage.timezone", timezone.formatTimezone());
                 Main.pref.put("geoimage.delta", delta.formatOffset());
-                Main.pref.put("geoimage.showThumbs", yLayer.useThumbs);
+                Main.pref.putBoolean("geoimage.showThumbs", yLayer.useThumbs);
 
                 yLayer.useThumbs = cbShowThumbs.isSelected();
Index: trunk/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/layer/gpx/ConvertToDataLayerAction.java	(revision 12841)
@@ -119,5 +119,5 @@
             for (Marker marker : layer.data) {
                 final Node node = new Node(marker.getCoor());
-                final Collection<String> mapping = Main.pref.getCollection("gpx.to-osm-mapping", Arrays.asList(
+                final Collection<String> mapping = Main.pref.getList("gpx.to-osm-mapping", Arrays.asList(
                         GpxConstants.GPX_NAME, "name",
                         GpxConstants.GPX_DESC, "description",
Index: trunk/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/layer/gpx/DateFilterPanel.java	(revision 12841)
@@ -105,5 +105,5 @@
         Main.pref.putLong(prefDateMin, dateFrom.getDate().getTime());
         Main.pref.putLong(prefDateMax, dateTo.getDate().getTime());
-        Main.pref.put(prefDate0, noTimestampCb.isSelected());
+        Main.pref.putBoolean(prefDate0, noTimestampCb.isSelected());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongPanel.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/layer/gpx/DownloadAlongPanel.java	(revision 12841)
@@ -85,5 +85,5 @@
             add(new JLabel(tr("Download near:")), GBC.eol());
             downloadNear = new JList<>(new String[]{tr("track only"), tr("waypoints only"), tr("track and waypoints")});
-            downloadNear.setSelectedIndex(Main.pref.getInteger(prefNear, 0));
+            downloadNear.setSelectedIndex(Main.pref.getInt(prefNear, 0));
             add(downloadNear, GBC.eol());
         } else {
@@ -138,10 +138,10 @@
      */
     protected final void rememberSettings() {
-        Main.pref.put(prefOsm, isDownloadOsmData());
-        Main.pref.put(prefGps, isDownloadGpxData());
+        Main.pref.putBoolean(prefOsm, isDownloadOsmData());
+        Main.pref.putBoolean(prefGps, isDownloadGpxData());
         Main.pref.putDouble(prefDist, getDistance());
         Main.pref.putDouble(prefArea, getArea());
         if (prefNear != null) {
-            Main.pref.putInteger(prefNear, getNear());
+            Main.pref.putInt(prefNear, getNear());
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java	(revision 12841)
@@ -183,5 +183,5 @@
 
     private void setupColors() {
-        hdopAlpha = Main.pref.getInteger("hdop.color.alpha", -1);
+        hdopAlpha = Main.pref.getInt("hdop.color.alpha", -1);
         velocityScale = ColorScale.createHSBScale(256);
         /** Colors (without custom alpha channel, if given) for HDOP painting. **/
@@ -320,7 +320,7 @@
         colorModeDynamic = Main.pref.getBoolean("draw.rawgps.colors.dynamic", spec, false);
         /* good HDOP's are between 1 and 3, very bad HDOP's go into 3 digit values */
-        hdoprange = Main.pref.getInteger("hdop.range", 7);
-        minTrackDurationForTimeColoring = Main.pref.getInteger("draw.rawgps.date-coloring-min-dt", 60);
-        largePointAlpha = Main.pref.getInteger("draw.rawgps.large.alpha", -1) & 0xFF;
+        hdoprange = Main.pref.getInt("hdop.range", 7);
+        minTrackDurationForTimeColoring = Main.pref.getInt("draw.rawgps.date-coloring-min-dt", 60);
+        largePointAlpha = Main.pref.getInt("draw.rawgps.large.alpha", -1) & 0xFF;
 
         // get heatmap parameters
Index: trunk/src/org/openstreetmap/josm/gui/layer/imagery/ReprojectionTile.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/imagery/ReprojectionTile.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/layer/imagery/ReprojectionTile.java	(revision 12841)
@@ -159,5 +159,5 @@
 
         ImageWarp.PointTransform transform;
-        int stride = Main.pref.getInteger("imagery.warp.projection-interpolation.stride", 7);
+        int stride = Main.pref.getInt("imagery.warp.projection-interpolation.stride", 7);
         if (stride > 0) {
             transform = new ImageWarp.GridTransform(pointTransform, stride);
Index: trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/PlayHeadMarker.java	(revision 12841)
@@ -64,5 +64,5 @@
         enabled = Main.pref.getBoolean("marker.traceaudio", true);
         if (!enabled) return;
-        dropTolerance = Main.pref.getInteger("marker.playHeadDropTolerance", 50);
+        dropTolerance = Main.pref.getInt("marker.playHeadDropTolerance", 50);
         if (MainApplication.isDisplayingMapView()) {
             MapFrame map = MainApplication.getMap();
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java	(revision 12841)
@@ -256,5 +256,5 @@
         }
 
-        Collection<String> prefIconDirs = Main.pref.getCollection("mappaint.icon.sources");
+        Collection<String> prefIconDirs = Main.pref.getList("mappaint.icon.sources");
         for (String fileset : prefIconDirs) {
             String[] a;
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/StyleSetting.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/StyleSetting.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/StyleSetting.java	(revision 12841)
@@ -79,5 +79,5 @@
                 Main.pref.put(prefKey, null);
             } else {
-                Main.pref.put(prefKey, b);
+                Main.pref.putBoolean(prefKey, b);
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/AreaElement.java	(revision 12841)
@@ -90,5 +90,5 @@
             );
 
-            fillImage.alpha = Utils.clamp(Main.pref.getInteger("mappaint.fill-image-alpha", 255), 0, 255);
+            fillImage.alpha = Utils.clamp(Main.pref.getInt("mappaint.fill-image-alpha", 255), 0, 255);
             Integer pAlpha = Utils.colorFloat2int(c.get(FILL_OPACITY, null, float.class));
             if (pAlpha != null) {
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/LabelCompositionStrategy.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/LabelCompositionStrategy.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/LabelCompositionStrategy.java	(revision 12841)
@@ -238,8 +238,8 @@
             } else {
                 this.nameTags = new ArrayList<>(
-                        Main.pref.getCollection("mappaint.nameOrder", Arrays.asList(DEFAULT_NAME_TAGS))
+                        Main.pref.getList("mappaint.nameOrder", Arrays.asList(DEFAULT_NAME_TAGS))
                 );
                 this.nameComplementTags = new ArrayList<>(
-                        Main.pref.getCollection("mappaint.nameComplementOrder", Arrays.asList(DEFAULT_NAME_COMPLEMENT_TAGS))
+                        Main.pref.getList("mappaint.nameComplementOrder", Arrays.asList(DEFAULT_NAME_COMPLEMENT_TAGS))
                 );
             }
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java	(revision 12841)
@@ -196,5 +196,5 @@
         mapImage.offsetY = Math.round(offsetYF);
 
-        mapImage.alpha = Utils.clamp(Main.pref.getInteger("mappaint.icon-image-alpha", 255), 0, 255);
+        mapImage.alpha = Utils.clamp(Main.pref.getInt("mappaint.icon-image-alpha", 255), 0, 255);
         Integer pAlpha = Utils.colorFloat2int(c.get(keys[ICON_OPACITY_IDX], null, float.class));
         if (pAlpha != null) {
@@ -357,8 +357,8 @@
             // However, it would be better, if the settings could be changed at runtime.
             int size = max(
-                    Main.pref.getInteger("mappaint.node.selected-size", 5),
-                    Main.pref.getInteger("mappaint.node.unselected-size", 3),
-                    Main.pref.getInteger("mappaint.node.connection-size", 5),
-                    Main.pref.getInteger("mappaint.node.tagged-size", 3)
+                    Main.pref.getInt("mappaint.node.selected-size", 5),
+                    Main.pref.getInt("mappaint.node.unselected-size", 3),
+                    Main.pref.getInt("mappaint.node.connection-size", 5),
+                    Main.pref.getInt("mappaint.node.tagged-size", 3)
             );
             return new SimpleBoxProvider(new Rectangle(-size/2, -size/2, size, size));
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/StyleElement.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/StyleElement.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/styleelement/StyleElement.java	(revision 12841)
@@ -148,5 +148,5 @@
                 s = defaultFontSize;
                 if (s == null) {
-                    defaultFontSize = s = (float) Main.pref.getInteger("mappaint.fontsize", 8);
+                    defaultFontSize = s = (float) Main.pref.getInt("mappaint.fontsize", 8);
                 }
             }
Index: trunk/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/oauth/AdvancedOAuthPropertiesPanel.java	(revision 12841)
@@ -281,5 +281,5 @@
     public void rememberPreferences(Preferences pref) {
         CheckParameterUtil.ensureParameterNotNull(pref, "pref");
-        pref.put("oauth.settings.use-default", cbUseDefaults.isSelected());
+        pref.putBoolean("oauth.settings.use-default", cbUseDefaults.isSelected());
         if (cbUseDefaults.isSelected()) {
             new OAuthParameters(null, null, null, null, null, null, null).rememberPreferences(pref);
Index: trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/SourceEditor.java	(revision 12841)
@@ -423,8 +423,8 @@
 
             if (!iconPaths.isEmpty()) {
-                if (Main.pref.putCollection(iconPref, iconPaths)) {
+                if (Main.pref.putList(iconPref, iconPaths)) {
                     changed = true;
                 }
-            } else if (Main.pref.putCollection(iconPref, null)) {
+            } else if (Main.pref.putList(iconPref, null)) {
                 changed = true;
             }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/ToolbarPreferences.java	(revision 12841)
@@ -496,5 +496,5 @@
             @Override
             public void actionPerformed(ActionEvent e) {
-                Collection<String> t = new LinkedList<>(getToolString());
+                List<String> t = new LinkedList<>(getToolString());
                 ActionParser parser = new ActionParser(null);
                 // get text definition of current action
@@ -502,5 +502,5 @@
                 // remove the button from toolbar preferences
                 t.remove(res);
-                Main.pref.putCollection("toolbar", t);
+                Main.pref.putList("toolbar", t);
                 MainApplication.getToolbar().refreshToolbarControl();
             }
@@ -532,6 +532,6 @@
             public void actionPerformed(ActionEvent e) {
                 boolean sel = ((JCheckBoxMenuItem) e.getSource()).getState();
-                Main.pref.put("toolbar.always-visible", sel);
-                Main.pref.put("menu.always-visible", sel);
+                Main.pref.putBoolean("toolbar.always-visible", sel);
+                Main.pref.putBoolean("menu.always-visible", sel);
             }
         });
@@ -971,5 +971,5 @@
         @Override
         public boolean ok() {
-            Collection<String> t = new LinkedList<>();
+            List<String> t = new LinkedList<>();
             ActionParser parser = new ActionParser(null);
             for (int i = 0; i < selected.size(); ++i) {
@@ -987,5 +987,5 @@
                 t = Collections.singletonList(EMPTY_TOOLBAR_MARKER);
             }
-            Main.pref.putCollection("toolbar", t);
+            Main.pref.putList("toolbar", t);
             MainApplication.getToolbar().refreshToolbarControl();
             return false;
@@ -1074,5 +1074,5 @@
     public static Collection<String> getToolString() {
 
-        Collection<String> toolStr = Main.pref.getCollection("toolbar", Arrays.asList(deftoolbar));
+        Collection<String> toolStr = Main.pref.getList("toolbar", Arrays.asList(deftoolbar));
         if (toolStr == null || toolStr.isEmpty()) {
             toolStr = Arrays.asList(deftoolbar);
@@ -1214,5 +1214,5 @@
             }
         }
-        Main.pref.putCollection("toolbar", t);
+        Main.pref.putList("toolbar", t);
         MainApplication.getToolbar().refreshToolbarControl();
     }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/audio/AudioPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/audio/AudioPreference.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/audio/AudioPreference.java	(revision 12841)
@@ -133,12 +133,12 @@
     @Override
     public boolean ok() {
-        Main.pref.put("audio.menuinvisible", !audioMenuVisible.isSelected());
-        Main.pref.put("marker.traceaudio", markerAudioTraceVisible.isSelected());
-        Main.pref.put("marker.buttonlabels", markerButtonLabels.isSelected());
-        Main.pref.put("marker.audiofromexplicitwaypoints", audioMarkersFromExplicitWaypoints.isSelected());
-        Main.pref.put("marker.audiofromuntimedwaypoints", audioMarkersFromUntimedWaypoints.isSelected());
-        Main.pref.put("marker.audiofromnamedtrackpoints", audioMarkersFromNamedTrackpoints.isSelected());
-        Main.pref.put("marker.audiofromwavtimestamps", audioMarkersFromWavTimestamps.isSelected());
-        Main.pref.put("marker.audiofromstart", audioMarkersFromStart.isSelected());
+        Main.pref.putBoolean("audio.menuinvisible", !audioMenuVisible.isSelected());
+        Main.pref.putBoolean("marker.traceaudio", markerAudioTraceVisible.isSelected());
+        Main.pref.putBoolean("marker.buttonlabels", markerButtonLabels.isSelected());
+        Main.pref.putBoolean("marker.audiofromexplicitwaypoints", audioMarkersFromExplicitWaypoints.isSelected());
+        Main.pref.putBoolean("marker.audiofromuntimedwaypoints", audioMarkersFromUntimedWaypoints.isSelected());
+        Main.pref.putBoolean("marker.audiofromnamedtrackpoints", audioMarkersFromNamedTrackpoints.isSelected());
+        Main.pref.putBoolean("marker.audiofromwavtimestamps", audioMarkersFromWavTimestamps.isSelected());
+        Main.pref.putBoolean("marker.audiofromstart", audioMarkersFromStart.isSelected());
         Main.pref.put("audio.forwardbackamount", audioForwardBackAmount.getText());
         Main.pref.put("audio.fastfwdmultiplier", audioFastForwardMultiplier.getText());
Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/DrawingPreference.java	(revision 12841)
@@ -109,5 +109,5 @@
         // virtual nodes
         virtualNodes.setToolTipText(tr("Draw virtual nodes in select mode for easy way modification."));
-        virtualNodes.setSelected(Main.pref.getInteger("mappaint.node.virtual-size", 8) != 0);
+        virtualNodes.setSelected(Main.pref.getInt("mappaint.node.virtual-size", 8) != 0);
 
         // background layers in inactive color
@@ -195,20 +195,20 @@
     public boolean ok() {
         boolean restart = gpxPanel.savePreferences();
-        Main.pref.put("draw.data.area_outline_only", outlineOnly.isSelected());
-        Main.pref.put("draw.segment.direction", directionHint.isSelected());
-        Main.pref.put("draw.segment.head_only", headArrow.isSelected());
-        Main.pref.put("draw.oneway", onewayArrow.isSelected());
-        Main.pref.put("draw.segment.order_number", segmentOrderNumber.isSelected());
-        Main.pref.put("draw.segment.order_number.on_selected", segmentOrderNumberOnSelectedWay.isSelected());
-        Main.pref.put("draw.data.downloaded_area", sourceBounds.isSelected());
-        Main.pref.put("draw.data.inactive_color", inactive.isSelected());
-        Main.pref.put("mappaint.use-antialiasing", useAntialiasing.isSelected());
-        Main.pref.put("mappaint.wireframe.use-antialiasing", useWireframeAntialiasing.isSelected());
-        Main.pref.put("draw.target-highlight", useHighlighting.isSelected());
-        Main.pref.put("draw.helper-line", drawHelperLine.isSelected());
-        Main.pref.put("display.discardable-keys", discardableKeys.isSelected());
+        Main.pref.putBoolean("draw.data.area_outline_only", outlineOnly.isSelected());
+        Main.pref.putBoolean("draw.segment.direction", directionHint.isSelected());
+        Main.pref.putBoolean("draw.segment.head_only", headArrow.isSelected());
+        Main.pref.putBoolean("draw.oneway", onewayArrow.isSelected());
+        Main.pref.putBoolean("draw.segment.order_number", segmentOrderNumber.isSelected());
+        Main.pref.putBoolean("draw.segment.order_number.on_selected", segmentOrderNumberOnSelectedWay.isSelected());
+        Main.pref.putBoolean("draw.data.downloaded_area", sourceBounds.isSelected());
+        Main.pref.putBoolean("draw.data.inactive_color", inactive.isSelected());
+        Main.pref.putBoolean("mappaint.use-antialiasing", useAntialiasing.isSelected());
+        Main.pref.putBoolean("mappaint.wireframe.use-antialiasing", useWireframeAntialiasing.isSelected());
+        Main.pref.putBoolean("draw.target-highlight", useHighlighting.isSelected());
+        Main.pref.putBoolean("draw.helper-line", drawHelperLine.isSelected());
+        Main.pref.putBoolean("display.discardable-keys", discardableKeys.isSelected());
         AutoFilterManager.PROP_AUTO_FILTER_ENABLED.put(autoFilters.isSelected());
         AutoFilterManager.PROP_AUTO_FILTER_RULE.put(((AutoFilterRule) autoFilterRules.getSelectedItem()).getKey());
-        int vn = Main.pref.getInteger("mappaint.node.virtual-size", 8);
+        int vn = Main.pref.getInt("mappaint.node.virtual-size", 8);
         if (virtualNodes.isSelected()) {
             if (vn < 1) {
@@ -218,5 +218,5 @@
             vn = 0;
         }
-        Main.pref.putInteger("mappaint.node.virtual-size", vn);
+        Main.pref.putInt("mappaint.node.virtual-size", vn);
         return restart;
     }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/GPXSettingsPanel.java	(revision 12841)
@@ -454,5 +454,5 @@
             layerNameDot = "";
         }
-        Main.pref.put("marker.makeautomarkers"+layerNameDot, makeAutoMarkers.isSelected());
+        Main.pref.putBoolean("marker.makeautomarkers"+layerNameDot, makeAutoMarkers.isSelected());
         if (drawRawGpsLinesGlobal.isSelected()) {
             Main.pref.put("draw.rawgps.lines" + layerNameDot, null);
@@ -466,23 +466,23 @@
         } else {
             if (layerName == null || !locLayer) {
-                Main.pref.put("draw.rawgps.lines" + layerNameDot, drawRawGpsLinesAll.isSelected());
+                Main.pref.putBoolean("draw.rawgps.lines" + layerNameDot, drawRawGpsLinesAll.isSelected());
                 Main.pref.put("draw.rawgps.max-line-length" + layerNameDot, drawRawGpsMaxLineLength.getText());
             }
             if (layerName == null || locLayer) {
-                Main.pref.put("draw.rawgps.lines.local" + layerNameDot, drawRawGpsLinesAll.isSelected() || drawRawGpsLinesLocal.isSelected());
+                Main.pref.putBoolean("draw.rawgps.lines.local" + layerNameDot, drawRawGpsLinesAll.isSelected() || drawRawGpsLinesLocal.isSelected());
                 Main.pref.put("draw.rawgps.max-line-length.local" + layerNameDot, drawRawGpsMaxLineLengthLocal.getText());
             }
-            Main.pref.put("draw.rawgps.lines.force"+layerNameDot, forceRawGpsLines.isSelected());
-            Main.pref.put("draw.rawgps.direction"+layerNameDot, drawGpsArrows.isSelected());
-            Main.pref.put("draw.rawgps.alternatedirection"+layerNameDot, drawGpsArrowsFast.isSelected());
+            Main.pref.putBoolean("draw.rawgps.lines.force"+layerNameDot, forceRawGpsLines.isSelected());
+            Main.pref.putBoolean("draw.rawgps.direction"+layerNameDot, drawGpsArrows.isSelected());
+            Main.pref.putBoolean("draw.rawgps.alternatedirection"+layerNameDot, drawGpsArrowsFast.isSelected());
             Main.pref.put("draw.rawgps.min-arrow-distance"+layerNameDot, drawGpsArrowsMinDist.getText());
         }
 
-        Main.pref.put("draw.rawgps.hdopcircle"+layerNameDot, hdopCircleGpsPoints.isSelected());
-        Main.pref.put("draw.rawgps.large"+layerNameDot, largeGpsPoints.isSelected());
+        Main.pref.putBoolean("draw.rawgps.hdopcircle"+layerNameDot, hdopCircleGpsPoints.isSelected());
+        Main.pref.putBoolean("draw.rawgps.large"+layerNameDot, largeGpsPoints.isSelected());
         Main.pref.put("draw.rawgps.linewidth"+layerNameDot, drawLineWidth.getText());
-        Main.pref.put("draw.rawgps.lines.alpha-blend"+layerNameDot, drawLineWithAlpha.isSelected());
-
-        Main.pref.put("mappaint.gpx.use-antialiasing", useGpsAntialiasing.isSelected());
+        Main.pref.putBoolean("draw.rawgps.lines.alpha-blend"+layerNameDot, drawLineWithAlpha.isSelected());
+
+        Main.pref.putBoolean("mappaint.gpx.use-antialiasing", useGpsAntialiasing.isSelected());
 
         TemplateEntryProperty.forMarker(layerName).put(waypointLabelPattern.getText());
@@ -495,23 +495,23 @@
             return false;
         } else if (colorTypeVelocity.isSelected()) {
-            Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 1);
+            Main.pref.putInt("draw.rawgps.colors"+layerNameDot, 1);
         } else if (colorTypeDilution.isSelected()) {
-            Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 2);
+            Main.pref.putInt("draw.rawgps.colors"+layerNameDot, 2);
         } else if (colorTypeDirection.isSelected()) {
-            Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 3);
+            Main.pref.putInt("draw.rawgps.colors"+layerNameDot, 3);
         } else if (colorTypeTime.isSelected()) {
-            Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 4);
+            Main.pref.putInt("draw.rawgps.colors"+layerNameDot, 4);
         } else if (colorTypeHeatMap.isSelected()) {
-            Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 5);
+            Main.pref.putInt("draw.rawgps.colors"+layerNameDot, 5);
         } else {
-            Main.pref.putInteger("draw.rawgps.colors"+layerNameDot, 0);
-        }
-        Main.pref.put("draw.rawgps.colors.dynamic"+layerNameDot, colorDynamic.isSelected());
+            Main.pref.putInt("draw.rawgps.colors"+layerNameDot, 0);
+        }
+        Main.pref.putBoolean("draw.rawgps.colors.dynamic"+layerNameDot, colorDynamic.isSelected());
         int ccti = colorTypeVelocityTune.getSelectedIndex();
-        Main.pref.putInteger("draw.rawgps.colorTracksTune"+layerNameDot, ccti == 2 ? 10 : (ccti == 1 ? 20 : 45));
-        Main.pref.putInteger("draw.rawgps.heatmap.colormap"+layerNameDot, colorTypeHeatMapTune.getSelectedIndex());
-        Main.pref.put("draw.rawgps.heatmap.use-points"+layerNameDot, colorTypeHeatMapPoints.isSelected());
-        Main.pref.putInteger("draw.rawgps.heatmap.gain"+layerNameDot, colorTypeHeatMapGain.getValue());
-        Main.pref.putInteger("draw.rawgps.heatmap.lower-limit"+layerNameDot, colorTypeHeatMapLowerLimit.getValue());
+        Main.pref.putInt("draw.rawgps.colorTracksTune"+layerNameDot, ccti == 2 ? 10 : (ccti == 1 ? 20 : 45));
+        Main.pref.putInt("draw.rawgps.heatmap.colormap"+layerNameDot, colorTypeHeatMapTune.getSelectedIndex());
+        Main.pref.putBoolean("draw.rawgps.heatmap.use-points"+layerNameDot, colorTypeHeatMapPoints.isSelected());
+        Main.pref.putInt("draw.rawgps.heatmap.gain"+layerNameDot, colorTypeHeatMapGain.getValue());
+        Main.pref.putInt("draw.rawgps.heatmap.lower-limit"+layerNameDot, colorTypeHeatMapLowerLimit.getValue());
 
         return false;
Index: trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/display/LafPreference.java	(revision 12841)
@@ -202,11 +202,11 @@
     public boolean ok() {
         boolean mod = false;
-        Main.pref.put("draw.splashscreen", showSplashScreen.isSelected());
-        Main.pref.put("osm-primitives.showid", showID.isSelected());
-        Main.pref.put("osm-primitives.localize-name", showLocalizedName.isSelected());
+        Main.pref.putBoolean("draw.splashscreen", showSplashScreen.isSelected());
+        Main.pref.putBoolean("osm-primitives.showid", showID.isSelected());
+        Main.pref.putBoolean("osm-primitives.localize-name", showLocalizedName.isSelected());
         MapFrame.MODELESS.put(modeless.isSelected());
-        Main.pref.put(ToggleDialog.PROP_DYNAMIC_BUTTONS.getKey(), dynamicButtons.isSelected());
-        Main.pref.put(DateUtils.PROP_ISO_DATES.getKey(), isoDates.isSelected());
-        Main.pref.put(FileChooserManager.PROP_USE_NATIVE_FILE_DIALOG.getKey(), nativeFileChoosers.isSelected());
+        Main.pref.putBoolean(ToggleDialog.PROP_DYNAMIC_BUTTONS.getKey(), dynamicButtons.isSelected());
+        Main.pref.putBoolean(DateUtils.PROP_ISO_DATES.getKey(), isoDates.isSelected());
+        Main.pref.putBoolean(FileChooserManager.PROP_USE_NATIVE_FILE_DIALOG.getKey(), nativeFileChoosers.isSelected());
         MapMover.PROP_ZOOM_REVERSE_WHEEL.put(zoomReverseWheel.isSelected());
         NavigatableComponent.PROP_ZOOM_INTERMEDIATE_STEPS.put(zoomIntermediateSteps.isSelected());
Index: trunk/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/map/MapPaintPreference.java	(revision 12841)
@@ -105,5 +105,5 @@
         @Override
         public Collection<String> getInitialIconPathsList() {
-            return Main.pref.getCollection(ICONPREF, null);
+            return Main.pref.getList(ICONPREF, null);
         }
 
@@ -170,5 +170,5 @@
     @Override
     public boolean ok() {
-        boolean reload = Main.pref.put("mappaint.icon.enable-defaults", enableIconDefault.isSelected());
+        boolean reload = Main.pref.putBoolean("mappaint.icon.enable-defaults", enableIconDefault.isSelected());
         reload |= sources.finish();
         if (reload) {
Index: trunk/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/map/TaggingPresetPreference.java	(revision 12841)
@@ -206,5 +206,5 @@
         @Override
         public Collection<String> getInitialIconPathsList() {
-            return Main.pref.getCollection(ICONPREF, null);
+            return Main.pref.getList(ICONPREF, null);
         }
 
@@ -246,5 +246,5 @@
     @Override
     public boolean ok() {
-        boolean restart = Main.pref.put("taggingpreset.sortmenu", sortMenu.getSelectedObjects() != null);
+        boolean restart = Main.pref.putBoolean("taggingpreset.sortmenu", sortMenu.getSelectedObjects() != null);
         restart |= sources.finish();
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java	(revision 12841)
@@ -302,5 +302,5 @@
             List<String> l = new LinkedList<>(model.getSelectedPluginNames());
             Collections.sort(l);
-            Main.pref.putCollection("plugins", l);
+            Main.pref.putList("plugins", l);
             if (!model.getNewlyDeactivatedPlugins().isEmpty())
                 return true;
@@ -359,5 +359,5 @@
                         model.updateAvailablePlugins(task.getAvailablePlugins());
                         pnlPluginPreferences.refreshView();
-                        Main.pref.putInteger("pluginmanager.version", Version.getInstance().getVersion()); // fix #7030
+                        Main.pref.putInt("pluginmanager.version", Version.getInstance().getVersion()); // fix #7030
                     });
                 }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreferencesModel.java	(revision 12841)
@@ -40,5 +40,5 @@
     public PluginPreferencesModel() {
         currentActivePlugins = new HashSet<>();
-        currentActivePlugins.addAll(Main.pref.getCollection("plugins", currentActivePlugins));
+        currentActivePlugins.addAll(Main.pref.getList("plugins"));
     }
 
@@ -80,5 +80,5 @@
         filterDisplayedPlugins(filterExpression);
         Set<String> activePlugins = new HashSet<>();
-        activePlugins.addAll(Main.pref.getCollection("plugins", activePlugins));
+        activePlugins.addAll(Main.pref.getList("plugins"));
         for (PluginInformation pi: availablePlugins) {
             if (selectedPluginsMap.get(pi) == null && activePlugins.contains(pi.name)) {
@@ -230,5 +230,5 @@
      */
     public void initFromPreferences() {
-        Collection<String> enabledPlugins = Main.pref.getCollection("plugins", null);
+        Collection<String> enabledPlugins = Main.pref.getList("plugins", null);
         if (enabledPlugins == null) {
             this.selectedPluginsMap.clear();
Index: trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginUpdatePolicyPanel.java	(revision 12841)
@@ -196,5 +196,5 @@
         }
         if (days == 0) {
-            days = Main.pref.getInteger("pluginmanager.time-based-update.interval", PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL);
+            days = Main.pref.getInt("pluginmanager.time-based-update.interval", PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL);
         }
         tfUpdateInterval.setText(Integer.toString(days));
@@ -235,5 +235,5 @@
             days = PluginHandler.DEFAULT_TIME_BASED_UPDATE_INTERVAL;
         }
-        Main.pref.putInteger("pluginmanager.time-based-update.interval", days);
+        Main.pref.putInt("pluginmanager.time-based-update.interval", days);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/projection/CustomProjectionChoice.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/projection/CustomProjectionChoice.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/projection/CustomProjectionChoice.java	(revision 12841)
@@ -72,8 +72,8 @@
                 }
             });
-            Collection<String> samples = Arrays.asList(
+            List<String> samples = Arrays.asList(
                     "+proj=lonlat +ellps=WGS84 +datum=WGS84 +bounds=-180,-90,180,90",
                     "+proj=tmerc +lat_0=0 +lon_0=9 +k_0=1 +x_0=3500000 +y_0=0 +ellps=bessel +nadgrids=BETA2007.gsb");
-            List<String> inputHistory = new LinkedList<>(Main.pref.getCollection("projection.custom.value.history", samples));
+            List<String> inputHistory = new LinkedList<>(Main.pref.getList("projection.custom.value.history", samples));
             Collections.reverse(inputHistory);
             cbInput.setPossibleItems(inputHistory);
@@ -149,5 +149,5 @@
         public void rememberHistory() {
             cbInput.addCurrentItemToHistory();
-            Main.pref.putCollection("projection.custom.value.history", cbInput.getHistory());
+            Main.pref.putList("projection.custom.value.history", cbInput.getHistory());
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/projection/ProjectionPreference.java	(revision 12841)
@@ -28,5 +28,5 @@
 import org.openstreetmap.josm.data.coor.conversion.CoordinateFormatManager;
 import org.openstreetmap.josm.data.coor.conversion.ICoordinateFormat;
-import org.openstreetmap.josm.data.preferences.CollectionProperty;
+import org.openstreetmap.josm.data.preferences.ListProperty;
 import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.data.projection.CustomProjection;
@@ -291,5 +291,5 @@
     private static final StringProperty PROP_PROJECTION_DEFAULT = new StringProperty("projection.default", mercator.getId());
     private static final StringProperty PROP_COORDINATES = new StringProperty("coordinates", null);
-    private static final CollectionProperty PROP_SUB_PROJECTION_DEFAULT = new CollectionProperty("projection.default.sub", null);
+    private static final ListProperty PROP_SUB_PROJECTION_DEFAULT = new ListProperty("projection.default.sub", null);
     private static final String[] unitsValues = ALL_SYSTEMS.keySet().toArray(new String[ALL_SYSTEMS.size()]);
     private static final String[] unitsValuesTr = new String[unitsValues.length];
@@ -482,8 +482,8 @@
         }
         id = pc.getId();
-        Main.pref.putCollection("projection.sub."+id, pref);
+        Main.pref.putList("projection.sub."+id, pref == null ? null : new ArrayList<>(pref));
         if (makeDefault) {
             PROP_PROJECTION_DEFAULT.put(id);
-            PROP_SUB_PROJECTION_DEFAULT.put(pref);
+            PROP_SUB_PROJECTION_DEFAULT.put(pref == null ? null : new ArrayList<>(pref));
         } else {
             projectionChoice = id;
@@ -560,5 +560,5 @@
      */
     public static Collection<String> getSubprojectionPreference(String pcId) {
-        return Main.pref.getCollection("projection.sub."+pcId, null);
+        return Main.pref.getList("projection.sub."+pcId, null);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/remotecontrol/RemoteControlPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/remotecontrol/RemoteControlPreference.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/remotecontrol/RemoteControlPreference.java	(revision 12841)
@@ -196,8 +196,8 @@
         if (enabled) {
             for (Entry<PermissionPrefWithDefault, JCheckBox> p : prefs.entrySet()) {
-                Main.pref.put(p.getKey().pref, p.getValue().isSelected());
-            }
-            Main.pref.put(RequestHandler.loadInNewLayerKey, loadInNewLayer.isSelected());
-            Main.pref.put(RequestHandler.globalConfirmationKey, alwaysAskUserConfirm.isSelected());
+                Main.pref.putBoolean(p.getKey().pref, p.getValue().isSelected());
+            }
+            Main.pref.putBoolean(RequestHandler.loadInNewLayerKey, loadInNewLayer.isSelected());
+            Main.pref.putBoolean(RequestHandler.globalConfirmationKey, alwaysAskUserConfirm.isSelected());
         }
         if (changed) {
Index: trunk/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/server/OsmApiUrlInputPanel.java	(revision 12841)
@@ -28,5 +28,5 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.preferences.CollectionProperty;
+import org.openstreetmap.josm.data.preferences.ListProperty;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.help.HelpUtil;
@@ -58,5 +58,5 @@
     /** indicates whether to use the default OSM URL or not */
     private JCheckBox cbUseDefaultServerUrl;
-    private final transient CollectionProperty SERVER_URL_HISTORY = new CollectionProperty("osm-server.url-history", Arrays.asList(
+    private final transient ListProperty SERVER_URL_HISTORY = new ListProperty("osm-server.url-history", Arrays.asList(
             "http://api06.dev.openstreetmap.org/api", "http://master.apis.dev.openstreetmap.org/api"));
 
Index: trunk/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/validator/ValidatorTestsPreference.java	(revision 12841)
@@ -97,6 +97,6 @@
     @Override
     public boolean ok() {
-        Collection<String> tests = new LinkedList<>();
-        Collection<String> testsBeforeUpload = new LinkedList<>();
+        List<String> tests = new LinkedList<>();
+        List<String> testsBeforeUpload = new LinkedList<>();
 
         for (Test test : allTests) {
@@ -116,6 +116,6 @@
         OsmValidator.initializeTests(testsToInitialize);
 
-        Main.pref.putCollection(ValidatorPrefHelper.PREF_SKIP_TESTS, tests);
-        Main.pref.putCollection(ValidatorPrefHelper.PREF_SKIP_TESTS_BEFORE_UPLOAD, testsBeforeUpload);
+        Main.pref.putList(ValidatorPrefHelper.PREF_SKIP_TESTS, tests);
+        Main.pref.putList(ValidatorPrefHelper.PREF_SKIP_TESTS_BEFORE_UPLOAD, testsBeforeUpload);
         ValidatorPrefHelper.PREF_USE_IGNORE.put(prefUseIgnore.isSelected());
         ValidatorPrefHelper.PREF_OTHER.put(prefOther.isSelected());
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 12841)
@@ -210,5 +210,5 @@
         }
         File arch = TaggingPresetReader.getZipIcons();
-        final Collection<String> s = Main.pref.getCollection("taggingpreset.icon.sources", null);
+        final Collection<String> s = Main.pref.getList("taggingpreset.icon.sources", null);
         ImageProvider imgProv = new ImageProvider(iconName);
         imgProv.setDirs(s);
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetItem.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetItem.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetItem.java	(revision 12841)
@@ -127,5 +127,5 @@
 
     protected static ImageIcon loadImageIcon(String iconName, File zipIcons, Integer maxSize) {
-        final Collection<String> s = Main.pref.getCollection("taggingpreset.icon.sources", null);
+        final Collection<String> s = Main.pref.getList("taggingpreset.icon.sources", null);
         ImageProvider imgProv = new ImageProvider(iconName).setDirs(s).setId("presets").setArchive(zipIcons).setOptional(true);
         if (maxSize != null) {
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 12841)
@@ -91,5 +91,5 @@
             }
             for (JMenu submenu : submenus.values()) {
-                if (submenu.getItemCount() >= Main.pref.getInteger("taggingpreset.min-elements-for-scroller", 15)) {
+                if (submenu.getItemCount() >= Main.pref.getInt("taggingpreset.min-elements-for-scroller", 15)) {
                     MenuScroller.setScrollerFor(submenu);
                 }
Index: trunk/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/gui/widgets/HistoryComboBox.java	(revision 12841)
@@ -24,5 +24,5 @@
      */
     public HistoryComboBox() {
-        int maxsize = Main.pref.getInteger("search.history-size", DEFAULT_SEARCH_HISTORY_SIZE);
+        int maxsize = Main.pref.getInt("search.history-size", DEFAULT_SEARCH_HISTORY_SIZE);
         model = new ComboBoxHistory(maxsize);
         setModel(model);
Index: trunk/src/org/openstreetmap/josm/io/CacheCustomContent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/CacheCustomContent.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/io/CacheCustomContent.java	(revision 12841)
@@ -91,5 +91,5 @@
             return false;
         }
-        return Main.pref.getInteger("cache." + ident, 0) + updateInterval < TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())
+        return Main.pref.getInt("cache." + ident, 0) + updateInterval < TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())
                 || !isCacheValid();
     }
@@ -141,5 +141,5 @@
         this.data = updateData();
         saveToDisk();
-        Main.pref.putInteger("cache." + ident, (int) (TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())));
+        Main.pref.putInt("cache." + ident, (int) (TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())));
         return data;
     }
Index: trunk/src/org/openstreetmap/josm/io/CachedFile.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/CachedFile.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/io/CachedFile.java	(revision 12841)
@@ -381,5 +381,5 @@
             if (!"file".equals(url.getProtocol())) {
                 String prefKey = getPrefKey(url, destDir);
-                List<String> localPath = new ArrayList<>(Main.pref.getCollection(prefKey));
+                List<String> localPath = new ArrayList<>(Main.pref.getList(prefKey));
                 if (localPath.size() == 2) {
                     File lfile = new File(localPath.get(1));
@@ -388,5 +388,5 @@
                     }
                 }
-                Main.pref.putCollection(prefKey, null);
+                Main.pref.putList(prefKey, null);
             }
         } catch (MalformedURLException e) {
@@ -419,5 +419,5 @@
         Long ifModifiedSince = null;
         File localFile = null;
-        List<String> localPathEntry = new ArrayList<>(Main.pref.getCollection(prefKey));
+        List<String> localPathEntry = new ArrayList<>(Main.pref.getList(prefKey));
         boolean offline = false;
         try {
@@ -476,5 +476,5 @@
                 if (localFile == null)
                     throw new AssertionError();
-                Main.pref.putCollection(prefKey,
+                Main.pref.putList(prefKey,
                         Arrays.asList(Long.toString(System.currentTimeMillis()), localPathEntry.get(1)));
                 return localFile;
@@ -488,5 +488,5 @@
             localFile = new File(destDir, localPath);
             if (Main.platform.rename(destDirFile, localFile)) {
-                Main.pref.putCollection(prefKey,
+                Main.pref.putList(prefKey,
                         Arrays.asList(Long.toString(System.currentTimeMillis()), localFile.toString()));
             } else {
Index: trunk/src/org/openstreetmap/josm/io/DefaultProxySelector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/DefaultProxySelector.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/io/DefaultProxySelector.java	(revision 12841)
@@ -161,5 +161,5 @@
         }
         proxyExceptions = new HashSet<>(
-            Main.pref.getCollection(PROXY_EXCEPTIONS,
+            Main.pref.getList(PROXY_EXCEPTIONS,
                     Arrays.asList("localhost", IPV4_LOOPBACK, IPV6_LOOPBACK))
         );
Index: trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/io/MultiFetchServerObjectReader.java	(revision 12841)
@@ -321,5 +321,5 @@
         // Build a list of fetchers that will  download smaller sets containing only MAX_IDS_PER_REQUEST (200) primitives each.
         // we will run up to MAX_DOWNLOAD_THREADS concurrent fetchers.
-        int threadsNumber = Main.pref.getInteger("osm.download.threads", OsmApi.MAX_DOWNLOAD_THREADS);
+        int threadsNumber = Main.pref.getInt("osm.download.threads", OsmApi.MAX_DOWNLOAD_THREADS);
         threadsNumber = Utils.clamp(threadsNumber, 1, OsmApi.MAX_DOWNLOAD_THREADS);
         final ExecutorService exec = Executors.newFixedThreadPool(
Index: trunk/src/org/openstreetmap/josm/io/OsmApi.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/io/OsmApi.java	(revision 12841)
@@ -593,5 +593,5 @@
      */
     protected int getMaxRetries() {
-        int ret = Main.pref.getInteger("osm-server.max-num-retries", DEFAULT_MAX_NUM_RETRIES);
+        int ret = Main.pref.getInt("osm-server.max-num-retries", DEFAULT_MAX_NUM_RETRIES);
         return Math.max(ret, 0);
     }
Index: trunk/src/org/openstreetmap/josm/io/OverpassDownloadReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OverpassDownloadReader.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/io/OverpassDownloadReader.java	(revision 12841)
@@ -33,5 +33,5 @@
 import org.openstreetmap.josm.data.osm.PrimitiveId;
 import org.openstreetmap.josm.data.preferences.BooleanProperty;
-import org.openstreetmap.josm.data.preferences.CollectionProperty;
+import org.openstreetmap.josm.data.preferences.ListProperty;
 import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
@@ -59,5 +59,5 @@
      * @since 12816
      */
-    public static final CollectionProperty OVERPASS_SERVER_HISTORY = new CollectionProperty("download.overpass.servers",
+    public static final ListProperty OVERPASS_SERVER_HISTORY = new ListProperty("download.overpass.servers",
             Arrays.asList("https://overpass-api.de/api/", "http://overpass.osm.rambler.ru/cgi/"));
     /**
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpServer.java	(revision 12841)
@@ -33,5 +33,5 @@
     public static void restartRemoteControlHttpServer() {
         stopRemoteControlHttpServer();
-        int port = Main.pref.getInteger("remote.control.port", 8111);
+        int port = Main.pref.getInt("remote.control.port", 8111);
         try {
             instance4 = new RemoteControlHttpServer(port, false);
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/RemoteControlHttpsServer.java	(revision 12841)
@@ -312,5 +312,5 @@
         stopRemoteControlHttpsServer();
         if (RemoteControl.PROP_REMOTECONTROL_HTTPS_ENABLED.get()) {
-            int port = Main.pref.getInteger("remote.control.https.port", HTTPS_PORT);
+            int port = Main.pref.getInt("remote.control.https.port", HTTPS_PORT);
             try {
                 instance4 = new RemoteControlHttpsServer(port, false);
Index: trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 12841)
@@ -422,5 +422,5 @@
         String togglePreferenceKey = null;
         int v = Version.getInstance().getVersion();
-        if (Main.pref.getInteger("pluginmanager.version", 0) < v) {
+        if (Main.pref.getInt("pluginmanager.version", 0) < v) {
             message =
                 "<html>"
@@ -434,5 +434,5 @@
             long tim = System.currentTimeMillis();
             long last = Main.pref.getLong("pluginmanager.lastupdate", 0);
-            Integer maxTime = Main.pref.getInteger("pluginmanager.time-based-update.interval", DEFAULT_TIME_BASED_UPDATE_INTERVAL);
+            Integer maxTime = Main.pref.getInt("pluginmanager.time-based-update.interval", DEFAULT_TIME_BASED_UPDATE_INTERVAL);
             long d = TimeUnit.MILLISECONDS.toDays(tim - last);
             if ((last <= 0) || (maxTime <= 0)) {
@@ -607,9 +607,9 @@
                     if (!task.getDownloadedPlugins().isEmpty()) {
                         // update plugin list in preferences
-                        Set<String> plugins = new HashSet<>(Main.pref.getCollection("plugins"));
+                        Set<String> plugins = new HashSet<>(Main.pref.getList("plugins"));
                         for (PluginInformation plugin : task.getDownloadedPlugins()) {
                             plugins.add(plugin.name);
                         }
-                        Main.pref.putCollection("plugins", plugins);
+                        Main.pref.putList("plugins", new ArrayList<>(plugins));
                         // restart
                         try {
@@ -969,5 +969,5 @@
         try {
             monitor.beginTask(tr("Determining plugins to load..."));
-            Set<String> plugins = new HashSet<>(Main.pref.getCollection("plugins", new LinkedList<String>()));
+            Set<String> plugins = new HashSet<>(Main.pref.getList("plugins", new LinkedList<String>()));
             Logging.debug("Plugins list initialized to {0}", plugins);
             String systemProp = System.getProperty("josm.plugins");
@@ -1157,5 +1157,5 @@
         if (pluginsWanted == null) {
             // if all plugins updated, remember the update because it was successful
-            Main.pref.putInteger("pluginmanager.version", Version.getInstance().getVersion());
+            Main.pref.putInt("pluginmanager.version", Version.getInstance().getVersion());
             Main.pref.put("pluginmanager.lastupdate", Long.toString(System.currentTimeMillis()));
         }
@@ -1450,7 +1450,5 @@
             return null;
 
-        Set<String> plugins = new HashSet<>(
-                Main.pref.getCollection("plugins", Collections.<String>emptySet())
-        );
+        Set<String> plugins = new HashSet<>(Main.pref.getList("plugins"));
         final PluginInformation pluginInfo = plugin.getPluginInformation();
         if (!plugins.contains(pluginInfo.name))
@@ -1467,5 +1465,5 @@
             // deactivate the plugin
             plugins.remove(plugin.getPluginInformation().name);
-            Main.pref.putCollection("plugins", plugins);
+            Main.pref.putList("plugins", new ArrayList<>(plugins));
             GuiHelper.runInEDTAndWait(() -> JOptionPane.showMessageDialog(
                     Main.parent,
@@ -1486,5 +1484,5 @@
      */
     public static Collection<String> getBugReportInformation() {
-        final Collection<String> pl = new TreeSet<>(Main.pref.getCollection("plugins", new LinkedList<>()));
+        final Collection<String> pl = new TreeSet<>(Main.pref.getList("plugins", new LinkedList<>()));
         for (final PluginProxy pp : pluginList) {
             PluginInformation pi = pp.getPluginInformation();
Index: trunk/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/plugins/ReadRemotePluginInformationTask.java	(revision 12841)
@@ -143,5 +143,5 @@
     protected String downloadPluginList(String site, final ProgressMonitor monitor) {
         /* replace %<x> with empty string or x=plugins (separated with comma) */
-        String pl = Utils.join(",", Main.pref.getCollection("plugins"));
+        String pl = Utils.join(",", Main.pref.getList("plugins"));
         String printsite = site.replaceAll("%<(.*)>", "");
         if (pl != null && !pl.isEmpty()) {
Index: trunk/src/org/openstreetmap/josm/tools/HttpClient.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/HttpClient.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/tools/HttpClient.java	(revision 12841)
@@ -45,10 +45,10 @@
     private URL url;
     private final String requestMethod;
-    private int connectTimeout = (int) TimeUnit.SECONDS.toMillis(Main.pref.getInteger("socket.timeout.connect", 15));
-    private int readTimeout = (int) TimeUnit.SECONDS.toMillis(Main.pref.getInteger("socket.timeout.read", 30));
+    private int connectTimeout = (int) TimeUnit.SECONDS.toMillis(Main.pref.getInt("socket.timeout.connect", 15));
+    private int readTimeout = (int) TimeUnit.SECONDS.toMillis(Main.pref.getInt("socket.timeout.read", 30));
     private byte[] requestBody;
     private long ifModifiedSince;
     private final Map<String, String> headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
-    private int maxRedirects = Main.pref.getInteger("socket.maxredirects", 5);
+    private int maxRedirects = Main.pref.getInt("socket.maxredirects", 5);
     private boolean useCache;
     private String reasonForRequest;
Index: trunk/src/org/openstreetmap/josm/tools/ImageProvider.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 12841)
@@ -122,13 +122,13 @@
     public enum ImageSizes {
         /** SMALL_ICON value of an Action */
-        SMALLICON(Main.pref.getInteger("iconsize.smallicon", 16)),
+        SMALLICON(Main.pref.getInt("iconsize.smallicon", 16)),
         /** LARGE_ICON_KEY value of an Action */
-        LARGEICON(Main.pref.getInteger("iconsize.largeicon", 24)),
+        LARGEICON(Main.pref.getInt("iconsize.largeicon", 24)),
         /** map icon */
-        MAP(Main.pref.getInteger("iconsize.map", 16)),
+        MAP(Main.pref.getInt("iconsize.map", 16)),
         /** map icon maximum size */
-        MAPMAX(Main.pref.getInteger("iconsize.mapmax", 48)),
+        MAPMAX(Main.pref.getInt("iconsize.mapmax", 48)),
         /** cursor icon size */
-        CURSOR(Main.pref.getInteger("iconsize.cursor", 32)),
+        CURSOR(Main.pref.getInt("iconsize.cursor", 32)),
         /** cursor overlay icon size */
         CURSOROVERLAY(CURSOR),
@@ -142,5 +142,5 @@
          * @since 8323
          */
-        LAYER(Main.pref.getInteger("iconsize.layer", 16)),
+        LAYER(Main.pref.getInt("iconsize.layer", 16)),
         /** Toolbar button icon size
          * @since 9253
@@ -150,14 +150,14 @@
          * @since 9253
          */
-        SIDEBUTTON(Main.pref.getInteger("iconsize.sidebutton", 20)),
+        SIDEBUTTON(Main.pref.getInt("iconsize.sidebutton", 20)),
         /** Settings tab icon size
          * @since 9253
          */
-        SETTINGS_TAB(Main.pref.getInteger("iconsize.settingstab", 48)),
+        SETTINGS_TAB(Main.pref.getInt("iconsize.settingstab", 48)),
         /**
          * The default image size
          * @since 9705
          */
-        DEFAULT(Main.pref.getInteger("iconsize.default", 24)),
+        DEFAULT(Main.pref.getInt("iconsize.default", 24)),
         /**
          * Splash dialog logo size
@@ -1013,10 +1013,10 @@
      */
     private static ImageResource getIfAvailableWiki(String name, ImageType type) {
-        final Collection<String> defaultBaseUrls = Arrays.asList(
+        final List<String> defaultBaseUrls = Arrays.asList(
                 "https://wiki.openstreetmap.org/w/images/",
                 "https://upload.wikimedia.org/wikipedia/commons/",
                 "https://wiki.openstreetmap.org/wiki/File:"
                 );
-        final Collection<String> baseUrls = Main.pref.getCollection("image-provider.wiki.urls", defaultBaseUrls);
+        final Collection<String> baseUrls = Main.pref.getList("image-provider.wiki.urls", defaultBaseUrls);
 
         final String fn = name.substring(name.lastIndexOf('/') + 1);
Index: trunk/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/tools/PlatformHookUnixoid.java	(revision 12841)
@@ -51,5 +51,5 @@
     @Override
     public void openUrl(String url) throws IOException {
-        for (String program : Main.pref.getCollection("browser.unix",
+        for (String program : Main.pref.getList("browser.unix",
                 Arrays.asList("xdg-open", "#DESKTOP#", "$BROWSER", "gnome-open", "kfmclient openURL", "firefox"))) {
             try {
Index: trunk/src/org/openstreetmap/josm/tools/Shortcut.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/tools/Shortcut.java	(revision 12841)
@@ -170,5 +170,5 @@
     // create a shortcut object from an string as saved in the preferences
     private Shortcut(String prefString) {
-        List<String> s = new ArrayList<>(Main.pref.getCollection(prefString));
+        List<String> s = new ArrayList<>(Main.pref.getList(prefString));
         this.shortText = prefString.substring(15);
         this.longText = s.get(0);
@@ -182,5 +182,5 @@
 
     private void saveDefault() {
-        Main.pref.getCollection("shortcut.entry."+shortText, Arrays.asList(longText,
+        Main.pref.getList("shortcut.entry."+shortText, Arrays.asList(longText,
             String.valueOf(requestedKey), String.valueOf(requestedGroup), String.valueOf(requestedKey),
             String.valueOf(getGroupModifier(requestedGroup)), String.valueOf(true), String.valueOf(false)));
@@ -190,7 +190,7 @@
     private boolean save() {
         if (isAutomatic() || isReset() || !isAssignedUser()) {
-            return Main.pref.putCollection("shortcut.entry."+shortText, null);
+            return Main.pref.putList("shortcut.entry."+shortText, null);
         } else {
-            return Main.pref.putCollection("shortcut.entry."+shortText, Arrays.asList(longText,
+            return Main.pref.putList("shortcut.entry."+shortText, Arrays.asList(longText,
                 String.valueOf(requestedKey), String.valueOf(requestedGroup), String.valueOf(assignedKey),
                 String.valueOf(assignedModifier), String.valueOf(assignedDefault), String.valueOf(assignedUser)));
Index: trunk/src/org/openstreetmap/josm/tools/TextTagParser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/TextTagParser.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/tools/TextTagParser.java	(revision 12841)
@@ -20,6 +20,6 @@
 
     // properties need JOSM restart to apply, modified rarely enough
-    private static final int MAX_KEY_LENGTH = Main.pref.getInteger("tags.paste.max-key-length", 50);
-    private static final int MAX_KEY_COUNT = Main.pref.getInteger("tags.paste.max-key-count", 30);
+    private static final int MAX_KEY_LENGTH = Main.pref.getInt("tags.paste.max-key-length", 50);
+    private static final int MAX_KEY_COUNT = Main.pref.getInt("tags.paste.max-key-count", 30);
     private static final String KEY_PATTERN = Main.pref.get("tags.paste.tag-pattern", "[0-9a-zA-Z:_]*");
     private static final int MAX_VALUE_LENGTH = 255;
Index: trunk/src/org/openstreetmap/josm/tools/Utils.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Utils.java	(revision 12840)
+++ trunk/src/org/openstreetmap/josm/tools/Utils.java	(revision 12841)
@@ -1246,5 +1246,5 @@
      */
     public static ForkJoinPool newForkJoinPool(String pref, final String nameFormat, final int threadPriority) {
-        int noThreads = Main.pref.getInteger(pref, Runtime.getRuntime().availableProcessors());
+        int noThreads = Main.pref.getInt(pref, Runtime.getRuntime().availableProcessors());
         return new ForkJoinPool(noThreads, new ForkJoinPool.ForkJoinWorkerThreadFactory() {
             final AtomicLong count = new AtomicLong(0);
