Index: trunk/src/org/openstreetmap/josm/data/APIDataSet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/APIDataSet.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/data/APIDataSet.java	(revision 12865)
@@ -282,10 +282,5 @@
 
         public Set<Relation> getChildren(Relation relation) {
-            Set<Relation> p = children.get(relation);
-            if (p == null) {
-                p = new HashSet<>();
-                children.put(relation, p);
-            }
-            return p;
+            return children.computeIfAbsent(relation, k -> new HashSet<>());
         }
 
Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 12865)
@@ -47,5 +47,4 @@
 import org.openstreetmap.josm.data.preferences.ColorProperty;
 import org.openstreetmap.josm.data.preferences.DoubleProperty;
-import org.openstreetmap.josm.spi.preferences.IPreferences;
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
 import org.openstreetmap.josm.data.preferences.ListListSetting;
@@ -63,4 +62,5 @@
 import org.openstreetmap.josm.spi.preferences.AbstractPreferences;
 import org.openstreetmap.josm.spi.preferences.IBaseDirectories;
+import org.openstreetmap.josm.spi.preferences.IPreferences;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.ColorHelper;
@@ -282,10 +282,5 @@
 
     private ListenerList<PreferenceChangedListener> listenersForKey(String key) {
-        ListenerList<PreferenceChangedListener> keyListener = keyListeners.get(key);
-        if (keyListener == null) {
-            keyListener = ListenerList.create();
-            keyListeners.put(key, keyListener);
-        }
-        return keyListener;
+        return keyListeners.computeIfAbsent(key, k -> ListenerList.create());
     }
 
Index: trunk/src/org/openstreetmap/josm/data/cache/CacheEntryAttributes.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/cache/CacheEntryAttributes.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/data/cache/CacheEntryAttributes.java	(revision 12865)
@@ -89,11 +89,6 @@
      */
     private long getLongAttr(String key) {
-        String val = attrs.get(key);
-        if (val == null) {
-            attrs.put(key, "0");
-            return 0;
-        }
         try {
-            return Long.parseLong(val);
+            return Long.parseLong(attrs.computeIfAbsent(key, k -> "0"));
         } catch (NumberFormatException e) {
             attrs.put(key, "0");
Index: trunk/src/org/openstreetmap/josm/data/cache/HostLimitQueue.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/cache/HostLimitQueue.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/data/cache/HostLimitQueue.java	(revision 12865)
@@ -159,9 +159,5 @@
         if (limit == null) {
             synchronized (hostSemaphores) {
-                limit = hostSemaphores.get(host);
-                if (limit == null) {
-                    limit = new Semaphore(hostLimit);
-                    hostSemaphores.put(host, limit);
-                }
+                limit = hostSemaphores.computeIfAbsent(host, k -> new Semaphore(hostLimit));
             }
         }
Index: trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java	(revision 12865)
@@ -68,10 +68,5 @@
             String deduplicationKey = getCacheKey();
             synchronized (inProgress) {
-                Set<TileLoaderListener> newListeners = inProgress.get(deduplicationKey);
-                if (newListeners == null) {
-                    newListeners = new HashSet<>();
-                    inProgress.put(deduplicationKey, newListeners);
-                }
-                newListeners.add(listener);
+                inProgress.computeIfAbsent(deduplicationKey, k -> new HashSet<>()).add(listener);
             }
         }
Index: trunk/src/org/openstreetmap/josm/data/osm/User.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/User.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/data/osm/User.java	(revision 12865)
@@ -74,10 +74,5 @@
         }
 
-        Long ouid = uid;
-        User user = userMap.get(ouid);
-        if (user == null) {
-            user = new User(uid, name);
-            userMap.put(ouid, user);
-        }
+        User user = userMap.computeIfAbsent(uid, k -> new User(uid, name));
         if (name != null) user.addName(name);
 
Index: trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/data/osm/history/HistoryDataSet.java	(revision 12865)
@@ -125,8 +125,5 @@
     public void put(HistoryOsmPrimitive primitive) {
         PrimitiveId id = new SimplePrimitiveId(primitive.getId(), primitive.getType());
-        if (data.get(id) == null) {
-            data.put(id, new ArrayList<HistoryOsmPrimitive>());
-        }
-        data.get(id).add(primitive);
+        data.computeIfAbsent(id, k-> new ArrayList<>()).add(primitive);
         fireHistoryUpdated(id);
     }
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(revision 12865)
@@ -315,13 +315,7 @@
      */
     public static List<List<WaySegment>> getSegments(Map<Point2D, List<WaySegment>> cellSegments, EastNorth n1, EastNorth n2) {
-
         List<List<WaySegment>> cells = new ArrayList<>();
         for (Point2D cell : ValUtil.getSegmentCells(n1, n2, OsmValidator.getGridDetail())) {
-            List<WaySegment> segments = cellSegments.get(cell);
-            if (segments == null) {
-                segments = new ArrayList<>();
-                cellSegments.put(cell, segments);
-            }
-            cells.add(segments);
+            cells.add(cellSegments.computeIfAbsent(cell, k -> new ArrayList<>()));
         }
         return cells;
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java	(revision 12865)
@@ -129,11 +129,5 @@
         Map<String, RoleInfo> map = new HashMap<>();
         for (RelationMember m : n.getMembers()) {
-            String role = m.getRole();
-            RoleInfo ri = map.get(role);
-            if (ri == null) {
-                ri = new RoleInfo();
-                map.put(role, ri);
-            }
-            ri.total++;
+            map.computeIfAbsent(m.getRole(), k -> new RoleInfo()).total++;
         }
         return map;
Index: trunk/src/org/openstreetmap/josm/data/validation/util/ValUtil.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/util/ValUtil.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/data/validation/util/ValUtil.java	(revision 12865)
@@ -56,10 +56,5 @@
         cell = new Point2D.Double(x0, y0);
         cellNodes.add(cell);
-        List<Way> ways = cellWays.get(cell);
-        if (ways == null) {
-            ways = new ArrayList<>();
-            cellWays.put(cell, ways);
-        }
-        cells.add(ways);
+        cells.add(cellWays.computeIfAbsent(cell, k -> new ArrayList<>()));
 
         // End of the way
@@ -67,10 +62,5 @@
         if (!cellNodes.contains(cell)) {
             cellNodes.add(cell);
-            ways = cellWays.get(cell);
-            if (ways == null) {
-                ways = new ArrayList<>();
-                cellWays.put(cell, ways);
-            }
-            cells.add(ways);
+            cells.add(cellWays.computeIfAbsent(cell, k -> new ArrayList<>()));
         }
 
@@ -87,10 +77,5 @@
         if (!cellNodes.contains(cell)) {
             cellNodes.add(cell);
-            ways = cellWays.get(cell);
-            if (ways == null) {
-                ways = new ArrayList<>();
-                cellWays.put(cell, ways);
-            }
-            cells.add(ways);
+            cells.add(cellWays.computeIfAbsent(cell, k -> new ArrayList<>()));
         }
 
@@ -99,10 +84,5 @@
         if (!cellNodes.contains(cell)) {
             cellNodes.add(cell);
-            ways = cellWays.get(cell);
-            if (ways == null) {
-                ways = new ArrayList<>();
-                cellWays.put(cell, ways);
-            }
-            cells.add(ways);
+            cells.add(cellWays.computeIfAbsent(cell, k -> new ArrayList<>()));
         }
         return cells;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationNodeMap.java	(revision 12865)
@@ -108,62 +108,26 @@
 
     private void addPair(Node n, int i) {
-        Set<Integer> ts = map.nodes.get(n);
-        if (ts == null) {
-            ts = new TreeSet<>();
-            map.nodes.put(n, ts);
-        }
-        ts.add(i);
-
-        Set<Node> ts2 = map.ways.get(i);
-        if (ts2 == null) {
-            ts2 = new TreeSet<>();
-            map.ways.put(i, ts2);
-        }
-        ts2.add(n);
+        map.nodes.computeIfAbsent(n, k -> new TreeSet<>()).add(i);
+        map.ways.computeIfAbsent(i, k -> new TreeSet<>()).add(n);
     }
 
     private void addNodeWayMap(Node n, int i) {
-        Set<Integer> ts = onewayMap.nodes.get(n);
-        if (ts == null) {
-            ts = new TreeSet<>();
-            onewayMap.nodes.put(n, ts);
-        }
-        ts.add(i);
+        onewayMap.nodes.computeIfAbsent(n, k -> new TreeSet<>()).add(i);
     }
 
     private void addWayNodeMap(Node n, int i) {
-        Set<Node> ts2 = onewayMap.ways.get(i);
-        if (ts2 == null) {
-            ts2 = new TreeSet<>();
-            onewayMap.ways.put(i, ts2);
-        }
-        ts2.add(n);
+        onewayMap.ways.computeIfAbsent(i, k -> new TreeSet<>()).add(n);
     }
 
     private void addNodeWayMapReverse(Node n, int i) {
-        Set<Integer> ts = onewayReverseMap.nodes.get(n);
-        if (ts == null) {
-            ts = new TreeSet<>();
-            onewayReverseMap.nodes.put(n, ts);
-        }
-        ts.add(i);
+        onewayReverseMap.nodes.computeIfAbsent(n, k -> new TreeSet<>()).add(i);
     }
 
     private void addWayNodeMapReverse(Node n, int i) {
-        Set<Node> ts2 = onewayReverseMap.ways.get(i);
-        if (ts2 == null) {
-            ts2 = new TreeSet<>();
-            onewayReverseMap.ways.put(i, ts2);
-        }
-        ts2.add(n);
+        onewayReverseMap.ways.computeIfAbsent(i, k -> new TreeSet<>()).add(n);
     }
 
     private void addRemainingForward(Node n, int i) {
-        Set<Node> ts2 = remainingOneway.get(i);
-        if (ts2 == null) {
-            ts2 = new TreeSet<>();
-            remainingOneway.put(i, ts2);
-        }
-        ts2.add(n);
+        remainingOneway.computeIfAbsent(i, k -> new TreeSet<>()).add(n);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/sort/RelationSorter.java	(revision 12865)
@@ -151,12 +151,5 @@
             for (AdditionalSorter sorter : ADDITIONAL_SORTERS) {
                 if (sorter.acceptsMember(m)) {
-                    List<RelationMember> list;
-                    list = customMap.get(sorter);
-                    if (list == null) {
-                        list = new LinkedList<>();
-                        customMap.put(sorter, list);
-                    }
-                    list.add(m);
-                    wasAdded = true;
+                    wasAdded = customMap.computeIfAbsent(sorter, k -> new LinkedList<>()).add(m);
                     break;
                 }
Index: trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/ac/AutoCompletionManager.java	(revision 12865)
@@ -506,13 +506,13 @@
     }
 
-    private static void registerListeners(AutoCompletionManager autoCompletionManager) {
-        autoCompletionManager.ds.addDataSetListener(autoCompletionManager);
+    private AutoCompletionManager registerListeners() {
+        ds.addDataSetListener(this);
         MainApplication.getLayerManager().addLayerChangeListener(new LayerChangeListener() {
             @Override
             public void layerRemoving(LayerRemoveEvent e) {
                 if (e.getRemovedLayer() instanceof OsmDataLayer
-                        && ((OsmDataLayer) e.getRemovedLayer()).data == autoCompletionManager.ds) {
-                    INSTANCES.remove(autoCompletionManager.ds);
-                    autoCompletionManager.ds.removeDataSetListener(autoCompletionManager);
+                        && ((OsmDataLayer) e.getRemovedLayer()).data == ds) {
+                    INSTANCES.remove(ds);
+                    ds.removeDataSetListener(AutoCompletionManager.this);
                     MainApplication.getLayerManager().removeLayerChangeListener(this);
                 }
@@ -529,4 +529,5 @@
             }
         });
+        return this;
     }
 
@@ -538,11 +539,5 @@
      */
     public static AutoCompletionManager of(DataSet dataSet) {
-        AutoCompletionManager result = INSTANCES.get(dataSet);
-        if (result == null) {
-            result = new AutoCompletionManager(dataSet);
-            INSTANCES.put(dataSet, result);
-            registerListeners(result);
-        }
-        return result;
+        return INSTANCES.computeIfAbsent(dataSet, ds -> new AutoCompletionManager(ds).registerListeners());
     }
 }
Index: trunk/src/org/openstreetmap/josm/tools/ImageProvider.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/tools/ImageProvider.java	(revision 12865)
@@ -1322,10 +1322,5 @@
 
         synchronized (ROTATE_CACHE) {
-            Map<Long, Image> cacheByAngle = ROTATE_CACHE.get(img);
-            if (cacheByAngle == null) {
-                cacheByAngle = new HashMap<>();
-                ROTATE_CACHE.put(img, cacheByAngle);
-            }
-
+            Map<Long, Image> cacheByAngle = ROTATE_CACHE.computeIfAbsent(img, k -> new HashMap<>());
             Image rotatedImg = cacheByAngle.get(originalAngle);
 
Index: trunk/src/org/openstreetmap/josm/tools/ImageWarp.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ImageWarp.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/tools/ImageWarp.java	(revision 12865)
@@ -91,11 +91,5 @@
 
         private Point2D getValue(int xIdx, int yIdx) {
-            Map<Integer, Point2D> row = getRow(yIdx);
-            Point2D val = row.get(xIdx);
-            if (val == null) {
-                val = trfm.transform(new Point2D.Double(xIdx * stride, yIdx * stride));
-                row.put(xIdx, val);
-            }
-            return val;
+            return getRow(yIdx).computeIfAbsent(xIdx, k -> trfm.transform(new Point2D.Double(xIdx * stride, yIdx * stride)));
         }
 
Index: trunk/src/org/openstreetmap/josm/tools/MultiMap.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/MultiMap.java	(revision 12864)
+++ trunk/src/org/openstreetmap/josm/tools/MultiMap.java	(revision 12865)
@@ -66,10 +66,5 @@
      */
     public void put(A key, B value) {
-        Set<B> vals = map.get(key);
-        if (vals == null) {
-            vals = new LinkedHashSet<>();
-            map.put(key, vals);
-        }
-        vals.add(value);
+        map.computeIfAbsent(key, k -> new LinkedHashSet<>()).add(value);
     }
 
@@ -95,10 +90,5 @@
      */
     public void putAll(A key, Collection<B> values) {
-        Set<B> vals = map.get(key);
-        if (vals == null) {
-            vals = new LinkedHashSet<>(values);
-            map.put(key, vals);
-        }
-        vals.addAll(values);
+        map.computeIfAbsent(key, k -> new LinkedHashSet<>(values)).addAll(values);
     }
 
