Index: src/org/openstreetmap/josm/gui/GettingStarted.java
===================================================================
--- src/org/openstreetmap/josm/gui/GettingStarted.java	(revision 1348)
+++ src/org/openstreetmap/josm/gui/GettingStarted.java	(working copy)
@@ -6,6 +6,10 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Future;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -42,7 +46,51 @@
             }
         }
     }
+    
+    public class readMOTD implements Callable<String> {
+        private boolean isLocalized;
+        private boolean isHelp;
+        private String urlLoc;
+        private String urlIntl;
+        private String urlBase;
+        
+        readMOTD(boolean isLocalized, String urlBase, String urlLoc, String urlIntl, boolean isHelp) {
+          this.isLocalized = isLocalized;
+          this.urlBase = urlBase;
+          this.urlLoc = urlLoc;
+          this.urlIntl = urlIntl;
+          this.isHelp = isHelp;
+        }
 
+        public String call() {
+            WikiReader wr = new WikiReader(urlBase);
+            String content = "";
+            try {
+                // If we hit a non-localized link here, we already know there's no translated version available
+                String message = isLocalized ? wr.read(urlLoc) : "";
+                // Look for non-localized version
+                if (message.equals(""))
+                    message = wr.read(urlIntl);
+
+                if (!message.equals(""))
+                    if(isHelp)
+                        content += message;
+                    else
+                        content += "<ul><li>"+ message.substring(8)+"</li></ul>";
+            } catch (IOException ioe) {
+                try {
+                    if(isHelp)
+                        content += wr.read(urlIntl);
+                    else
+                        content += "<ul><li>"+wr.read(urlIntl).substring(8)+"</li></ul>";
+                } catch (IOException ioe2) {
+                }
+            }
+            
+            return content;
+        }
+    }
+
     private void assignContent() {
         if (content.length() > 0 && Main.pref.getBoolean("help.displaymotd", true)) return;
 
@@ -71,7 +119,7 @@
         Matcher matcher = versionPattern.matcher(motdcontent);
         matcher.reset();
 
-        ArrayList<Object> links = new ArrayList<Object>();
+        ArrayList<String[]> links = new ArrayList<String[]>();
         String linksList="";
         while (matcher.find()) {
             // Discards all but the selected locale and non-localized links
@@ -81,7 +129,12 @@
             links.add(new String[] {matcher.group(1), matcher.group(2), matcher.group(3)});
             linksList += matcher.group(1)+matcher.group(2)+matcher.group(3)+": ";
         }
-
+        
+        // We cannot use Main.worker here because it's single-threaded and
+        // setting it to multi-threading will cause problems elsewhere
+        ExecutorService slave = Executors.newCachedThreadPool();
+        
+        ArrayList<Future<String>> linkContent = new ArrayList<Future<String>>();
         for(int i=0; i < links.size(); i++) {
             String[] obj = (String[])links.get(i);
             int targetVersion = Integer.parseInt(obj[1]);
@@ -89,7 +142,7 @@
             Boolean isLocalized = !obj[2].equals("");
 
             // Prefer localized over non-localized links, if they're otherwise the same
-            if(!isLocalized && linksList.indexOf(condition+obj[1]+languageCode+" ") >= 0)
+            if(!isLocalized && linksList.indexOf(condition + obj[1] + languageCode + " ") >= 0)
                 continue;
 
             boolean included = false;
@@ -106,35 +159,23 @@
               included = myVersion <= targetVersion;
 
             if(!included) continue;
-
-            Boolean isHelp = targetVersion == 1;
-
+            
+            boolean isHelp = targetVersion == 1;
             String urlStart = baseurl + "/wiki/";
             String urlEnd = "MessageOfTheDay" + condition + targetVersion + (isHelp ? "" : "?format=txt");
-
+            String urlLoc = urlStart + languageCode + urlEnd;
+            String urlIntl = urlStart + urlEnd;
+            
+            // This adds all links to the worker which will download them concurrently
+            linkContent.add(slave.submit(new readMOTD(isLocalized, baseurl, urlLoc, urlIntl, isHelp)));
+        }
+        
+        for(int i=0; i < linkContent.size(); i++) {
             try {
-                // If we hit a non-localized link here, we already know there's no translated version available
-                String message = isLocalized ? wr.read(urlStart + languageCode + urlEnd) : "";
-                // Look for non-localized version
-                if (message.equals(""))
-                    message = wr.read(urlStart + urlEnd);
-
-                if (!message.equals(""))
-                    if(isHelp)
-                        content += message;
-                    else
-                        content += "<ul><li>"+ message.substring(8)+"</li></ul>";
-            } catch (IOException ioe) {
-                try {
-                    if(isHelp)
-                        content += wr.read(urlStart + urlEnd);
-                    else
-                        content += "<ul><li>"+wr.read(urlStart + urlEnd).substring(8)+"</li></ul>";
-                } catch (IOException ioe2) {
-                }
-            }
+                content += linkContent.get(i).get();
+            } catch (Exception e) {}
         }
-
+        
         content = "<html>\n"+
             "<style type=\"text/css\">\n"+
             "body { font-family: sans-serif; font-weight: bold; }\n"+
@@ -149,8 +190,6 @@
         super(new BorderLayout());
         assignContent();
 
-        // panel.add(GBC.glue(0,1), GBC.eol());
-        //panel.setMinimumSize(new Dimension(400, 600));
         Component linkGeneral = new LinkGeneral(content);
         JScrollPane scroller = new JScrollPane(linkGeneral);
         scroller.setViewportBorder(new EmptyBorder(10,100,10,100));
