Index: trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/actions/JoinNodeWayAction.java	(revision 10716)
@@ -94,5 +94,5 @@
         for (Node node : selectedNodes) {
             List<WaySegment> wss = Main.map.mapView.getNearestWaySegments(
-                    Main.map.mapView.getPoint(node), OsmPrimitive.isSelectablePredicate);
+                    Main.map.mapView.getPoint(node), OsmPrimitive::isSelectable);
 
             MultiMap<Way, Integer> insertPoints = new MultiMap<>();
Index: trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/actions/MergeNodesAction.java	(revision 10716)
@@ -73,5 +73,5 @@
         if (selectedNodes.size() == 1) {
             List<Node> nearestNodes = Main.map.mapView.getNearestNodes(
-                    Main.map.mapView.getPoint(selectedNodes.get(0)), selectedNodes, OsmPrimitive.isUsablePredicate);
+                    Main.map.mapView.getPoint(selectedNodes.get(0)), selectedNodes, OsmPrimitive::isUsable);
             if (nearestNodes.isEmpty()) {
                 new Notification(
Index: trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java	(revision 10716)
@@ -134,5 +134,5 @@
     @Override
     protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
-        setEnabled(selection.stream().anyMatch(OsmPrimitive.wayPredicate));
+        setEnabled(selection.stream().anyMatch(Way.class::isInstance));
     }
 }
Index: trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 10716)
@@ -255,5 +255,5 @@
         private static boolean isUsedInRelations(final Collection<Node> existingNodes) {
             return existingNodes.stream().anyMatch(
-                    selectedNode -> selectedNode.getReferrers().stream().anyMatch(OsmPrimitive.relationPredicate));
+                    selectedNode -> selectedNode.getReferrers().stream().anyMatch(Relation.class::isInstance));
         }
 
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/DeleteAction.java	(revision 10716)
@@ -362,7 +362,7 @@
         DeleteParameters result = new DeleteParameters();
 
-        result.nearestNode = Main.map.mapView.getNearestNode(e.getPoint(), OsmPrimitive.isSelectablePredicate);
+        result.nearestNode = Main.map.mapView.getNearestNode(e.getPoint(), OsmPrimitive::isSelectable);
         if (result.nearestNode == null) {
-            result.nearestSegment = Main.map.mapView.getNearestWaySegment(e.getPoint(), OsmPrimitive.isSelectablePredicate);
+            result.nearestSegment = Main.map.mapView.getNearestWaySegment(e.getPoint(), OsmPrimitive::isSelectable);
             if (result.nearestSegment != null) {
                 if (shift) {
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java	(revision 10716)
@@ -399,5 +399,5 @@
 
         boolean newNode = false;
-        Node n = Main.map.mapView.getNearestNode(mousePos, OsmPrimitive.isSelectablePredicate);
+        Node n = Main.map.mapView.getNearestNode(mousePos, OsmPrimitive::isSelectable);
         if (ctrl) {
             Iterator<Way> it = ds.getSelectedWays().iterator();
@@ -469,5 +469,5 @@
                 // Insert the node into all the nearby way segments
                 List<WaySegment> wss = Main.map.mapView.getNearestWaySegments(
-                        Main.map.mapView.getPoint(n), OsmPrimitive.isSelectablePredicate);
+                        Main.map.mapView.getPoint(n), OsmPrimitive::isSelectable);
                 if (snapHelper.isActive()) {
                     tryToMoveNodeOnIntersection(wss, n);
@@ -761,5 +761,5 @@
      */
     private void tryToSetBaseSegmentForAngleSnap() {
-        WaySegment seg = Main.map.mapView.getNearestWaySegment(mousePos, OsmPrimitive.isSelectablePredicate);
+        WaySegment seg = Main.map.mapView.getNearestWaySegment(mousePos, OsmPrimitive::isSelectable);
         if (seg != null) {
             snapHelper.setBaseSegment(seg);
@@ -790,5 +790,5 @@
 
         if (!ctrl && mousePos != null) {
-            currentMouseNode = mv.getNearestNode(mousePos, OsmPrimitive.isSelectablePredicate);
+            currentMouseNode = mv.getNearestNode(mousePos, OsmPrimitive::isSelectable);
         }
 
@@ -796,5 +796,5 @@
         // *and* there is no node nearby (because nodes beat ways when re-using)
         if (!ctrl && currentMouseNode == null) {
-            List<WaySegment> wss = mv.getNearestWaySegments(mousePos, OsmPrimitive.isSelectablePredicate);
+            List<WaySegment> wss = mv.getNearestWaySegments(mousePos, OsmPrimitive::isSelectable);
             for (WaySegment ws : wss) {
                 mouseOnExistingWays.add(ws.way);
@@ -1088,5 +1088,5 @@
         // This happens when nothing is selected, but we still want to highlight the "target node"
         if (mouseOnExistingNode == null && getLayerManager().getEditDataSet().selectionEmpty() && mousePos != null) {
-            mouseOnExistingNode = Main.map.mapView.getNearestNode(mousePos, OsmPrimitive.isSelectablePredicate);
+            mouseOnExistingNode = Main.map.mapView.getNearestNode(mousePos, OsmPrimitive::isSelectable);
         }
 
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/ExtrudeAction.java	(revision 10716)
@@ -391,6 +391,6 @@
         updateKeyModifiers(e);
 
-        selectedNode = Main.map.mapView.getNearestNode(e.getPoint(), OsmPrimitive.isSelectablePredicate);
-        selectedSegment = Main.map.mapView.getNearestWaySegment(e.getPoint(), OsmPrimitive.isSelectablePredicate);
+        selectedNode = Main.map.mapView.getNearestNode(e.getPoint(), OsmPrimitive::isSelectable);
+        selectedSegment = Main.map.mapView.getNearestWaySegment(e.getPoint(), OsmPrimitive::isSelectable);
 
         // If nothing gets caught, stay in select mode
@@ -570,5 +570,5 @@
     private static void addNewNode(MouseEvent e) {
         // Should maybe do the same as in DrawAction and fetch all nearby segments?
-        WaySegment ws = Main.map.mapView.getNearestWaySegment(e.getPoint(), OsmPrimitive.isSelectablePredicate);
+        WaySegment ws = Main.map.mapView.getNearestWaySegment(e.getPoint(), OsmPrimitive::isSelectable);
         if (ws != null) {
             Node n = new Node(Main.map.mapView.getLatLon(e.getX(), e.getY()));
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyHelper.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyHelper.java	(revision 10716)
@@ -41,5 +41,5 @@
         }
 
-        Node node = mv.getNearestNode(p, OsmPrimitive.isSelectablePredicate);
+        Node node = mv.getNearestNode(p, OsmPrimitive::isSelectable);
         Way candidate = null;
 
@@ -57,5 +57,5 @@
         }
 
-        return Main.map.mapView.getNearestWay(p, OsmPrimitive.isSelectablePredicate);
+        return Main.map.mapView.getNearestWay(p, OsmPrimitive::isSelectable);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/actions/mapmode/ParallelWayAction.java	(revision 10716)
@@ -321,5 +321,5 @@
         if (!mouseHasBeenDragged) {
             // use point from press or click event? (or are these always the same)
-            Way nearestWay = mv.getNearestWay(e.getPoint(), OsmPrimitive.isSelectablePredicate);
+            Way nearestWay = mv.getNearestWay(e.getPoint(), OsmPrimitive::isSelectable);
             if (nearestWay == null) {
                 if (matchesCurrentModifiers(setSelectedModifierCombo)) {
@@ -522,5 +522,5 @@
     // TODO: rename
     private boolean initParallelWays(Point p, boolean copyTags) {
-        referenceSegment = mv.getNearestWaySegment(p, Way.isUsablePredicate, true);
+        referenceSegment = mv.getNearestWaySegment(p, OsmPrimitive::isUsable, true);
         if (referenceSegment == null)
             return false;
Index: trunk/src/org/openstreetmap/josm/actions/relation/AbstractRelationAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/relation/AbstractRelationAction.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/actions/relation/AbstractRelationAction.java	(revision 10716)
@@ -27,5 +27,5 @@
             // Diamond operator does not work with Java 9 here
             return new SubclassFilteredCollection<OsmPrimitive, Relation>(
-                    primitives, OsmPrimitive.relationPredicate);
+                    primitives, Relation.class::isInstance);
         }
     }
Index: trunk/src/org/openstreetmap/josm/corrector/ReverseWayNoTagCorrector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/ReverseWayNoTagCorrector.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/corrector/ReverseWayNoTagCorrector.java	(revision 10716)
@@ -11,5 +11,4 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.data.osm.TagCollection;
@@ -55,5 +54,5 @@
         for (Map.Entry<String, String> entry : way.getKeys().entrySet()) {
             final Tag tag = new Tag(entry.getKey(), entry.getValue());
-            final boolean isDirectional = directionalTags.contains(tag) || OsmPrimitive.directionalKeyPredicate.test(tag);
+            final boolean isDirectional = directionalTags.contains(tag) || tag.isDirectionKey();
             if (isDirectional) {
                 final boolean cannotBeCorrected = ReverseWayTagCorrector.getTagCorrections(tag).isEmpty();
Index: trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 10716)
@@ -329,5 +329,5 @@
      */
     public Collection<Node> getNodes() {
-        return getPrimitives(OsmPrimitive.nodePredicate);
+        return getPrimitives(Node.class::isInstance);
     }
 
@@ -371,5 +371,5 @@
      */
     public Collection<Way> getWays() {
-        return getPrimitives(OsmPrimitive.wayPredicate);
+        return getPrimitives(Way.class::isInstance);
     }
 
@@ -411,5 +411,5 @@
      */
     public Collection<Relation> getRelations() {
-        return getPrimitives(OsmPrimitive.relationPredicate);
+        return getPrimitives(Relation.class::isInstance);
     }
 
@@ -466,5 +466,5 @@
      */
     public Collection<OsmPrimitive> allNonDeletedPrimitives() {
-        return getPrimitives(OsmPrimitive.nonDeletedPredicate);
+        return getPrimitives(p -> !p.isDeleted());
     }
 
@@ -476,5 +476,5 @@
      */
     public Collection<OsmPrimitive> allNonDeletedCompletePrimitives() {
-        return getPrimitives(OsmPrimitive.nonDeletedCompletePredicate);
+        return getPrimitives(primitive -> !primitive.isDeleted() && !primitive.isIncomplete());
     }
 
@@ -486,5 +486,5 @@
      */
     public Collection<OsmPrimitive> allNonDeletedPhysicalPrimitives() {
-        return getPrimitives(OsmPrimitive.nonDeletedPhysicalPredicate);
+        return getPrimitives(primitive -> !primitive.isDeleted() && !primitive.isIncomplete() && !(primitive instanceof Relation));
     }
 
@@ -495,5 +495,5 @@
      */
     public Collection<OsmPrimitive> allModifiedPrimitives() {
-        return getPrimitives(OsmPrimitive.modifiedPredicate);
+        return getPrimitives(OsmPrimitive::isModified);
     }
 
@@ -643,5 +643,5 @@
      */
     public Collection<OsmPrimitive> getSelected() {
-        return new SubclassFilteredCollection<>(getAllSelected(), OsmPrimitive.nonDeletedPredicate);
+        return new SubclassFilteredCollection<>(getAllSelected(), p -> !p.isDeleted());
     }
 
@@ -668,5 +668,5 @@
      */
     public Collection<Node> getSelectedNodes() {
-        return new SubclassFilteredCollection<>(getSelected(), OsmPrimitive.nodePredicate);
+        return new SubclassFilteredCollection<>(getSelected(), Node.class::isInstance);
     }
 
@@ -676,5 +676,5 @@
      */
     public Collection<Way> getSelectedWays() {
-        return new SubclassFilteredCollection<>(getSelected(), OsmPrimitive.wayPredicate);
+        return new SubclassFilteredCollection<>(getSelected(), Way.class::isInstance);
     }
 
@@ -684,5 +684,5 @@
      */
     public Collection<Relation> getSelectedRelations() {
-        return new SubclassFilteredCollection<>(getSelected(), OsmPrimitive.relationPredicate);
+        return new SubclassFilteredCollection<>(getSelected(), Relation.class::isInstance);
     }
 
Index: trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/data/osm/FilterMatcher.java	(revision 10716)
@@ -207,5 +207,5 @@
         boolean isExplicit = false;
         for (Relation r : new SubclassFilteredCollection<OsmPrimitive, Relation>(
-                primitive.getReferrers(), OsmPrimitive.multipolygonPredicate)) {
+                primitive.getReferrers(), OsmPrimitive::isMultipolygon)) {
             if (!isFiltered(r, hidden))
                 return false;
@@ -217,5 +217,5 @@
     private static boolean oneParentMultipolygonNotFiltered(OsmPrimitive primitive, boolean hidden) {
         for (Relation r : new SubclassFilteredCollection<OsmPrimitive, Relation>(
-                primitive.getReferrers(), OsmPrimitive.multipolygonPredicate)) {
+                primitive.getReferrers(), OsmPrimitive::isMultipolygon)) {
             if (!isFiltered(r, hidden))
                 return true;
Index: trunk/src/org/openstreetmap/josm/data/osm/FilterWorker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/FilterWorker.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/data/osm/FilterWorker.java	(revision 10716)
@@ -32,7 +32,7 @@
         boolean changed;
         // first relations, then ways and nodes last; this is required to resolve dependencies
-        changed = doExecuteFilters(SubclassFilteredCollection.filter(all, OsmPrimitive.relationPredicate), filterMatcher);
-        changed |= doExecuteFilters(SubclassFilteredCollection.filter(all, OsmPrimitive.wayPredicate), filterMatcher);
-        changed |= doExecuteFilters(SubclassFilteredCollection.filter(all, OsmPrimitive.nodePredicate), filterMatcher);
+        changed = doExecuteFilters(SubclassFilteredCollection.filter(all, Relation.class::isInstance), filterMatcher);
+        changed |= doExecuteFilters(SubclassFilteredCollection.filter(all, Way.class::isInstance), filterMatcher);
+        changed |= doExecuteFilters(SubclassFilteredCollection.filter(all, Node.class::isInstance), filterMatcher);
         return changed;
     }
Index: trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 10716)
@@ -113,5 +113,5 @@
      * @see #FLAG_HAS_DIRECTIONS
      */
-    private static volatile Match directionKeys;
+    static volatile Match directionKeys;
 
     /**
@@ -200,20 +200,27 @@
      * A predicate that filters primitives that are usable.
      * @see OsmPrimitive#isUsable()
-     */
-    public static final Predicate<OsmPrimitive> isUsablePredicate = primitive -> primitive.isUsable();
+     * @deprecated Use {@code OsmPrimitive::isUsable} instead
+     */
+    @Deprecated
+    public static final Predicate<OsmPrimitive> isUsablePredicate = OsmPrimitive::isUsable;
 
     /**
      * A predicate filtering primitives that are selectable.
-     */
-    public static final Predicate<OsmPrimitive> isSelectablePredicate = primitive -> primitive.isSelectable();
+     * @deprecated Use {@code OsmPrimitive::isSelectable} instead
+     */
+    @Deprecated
+    public static final Predicate<OsmPrimitive> isSelectablePredicate = OsmPrimitive::isSelectable;
 
     /**
      * A predicate filtering primitives that are not deleted.
-     */
-    public static final Predicate<OsmPrimitive> nonDeletedPredicate = primitive -> !primitive.isDeleted();
+     * @deprecated Use {@code p -> !p.isDeleted()} instead
+     */
+    @Deprecated
+    public static final Predicate<OsmPrimitive> nonDeletedPredicate = p -> !p.isDeleted();
 
     /**
      * A predicate filtering primitives that are not deleted and not incomplete.
      */
+    @Deprecated
     public static final Predicate<OsmPrimitive> nonDeletedCompletePredicate =
             primitive -> !primitive.isDeleted() && !primitive.isIncomplete();
@@ -222,4 +229,5 @@
      * A predicate filtering primitives that are not deleted and not incomplete and that are not a relation.
      */
+    @Deprecated
     public static final Predicate<OsmPrimitive> nonDeletedPhysicalPredicate =
             primitive -> !primitive.isDeleted() && !primitive.isIncomplete() && !(primitive instanceof Relation);
@@ -227,27 +235,36 @@
     /**
      * A predicate filtering primitives that are modified
-     */
-    public static final Predicate<OsmPrimitive> modifiedPredicate = primitive -> primitive.isModified();
+     * @deprecated Use {@code OsmPrimitive::isModified} instead
+     */
+    @Deprecated
+    public static final Predicate<OsmPrimitive> modifiedPredicate = OsmPrimitive::isModified;
 
     /**
      * A predicate filtering nodes.
-     */
+     * @deprecated Use {@code Node.class::isInstance} instead
+     */
+    @Deprecated
     public static final Predicate<OsmPrimitive> nodePredicate = Node.class::isInstance;
 
     /**
      * A predicate filtering ways.
-     */
+     * @deprecated Use {@code Way.class::isInstance} instead
+     */
+    @Deprecated
     public static final Predicate<OsmPrimitive> wayPredicate = Way.class::isInstance;
 
     /**
      * A predicate filtering relations.
-     */
+     * @deprecated Use {@code Relation.class::isInstance} instead
+     */
+    @Deprecated
     public static final Predicate<OsmPrimitive> relationPredicate = Relation.class::isInstance;
 
     /**
      * A predicate filtering multipolygon relations.
-     */
-    public static final Predicate<OsmPrimitive> multipolygonPredicate =
-            primitive -> primitive.getClass() == Relation.class && ((Relation) primitive).isMultipolygon();
+     * @deprecated Use {@code OsmPrimitive::isMultipolygon} instead
+     */
+    @Deprecated
+    public static final Predicate<OsmPrimitive> multipolygonPredicate = OsmPrimitive::isMultipolygon;
 
     /**
@@ -256,4 +273,5 @@
      * @see #FLAG_HAS_DIRECTIONS
      */
+    @Deprecated
     public static final Predicate<Tag> directionalKeyPredicate = directionKeys::match;
 
@@ -1452,3 +1470,12 @@
      */
     public abstract boolean isOutsideDownloadArea();
+
+    /**
+     * Determines if this object is a relation and behaves as a multipolygon.
+     * @return {@code true} if it is a real mutlipolygon or a boundary relation
+     * @since 10716
+     */
+    public boolean isMultipolygon() {
+        return false;
+    }
 }
Index: trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 10716)
@@ -422,8 +422,5 @@
     }
 
-    /**
-     * Determines if this relation behaves as a multipolygon.
-     * @return {@code true} if it's a real mutlipolygon or a boundary relation
-     */
+    @Override
     public boolean isMultipolygon() {
         return "multipolygon".equals(get("type")) || isBoundary();
Index: trunk/src/org/openstreetmap/josm/data/osm/Tag.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Tag.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/data/osm/Tag.java	(revision 10716)
@@ -209,3 +209,14 @@
         throw new UnsupportedOperationException();
     }
+
+    /**
+     * true if this is a direction dependent tag (e.g. oneway)
+     *
+     * @return {@code true} if this is is a direction dependent tag
+     * @since 10716
+     */
+    public boolean isDirectionKey() {
+        return OsmPrimitive.directionKeys.match(this);
+    }
+
 }
Index: trunk/src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 10716)
@@ -2,6 +2,4 @@
 package org.openstreetmap.josm.gui;
 
-import static org.openstreetmap.josm.data.osm.OsmPrimitive.isSelectablePredicate;
-import static org.openstreetmap.josm.data.osm.OsmPrimitive.isUsablePredicate;
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 import static org.openstreetmap.josm.tools.I18n.marktr;
@@ -293,6 +291,5 @@
                     // display them if the middle mouse button is pressed and keep them until the mouse is moved
                     if (middleMouseDown || isAtOldPosition) {
-                        Collection<OsmPrimitive> osms = mv.getAllNearest(ms.mousePos,
-                                o -> isUsablePredicate.test(o) && isSelectablePredicate.test(o));
+                        Collection<OsmPrimitive> osms = mv.getAllNearest(ms.mousePos, OsmPrimitive::isSelectable);
 
                         final JPanel c = new JPanel(new GridBagLayout());
@@ -441,5 +438,5 @@
          */
         private void statusBarElementUpdate(MouseState ms) {
-            final OsmPrimitive osmNearest = mv.getNearestNodeOrWay(ms.mousePos, isUsablePredicate, false);
+            final OsmPrimitive osmNearest = mv.getNearestNodeOrWay(ms.mousePos, OsmPrimitive::isUsable, false);
             if (osmNearest != null) {
                 nameText.setText(osmNearest.getDisplayName(DefaultNameFormatter.getInstance()));
Index: trunk/src/org/openstreetmap/josm/gui/SelectionManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/gui/SelectionManager.java	(revision 10716)
@@ -387,5 +387,5 @@
         if (clicked) {
             Point center = new Point(selectionResult.xpoints[0], selectionResult.ypoints[0]);
-            OsmPrimitive osm = nc.getNearestNodeOrWay(center, OsmPrimitive.isSelectablePredicate, false);
+            OsmPrimitive osm = nc.getNearestNodeOrWay(center, OsmPrimitive::isSelectable, false);
             if (osm != null) {
                 selection.add(osm);
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java	(revision 10716)
@@ -20,4 +20,5 @@
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.Command;
+import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
@@ -199,5 +200,5 @@
     public void prepareDefaultRelationDecisions() {
 
-        if (primitives.stream().allMatch(OsmPrimitive.nodePredicate)) {
+        if (primitives.stream().allMatch(Node.class::isInstance)) {
             final Collection<OsmPrimitive> primitivesInDecisions = new HashSet<>();
             for (final RelationMemberConflictDecision i : decisions) {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 10716)
@@ -628,5 +628,5 @@
                         }
                         Main.map.statusLine.setDist(
-                                new SubclassFilteredCollection<OsmPrimitive, Way>(selection, OsmPrimitive.wayPredicate));
+                                new SubclassFilteredCollection<OsmPrimitive, Way>(selection, Way.class::isInstance));
                     }
                 }
Index: trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 10716)
@@ -425,7 +425,7 @@
 
     @Override public String getToolTipText() {
-        int nodes = new FilteredCollection<>(data.getNodes(), OsmPrimitive.nonDeletedPredicate).size();
-        int ways = new FilteredCollection<>(data.getWays(), OsmPrimitive.nonDeletedPredicate).size();
-        int rels = new FilteredCollection<>(data.getRelations(), OsmPrimitive.nonDeletedPredicate).size();
+        int nodes = new FilteredCollection<>(data.getNodes(), p -> !p.isDeleted()).size();
+        int ways = new FilteredCollection<>(data.getWays(), p -> !p.isDeleted()).size();
+        int rels = new FilteredCollection<>(data.getRelations(), p -> !p.isDeleted()).size();
 
         String tool = trn("{0} node", "{0} nodes", nodes, nodes)+", ";
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddNodeHandler.java	(revision 10716)
@@ -86,5 +86,5 @@
         if (Main.isDisplayingMapView()) {
             Point p = Main.map.mapView.getPoint(ll);
-            node = Main.map.mapView.getNearestNode(p, OsmPrimitive.isUsablePredicate);
+            node = Main.map.mapView.getNearestNode(p, OsmPrimitive::isUsable);
             if (node != null && node.getCoor().greatCircleDistance(ll) > Main.pref.getDouble("remotecontrol.tolerance", 0.1)) {
                 node = null; // node is too far
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java	(revision 10715)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/AddWayHandler.java	(revision 10716)
@@ -127,5 +127,5 @@
         if (Main.isDisplayingMapView()) {
             Point p = Main.map.mapView.getPoint(ll);
-            nd = Main.map.mapView.getNearestNode(p, OsmPrimitive.isUsablePredicate);
+            nd = Main.map.mapView.getNearestNode(p, OsmPrimitive::isUsable);
             if (nd != null && nd.getCoor().greatCircleDistance(ll) > Main.pref.getDouble("remote.tolerance", 0.1)) {
                 nd = null; // node is too far
