Index: /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java
===================================================================
--- /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java	(revision 29522)
+++ /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaApp.java	(revision 29523)
@@ -9,4 +9,5 @@
 import java.net.URLDecoder;
 import java.net.URLEncoder;
+import java.util.AbstractList;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -107,5 +108,5 @@
             final String url = "http://toolserver.org/~master/osmjson/getGeoJSON.php?action=check"
                     + "&lang=" + wikipediaLang;
-            System.out.println("Wikipedia: POST " + url);
+            System.out.println("Wikipedia: POST " + url + " " + articleNames);
 
             try {
@@ -329,3 +330,19 @@
         }
     }
+
+    public static <T> List<List<T>> partitionList(final List<T> list, final int size) {
+        return new AbstractList<List<T>>() {
+            @Override
+            public List<T> get(int index) {
+                final int fromIndex = index * size;
+                final int toIndex = Math.min(fromIndex + size, list.size());
+                return list.subList(fromIndex, toIndex);
+            }
+
+            @Override
+            public int size() {
+                return (int) Math.ceil(((float) list.size()) / size);
+            }
+        };
+    }
 }
Index: /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaToggleDialog.java
===================================================================
--- /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaToggleDialog.java	(revision 29522)
+++ /applications/editors/josm/plugins/wikipedia/src/org/wikipedia/WikipediaToggleDialog.java	(revision 29523)
@@ -18,8 +18,8 @@
 import javax.swing.JList;
 import javax.swing.JOptionPane;
+import javax.swing.SwingWorker;
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.search.SearchAction;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
-import org.openstreetmap.josm.data.Preferences;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -30,4 +30,5 @@
 import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
+import org.openstreetmap.josm.data.preferences.IntegerProperty;
 import org.openstreetmap.josm.data.preferences.StringProperty;
 import org.openstreetmap.josm.gui.MapView;
@@ -102,13 +103,4 @@
     };
 
-    private void setWikipediaEntries(List<WikipediaEntry> entries) {
-        Collections.sort(entries);
-        WikipediaApp.updateWIWOSMStatus(wikipediaLang.get(), entries);
-        model.clear();
-        for (WikipediaEntry i : entries) {
-            model.addElement(i);
-        }
-    }
-
     private void updateTitle() {
         if (titleContext == null) {
@@ -130,16 +122,48 @@
             try {
                 // determine bbox
-                LatLon min = Main.map.mapView.getLatLon(0, Main.map.mapView.getHeight());
-                LatLon max = Main.map.mapView.getLatLon(Main.map.mapView.getWidth(), 0);
-                List<WikipediaEntry> entries = WikipediaApp.getEntriesFromCoordinates(
-                        wikipediaLang.get(), min, max);
+                final LatLon min = Main.map.mapView.getLatLon(0, Main.map.mapView.getHeight());
+                final LatLon max = Main.map.mapView.getLatLon(Main.map.mapView.getWidth(), 0);
                 // add entries to list model
-                setWikipediaEntries(entries);
                 titleContext = tr("coordinates");
                 updateTitle();
+                new UpdateWikipediaArticlesSwingWorker() {
+
+                    @Override
+                    List<WikipediaEntry> getEntries() {
+                        return WikipediaApp.getEntriesFromCoordinates(
+                                wikipediaLang.get(), min, max);
+                    }
+                }.execute();
             } catch (Exception ex) {
                 throw new RuntimeException(ex);
             }
         }
+    }
+
+    abstract class UpdateWikipediaArticlesSwingWorker extends SwingWorker<Void, WikipediaEntry> {
+
+        private final IntegerProperty wikipediaStatusUpdateChunkSize = new IntegerProperty("wikipedia.statusupdate.chunk-size", 20);
+
+        abstract List<WikipediaEntry> getEntries();
+
+        @Override
+        protected Void doInBackground() throws Exception {
+            final List<WikipediaEntry> entries = getEntries();
+            Collections.sort(entries);
+            publish(entries.toArray(new WikipediaEntry[entries.size()]));
+            for (List<WikipediaEntry> chunk : WikipediaApp.partitionList(entries, wikipediaStatusUpdateChunkSize.get())) {
+                WikipediaApp.updateWIWOSMStatus(wikipediaLang.get(), chunk);
+            }
+            return null;
+        }
+
+        @Override
+        protected void process(List<WikipediaEntry> chunks) {
+            model.clear();
+            for (WikipediaEntry i : chunks) {
+                model.addElement(i);
+            }
+        }
+
     }
 
@@ -159,9 +183,15 @@
                 return;
             }
-            List<WikipediaEntry> entries = WikipediaApp.getEntriesFromCategory(
-                    wikipediaLang.get(), category, Main.pref.getInteger("wikipedia.depth", 3));
-            setWikipediaEntries(entries);
+
             titleContext = category;
             updateTitle();
+
+            new UpdateWikipediaArticlesSwingWorker() {
+                @Override
+                List<WikipediaEntry> getEntries() {
+                    return WikipediaApp.getEntriesFromCategory(
+                            wikipediaLang.get(), category, Main.pref.getInteger("wikipedia.depth", 3));
+                }
+            }.execute();
         }
     }
@@ -176,7 +206,13 @@
         @Override
         public void actionPerformed(ActionEvent e) {
-            setWikipediaEntries(WikipediaApp.getEntriesFromClipboard(wikipediaLang.get()));
             titleContext = tr("clipboard");
             updateTitle();
+            new UpdateWikipediaArticlesSwingWorker() {
+
+                @Override
+                List<WikipediaEntry> getEntries() {
+                    return WikipediaApp.getEntriesFromClipboard(wikipediaLang.get());
+                }
+            }.execute();
         }
     }
