Index: applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java
===================================================================
--- applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java	(revision 33074)
+++ applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java	(revision 33075)
@@ -44,6 +44,12 @@
     public static final Pattern WIKIDATA_PATTERN = Pattern.compile("Q\\d+");
     private static final XPath X_PATH = XPath.getInstance();
-
-    private WikipediaApp() {
+    private final String wikipediaLang;
+
+    private WikipediaApp(final String wikipediaLang) {
+        this.wikipediaLang = wikipediaLang;
+    }
+
+    public static WikipediaApp forLanguage(final String wikipediaLang) {
+        return new WikipediaApp(wikipediaLang);
     }
 
@@ -56,5 +62,5 @@
     }
 
-    public static String getSiteUrl(String wikipediaLang) {
+    public String getSiteUrl() {
         if ("wikidata".equals(wikipediaLang)) {
             return "https://www.wikidata.org";
@@ -64,8 +70,8 @@
     }
 
-    public static List<WikipediaEntry> getEntriesFromCoordinates(String wikipediaLang, LatLon min, LatLon max) {
+    public List<WikipediaEntry> getEntriesFromCoordinates(LatLon min, LatLon max) {
         try {
             // construct url
-            final String url = getSiteUrl(wikipediaLang) + "/w/api.php"
+            final String url = getSiteUrl() + "/w/api.php"
                     + "?action=query"
                     + "&list=geosearch"
@@ -120,5 +126,5 @@
     }
 
-    public static List<WikipediaEntry> getEntriesFromCategory(String wikipediaLang, String category, int depth) {
+    public List<WikipediaEntry> getEntriesFromCategory(String category, int depth) {
         try {
             final String url = "https://tools.wmflabs.org/cats-php/"
@@ -145,7 +151,7 @@
     }
 
-    public static void updateWIWOSMStatus(String wikipediaLang, List<WikipediaEntry> entries) {
+    public void updateWIWOSMStatus(List<WikipediaEntry> entries) {
         if (entries.size() > 20) {
-            partitionList(entries, 20).forEach(chunk -> updateWIWOSMStatus(wikipediaLang, chunk));
+            partitionList(entries, 20).forEach(chunk -> updateWIWOSMStatus(chunk));
             return;
         }
@@ -179,5 +185,5 @@
     }
 
-    public static Stream<String> getWikipediaArticles(final String wikipediaLang, OsmPrimitive p) {
+    public Stream<String> getWikipediaArticles(final OsmPrimitive p) {
         if ("wikidata".equals(wikipediaLang)) {
             return Stream.of(p.get("wikidata")).filter(Objects::nonNull);
@@ -194,5 +200,5 @@
      * Returns a map mapping wikipedia articles to wikidata ids.
      */
-    public static Map<String, String> getWikidataForArticles(String wikipediaLang, List<String> articles) {
+    public Map<String, String> getWikidataForArticles(Collection<String> articles) {
         return articles.stream()
                 .distinct()
@@ -216,9 +222,9 @@
                 .values()
                 .stream()
-                .flatMap(chunk -> getWikidataForArticles0(wikipediaLang, chunk).entrySet().stream())
+                .flatMap(chunk -> getWikidataForArticles0(chunk).entrySet().stream())
                 .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
     }
 
-    private static Map<String, String> getWikidataForArticles0(String wikipediaLang, List<String> articles) {
+    private Map<String, String> getWikidataForArticles0(List<String> articles) {
         if (articles.isEmpty()) {
             return Collections.emptyMap();
@@ -249,7 +255,7 @@
     }
 
-    public static List<String> getCategoriesForPrefix(final String wikipediaLang, final String prefix) {
-        try {
-            final String url = getSiteUrl(wikipediaLang) + "/w/api.php"
+    public List<String> getCategoriesForPrefix(final String prefix) {
+        try {
+            final String url = getSiteUrl() + "/w/api.php"
                     + "?action=query"
                     + "&list=prefixsearch"
@@ -334,7 +340,7 @@
     }
 
-    public static Collection<WikipediaEntry> getInterwikiArticles(String wikipediaLang, String article) {
-        try {
-            final String url = getSiteUrl(wikipediaLang) + "/w/api.php" +
+    public Collection<WikipediaEntry> getInterwikiArticles(String article) {
+        try {
+            final String url = getSiteUrl() + "/w/api.php" +
                     "?action=query" +
                     "&prop=langlinks" +
@@ -356,7 +362,7 @@
     }
 
-    public static LatLon getCoordinateForArticle(String wikipediaLang, String article) {
-        try {
-            final String url = getSiteUrl(wikipediaLang) + "/w/api.php" +
+    public LatLon getCoordinateForArticle(String article) {
+        try {
+            final String url = getSiteUrl() + "/w/api.php" +
                     "?action=query" +
                     "&prop=coordinates" +
Index: applications/editors/josm/plugins/wikipedia/src/org/wikipedia/actions/FetchWikidataAction.java
===================================================================
--- applications/editors/josm/plugins/wikipedia/src/org/wikipedia/actions/FetchWikidataAction.java	(revision 33074)
+++ applications/editors/josm/plugins/wikipedia/src/org/wikipedia/actions/FetchWikidataAction.java	(revision 33075)
@@ -129,5 +129,5 @@
                     "Fetching {0} Wikidata ID for language ''{1}''",
                     "Fetching {0} Wikidata IDs for language ''{1}''", size, size, lang));
-            final Map<String, String> wikidataByWikipedia = WikipediaApp.getWikidataForArticles(lang, new ArrayList<>(byArticle.keySet()));
+            final Map<String, String> wikidataByWikipedia = WikipediaApp.forLanguage(lang).getWikidataForArticles(byArticle.keySet());
             ConditionalOptionPaneUtil.startBulkOperation(GuiUtils.PREF_OVERWRITE);
             for (Map.Entry<String, Set<OsmPrimitive>> i : byArticle.entrySet()) {
Index: applications/editors/josm/plugins/wikipedia/src/org/wikipedia/actions/WikipediaAddNamesAction.java
===================================================================
--- applications/editors/josm/plugins/wikipedia/src/org/wikipedia/actions/WikipediaAddNamesAction.java	(revision 33074)
+++ applications/editors/josm/plugins/wikipedia/src/org/wikipedia/actions/WikipediaAddNamesAction.java	(revision 33075)
@@ -31,5 +31,5 @@
         final WikipediaEntry wp = WikipediaEntry.parseTag("wikipedia", getWikipediaValue());
         List<String[]> tags = new ArrayList<>();
-        WikipediaApp.getInterwikiArticles(wp.lang, wp.article).stream()
+        WikipediaApp.forLanguage(wp.lang).getInterwikiArticles(wp.article).stream()
                 .filter(this::useWikipediaLangArticle)
                 .map(i -> new String[]{"name:" + i.lang, i.article})
Index: applications/editors/josm/plugins/wikipedia/src/org/wikipedia/data/WikipediaEntry.java
===================================================================
--- applications/editors/josm/plugins/wikipedia/src/org/wikipedia/data/WikipediaEntry.java	(revision 33074)
+++ applications/editors/josm/plugins/wikipedia/src/org/wikipedia/data/WikipediaEntry.java	(revision 33075)
@@ -80,5 +80,5 @@
 
     public String getBrowserUrl() {
-        return WikipediaApp.getSiteUrl(lang) + "/wiki/" + Utils.encodeUrl(article.replace(" ", "_"));
+        return WikipediaApp.forLanguage(lang).getSiteUrl() + "/wiki/" + Utils.encodeUrl(article.replace(" ", "_"));
     }
 
Index: applications/editors/josm/plugins/wikipedia/src/org/wikipedia/gui/WikipediaCategorySearchDialog.java
===================================================================
--- applications/editors/josm/plugins/wikipedia/src/org/wikipedia/gui/WikipediaCategorySearchDialog.java	(revision 33074)
+++ applications/editors/josm/plugins/wikipedia/src/org/wikipedia/gui/WikipediaCategorySearchDialog.java	(revision 33075)
@@ -58,5 +58,5 @@
                 final List<String> entries = query == null || query.isEmpty()
                         ? Collections.emptyList()
-                        : WikipediaApp.getCategoriesForPrefix(WikipediaToggleDialog.wikipediaLang.get(), query);
+                        : WikipediaApp.forLanguage(WikipediaToggleDialog.wikipediaLang.get()).getCategoriesForPrefix(query);
                 GuiHelper.runInEDT(() -> lsResultModel.setItems(entries));
             }, 200, TimeUnit.MILLISECONDS);
Index: applications/editors/josm/plugins/wikipedia/src/org/wikipedia/gui/WikipediaToggleDialog.java
===================================================================
--- applications/editors/josm/plugins/wikipedia/src/org/wikipedia/gui/WikipediaToggleDialog.java	(revision 33074)
+++ applications/editors/josm/plugins/wikipedia/src/org/wikipedia/gui/WikipediaToggleDialog.java	(revision 33075)
@@ -113,5 +113,5 @@
     private void updateTitle() {
         final String lang = getLanguageOfFirstItem();
-        final String host = WikipediaApp.getSiteUrl(lang).split("/+")[1];
+        final String host = WikipediaApp.forLanguage(lang).getSiteUrl().split("/+")[1];
         if (titleContext == null) {
             setTitle(host);
@@ -155,6 +155,6 @@
                     @Override
                     List<WikipediaEntry> getEntries() {
-                        return WikipediaApp.getEntriesFromCoordinates(
-                                wikidata ? "wikidata" : wikipediaLang.get(), min, max);
+                        return WikipediaApp.forLanguage(wikidata ? "wikidata" : wikipediaLang.get())
+                                .getEntriesFromCoordinates(min, max);
                     }
                 }.execute();
@@ -175,5 +175,5 @@
             publish(entries.toArray(new WikipediaEntry[entries.size()]));
             WikipediaApp.partitionList(entries, 20).forEach(chunk -> {
-                WikipediaApp.updateWIWOSMStatus(chunk.get(0).lang, chunk);
+                WikipediaApp.forLanguage(chunk.get(0).lang).updateWIWOSMStatus(chunk);
                 list.repaint();
             });
@@ -217,6 +217,6 @@
                 @Override
                 List<WikipediaEntry> getEntries() {
-                    return WikipediaApp.getEntriesFromCategory(
-                            wikipediaLang.get(), category, Main.pref.getInteger("wikipedia.depth", 3));
+                    return WikipediaApp.forLanguage(wikipediaLang.get())
+                            .getEntriesFromCategory(category, Main.pref.getInteger("wikipedia.depth", 3));
                 }
             }.execute();
@@ -341,5 +341,5 @@
             final LatLon latLon = entry.coordinate != null
                     ? entry.coordinate
-                    : WikipediaApp.getCoordinateForArticle(entry.lang, entry.article);
+                    : WikipediaApp.forLanguage(entry.lang).getCoordinateForArticle(entry.article);
             if (latLon == null) {
                 return;
@@ -354,5 +354,5 @@
         if (Main.main != null && Main.getLayerManager().getEditDataSet() != null) {
             Main.getLayerManager().getEditDataSet().allPrimitives().stream()
-                    .flatMap(p -> WikipediaApp.getWikipediaArticles(language, p))
+                    .flatMap(p -> WikipediaApp.forLanguage(language).getWikipediaArticles(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 33074)
+++ applications/editors/josm/plugins/wikipedia/test/unit/org/wikipedia/WikipediaAppTest.java	(revision 33075)
@@ -55,5 +55,5 @@
     @Test
     public void testGetInterwikiArticles1() {
-        final Collection<WikipediaEntry> iw = WikipediaApp.getInterwikiArticles("de", "Österreich");
+        final Collection<WikipediaEntry> iw = WikipediaApp.forLanguage("de").getInterwikiArticles("Österreich");
         assertThat(iw, hasItem(new WikipediaEntry("en", "Austria")));
         assertThat(iw, hasItem(new WikipediaEntry("no", "Østerrike")));
@@ -63,5 +63,5 @@
     @Test
     public void testGetInterwikiArticles2() {
-        final Collection<WikipediaEntry> iw = WikipediaApp.getInterwikiArticles("en", "Ampersand");
+        final Collection<WikipediaEntry> iw = WikipediaApp.forLanguage("en").getInterwikiArticles("Ampersand");
         assertThat(iw, hasItem(new WikipediaEntry("fi", "&")));
     }
@@ -69,13 +69,13 @@
     @Test
     public void testGetCoordinates() throws Exception {
-        assertThat(WikipediaApp.getCoordinateForArticle("de", "Marchreisenspitze"), is(new LatLon(47.1725, 11.30833333)));
-        assertThat(WikipediaApp.getCoordinateForArticle("en", "Austria"), is(new LatLon(47.33333333, 13.33333333)));
-        assertThat(WikipediaApp.getCoordinateForArticle("en", "Foobar2000"), nullValue());
+        assertThat(WikipediaApp.forLanguage("de").getCoordinateForArticle("Marchreisenspitze"), is(new LatLon(47.1725, 11.30833333)));
+        assertThat(WikipediaApp.forLanguage("en").getCoordinateForArticle("Austria"), is(new LatLon(47.33333333, 13.33333333)));
+        assertThat(WikipediaApp.forLanguage("en").getCoordinateForArticle("Foobar2000"), nullValue());
     }
 
     @Test
     public void testFromCoordinates() throws Exception {
-        final List<WikipediaEntry> entries = WikipediaApp.getEntriesFromCoordinates("de",
-                new LatLon(52.5179786, 13.3753321), new LatLon(52.5192215, 13.3768705));
+        final List<WikipediaEntry> entries = WikipediaApp.forLanguage("de")
+                .getEntriesFromCoordinates(new LatLon(52.5179786, 13.3753321), new LatLon(52.5192215, 13.3768705));
         final long c = entries.stream()
                 .filter(entry -> "Reichstagsgebäude".equals(entry.article) && "de".equals(entry.lang))
@@ -98,6 +98,6 @@
     @Test
     public void testFromCoordinatesWikidata() throws Exception {
-        final List<WikipediaEntry> entries = WikipediaApp.getEntriesFromCoordinates("wikidata",
-                new LatLon(47.20, 11.30), new LatLon(47.22, 11.32));
+        final List<WikipediaEntry> entries = WikipediaApp.forLanguage("wikidata")
+                .getEntriesFromCoordinates(new LatLon(47.20, 11.30), new LatLon(47.22, 11.32));
         final long c = entries.stream()
                 .map(WikidataEntry.class::cast)
@@ -109,6 +109,6 @@
     @Test
     public void testGetWikidataForArticles() throws Exception {
-        final Map<String, String> map = WikipediaApp.getWikidataForArticles("en",
-                Arrays.asList("London", "Vienna", "Völs, Tyrol", "a-non-existing-article"));
+        final Map<String, String> map = WikipediaApp.forLanguage("en")
+                .getWikidataForArticles(Arrays.asList("London", "Vienna", "Völs, Tyrol", "a-non-existing-article"));
         assertThat(map.get("London"), is("Q84"));
         assertThat(map.get("Vienna"), is("Q1741"));
@@ -120,11 +120,11 @@
     @Test
     public void testTicket13991() throws Exception {
-        final Map<String, String> map = WikipediaApp.getWikidataForArticles("en",
-                Stream.iterate("London", x -> x).limit(100).collect(Collectors.toList()));
+        final Map<String, String> map = WikipediaApp.forLanguage("en")
+                .getWikidataForArticles(Stream.iterate("London", x -> x).limit(100).collect(Collectors.toList()));
         assertThat(map, is(Collections.singletonMap("London", "Q84")));
         final List<String> articles = IntStream.range(0, 200)
                 .mapToObj(i -> "a-non-existing-article-" + i)
                 .collect(Collectors.toList());
-        assertTrue(WikipediaApp.getWikidataForArticles("en", articles).isEmpty());
+        assertTrue(WikipediaApp.forLanguage("en").getWikidataForArticles(articles).isEmpty());
     }
 
@@ -154,5 +154,5 @@
         final WikipediaEntry entry2 = new WikipediaEntry("en", "London");
         final WikipediaEntry entry3 = new WikipediaEntry("en", "a-non-existing-article");
-        WikipediaApp.updateWIWOSMStatus("en", Arrays.asList(entry1, entry2, entry3));
+        WikipediaApp.forLanguage("en").updateWIWOSMStatus(Arrays.asList(entry1, entry2, entry3));
         assertThat(entry1.getWiwosmStatus(), is(true));
         assertThat(entry2.getWiwosmStatus(), is(true));
@@ -162,5 +162,5 @@
     @Test
     public void testCategoriesForPrefix() throws Exception {
-        final List<String> categories = WikipediaApp.getCategoriesForPrefix("de", "Gemeinde in Öster");
+        final List<String> categories = WikipediaApp.forLanguage("de").getCategoriesForPrefix("Gemeinde in Öster");
         assertTrue(categories.contains("Gemeinde in Österreich"));
     }
