Index: /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/Debouncer.java
===================================================================
--- /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/Debouncer.java	(revision 32686)
+++ /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/Debouncer.java	(revision 32687)
@@ -19,12 +19,9 @@
      */
     public void debounce(final Object key, final Runnable runnable, long delay, TimeUnit unit) {
-        final Future<?> prev = delayedMap.put(key, scheduler.schedule(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    runnable.run();
-                } finally {
-                    delayedMap.remove(key);
-                }
+        final Future<?> prev = delayedMap.put(key, scheduler.schedule(() -> {
+            try {
+                runnable.run();
+            } finally {
+                delayedMap.remove(key);
             }
         }, delay, unit));
Index: /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/GuiUtils.java
===================================================================
--- /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/GuiUtils.java	(revision 32686)
+++ /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/GuiUtils.java	(revision 32687)
@@ -14,31 +14,24 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
-import java.util.concurrent.Callable;
+import java.util.stream.Collectors;
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 import static org.openstreetmap.josm.tools.I18n.trn;
 
-public class GuiUtils {
+class GuiUtils {
 
     static final String PREF_OVERWRITE = "wikipedia.overwrite-tag";
 
-    protected static boolean confirmOverwrite(final String key, final String newValue, final Collection<OsmPrimitive> primitives) {
-        final SortedSet<String> existingValues = new TreeSet<>(AlphanumComparator.getInstance());
-        existingValues.addAll(Utils.transform(primitives, new Utils.Function<OsmPrimitive, String>() {
-            @Override
-            public String apply(OsmPrimitive x) {
-                return x.get(key);
-            }
-        }));
-        existingValues.remove(newValue);
-        existingValues.remove(null);
+    static boolean confirmOverwrite(final String key, final String newValue, final Collection<OsmPrimitive> primitives) {
+        final SortedSet<String> existingValues = primitives.stream()
+                .map(x -> x.get(key))
+                .filter(x -> x != null && !newValue.equals(x))
+                .collect(Collectors.toCollection(() -> new TreeSet<>(AlphanumComparator.getInstance())));
 
         if (existingValues.isEmpty()) {
             return true;
         }
-        final Boolean r = GuiHelper.runInEDTAndWaitAndReturn(new Callable<Boolean>() {
-            @Override
-            public Boolean call() throws Exception {
-                return ConditionalOptionPaneUtil.showConfirmationDialog(PREF_OVERWRITE, Main.parent,
+        final Boolean r = GuiHelper.runInEDTAndWaitAndReturn(() ->
+                ConditionalOptionPaneUtil.showConfirmationDialog(PREF_OVERWRITE, Main.parent,
                         trn(
                                 "Overwrite ''{0}'' tag {1} from {2} with new value ''{3}''?",
@@ -49,7 +42,5 @@
                         JOptionPane.YES_NO_OPTION,
                         JOptionPane.QUESTION_MESSAGE,
-                        JOptionPane.YES_OPTION);
-            }
-        });
+                        JOptionPane.YES_OPTION));
         return Boolean.TRUE.equals(r);
     }
Index: /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikidataItemSearchDialog.java
===================================================================
--- /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikidataItemSearchDialog.java	(revision 32686)
+++ /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikidataItemSearchDialog.java	(revision 32687)
@@ -8,5 +8,4 @@
 import java.awt.GridBagLayout;
 import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
 import java.util.Collection;
 import java.util.Collections;
@@ -30,6 +29,4 @@
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.GBC;
-import org.openstreetmap.josm.tools.Predicate;
-import org.openstreetmap.josm.tools.Utils;
 
 public final class WikidataItemSearchDialog extends ExtendedDialog {
@@ -42,10 +39,5 @@
         super(Main.parent, tr("Search Wikidata items"), new String[]{tr("Add Tag"), tr("Cancel")});
         this.selector = new Selector();
-        this.selector.setDblClickListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                buttonAction(0, null);
-            }
-        });
+        this.selector.setDblClickListener(e -> buttonAction(0, null));
         this.targetKey = new AutoCompletingComboBox();
         this.targetKey.setEditable(true);
@@ -93,10 +85,7 @@
         keys.add(new AutoCompletionListItem("subject:wikidata"));
         keys.add(new AutoCompletionListItem("name:etymology:wikidata"));
-        keys.addAll(Utils.filter(editDataSet.getAutoCompletionManager().getKeys(), new Predicate<AutoCompletionListItem>() {
-            @Override
-            public boolean evaluate(AutoCompletionListItem object) {
-                return object.getValue().contains("wikidata");
-            }
-        }));
+        editDataSet.getAutoCompletionManager().getKeys().stream()
+                .filter(v -> v.getValue().contains("wikidata"))
+                .forEach(keys::add);
         targetKey.setPossibleACItems(keys);
     }
@@ -134,17 +123,9 @@
         protected void filterItems() {
             final String query = edSearchText.getText();
-            debouncer.debounce(Void.class, new Runnable() {
-                @Override
-                public void run() {
-                    final List<WikipediaApp.WikidataEntry> entries = query == null || query.isEmpty()
-                            ? Collections.<WikipediaApp.WikidataEntry>emptyList()
-                            : WikipediaApp.getWikidataEntriesForQuery(WikipediaToggleDialog.wikipediaLang.get(), query, Locale.getDefault());
-                    GuiHelper.runInEDT(new Runnable() {
-                        @Override
-                        public void run() {
-                            lsResultModel.setItems(entries);
-                        }
-                    });
-                }
+            debouncer.debounce(getClass(), () -> {
+                final List<WikipediaApp.WikidataEntry> entries = query == null || query.isEmpty()
+                        ? Collections.emptyList()
+                        : WikipediaApp.getWikidataEntriesForQuery(WikipediaToggleDialog.wikipediaLang.get(), query, Locale.getDefault());
+                GuiHelper.runInEDT(() -> lsResultModel.setItems(entries));
             }, 200, TimeUnit.MILLISECONDS);
         }
Index: /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaAddNamesAction.java
===================================================================
--- /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaAddNamesAction.java	(revision 32686)
+++ /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaAddNamesAction.java	(revision 32687)
@@ -20,6 +20,4 @@
 
 public class WikipediaAddNamesAction extends JosmAction {
-
-    final StringProperty wikipediaLang = new StringProperty("wikipedia.lang", LanguageInfo.getJOSMLocaleCode().substring(0, 2));
 
     public WikipediaAddNamesAction() {
Index: /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java
===================================================================
--- /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java	(revision 32686)
+++ /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java	(revision 32687)
@@ -20,4 +20,6 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import javax.xml.parsers.DocumentBuilder;
@@ -37,8 +39,5 @@
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.HttpClient;
-import org.openstreetmap.josm.tools.Predicate;
-import org.openstreetmap.josm.tools.Predicates;
 import org.openstreetmap.josm.tools.Utils;
-import org.openstreetmap.josm.tools.Utils.Function;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
@@ -103,5 +102,5 @@
                 if ("wikidata".equals(wikipediaLang)) {
                     final List<WikidataEntry> withLabel = getLabelForWikidata(entries, Locale.getDefault());
-                    return new ArrayList<WikipediaEntry>(withLabel);
+                    return new ArrayList<>(withLabel);
                 } else {
                     return entries;
@@ -162,12 +161,7 @@
 
     static List<WikipediaEntry> getEntriesFromClipboard(final String wikipediaLang) {
-        final List<String> clipboardLines = Arrays.asList(Utils.getClipboardContent().split("[\\n\\r]+"));
-        return new ArrayList<>(Utils.transform(clipboardLines, new Function<String, WikipediaEntry>() {
-
-            @Override
-            public WikipediaEntry apply(String x) {
-                return new WikipediaEntry(wikipediaLang, x);
-            }
-        }));
+        return Arrays.stream(Utils.getClipboardContent().split("[\\n\\r]+"))
+                .map(x -> new WikipediaEntry(wikipediaLang, x))
+                .collect(Collectors.toList());
     }
 
@@ -210,24 +204,16 @@
     }
 
-    static Collection<String> getWikipediaArticles(final String wikipediaLang, OsmPrimitive p) {
+    static Stream<String> getWikipediaArticles(final String wikipediaLang, OsmPrimitive p) {
         if ("wikidata".equals(wikipediaLang)) {
-            return Utils.filter(Collections.singleton(p.get("wikidata")), Predicates.not(Predicates.isNull()));
+            return Stream.of(p.get("wikidata")).filter(Objects::nonNull);
         }
         final Map<String, String> tags = p.getKeys();
-        return Utils.transform(Utils.filter(
-                Arrays.asList(
+        return Stream
+                .of(
                         WikipediaLangArticle.parseTag("wikipedia", tags.get("wikipedia")),
                         WikipediaLangArticle.parseTag("wikipedia:" + wikipediaLang, tags.get("wikipedia:" + wikipediaLang))
-                ), new Predicate<WikipediaLangArticle>() {
-            @Override
-            public boolean evaluate(WikipediaLangArticle wp) {
-                return wp != null && wikipediaLang.equals(wp.lang);
-            }
-        }), new Function<WikipediaLangArticle, String>() {
-            @Override
-            public String apply(WikipediaLangArticle wp) {
-                return wp.article;
-            }
-        });
+                ).filter(Objects::nonNull)
+                .filter(wikipediaLang::equals)
+                .map(wp -> wp.article);
     }
 
@@ -250,10 +236,5 @@
                     "&sitefilter=" + wikipediaLang + "wiki" +
                     "&format=xml" +
-                    "&titles=" + Utils.join("|", Utils.transform(articles, new Function<String, String>() {
-                @Override
-                public String apply(String x) {
-                    return Utils.encodeUrl(x);
-                }
-            }));
+                    "&titles=" + articles.stream().map(Utils::encodeUrl).collect(Collectors.joining("|"));
             final Map<String, String> r = new TreeMap<>();
             try (final InputStream in = HttpClient.create(new URL(url)).setReasonForRequest("Wikipedia").connect().getContent()) {
@@ -315,15 +296,9 @@
             return entriesWithLabel;
         }
-        final Collection<String> wikidataIds = Utils.transform(entries, new Function<WikipediaEntry, String>() {
-            @Override
-            public String apply(WikipediaEntry x) {
-                return x.wikipediaArticle;
-            }
-        });
         try {
             final String url = "https://www.wikidata.org/w/api.php" +
                     "?action=wbgetentities" +
                     "&props=labels|descriptions" +
-                    "&ids=" + Utils.join("|", wikidataIds) +
+                    "&ids=" + entries.stream().map(x -> x.wikipediaArticle).collect(Collectors.joining("|")) +
                     "&format=xml";
             final Collection<String> languages = new ArrayList<>();
Index: /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaCategorySearchDialog.java
===================================================================
--- /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaCategorySearchDialog.java	(revision 32686)
+++ /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaCategorySearchDialog.java	(revision 32687)
@@ -23,10 +23,5 @@
         super(Main.parent, tr("Search Wikipedia category"), new String[]{tr("Load category"), tr("Cancel")});
         this.selector = new Selector();
-        this.selector.setDblClickListener(new ActionListener() {
-            @Override
-            public void actionPerformed(ActionEvent e) {
-                buttonAction(0, null);
-            }
-        });
+        this.selector.setDblClickListener(e -> buttonAction(0, null));
 
         setContent(selector, false);
@@ -66,17 +61,9 @@
         protected void filterItems() {
             final String query = edSearchText.getText();
-            debouncer.debounce(Void.class, new Runnable() {
-                @Override
-                public void run() {
-                    final List<String> entries = query == null || query.isEmpty()
-                            ? Collections.<String>emptyList()
-                            : WikipediaApp.getCategoriesForPrefix(WikipediaToggleDialog.wikipediaLang.get(), query);
-                    GuiHelper.runInEDT(new Runnable() {
-                        @Override
-                        public void run() {
-                            lsResultModel.setItems(entries);
-                        }
-                    });
-                }
+            debouncer.debounce(getClass(), () -> {
+                final List<String> entries = query == null || query.isEmpty()
+                        ? Collections.emptyList()
+                        : WikipediaApp.getCategoriesForPrefix(WikipediaToggleDialog.wikipediaLang.get(), query);
+                GuiHelper.runInEDT(() -> lsResultModel.setItems(entries));
             }, 200, TimeUnit.MILLISECONDS);
         }
Index: /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaToggleDialog.java
===================================================================
--- /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaToggleDialog.java	(revision 32686)
+++ /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaToggleDialog.java	(revision 32687)
@@ -12,4 +12,5 @@
 import java.util.HashSet;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 
@@ -43,5 +44,4 @@
 import org.openstreetmap.josm.tools.LanguageInfo;
 import org.openstreetmap.josm.tools.OpenBrowser;
-import org.openstreetmap.josm.tools.Utils;
 import org.wikipedia.WikipediaApp.WikipediaEntry;
 
@@ -73,5 +73,5 @@
                 public void mouseClicked(MouseEvent e) {
                     if (e.getClickCount() == 2 && getSelectedValue() != null) {
-                        final WikipediaEntry entry = (WikipediaEntry) getSelectedValue();
+                        final WikipediaEntry entry = getSelectedValue();
                         if (entry.coordinate != null) {
                             BoundingXYVisitor bbox = new BoundingXYVisitor();
@@ -79,5 +79,5 @@
                             Main.map.mapView.zoomTo(bbox);
                         }
-                        final String search = Utils.firstNonNull(entry.label, entry.wikipediaArticle).replaceAll("\\(.*\\)", "");
+                        final String search = Optional.ofNullable(entry.label).orElse(entry.wikipediaArticle).replaceAll("\\(.*\\)", "");
                         SearchAction.search(search, SearchAction.SearchMode.replace);
                     }
@@ -261,5 +261,5 @@
         public void actionPerformed(ActionEvent e) {
             if (list.getSelectedValue() != null) {
-                final String url = ((WikipediaEntry) list.getSelectedValue()).getBrowserUrl();
+                final String url = list.getSelectedValue().getBrowserUrl();
                 Main.info("Wikipedia: opening " + url);
                 OpenBrowser.displayUrl(url);
@@ -357,7 +357,7 @@
         articles.clear();
         if (Main.main != null && Main.getLayerManager().getEditDataSet() != null) {
-            for (final OsmPrimitive p : Main.getLayerManager().getEditDataSet().allPrimitives()) {
-                articles.addAll(WikipediaApp.getWikipediaArticles(language, p));
-            }
+            Main.getLayerManager().getEditDataSet().allPrimitives().stream()
+                    .flatMap(p -> WikipediaApp.getWikipediaArticles(language, p))
+                    .forEach(articles::add);
         }
     }
Index: /applications/editors/josm/plugins/wikipedia/test/unit/org/wikipedia/WikipediaAppTest.java
===================================================================
--- /applications/editors/josm/plugins/wikipedia/test/unit/org/wikipedia/WikipediaAppTest.java	(revision 32686)
+++ /applications/editors/josm/plugins/wikipedia/test/unit/org/wikipedia/WikipediaAppTest.java	(revision 32687)
@@ -5,7 +5,4 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.tools.Predicate;
-import org.openstreetmap.josm.tools.Predicates;
-import org.openstreetmap.josm.tools.Utils;
 import org.wikipedia.WikipediaApp.WikipediaEntry;
 import org.wikipedia.WikipediaApp.WikipediaLangArticle;
@@ -20,4 +17,5 @@
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
@@ -142,10 +140,8 @@
         final List<WikipediaEntry> entries = WikipediaApp.getEntriesFromCoordinates("de",
                 new LatLon(52.5179786, 13.3753321), new LatLon(52.5192215, 13.3768705));
-        assertTrue(Utils.exists(entries, new Predicate<WikipediaEntry>() {
-            @Override
-            public boolean evaluate(WikipediaEntry entry) {
-                return "Reichstagsgebäude".equals(entry.wikipediaArticle) && "de".equals(entry.wikipediaLang);
-            }
-        }));
+        final long c = entries.stream()
+                .filter(entry -> "Reichstagsgebäude".equals(entry.wikipediaArticle) && "de".equals(entry.wikipediaLang))
+                .count();
+        assertEquals(1, c);
     }
 
@@ -166,10 +162,8 @@
         final List<WikipediaEntry> entries = WikipediaApp.getEntriesFromCoordinates("wikidata",
                 new LatLon(47.20, 11.30), new LatLon(47.22, 11.32));
-        assertTrue(Utils.exists(entries, new Predicate<WikipediaEntry>() {
-            @Override
-            public boolean evaluate(WikipediaEntry entry) {
-                return "Q865406".equals(entry.wikipediaArticle) && "wikidata".equals(entry.wikipediaLang) && "Birgitzer Alm".equals(entry.label);
-            }
-        }));
+        final long c = entries.stream()
+                .filter(entry -> "Q865406".equals(entry.wikipediaArticle) && "wikidata".equals(entry.wikipediaLang) && "Birgitzer Alm".equals(entry.label))
+                .count();
+        assertEquals(1, c);
     }
 
@@ -219,5 +213,5 @@
     public void testCategoriesForPrefix() throws Exception {
         final List<String> categories = WikipediaApp.getCategoriesForPrefix("de", "Gemeinde in Öster");
-        assertTrue(Utils.exists(categories, Predicates.equalTo("Gemeinde in Österreich")));
+        assertTrue(categories.contains("Gemeinde in Österreich"));
     }
 }
