Index: trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/actions/ReverseWayAction.java	(revision 10657)
@@ -28,5 +28,4 @@
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.UserCancelException;
-import org.openstreetmap.josm.tools.Utils;
 
 public final class ReverseWayAction extends JosmAction {
@@ -135,5 +134,5 @@
     @Override
     protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
-        setEnabled(Utils.exists(selection, OsmPrimitive.wayPredicate));
+        setEnabled(selection.stream().anyMatch(OsmPrimitive.wayPredicate));
     }
 }
Index: trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/actions/UnGlueAction.java	(revision 10657)
@@ -235,5 +235,5 @@
         }
 
-        static PropertiesMembershipDialog showIfNecessary(Iterable<Node> selectedNodes, boolean preselectNew) throws UserCancelException {
+        static PropertiesMembershipDialog showIfNecessary(Collection<Node> selectedNodes, boolean preselectNew) throws UserCancelException {
             final boolean tagged = isTagged(selectedNodes);
             final boolean usedInRelations = isUsedInRelations(selectedNodes);
@@ -249,10 +249,11 @@
         }
 
-        private static boolean isTagged(final Iterable<Node> existingNodes) {
-            return Utils.exists(existingNodes, selectedNode -> selectedNode.hasKeys());
-        }
-
-        private static boolean isUsedInRelations(final Iterable<Node> existingNodes) {
-            return Utils.exists(existingNodes, selectedNode -> Utils.exists(selectedNode.getReferrers(), OsmPrimitive.relationPredicate));
+        private static boolean isTagged(final Collection<Node> existingNodes) {
+            return existingNodes.stream().anyMatch(selectedNode -> selectedNode.hasKeys());
+        }
+
+        private static boolean isUsedInRelations(final Collection<Node> existingNodes) {
+            return existingNodes.stream().anyMatch(
+                    selectedNode -> selectedNode.getReferrers().stream().anyMatch(OsmPrimitive.relationPredicate));
         }
 
Index: trunk/src/org/openstreetmap/josm/actions/relation/DownloadMembersAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/relation/DownloadMembersAction.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/actions/relation/DownloadMembersAction.java	(revision 10657)
@@ -13,5 +13,5 @@
 import org.openstreetmap.josm.io.OnlineResource;
 import org.openstreetmap.josm.tools.ImageProvider;
-import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 
 /**
@@ -40,5 +40,5 @@
     public void setPrimitives(Collection<? extends OsmPrimitive> primitives) {
         // selected non-new relations
-        this.relations = Utils.filter(getRelations(primitives), r -> !r.isNew());
+        this.relations = SubclassFilteredCollection.filter(getRelations(primitives), r -> !r.isNew());
         updateEnabledState();
     }
Index: trunk/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/actions/relation/DownloadSelectedIncompleteMembersAction.java	(revision 10657)
@@ -15,5 +15,5 @@
 import org.openstreetmap.josm.io.OnlineResource;
 import org.openstreetmap.josm.tools.ImageProvider;
-import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 
 /**
@@ -42,5 +42,5 @@
         Set<OsmPrimitive> ret = new HashSet<>();
         for (Relation r : rels) {
-            ret.addAll(Utils.filter(r.getIncompleteMembers(), osm -> !osm.isNew()));
+            ret.addAll(SubclassFilteredCollection.filter(r.getIncompleteMembers(), osm -> !osm.isNew()));
         }
         return ret;
@@ -59,5 +59,5 @@
     public void setPrimitives(Collection<? extends OsmPrimitive> primitives) {
         // selected relations with incomplete members
-        this.relations = Utils.filter(getRelations(primitives), r -> r.hasIncompleteMembers());
+        this.relations = SubclassFilteredCollection.filter(getRelations(primitives), r -> r.hasIncompleteMembers());
         this.incompleteMembers = buildSetOfIncompleteMembers(relations);
         updateEnabledState();
Index: trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java	(revision 10657)
@@ -15,4 +15,5 @@
 import java.util.Locale;
 import java.util.Map;
+import java.util.function.Predicate;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -38,5 +39,4 @@
 import org.openstreetmap.josm.tools.AlphanumComparator;
 import org.openstreetmap.josm.tools.Geometry;
-import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.UncheckedParseException;
 import org.openstreetmap.josm.tools.Utils;
@@ -298,5 +298,5 @@
 
         @Override
-        public final boolean evaluate(OsmPrimitive object) {
+        public final boolean test(OsmPrimitive object) {
             return match(object);
         }
Index: trunk/src/org/openstreetmap/josm/corrector/ReverseWayNoTagCorrector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/corrector/ReverseWayNoTagCorrector.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/corrector/ReverseWayNoTagCorrector.java	(revision 10657)
@@ -55,5 +55,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.evaluate(tag);
+            final boolean isDirectional = directionalTags.contains(tag) || OsmPrimitive.directionalKeyPredicate.test(tag);
             if (isDirectional) {
                 final boolean cannotBeCorrected = ReverseWayTagCorrector.getTagCorrections(tag).isEmpty();
Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 10657)
@@ -38,4 +38,5 @@
 import java.util.TreeMap;
 import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.function.Predicate;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -69,5 +70,4 @@
 import org.openstreetmap.josm.tools.I18n;
 import org.openstreetmap.josm.tools.MultiMap;
-import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.Utils;
 import org.xml.sax.SAXException;
Index: trunk/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/conflict/ConflictCollection.java	(revision 10657)
@@ -12,4 +12,5 @@
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.function.Predicate;
 
 import org.openstreetmap.josm.data.osm.Node;
@@ -18,6 +19,5 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
-import org.openstreetmap.josm.tools.Predicate;
-import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 
 /**
@@ -52,5 +52,5 @@
 
         @Override
-        public boolean evaluate(Conflict<? extends OsmPrimitive> conflict) {
+        public boolean test(Conflict<? extends OsmPrimitive> conflict) {
             return conflict != null && c.isInstance(conflict.getMy());
         }
@@ -364,5 +364,5 @@
      */
     public final Collection<Conflict<? extends OsmPrimitive>> getNodeConflicts() {
-        return Utils.filter(conflicts, NODE_FILTER_PREDICATE);
+        return SubclassFilteredCollection.filter(conflicts, NODE_FILTER_PREDICATE);
     }
 
@@ -373,5 +373,5 @@
      */
     public final Collection<Conflict<? extends OsmPrimitive>> getWayConflicts() {
-        return Utils.filter(conflicts, WAY_FILTER_PREDICATE);
+        return SubclassFilteredCollection.filter(conflicts, WAY_FILTER_PREDICATE);
     }
 
@@ -382,5 +382,5 @@
      */
     public final Collection<Conflict<? extends OsmPrimitive>> getRelationConflicts() {
-        return Utils.filter(conflicts, RELATION_FILTER_PREDICATE);
+        return SubclassFilteredCollection.filter(conflicts, RELATION_FILTER_PREDICATE);
     }
 
@@ -396,5 +396,5 @@
         ConflictCollection conflicts1 = (ConflictCollection) obj;
         return Objects.equals(conflicts, conflicts1.conflicts) &&
-                Objects.equals(listeners, conflicts1.listeners);
+               Objects.equals(listeners, conflicts1.listeners);
     }
 }
Index: trunk/src/org/openstreetmap/josm/data/osm/ChangesetCache.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/ChangesetCache.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/osm/ChangesetCache.java	(revision 10657)
@@ -16,5 +16,5 @@
 import org.openstreetmap.josm.gui.JosmUserIdentityManager;
 import org.openstreetmap.josm.gui.util.GuiHelper;
-import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 
 /**
@@ -203,5 +203,5 @@
             return getOpenChangesets();
         } else {
-            return new ArrayList<>(Utils.filter(getOpenChangesets(),
+            return new ArrayList<>(SubclassFilteredCollection.filter(getOpenChangesets(),
                     object -> JosmUserIdentityManager.getInstance().isCurrentUser(object.getUser())));
         }
Index: trunk/src/org/openstreetmap/josm/data/osm/FilterWorker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/FilterWorker.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/osm/FilterWorker.java	(revision 10657)
@@ -6,5 +6,5 @@
 
 import org.openstreetmap.josm.data.osm.FilterMatcher.FilterType;
-import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 
 /**
@@ -32,7 +32,7 @@
         boolean changed;
         // first relations, then ways and nodes last; this is required to resolve dependencies
-        changed = doExecuteFilters(Utils.filter(all, OsmPrimitive.relationPredicate), filterMatcher);
-        changed |= doExecuteFilters(Utils.filter(all, OsmPrimitive.wayPredicate), filterMatcher);
-        changed |= doExecuteFilters(Utils.filter(all, OsmPrimitive.nodePredicate), filterMatcher);
+        changed = doExecuteFilters(SubclassFilteredCollection.filter(all, OsmPrimitive.relationPredicate), filterMatcher);
+        changed |= doExecuteFilters(SubclassFilteredCollection.filter(all, OsmPrimitive.wayPredicate), filterMatcher);
+        changed |= doExecuteFilters(SubclassFilteredCollection.filter(all, OsmPrimitive.nodePredicate), filterMatcher);
         return changed;
     }
Index: trunk/src/org/openstreetmap/josm/data/osm/NoteData.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/NoteData.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/osm/NoteData.java	(revision 10657)
@@ -16,5 +16,4 @@
 import org.openstreetmap.josm.data.notes.NoteComment;
 import org.openstreetmap.josm.gui.JosmUserIdentityManager;
-import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -154,5 +153,5 @@
             } else {
                 final Note existingNote = noteList.get(newNote);
-                final boolean isDirty = Utils.exists(existingNote.getComments(), object -> object.isNew());
+                final boolean isDirty = existingNote.getComments().stream().anyMatch(object -> object.isNew());
                 if (!isDirty) {
                     noteList.put(newNote);
Index: trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 10657)
@@ -19,4 +19,5 @@
 import java.util.Objects;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import org.openstreetmap.josm.Main;
@@ -27,5 +28,4 @@
 import org.openstreetmap.josm.gui.mappaint.StyleCache;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
-import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.Predicates;
 import org.openstreetmap.josm.tools.Utils;
Index: trunk/src/org/openstreetmap/josm/data/osm/Relation.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/osm/Relation.java	(revision 10657)
@@ -16,4 +16,5 @@
 import org.openstreetmap.josm.data.osm.visitor.Visitor;
 import org.openstreetmap.josm.tools.CopyList;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.Utils.Function;
@@ -350,5 +351,5 @@
      */
     public Collection<RelationMember> getMembersFor(final Collection<? extends OsmPrimitive> primitives) {
-        return Utils.filter(getMembers(), member -> primitives.contains(member.getMember()));
+        return SubclassFilteredCollection.filter(getMembers(), member -> primitives.contains(member.getMember()));
     }
 
Index: trunk/src/org/openstreetmap/josm/data/validation/Test.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/Test.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/validation/Test.java	(revision 10657)
@@ -9,4 +9,5 @@
 import java.util.List;
 import java.util.Objects;
+import java.util.function.Predicate;
 
 import javax.swing.JCheckBox;
@@ -25,5 +26,4 @@
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.tools.GBC;
-import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.Utils;
 
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/Addresses.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/Addresses.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/Addresses.java	(revision 10657)
@@ -29,5 +29,5 @@
 import org.openstreetmap.josm.tools.Geometry;
 import org.openstreetmap.josm.tools.Pair;
-import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 
 /**
@@ -91,5 +91,5 @@
             // warning level only if several relations have different names, see #10945
             final String name = list.get(0).get("name");
-            if (name == null || Utils.filter(list, r -> name.equals(r.get("name"))).size() < list.size()) {
+            if (name == null || SubclassFilteredCollection.filter(list, r -> name.equals(r.get("name"))).size() < list.size()) {
                 level = Severity.WARNING;
             } else {
@@ -243,5 +243,5 @@
         // No street segment found near this house, report error on if the relation does not contain incomplete street ways (fix #8314)
         if (hasIncompleteWays) return;
-        List<OsmPrimitive> errorList = new ArrayList<OsmPrimitive>(street);
+        List<OsmPrimitive> errorList = new ArrayList<>(street);
         errorList.add(0, house);
         errors.add(new AddressError(this, HOUSE_NUMBER_TOO_FAR, errorList,
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/ConditionalKeys.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/ConditionalKeys.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/ConditionalKeys.java	(revision 10657)
@@ -20,5 +20,5 @@
 import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.Predicates;
-import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 
 /**
@@ -156,5 +156,6 @@
     public List<TestError> validatePrimitive(OsmPrimitive p) {
         final List<TestError> errors = new ArrayList<>();
-        for (final String key : Utils.filter(p.keySet(), Predicates.stringMatchesPattern(Pattern.compile(".*:conditional(:.*)?$")))) {
+        for (final String key : SubclassFilteredCollection.filter(p.keySet(),
+                Predicates.stringMatchesPattern(Pattern.compile(".*:conditional(:.*)?$")))) {
             if (!isKeyValid(key)) {
                 errors.add(new TestError(this, Severity.WARNING, tr("Wrong syntax in {0} key", key), 3201, p));
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/Highways.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/Highways.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/Highways.java	(revision 10657)
@@ -158,5 +158,5 @@
         final String highway = way.get("highway");
         if (highway == null || !highway.endsWith("_link")
-                || !IN_DOWNLOADED_AREA.evaluate(way.getNode(0)) || !IN_DOWNLOADED_AREA.evaluate(way.getNode(way.getNodesCount()-1))) {
+                || !IN_DOWNLOADED_AREA.test(way.getNode(0)) || !IN_DOWNLOADED_AREA.test(way.getNode(way.getNodesCount()-1))) {
             return true;
         }
@@ -174,5 +174,5 @@
         }
 
-        return Utils.exists(Utils.filteredCollection(referrers, Way.class),
+        return Utils.filteredCollection(referrers, Way.class).stream().anyMatch(
                 otherWay -> !way.equals(otherWay) && otherWay.hasTag("highway", highway, highway.replaceAll("_link$", "")));
     }
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/MapCSSTagChecker.java	(revision 10657)
@@ -26,4 +26,5 @@
 import java.util.Objects;
 import java.util.Set;
+import java.util.function.Predicate;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -66,5 +67,4 @@
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.MultiMap;
-import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -390,5 +390,5 @@
 
         @Override
-        public boolean evaluate(OsmPrimitive primitive) {
+        public boolean test(OsmPrimitive primitive) {
             // Tests whether the primitive contains a deprecated tag which is represented by this MapCSSTagChecker.
             return whichSelectorMatchesPrimitive(primitive) != null;
@@ -788,5 +788,5 @@
                     Main.debug("- Errors: "+pErrors);
                 }
-                final boolean isError = Utils.exists(pErrors, e -> e.getTester().equals(check.rule));
+                final boolean isError = pErrors.stream().anyMatch(e -> e.getTester().equals(check.rule));
                 if (isError != i.getValue()) {
                     final String error = MessageFormat.format("Expecting test ''{0}'' (i.e., {1}) to {2} {3} (i.e., {4})",
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java	(revision 10657)
@@ -29,5 +29,4 @@
 import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.Predicates;
-import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -157,5 +156,5 @@
                 boolean ignore = false;
                 for (String ignoredKey : IGNORED_KEYS.get()) {
-                    if (Utils.exists(error.getPrimitives(), Predicates.hasKey(ignoredKey))) {
+                    if (error.getPrimitives().stream().anyMatch(Predicates.hasKey(ignoredKey))) {
                         ignore = true;
                         break;
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/PowerLines.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/PowerLines.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/PowerLines.java	(revision 10657)
@@ -70,5 +70,5 @@
                 for (Node n : w.getNodes()) {
                     if (!isPowerTower(n)) {
-                        if (!isPowerAllowed(n) && IN_DOWNLOADED_AREA.evaluate(n)) {
+                        if (!isPowerAllowed(n) && IN_DOWNLOADED_AREA.test(n)) {
                             if (!w.isFirstLastNode(n) || !isPowerStation(n)) {
                                 potentialErrors.add(new PowerLineError(this, n, w));
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/UntaggedNode.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/UntaggedNode.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/UntaggedNode.java	(revision 10657)
@@ -43,5 +43,5 @@
         if (n.isUsable() && !n.isTagged() && n.getReferrers().isEmpty()) {
 
-            if (!n.hasKeys() && IN_DOWNLOADED_AREA.evaluate(n)) {
+            if (!n.hasKeys() && IN_DOWNLOADED_AREA.test(n)) {
                 String msg = marktr("No tags");
                 errors.add(new TestError(this, Severity.WARNING, ERROR_MESSAGE, tr(msg), msg, UNTAGGED_NODE_BLANK, n));
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/WayConnectedToArea.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/WayConnectedToArea.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/WayConnectedToArea.java	(revision 10657)
@@ -16,5 +16,4 @@
 import org.openstreetmap.josm.gui.mappaint.ElemStyles;
 import org.openstreetmap.josm.tools.Predicates;
-import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -68,5 +67,5 @@
         if (wayNode.isOutsideDownloadArea()) {
             return;
-        } else if (Utils.exists(wayNode.getReferrers(), Predicates.hasTag("route", "ferry"))) {
+        } else if (wayNode.getReferrers().stream().anyMatch(Predicates.hasTag("route", "ferry"))) {
             return;
         } else if (isArea(p)) {
Index: trunk/src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 10657)
@@ -294,5 +294,5 @@
                     if (middleMouseDown || isAtOldPosition) {
                         Collection<OsmPrimitive> osms = mv.getAllNearest(ms.mousePos,
-                                o -> isUsablePredicate.evaluate(o) && isSelectablePredicate.evaluate(o));
+                                o -> isUsablePredicate.test(o) && isSelectablePredicate.test(o));
 
                         final JPanel c = new JPanel(new GridBagLayout());
Index: trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java	(revision 10657)
@@ -26,4 +26,5 @@
 import java.util.TreeMap;
 import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.function.Predicate;
 import java.util.zip.CRC32;
 
@@ -59,5 +60,4 @@
 import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSStyleSource;
 import org.openstreetmap.josm.gui.util.CursorManager;
-import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -818,5 +818,5 @@
 
             for (Node n : ds.searchNodes(getBBox(p, PROP_SNAP_DISTANCE.get()))) {
-                if (predicate.evaluate(n)
+                if (predicate.test(n)
                         && (dist = getPoint2D(n).distanceSq(p)) < snapDistanceSq) {
                     List<Node> nlist;
@@ -1027,5 +1027,5 @@
 
             for (Way w : ds.searchWays(getBBox(p, Main.pref.getInteger("mappaint.segment.snap-distance", 10)))) {
-                if (!predicate.evaluate(w)) {
+                if (!predicate.test(w)) {
                     continue;
                 }
@@ -1471,5 +1471,5 @@
         for (OsmPrimitive o : nearestList) {
             for (OsmPrimitive r : o.getReferrers()) {
-                if (r instanceof Relation && predicate.evaluate(r)) {
+                if (r instanceof Relation && predicate.test(r)) {
                     parentRelations.add(r);
                 }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/RelationMemberConflictResolverModel.java	(revision 10657)
@@ -25,5 +25,4 @@
 import org.openstreetmap.josm.data.osm.RelationToChildReference;
 import org.openstreetmap.josm.gui.util.GuiHelper;
-import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -200,5 +199,5 @@
     public void prepareDefaultRelationDecisions() {
 
-        if (Utils.forAll(primitives, OsmPrimitive.nodePredicate)) {
+        if (primitives.stream().allMatch(OsmPrimitive.nodePredicate)) {
             final Collection<OsmPrimitive> primitivesInDecisions = new HashSet<>();
             for (final RelationMemberConflictDecision i : decisions) {
@@ -234,5 +233,5 @@
                     iterators.add(i.iterator());
                 }
-                while (Utils.forAll(iterators, it -> it.hasNext())) {
+                while (iterators.stream().allMatch(it -> it.hasNext())) {
                     final List<RelationMemberConflictDecision> decisions = new ArrayList<>();
                     final Collection<String> roles = new HashSet<>();
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 10657)
@@ -80,5 +80,5 @@
 import org.openstreetmap.josm.tools.InputMapUtils;
 import org.openstreetmap.josm.tools.Shortcut;
-import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 
 /**
@@ -488,5 +488,5 @@
         private void updateFilteredRelations() {
             if (filter != null) {
-                filteredRelations = new ArrayList<>(Utils.filter(relations, filter::match));
+                filteredRelations = new ArrayList<>(SubclassFilteredCollection.filter(relations, filter::match));
             } else if (filteredRelations != null) {
                 filteredRelations = null;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 10657)
@@ -878,9 +878,9 @@
         private Set<OsmPrimitive> members = new HashSet<>();
         private List<Integer> position = new ArrayList<>();
-        private Iterable<OsmPrimitive> selection;
+        private Collection<OsmPrimitive> selection;
         private String positionString;
         private String roleString;
 
-        MemberInfo(Iterable<OsmPrimitive> selection) {
+        MemberInfo(Collection<OsmPrimitive> selection) {
             this.selection = selection;
         }
@@ -896,5 +896,5 @@
                 positionString = Utils.getPositionListString(position);
                 // if not all objects from the selection are member of this relation
-                if (Utils.exists(selection, Predicates.not(Predicates.inCollection(members)))) {
+                if (selection.stream().anyMatch(Predicates.not(Predicates.inCollection(members)))) {
                     positionString += ",\u2717";
                 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java	(revision 10657)
@@ -17,4 +17,5 @@
 import java.util.Map.Entry;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import javax.swing.JTree;
@@ -36,7 +37,5 @@
 import org.openstreetmap.josm.tools.Destroyable;
 import org.openstreetmap.josm.tools.MultiMap;
-import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.Predicates;
-import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -364,5 +363,5 @@
                 final TestError error = (TestError) ((DefaultMutableTreeNode) child).getUserObject();
                 if (error.getPrimitives() != null) {
-                    if (Utils.exists(error.getPrimitives(), isRelevant)) {
+                    if (error.getPrimitives().stream().anyMatch(isRelevant)) {
                         paths.add(p.pathByAddingChild(child));
                     }
Index: trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java	(revision 10657)
@@ -14,4 +14,5 @@
 import java.util.Map.Entry;
 import java.util.Objects;
+import java.util.function.Predicate;
 
 import javax.swing.JOptionPane;
@@ -26,6 +27,5 @@
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
-import org.openstreetmap.josm.tools.Predicate;
-import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 import org.openstreetmap.josm.tools.WindowGeometry;
 import org.openstreetmap.josm.tools.bugreport.BugReportExceptionHandler;
@@ -177,5 +177,5 @@
      */
     public void showHistory(final Collection<? extends PrimitiveId> primitives) {
-        final Collection<? extends PrimitiveId> notNewPrimitives = Utils.filter(primitives, notNewPredicate);
+        final Collection<? extends PrimitiveId> notNewPrimitives = SubclassFilteredCollection.filter(primitives, notNewPredicate);
         if (notNewPrimitives.isEmpty()) {
             JOptionPane.showMessageDialog(
@@ -187,5 +187,5 @@
         }
 
-        Collection<? extends PrimitiveId> toLoad = Utils.filter(primitives, unloadedHistoryPredicate);
+        Collection<? extends PrimitiveId> toLoad = SubclassFilteredCollection.filter(primitives, unloadedHistoryPredicate);
         if (!toLoad.isEmpty()) {
             HistoryLoadTask task = new HistoryLoadTask();
@@ -217,5 +217,5 @@
 
         @Override
-        public boolean evaluate(PrimitiveId p) {
+        public boolean test(PrimitiveId p) {
             History h = hds.getHistory(p);
             if (h == null)
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Condition.java	(revision 10657)
@@ -11,4 +11,5 @@
 import java.util.Objects;
 import java.util.Set;
+import java.util.function.Predicate;
 import java.util.regex.Pattern;
 
@@ -26,6 +27,6 @@
 import org.openstreetmap.josm.gui.mappaint.Environment;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
-import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.Predicates;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -463,5 +464,5 @@
                     return e.osm.isKeyFalse(label) ^ negateResult;
                 case REGEX:
-                    return Utils.exists(e.osm.keySet(), containsPattern) ^ negateResult;
+                    return e.osm.keySet().stream().anyMatch(containsPattern) ^ negateResult;
                 default:
                     return e.osm.hasKey(label) ^ negateResult;
@@ -486,5 +487,5 @@
             String key = label;
             if (KeyMatchType.REGEX.equals(matchType)) {
-                final Collection<String> matchingKeys = Utils.filter(p.keySet(), containsPattern);
+                final Collection<String> matchingKeys = SubclassFilteredCollection.filter(p.keySet(), containsPattern);
                 if (!matchingKeys.isEmpty()) {
                     key = matchingKeys.iterator().next();
@@ -666,5 +667,5 @@
          */
         static boolean inDownloadedArea(Environment e) { // NO_UCD (unused code)
-            return IN_DOWNLOADED_AREA.evaluate(e.osm);
+            return IN_DOWNLOADED_AREA.test(e.osm);
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/ExpressionFactory.java	(revision 10657)
@@ -38,4 +38,5 @@
 import org.openstreetmap.josm.tools.Predicates;
 import org.openstreetmap.josm.tools.RightAndLefthandTraffic;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.Utils.Function;
@@ -1134,5 +1135,5 @@
         public Float aggregateList(List<?> lst) {
             final List<Float> floats = Utils.transform(lst, (Function<Object, Float>) x -> Cascade.convertTo(x, float.class));
-            final Collection<Float> nonNullList = Utils.filter(floats, Predicates.not(Predicates.isNull()));
+            final Collection<Float> nonNullList = SubclassFilteredCollection.filter(floats, Predicates.not(Predicates.isNull()));
             return nonNullList.isEmpty() ? (Float) Float.NaN : computeMax ? Collections.max(nonNullList) : Collections.min(nonNullList);
         }
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Selector.java	(revision 10657)
@@ -25,4 +25,5 @@
 import org.openstreetmap.josm.tools.Pair;
 import org.openstreetmap.josm.tools.Predicates;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -320,5 +321,5 @@
                         throw new NoSuchElementException();
                     }
-                    final Collection<Relation> multipolygons = Utils.filteredCollection(Utils.filter(
+                    final Collection<Relation> multipolygons = Utils.filteredCollection(SubclassFilteredCollection.filter(
                             e.osm.getReferrers(), Predicates.hasTag("type", "multipolygon")), Relation.class);
                     final Relation multipolygon = multipolygons.iterator().next();
Index: trunk/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/advanced/ListEditor.java	(revision 10657)
@@ -19,5 +19,5 @@
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.tools.GBC;
-import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 
 /**
@@ -43,5 +43,5 @@
     @Override
     public List<String> getData() {
-        return new ArrayList<>(Utils.filter(model.getData(), object -> object != null && !object.isEmpty()));
+        return new ArrayList<>(SubclassFilteredCollection.filter(model.getData(), object -> object != null && !object.isEmpty()));
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 10657)
@@ -21,4 +21,5 @@
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Predicate;
 
 import javax.swing.AbstractAction;
@@ -60,5 +61,4 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.ImageProvider.ImageResourceCallback;
-import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.template_engine.ParseError;
@@ -297,5 +297,5 @@
         }
 
-        boolean presetInitiallyMatches = !selected.isEmpty() && Utils.forAll(selected, this);
+        boolean presetInitiallyMatches = !selected.isEmpty() && selected.stream().allMatch(this);
         JPanel items = new JPanel(new GridBagLayout());
         for (TaggingPresetItem i : data) {
@@ -556,5 +556,5 @@
      */
     @Override
-    public boolean evaluate(OsmPrimitive p) {
+    public boolean test(OsmPrimitive p) {
         return matches(EnumSet.of(TaggingPresetType.forPrimitive(p)), p.getKeys(), false);
     }
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresetSelector.java	(revision 10657)
@@ -282,5 +282,5 @@
                             && preset.roles != null && !preset.roles.roles.isEmpty()) {
                         suitable = preset.roles.roles.stream().anyMatch(
-                                object -> object.memberExpression != null && Utils.exists(selectedPrimitives, object.memberExpression));
+                                object -> object.memberExpression != null && selectedPrimitives.stream().anyMatch(object.memberExpression));
                         // keep the preset to allow the creation of new relations
                     }
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPresets.java	(revision 10657)
@@ -115,9 +115,9 @@
      * @param primitive the primitive
      * @return a new collection of all presets matching the given preset.
-     * @see TaggingPreset#evaluate(OsmPrimitive)
+     * @see TaggingPreset#test(OsmPrimitive)
      * @since 9265
      */
     public static Collection<TaggingPreset> getMatchingPresets(final OsmPrimitive primitive) {
-        return SubclassFilteredCollection.filter(getTaggingPresets(), preset -> preset.evaluate(primitive));
+        return SubclassFilteredCollection.filter(getTaggingPresets(), preset -> preset.test(primitive));
     }
 
Index: trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/io/remotecontrol/handler/LoadAndZoomHandler.java	(revision 10657)
@@ -29,4 +29,5 @@
 import org.openstreetmap.josm.io.remotecontrol.AddTagsDialog;
 import org.openstreetmap.josm.io.remotecontrol.PermissionPrefWithDefault;
+import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -193,5 +194,5 @@
                 Main.worker.submit(() -> {
                     final DataSet ds = Main.getLayerManager().getEditDataSet();
-                    final Collection<OsmPrimitive> filteredPrimitives = Utils.filter(ds.allPrimitives(), search);
+                    final Collection<OsmPrimitive> filteredPrimitives = SubclassFilteredCollection.filter(ds.allPrimitives(), search);
                     ds.setSelected(filteredPrimitives);
                     forTagAdd.addAll(filteredPrimitives);
Index: trunk/src/org/openstreetmap/josm/tools/FilteredCollection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/FilteredCollection.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/tools/FilteredCollection.java	(revision 10657)
@@ -17,5 +17,5 @@
      * @param predicate The predicate to use as filter
      */
-    public FilteredCollection(Collection<? extends T> collection, Predicate<? super T> predicate) {
+    public FilteredCollection(Collection<? extends T> collection, java.util.function.Predicate<? super T> predicate) {
         super(collection, predicate);
     }
Index: trunk/src/org/openstreetmap/josm/tools/SubclassFilteredCollection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/SubclassFilteredCollection.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/tools/SubclassFilteredCollection.java	(revision 10657)
@@ -120,5 +120,5 @@
      * @return The filtered collection. It is a {@code Collection<T>}.
      */
-    public static <T> SubclassFilteredCollection<T, T> filter(Collection<T> collection, java.util.function.Predicate<T> predicate) {
+    public static <T> SubclassFilteredCollection<T, T> filter(Collection<? extends T> collection, java.util.function.Predicate<T> predicate) {
         return new SubclassFilteredCollection<>(collection, predicate);
     }
Index: trunk/src/org/openstreetmap/josm/tools/Utils.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Utils.java	(revision 10656)
+++ trunk/src/org/openstreetmap/josm/tools/Utils.java	(revision 10657)
@@ -102,10 +102,11 @@
      * Tests whether {@code predicate} applies to at least one element from {@code collection}.
      * <p>
-     * Note: you can use {@link Stream#anyMatch(java.util.function.Predicate)} instead.
      * @param <T> type of items
      * @param collection the collection
      * @param predicate the predicate
      * @return {@code true} if {@code predicate} applies to at least one element from {@code collection}
-     */
+     * @deprecated use {@link Stream#anyMatch(java.util.function.Predicate)} instead.
+     */
+    @Deprecated
     public static <T> boolean exists(Iterable<? extends T> collection, Predicate<? super T> predicate) {
         for (T item : collection) {
@@ -120,10 +121,11 @@
      * Tests whether {@code predicate} applies to all elements from {@code collection}.
      * <p>
-     * Note: you can use {@link Stream#allMatch(java.util.function.Predicate)} instead.
      * @param <T> type of items
      * @param collection the collection
      * @param predicate the predicate
      * @return {@code true} if {@code predicate} applies to all elements from {@code collection}
-     */
+     * @deprecated use {@link Stream#allMatch(java.util.function.Predicate)} instead.
+     */
+    @Deprecated
     public static <T> boolean forAll(Iterable<? extends T> collection, Predicate<? super T> predicate) {
         return !exists(collection, Predicates.not(predicate));
