Index: applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikidataTagCellRenderer.java
===================================================================
--- applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikidataTagCellRenderer.java	(revision 32609)
+++ applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikidataTagCellRenderer.java	(revision 32610)
@@ -92,6 +92,5 @@
                 return null;
             }
-            texts.add(Utils.escapeReservedCharactersHTML(id)
-                    + " <span color='gray'>" + Utils.escapeReservedCharactersHTML(label) + "</span>");
+            texts.add(WikipediaApp.WikidataEntry.getLabelText(id, label));
         }
         component.setText("<html>" + Utils.join("; ", texts));
Index: applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java
===================================================================
--- applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java	(revision 32609)
+++ applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java	(revision 32610)
@@ -37,4 +37,5 @@
 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;
@@ -60,8 +61,16 @@
     }
 
+    static String getSiteUrl(String wikipediaLang) {
+        if ("wikidata".equals(wikipediaLang)) {
+            return "https://www.wikidata.org";
+        } else {
+            return "https://" + wikipediaLang + ".wikipedia.org";
+        }
+    }
+
     static List<WikipediaEntry> getEntriesFromCoordinates(String wikipediaLang, LatLon min, LatLon max) {
         try {
             // construct url
-            final String url = "https://" + wikipediaLang + ".wikipedia.org/w/api.php"
+            final String url = getSiteUrl(wikipediaLang) + "/w/api.php"
                     + "?action=query"
                     + "&list=geosearch"
@@ -82,8 +91,13 @@
                     final Node node = nodes.item(i);
                     final String name = xpathName.evaluate(node);
-                    entries.add(new WikipediaEntry(name, wikipediaLang, name, new LatLon((
+                    final LatLon latLon = new LatLon((
                             (double) xpathLat.evaluate(node, XPathConstants.NUMBER)),
-                            (double) xpathLon.evaluate(node, XPathConstants.NUMBER))
-                    ));
+                            (double) xpathLon.evaluate(node, XPathConstants.NUMBER));
+                    if ("wikidata".equals(wikipediaLang)) {
+                        entries.add(new WikidataEntry(name, latLon, getLabelForWikidata(name, Locale.getDefault())));
+                    } else {
+                        entries.add(new WikipediaEntry(name, wikipediaLang, name, latLon
+                        ));
+                    }
                 }
                 return entries;
@@ -166,4 +180,7 @@
 
     static Collection<String> getWikipediaArticles(final String wikipediaLang, OsmPrimitive p) {
+        if ("wikidata".equals(wikipediaLang)) {
+            return Utils.filter(Collections.singleton(p.get("wikidata")), Predicates.not(Predicates.isNull()));
+        }
         final Map<String, String> tags = p.getKeys();
         return Utils.transform(Utils.filter(
@@ -266,5 +283,5 @@
         try {
             Collection<WikipediaLangArticle> r = new ArrayList<>();
-            final String url = "https://" + wikipediaLang + ".wikipedia.org/w/api.php" +
+            final String url = getSiteUrl(wikipediaLang) + "/w/api.php" +
                     "?action=query" +
                     "&prop=langlinks" +
@@ -289,5 +306,5 @@
     static LatLon getCoordinateForArticle(String wikipediaLang, String article) {
         try {
-            final String url = "https://" + wikipediaLang + ".wikipedia.org/w/api.php" +
+            final String url = getSiteUrl(wikipediaLang) + "/w/api.php" +
                     "?action=query" +
                     "&prop=coordinates" +
@@ -395,5 +412,5 @@
         }
 
-        protected final Tag createWikipediaTag() {
+        protected Tag createWikipediaTag() {
             return new Tag("wikipedia", wikipediaLang + ":" + wikipediaArticle);
         }
@@ -408,6 +425,9 @@
 
         public String getBrowserUrl() {
-            return "https://" + wikipediaLang + ".wikipedia.org/wiki/"
-                    + Utils.encodeUrl(wikipediaArticle.replace(" ", "_"));
+            return getSiteUrl(wikipediaLang) + "/wiki/" + Utils.encodeUrl(wikipediaArticle.replace(" ", "_"));
+        }
+
+        public String getLabelText() {
+            return name;
         }
 
@@ -420,4 +440,26 @@
         public int compareTo(WikipediaEntry o) {
             return AlphanumComparator.getInstance().compare(name, o.name);
+        }
+    }
+
+    static class WikidataEntry extends WikipediaEntry {
+
+        WikidataEntry(String id, LatLon coordinate, String label) {
+            super(label, "wikidata", id, coordinate);
+            ensureValidWikidataId(id);
+        }
+
+        @Override
+        protected Tag createWikipediaTag() {
+            return new Tag("wikidata", wikipediaArticle);
+        }
+
+        @Override
+        public String getLabelText() {
+            return getLabelText(name, wikipediaArticle);
+        }
+
+        static String getLabelText(String bold, String gray) {
+            return Utils.escapeReservedCharactersHTML(bold) + " <span color='gray'>" + Utils.escapeReservedCharactersHTML(gray) + "</span>";
         }
     }
Index: applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaToggleDialog.java
===================================================================
--- applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaToggleDialog.java	(revision 32609)
+++ applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaToggleDialog.java	(revision 32610)
@@ -36,10 +36,8 @@
 import org.openstreetmap.josm.data.preferences.IntegerProperty;
 import org.openstreetmap.josm.data.preferences.StringProperty;
-import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
-import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.LanguageInfo;
@@ -52,5 +50,6 @@
         super(tr("Wikipedia"), "wikipedia", tr("Fetch Wikipedia articles with coordinates"), null, 150);
         createLayout(list, true, Arrays.asList(
-                new SideButton(new WikipediaLoadCoordinatesAction()),
+                new SideButton(new WikipediaLoadCoordinatesAction(false)),
+                new SideButton(new WikipediaLoadCoordinatesAction(true)),
                 new SideButton(new WikipediaLoadCategoryAction()),
                 new SideButton(new PasteWikipediaArticlesAction()),
@@ -88,6 +87,7 @@
                 @Override
                 public JLabel getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
-                    JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
                     final WikipediaEntry entry = (WikipediaEntry) value;
+                    final String labelText = "<html>" + entry.getLabelText();
+                    final JLabel label = (JLabel) super.getListCellRendererComponent(list, labelText, index, isSelected, cellHasFocus);
                     if (entry.getWiwosmStatus() != null && entry.getWiwosmStatus()) {
                         label.setIcon(ImageProvider.getIfAvailable("misc", "grey_check"));
@@ -111,8 +111,18 @@
 
     private void updateTitle() {
+        final String lang = getLanguageOfFirstItem();
+        final String host = WikipediaApp.getSiteUrl(lang).split("/+")[1];
         if (titleContext == null) {
-            setTitle(/* I18n: [language].Wikipedia.org */ tr("{0}.Wikipedia.org", wikipediaLang.get()));
+            setTitle(host);
         } else {
-            setTitle(/* I18n: [language].Wikipedia.org: [context] */ tr("{0}.Wikipedia.org: {1}", wikipediaLang.get(), titleContext));
+            setTitle(tr("{0}: {1}", host, titleContext));
+        }
+    }
+
+    private String getLanguageOfFirstItem() {
+        try {
+            return list.getModel().getElementAt(0).wikipediaLang;
+        } catch (ArrayIndexOutOfBoundsException ignore) {
+            return wikipediaLang.get();
         }
     }
@@ -120,8 +130,13 @@
     class WikipediaLoadCoordinatesAction extends AbstractAction {
 
-        public WikipediaLoadCoordinatesAction() {
-            super(tr("Coordinates"));
-            new ImageProvider("dialogs", "wikipedia").getResource().attachImageIcon(this, true);
-            putValue(SHORT_DESCRIPTION, tr("Fetches all coordinates from Wikipedia in the current view"));
+        private final boolean wikidata;
+
+        public WikipediaLoadCoordinatesAction(boolean wikidata) {
+            super(wikidata ? tr("Wikidata") : tr("Coordinates"));
+            this.wikidata = wikidata;
+            new ImageProvider("dialogs", wikidata ? "wikidata" : "wikipedia").getResource().attachImageIcon(this, true);
+            putValue(SHORT_DESCRIPTION, wikidata
+                    ? tr("Fetches all coordinates from Wikidata in the current view")
+                    : tr("Fetches all coordinates from Wikipedia in the current view"));
         }
 
@@ -140,5 +155,5 @@
                     List<WikipediaEntry> getEntries() {
                         return WikipediaApp.getEntriesFromCoordinates(
-                                wikipediaLang.get(), min, max);
+                                wikidata ? "wikidata" : wikipediaLang.get(), min, max);
                     }
                 }.execute();
@@ -161,5 +176,5 @@
             publish(entries.toArray(new WikipediaEntry[entries.size()]));
             for (List<WikipediaEntry> chunk : WikipediaApp.partitionList(entries, wikipediaStatusUpdateChunkSize.get())) {
-                WikipediaApp.updateWIWOSMStatus(wikipediaLang.get(), chunk);
+                WikipediaApp.updateWIWOSMStatus(chunk.get(0).wikipediaLang, chunk);
             }
             return null;
@@ -172,4 +187,6 @@
                 model.addElement(i);
             }
+            updateTitle();
+            updateWikipediaArticles();
         }
 
@@ -309,5 +326,7 @@
                 return;
             }
-            final LatLon latLon = WikipediaApp.getCoordinateForArticle(entry.wikipediaLang, entry.wikipediaArticle);
+            final LatLon latLon = entry.coordinate != null
+                    ? entry.coordinate
+                    : WikipediaApp.getCoordinateForArticle(entry.wikipediaLang, entry.wikipediaArticle);
             if (latLon == null) {
                 return;
@@ -318,8 +337,9 @@
 
     protected void updateWikipediaArticles() {
+        final String language = getLanguageOfFirstItem();
         articles.clear();
         if (Main.main != null && Main.getLayerManager().getEditDataSet() != null) {
             for (final OsmPrimitive p : Main.getLayerManager().getEditDataSet().allPrimitives()) {
-                articles.addAll(WikipediaApp.getWikipediaArticles(wikipediaLang.get(), p));
+                articles.addAll(WikipediaApp.getWikipediaArticles(language, p));
             }
         }
