Index: /trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 7400)
+++ /trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 7401)
@@ -28,9 +28,9 @@
 import javax.swing.JScrollPane;
 import javax.swing.KeyStroke;
-import javax.swing.SwingUtilities;
 import javax.swing.UIManager;
 
 import org.openstreetmap.josm.gui.help.HelpBrowser;
 import org.openstreetmap.josm.gui.help.HelpUtil;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.tools.GBC;
@@ -538,5 +538,5 @@
     /**
      * Sets the button that will react to ENTER.
-     * @param defaultButtonIdx The button index (starts to )
+     * @param defaultButtonIdx The button index (starts to 1)
      * @return {@code this}
      */
@@ -558,10 +558,11 @@
 
     /**
-     * Don't focus the "do not show this again" check box, but the default button.
+     * Always makes sure the default button has initial focus.
      */
     protected void fixFocus() {
-        if (toggleable && defaultButton != null) {
-            SwingUtilities.invokeLater(new Runnable() {
-                @Override public void run() {
+        if (defaultButton != null) {
+            GuiHelper.runInEDT(new Runnable() {
+                @Override
+                public void run() {
                     defaultButton.requestFocusInWindow();
                 }
Index: /trunk/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java	(revision 7400)
+++ /trunk/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java	(revision 7401)
@@ -25,4 +25,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ShowStatusReportAction;
+import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.gui.ExtendedDialog;
 import org.openstreetmap.josm.gui.preferences.plugin.PluginPreference;
@@ -56,5 +57,5 @@
         @Override
         public void run() {
-         // Give the user a chance to deactivate the plugin which threw the exception (if it was thrown from a plugin)
+            // Give the user a chance to deactivate the plugin which threw the exception (if it was thrown from a plugin)
             final PluginDownloadTask pluginDownloadTask = PluginHandler.updateOrdisablePluginAfterException(e);
 
@@ -64,13 +65,39 @@
                     // Then ask for submitting a bug report, for exceptions thrown from a plugin too, unless updated to a new version
                     if (pluginDownloadTask == null) {
-                        ExtendedDialog ed = new ExtendedDialog(Main.parent, tr("Unexpected Exception"), new String[] {tr("Do nothing"), tr("Report Bug")});
+                        String[] buttonTexts = new String[] {tr("Do nothing"), tr("Report Bug")};
+                        String[] buttonIcons = new String[] {"cancel", "bug"};
+                        int defaultButtonIdx = 1;
+                        String message = tr("An unexpected exception occurred.<br>" +
+                                "This is always a coding error. If you are running the latest<br>" +
+                                "version of JOSM, please consider being kind and file a bug report."
+                                );
+                        // Check user is running current tested version, the error may already be fixed
+                        int josmVersion = Version.getInstance().getVersion();
+                        if (josmVersion != Version.JOSM_UNKNOWN_VERSION) {
+                            try {
+                                int latestVersion = Integer.parseInt(new WikiReader().
+                                        read(Main.getJOSMWebsite()+"/wiki/TestedVersion?format=txt").trim());
+                                if (latestVersion > josmVersion) {
+                                    buttonTexts = new String[] {tr("Do nothing"), tr("Update JOSM"), tr("Report Bug")};
+                                    buttonIcons = new String[] {"cancel", "download", "bug"};
+                                    defaultButtonIdx = 2;
+                                    message = tr("An unexpected exception occurred. This is always a coding error.<br><br>" +
+                                            "However, you are running an old version of JOSM ({0}),<br>" +
+                                            "instead of using the current tested version (<b>{1}</b>).<br><br>"+
+                                            "<b>Please update JOSM</b> before considering to file a bug report.",
+                                            String.valueOf(josmVersion), String.valueOf(latestVersion));
+                                }
+                            } catch (IOException | NumberFormatException e) {
+                                Main.warn("Unable to detect latest version of JOSM: "+e.getMessage());
+                            }
+                        }
+                        // Show dialog
+                        ExtendedDialog ed = new ExtendedDialog(Main.parent, tr("Unexpected Exception"), buttonTexts);
+                        ed.setButtonIcons(buttonIcons);
                         ed.setIcon(JOptionPane.ERROR_MESSAGE);
+                        ed.setCancelButton(1);
+                        ed.setDefaultButton(defaultButtonIdx);
                         JPanel pnl = new JPanel(new GridBagLayout());
-                        pnl.add(new JLabel(
-                                "<html>" + tr("An unexpected exception occurred.<br>" +
-                                              "This is always a coding error. If you are running the latest<br>" +
-                                              "version of JOSM, please consider being kind and file a bug report."
-                                              )
-                                         + "</html>"), GBC.eol());
+                        pnl.add(new JLabel("<html>" + message + "</html>"), GBC.eol());
                         JCheckBox cbSuppress = null;
                         if (exceptionCounter > 1) {
@@ -83,6 +110,18 @@
                             suppressExceptionDialogs = true;
                         }
-                        if (ed.getValue() != 2) return;
-                        askForBugReport(e);
+                        if (ed.getValue() <= 1) {
+                            // "Do nothing"
+                            return;
+                        } else if (ed.getValue() < buttonTexts.length) {
+                            // "Update JOSM"
+                            try {
+                                Main.platform.openUrl(Main.getJOSMWebsite());
+                            } catch (IOException e) {
+                                Main.warn("Unable to access JOSM website: "+e.getMessage());
+                            }
+                        } else {
+                            // "Report bug"
+                            askForBugReport(e);
+                        }
                     } else {
                         // Ask for restart to install new plugin
Index: /trunk/src/org/openstreetmap/josm/tools/WikiReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/WikiReader.java	(revision 7400)
+++ /trunk/src/org/openstreetmap/josm/tools/WikiReader.java	(revision 7401)
@@ -36,6 +36,7 @@
      * Read the page specified by the url and return the content.
      *
-     * If the url is within the baseurl path, parse it as an trac wikipage and replace relative
-     * pathes etc..
+     * If the url is within the baseurl path, parse it as an trac wikipage and replace relative paths etc..
+     * @param url the URL to read
+     * @return The page as string
      *
      * @throws IOException Throws, if the page could not be loaded.
@@ -44,10 +45,17 @@
         URL u = new URL(url);
         try (BufferedReader in = Utils.openURLReader(u)) {
-            if (url.startsWith(baseurl) && !url.endsWith("?format=txt"))
+            boolean txt = url.endsWith("?format=txt");
+            if (url.startsWith(baseurl) && !txt)
                 return readFromTrac(in, u);
-            return readNormal(in);
+            return readNormal(in, !txt);
         }
     }
 
+    /**
+     * Reads the localized version of the given wiki page.
+     * @param text The page title, without locale prefix
+     * @return the localized version of the given wiki page
+     * @throws IOException if any I/O error occurs
+     */
     public String readLang(String text) throws IOException {
         String languageCode;
@@ -89,5 +97,5 @@
     }
 
-    private String readNormal(BufferedReader in) throws IOException {
+    private String readNormal(BufferedReader in, boolean html) throws IOException {
         StringBuilder b = new StringBuilder();
         for (String line = in.readLine(); line != null; line = in.readLine()) {
@@ -96,5 +104,5 @@
             }
         }
-        return "<html>" + b + "</html>";
+        return html ? "<html>" + b + "</html>" : b.toString();
     }
 
