Index: trunk/src/org/openstreetmap/josm/gui/GettingStarted.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/GettingStarted.java	(revision 1349)
+++ trunk/src/org/openstreetmap/josm/gui/GettingStarted.java	(revision 1350)
@@ -7,4 +7,8 @@
 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;
@@ -12,4 +16,5 @@
 import java.awt.BorderLayout;
 import java.awt.Component;
+import java.awt.EventQueue;
 
 import javax.swing.JScrollPane;
@@ -41,4 +46,48 @@
                 OpenBrowser.displayUrl(e.getDescription());
             }
+        }
+    }
+    
+    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;
         }
     }
@@ -72,5 +121,5 @@
         matcher.reset();
 
-        ArrayList<Object> links = new ArrayList<Object>();
+        ArrayList<String[]> links = new ArrayList<String[]>();
         String linksList="";
         while (matcher.find()) {
@@ -82,5 +131,10 @@
             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);
@@ -90,5 +144,5 @@
 
             // 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;
 
@@ -107,33 +161,21 @@
 
             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"+
@@ -148,13 +190,27 @@
     public GettingStarted() {
         super(new BorderLayout());
-        assignContent();
-
+        final LinkGeneral lg = new LinkGeneral(tr("Download \"Message of the day\""));
+        JScrollPane scroller = new JScrollPane(lg);
         // 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));
         add(scroller, BorderLayout.CENTER);
 
+        // Asynchronously get MOTD to speed-up JOSM startup
+        Thread t = new Thread(new Runnable() {
+            public void run() {
+                assignContent();
+                EventQueue.invokeLater(new Runnable() {
+                    public void run() {
+                       lg.setText(content);
+                       lg.moveCaretPosition(0);
+                    }
+                });
+            }
+        }, "MOTD-Loader");
+        t.setDaemon(true);
+        t.start();
+
         new FileDrop(linkGeneral);
     }
Index: trunk/src/org/openstreetmap/josm/gui/MapStatus.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 1349)
+++ trunk/src/org/openstreetmap/josm/gui/MapStatus.java	(revision 1350)
@@ -22,4 +22,5 @@
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseMotionListener;
+import java.awt.event.MouseListener;
 import java.lang.reflect.InvocationTargetException;
 import java.text.DecimalFormat;
@@ -345,4 +346,11 @@
         return "Statusline";
     }
+    
+    @Override
+    public void addMouseListener(MouseListener ml) {
+        //super.addMouseListener(ml);
+        lonText.addMouseListener(ml);
+        latText.addMouseListener(ml);
+    }
 
     public void setHelpText(String t) {
@@ -360,4 +368,3 @@
         distText.setText(dist < 0 ? "--" : text);
     }
-
 }
