Index: /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaAddNamesAction.java
===================================================================
--- /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaAddNamesAction.java	(revision 29520)
+++ /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaAddNamesAction.java	(revision 29521)
@@ -10,11 +10,14 @@
 import java.util.List;
 import java.util.Locale;
-import java.util.TreeMap;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.io.remotecontrol.AddTagsDialog;
+import org.openstreetmap.josm.tools.LanguageInfo;
 
 public class WikipediaAddNamesAction extends JosmAction {
+
+    final StringProperty wikipediaLang = new StringProperty("wikipedia.lang", LanguageInfo.getJOSMLocaleCode().substring(0, 2));
 
     public WikipediaAddNamesAction() {
@@ -26,7 +29,7 @@
     @Override
     public void actionPerformed(ActionEvent e) {
-        String[] parts = getWikipediaValue().split(":", 2);
+        final WikipediaApp.WikipediaLangArticle wp = WikipediaApp.WikipediaLangArticle.parseTag("wikipedia", getWikipediaValue());
         List<String[]> tags = new ArrayList<String[]>();
-        for (WikipediaApp.WikipediaLangArticle i : WikipediaApp.getInterwikiArticles(parts[0], parts[1])) {
+        for (WikipediaApp.WikipediaLangArticle i : WikipediaApp.getInterwikiArticles(wp.lang, wp.article)) {
             if (useWikipediaLangArticle(i)) {
                 tags.add(new String[]{"name:" + i.lang, i.article});
Index: /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java
===================================================================
--- /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java	(revision 29520)
+++ /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java	(revision 29521)
@@ -25,4 +25,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Tag;
+import org.openstreetmap.josm.tools.Predicate;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.Utils.Function;
@@ -137,37 +138,21 @@
     }
 
-    static Collection<String> getWikipediaArticles(String wikipediaLang, OsmPrimitive p) {
-        Collection<String> r = new ArrayList<String>();
+    static Collection<String> getWikipediaArticles(final String wikipediaLang, OsmPrimitive p) {
         final Map<String, String> tags = p.getKeys();
-        // consider wikipedia=[lang]:*
-        final String wp = tags.get("wikipedia");
-        if (wp != null && wp.startsWith("http")) {
-            //wikipedia=http...
-            final WikipediaLangArticle item = WikipediaLangArticle.parseFromUrl(wp);
-            if (item != null && wikipediaLang.equals(item.lang)) {
-                r.add(item.article.replace("_", " "));
-            }
-        } else if (wp != null) {
-            //wikipedia=[lang]:[article]
-            String[] item = decodeURL(wp).split(":", 2);
-            if (item.length == 2 && wikipediaLang.equals(item[0])) {
-                r.add(item[1].replace("_", " "));
-            }
-        }
-        // consider wikipedia:[lang]=*
-        final String wpLang = tags.get("wikipedia:" + wikipediaLang);
-        if (wpLang != null && wpLang.startsWith("http")) {
-            //wikipedia:[lang]=http...
-            final WikipediaLangArticle item = WikipediaLangArticle.parseFromUrl(wpLang);
-            if (wikipediaLang.equals(item.lang)) {
-                r.add(item.article.replace("_", " "));
-            }
-        } else if (wpLang != null) {
-            //wikipedia:[lang]=[lang]:[article]
-            //wikipedia:[lang]=[article]
-            String[] item = decodeURL(wpLang).split(":", 2);
-            r.add(item[item.length == 2 ? 1 : 0].replace("_", " "));
-        }
-        return r;
+        return Utils.transform(Utils.filter(
+                Arrays.asList(
+                        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;
+            }
+        });
     }
 
@@ -217,4 +202,28 @@
             return new WikipediaLangArticle(m.group(1), m.group(2));
         }
+
+        public static WikipediaLangArticle parseTag(String key, String value) {
+            if (value == null) {
+                return null;
+            } else if (value.startsWith("http")) {
+                //wikipedia=http...
+                return parseFromUrl(value);
+            } else if (value.contains(":")) {
+                //wikipedia=[lang]:[article]
+                //wikipedia:[lang]=[lang]:[article]
+                final String[] item = decodeURL(value).split(":", 2);
+                final String article = item[1].replace("_", " ");
+                return new WikipediaLangArticle(item[0], article);
+            } else if (key.startsWith("wikipedia:")) {
+                //wikipedia:[lang]=[lang]:[article]
+                //wikipedia:[lang]=[article]
+                final String lang = key.split(":", 2)[1];
+                final String[] item = decodeURL(value).split(":", 2);
+                final String article = item[item.length == 2 ? 1 : 0].replace("_", " ");
+                return new WikipediaLangArticle(lang, article);
+            } else {
+                return null;
+            }
+        }
     }
 
