Index: /trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 6796)
+++ /trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 6797)
@@ -377,8 +377,8 @@
         });
 
-        List<PluginInformation> pluginsToLoad = PluginHandler.buildListOfPluginsToLoad(splash,monitor.createSubTaskMonitor(1, false));
+        Collection<PluginInformation> pluginsToLoad = PluginHandler.buildListOfPluginsToLoad(splash,monitor.createSubTaskMonitor(1, false));
         if (!pluginsToLoad.isEmpty() && PluginHandler.checkAndConfirmPluginUpdate(splash)) {
             monitor.subTask(tr("Updating plugins"));
-            pluginsToLoad = PluginHandler.updatePlugins(splash,pluginsToLoad, monitor.createSubTaskMonitor(1, false));
+            pluginsToLoad = PluginHandler.updatePlugins(splash, null, monitor.createSubTaskMonitor(1, false));
         }
 
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java	(revision 6796)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/plugin/PluginPreference.java	(revision 6797)
@@ -6,4 +6,5 @@
 
 import java.awt.BorderLayout;
+import java.awt.Component;
 import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
@@ -113,4 +114,34 @@
         return sb.toString();
     }
+    
+    /**
+     * Notifies user about result of a finished plugin download task.
+     * @param parent The parent component
+     * @param task The finished plugin download task
+     * @since 6797
+     */
+    public static void notifyDownloadResults(final Component parent, PluginDownloadTask task) {
+        final Collection<PluginInformation> downloaded = task.getDownloadedPlugins();
+        final Collection<PluginInformation> failed = task.getFailedPlugins();
+        final StringBuilder sb = new StringBuilder();
+        sb.append("<html>");
+        sb.append(buildDownloadSummary(task));
+        if (!downloaded.isEmpty()) {
+            sb.append(tr("Please restart JOSM to activate the downloaded plugins."));
+        }
+        sb.append("</html>");
+        GuiHelper.runInEDTAndWait(new Runnable() {
+            @Override
+            public void run() {
+                HelpAwareOptionPane.showOptionDialog(
+                        parent,
+                        sb.toString(),
+                        tr("Update plugins"),
+                        !failed.isEmpty() ? JOptionPane.WARNING_MESSAGE : JOptionPane.INFORMATION_MESSAGE,
+                                HelpUtil.ht("/Preferences/Plugins")
+                        );
+            }
+        });
+    }
 
     private JosmTextField tfFilter;
@@ -327,28 +358,4 @@
         }
 
-        protected void notifyDownloadResults(PluginDownloadTask task) {
-            final Collection<PluginInformation> downloaded = task.getDownloadedPlugins();
-            final Collection<PluginInformation> failed = task.getFailedPlugins();
-            final StringBuilder sb = new StringBuilder();
-            sb.append("<html>");
-            sb.append(buildDownloadSummary(task));
-            if (!downloaded.isEmpty()) {
-                sb.append(tr("Please restart JOSM to activate the downloaded plugins."));
-            }
-            sb.append("</html>");
-            GuiHelper.runInEDTAndWait(new Runnable() {
-                @Override
-                public void run() {
-                    HelpAwareOptionPane.showOptionDialog(
-                            pnlPluginPreferences,
-                            sb.toString(),
-                            tr("Update plugins"),
-                            !failed.isEmpty() ? JOptionPane.WARNING_MESSAGE : JOptionPane.INFORMATION_MESSAGE,
-                                    HelpUtil.ht("/Preferences/Plugins")
-                            );
-                }
-            });
-        }
-
         protected void alertNothingToUpdate() {
             try {
@@ -391,5 +398,5 @@
                     if (pluginDownloadTask.isCanceled())
                         return;
-                    notifyDownloadResults(pluginDownloadTask);
+                    notifyDownloadResults(pnlPluginPreferences, pluginDownloadTask);
                     model.refreshLocalPluginVersion(pluginDownloadTask.getDownloadedPlugins());
                     model.clearPendingPlugins(pluginDownloadTask.getDownloadedPlugins());
Index: /trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 6796)
+++ /trunk/src/org/openstreetmap/josm/plugins/PluginHandler.java	(revision 6797)
@@ -32,8 +32,10 @@
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+import java.util.concurrent.FutureTask;
 import java.util.jar.JarFile;
 
@@ -58,7 +60,7 @@
 import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
-import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.I18n;
@@ -183,5 +185,5 @@
      * List of unmaintained plugins. Not really up-to-date as the vast majority of plugins are not really maintained after a few months, sadly...
      */
-    final public static String [] UNMAINTAINED_PLUGINS = new String[] {"gpsbabelgui", "Intersect_way"};
+    public static final String [] UNMAINTAINED_PLUGINS = new String[] {"gpsbabelgui", "Intersect_way"};
 
     /**
@@ -208,4 +210,6 @@
         }
     }
+    
+    private static PluginDownloadTask pluginDownloadTask = null;
 
     public static Collection<ClassLoader> getResourceClassLoaders() {
@@ -819,12 +823,13 @@
      *
      * @param parent the parent component for message boxes
-     * @param plugins the collection of plugins to update. Must not be null.
+     * @param pluginsWanted the collection of plugins to update. Updates all plugins if {@code null}
      * @param monitor the progress monitor. Defaults to {@link NullProgressMonitor#INSTANCE} if null.
      * @throws IllegalArgumentException thrown if plugins is null
      */
-    public static List<PluginInformation> updatePlugins(Component parent,
-            List<PluginInformation> plugins, ProgressMonitor monitor)
-            throws IllegalArgumentException{
-        CheckParameterUtil.ensureParameterNotNull(plugins, "plugins");
+    public static Collection<PluginInformation> updatePlugins(Component parent,
+            Collection<PluginInformation> pluginsWanted, ProgressMonitor monitor)
+            throws IllegalArgumentException {
+        Collection<PluginInformation> plugins = null;
+        pluginDownloadTask = null;
         if (monitor == null) {
             monitor = NullProgressMonitor.INSTANCE;
@@ -847,4 +852,20 @@
                 allPlugins = task1.getAvailablePlugins();
                 plugins = buildListOfPluginsToLoad(parent,monitor.createSubTaskMonitor(1, false));
+                // If only some plugins have to be updated, filter the list 
+                if (pluginsWanted != null && !pluginsWanted.isEmpty()) {
+                    for (Iterator<PluginInformation> it = plugins.iterator(); it.hasNext();) {
+                        PluginInformation pi = it.next();
+                        boolean found = false;
+                        for (PluginInformation piw : pluginsWanted) {
+                            if (pi.name.equals(piw.name)) {
+                                found = true;
+                                break;
+                            }
+                        }
+                        if (!found) {
+                            it.remove();
+                        }
+                    }
+                }
             } catch (ExecutionException e) {
                 Main.warn(tr("Failed to download plugin information list")+": ExecutionException");
@@ -886,5 +907,5 @@
                 // try to update the locally installed plugins
                 //
-                PluginDownloadTask task2 = new PluginDownloadTask(
+                pluginDownloadTask = new PluginDownloadTask(
                         monitor.createSubTaskMonitor(1,false),
                         pluginsToDownload,
@@ -892,5 +913,5 @@
                 );
 
-                future = service.submit(task2);
+                future = service.submit(pluginDownloadTask);
                 try {
                     future.get();
@@ -907,10 +928,10 @@
                 // Update Plugin info for downloaded plugins
                 //
-                refreshLocalUpdatedPluginInfo(task2.getDownloadedPlugins());
+                refreshLocalUpdatedPluginInfo(pluginDownloadTask.getDownloadedPlugins());
 
                 // notify user if downloading a locally installed plugin failed
                 //
-                if (! task2.getFailedPlugins().isEmpty()) {
-                    alertFailedPluginUpdate(parent, task2.getFailedPlugins());
+                if (! pluginDownloadTask.getFailedPlugins().isEmpty()) {
+                    alertFailedPluginUpdate(parent, pluginDownloadTask.getFailedPlugins());
                     return plugins;
                 }
@@ -919,8 +940,10 @@
             monitor.finishTask();
         }
-        // remember the update because it was successful
-        //
-        Main.pref.putInteger("pluginmanager.version", Version.getInstance().getVersion());
-        Main.pref.put("pluginmanager.lastupdate", Long.toString(System.currentTimeMillis()));
+        if (pluginsWanted == null) {
+            // if all plugins updated, remember the update because it was successful
+            //
+            Main.pref.putInteger("pluginmanager.version", Version.getInstance().getVersion());
+            Main.pref.put("pluginmanager.lastupdate", Long.toString(System.currentTimeMillis()));
+        }
         return plugins;
     }
@@ -1094,6 +1117,12 @@
     }
 
-    private static boolean confirmDeactivatingPluginAfterException(PluginProxy plugin) {
-        ButtonSpec [] options = new ButtonSpec[] {
+    private static int askUpdateDisableKeepPluginAfterException(PluginProxy plugin) {
+        final ButtonSpec[] options = new ButtonSpec[] {
+                new ButtonSpec(
+                        tr("Update plugin"),
+                        ImageProvider.get("dialogs", "refresh"),
+                        tr("Click to update the plugin ''{0}''", plugin.getPluginInformation().name),
+                        null /* no specific help context */
+                ),
                 new ButtonSpec(
                         tr("Disable plugin"),
@@ -1110,28 +1139,39 @@
         };
 
-        StringBuffer msg = new StringBuffer();
+        final StringBuffer msg = new StringBuffer();
         msg.append("<html>");
         msg.append(tr("An unexpected exception occurred that may have come from the ''{0}'' plugin.", plugin.getPluginInformation().name));
         msg.append("<br>");
-        if(plugin.getPluginInformation().author != null) {
+        if (plugin.getPluginInformation().author != null) {
             msg.append(tr("According to the information within the plugin, the author is {0}.", plugin.getPluginInformation().author));
             msg.append("<br>");
         }
         msg.append(tr("Try updating to the newest version of this plugin before reporting a bug."));
-        msg.append("<br>");
-        msg.append(tr("Should the plugin be disabled?"));
         msg.append("</html>");
 
-        int ret = HelpAwareOptionPane.showOptionDialog(
-                Main.parent,
-                msg.toString(),
-                tr("Update plugins"),
-                JOptionPane.QUESTION_MESSAGE,
-                null,
-                options,
-                options[0],
-                ht("/ErrorMessages#ErrorInPlugin")
-        );
-        return ret == 0;
+        try {
+            FutureTask<Integer> task = new FutureTask<Integer>(new Callable<Integer>() {
+                @Override
+                public Integer call() {
+                    return HelpAwareOptionPane.showOptionDialog(
+                            Main.parent,
+                            msg.toString(),
+                            tr("Update plugins"),
+                            JOptionPane.QUESTION_MESSAGE,
+                            null,
+                            options,
+                            options[0],
+                            ht("/ErrorMessages#ErrorInPlugin")
+                    );
+                }
+            });
+            GuiHelper.runInEDT(task);
+            return task.get();
+        } catch (InterruptedException e) {
+            Main.warn(e);
+        } catch (ExecutionException e) {
+            Main.warn(e);
+        }
+        return -1;
     }
 
@@ -1163,9 +1203,10 @@
     /**
      * Checks whether the exception <code>e</code> was thrown by a plugin. If so,
-     * conditionally deactivates the plugin, but asks the user first.
+     * conditionally updates or deactivates the plugin, but asks the user first.
      *
      * @param e the exception
-     */
-    public static void disablePluginAfterException(Throwable e) {
+     * @return plugin download task if the plugin has been updated to a newer version, {@code null} if it has been disabled or kept as it
+     */
+    public static PluginDownloadTask updateOrdisablePluginAfterException(Throwable e) {
         PluginProxy plugin = null;
         // Check for an explicit problem when calling a plugin function
@@ -1178,28 +1219,40 @@
         if (plugin == null)
             // don't know what plugin threw the exception
-            return;
+            return null;
 
         Set<String> plugins = new HashSet<String>(
                 Main.pref.getCollection("plugins",Collections.<String> emptySet())
         );
-        if (! plugins.contains(plugin.getPluginInformation().name))
+        final PluginInformation pluginInfo = plugin.getPluginInformation();
+        if (! plugins.contains(pluginInfo.name))
             // plugin not activated ? strange in this context but anyway, don't bother
             // the user with dialogs, skip conditional deactivation
-            return;
-
-        if (!confirmDeactivatingPluginAfterException(plugin))
+            return null;
+
+        switch (askUpdateDisableKeepPluginAfterException(plugin)) {
+        case 0:
+            // update the plugin
+            updatePlugins(Main.parent, Collections.singleton(pluginInfo), null);
+            return pluginDownloadTask;
+        case 1:
+            // deactivate the plugin
+            plugins.remove(plugin.getPluginInformation().name);
+            Main.pref.putCollection("plugins", plugins);
+            GuiHelper.runInEDTAndWait(new Runnable() {
+                @Override
+                public void run() {
+                    JOptionPane.showMessageDialog(
+                            Main.parent,
+                            tr("The plugin has been removed from the configuration. Please restart JOSM to unload the plugin."),
+                            tr("Information"),
+                            JOptionPane.INFORMATION_MESSAGE
+                    );
+                }
+            });
+            return null;
+        default:
             // user doesn't want to deactivate the plugin
-            return;
-
-        // deactivate the plugin
-        plugins.remove(plugin.getPluginInformation().name);
-        Main.pref.putCollection("plugins", plugins);
-        JOptionPane.showMessageDialog(
-                Main.parent,
-                tr("The plugin has been removed from the configuration. Please restart JOSM to unload the plugin."),
-                tr("Information"),
-                JOptionPane.INFORMATION_MESSAGE
-        );
-        return;
+            return null;
+        }
     }
 
Index: /trunk/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java	(revision 6796)
+++ /trunk/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java	(revision 6797)
@@ -24,7 +24,9 @@
 import org.openstreetmap.josm.actions.ShowStatusReportAction;
 import org.openstreetmap.josm.gui.ExtendedDialog;
+import org.openstreetmap.josm.gui.preferences.plugin.PluginPreference;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.gui.widgets.JosmTextArea;
 import org.openstreetmap.josm.gui.widgets.UrlLabel;
+import org.openstreetmap.josm.plugins.PluginDownloadTask;
 import org.openstreetmap.josm.plugins.PluginHandler;
 
@@ -37,6 +39,56 @@
 
     private static boolean handlingInProgress = false;
+    private static BugReporterThread bugReporterThread = null;
     private static int exceptionCounter = 0;
     private static boolean suppressExceptionDialogs = false;
+    
+    private static class BugReporterThread extends Thread {
+        
+        final Throwable e;
+        
+        public BugReporterThread(Throwable t) {
+            super("Bug Reporter");
+            this.e = t;
+        }
+
+        @Override
+        public void run() {
+         // 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);
+
+            SwingUtilities.invokeLater(new Runnable() {
+                @Override
+                public void run() {
+                    // 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")});
+                        ed.setIcon(JOptionPane.ERROR_MESSAGE);
+                        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());
+                        JCheckBox cbSuppress = null;
+                        if (exceptionCounter > 1) {
+                            cbSuppress = new JCheckBox(tr("Suppress further error dialogs for this session."));
+                            pnl.add(cbSuppress, GBC.eol());
+                        }
+                        ed.setContent(pnl);
+                        ed.showDialog();
+                        if (cbSuppress != null && cbSuppress.isSelected()) {
+                            suppressExceptionDialogs = true;
+                        }
+                        if (ed.getValue() != 2) return;
+                        askForBugReport(e);
+                    } else {
+                        // Ask for restart to install new plugin
+                        PluginPreference.notifyDownloadResults(Main.parent, pluginDownloadTask);
+                    }
+                }
+            });
+        }
+    }
 
     @Override
@@ -59,7 +111,7 @@
      */
     public static void handleException(final Throwable e) {
-        if (handlingInProgress)
+        if (handlingInProgress || suppressExceptionDialogs)
             return;                  // we do not handle secondary exceptions, this gets too messy
-        if (suppressExceptionDialogs)
+        if (bugReporterThread != null && bugReporterThread.isAlive())
             return;
         handlingInProgress = true;
@@ -80,97 +132,65 @@
                 }
 
-
-                SwingUtilities.invokeLater(new Runnable() {
-                    @Override
-                    public void run() {
-                        // Give the user a chance to deactivate the plugin which threw the exception (if it
-                        // was thrown from a plugin)
-                        //
-                        PluginHandler.disablePluginAfterException(e);
-
-                        // Then ask for submitting a bug report, for exceptions thrown from a plugin too
-                        //
-                        ExtendedDialog ed = new ExtendedDialog(Main.parent, tr("Unexpected Exception"), new String[] {tr("Do nothing"), tr("Report Bug")});
-                        ed.setIcon(JOptionPane.ERROR_MESSAGE);
-                        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());
-                        JCheckBox cbSuppress = null;
-                        if (exceptionCounter > 1) {
-                            cbSuppress = new JCheckBox(tr("Suppress further error dialogs for this session."));
-                            pnl.add(cbSuppress, GBC.eol());
-                        }
-                        ed.setContent(pnl);
-                        ed.showDialog();
-                        if (cbSuppress != null && cbSuppress.isSelected()) {
-                            suppressExceptionDialogs = true;
-                        }
-                        if (ed.getValue() != 2) return;
-
-                        try {
-                            final int maxlen = 6000;
-                            StringWriter stack = new StringWriter();
-                            e.printStackTrace(new PrintWriter(stack));
-
-                            String text = ShowStatusReportAction.getReportHeader()
-                                    + stack.getBuffer().toString();
-                            String urltext = text.replaceAll("\r",""); /* strip useless return chars */
-                            if(urltext.length() > maxlen)
-                            {
-                                urltext = urltext.substring(0,maxlen);
-                                int idx = urltext.lastIndexOf('\n');
-                                /* cut whole line when not loosing too much */
-                                if(maxlen-idx < 200) {
-                                    urltext = urltext.substring(0,idx+1);
-                                }
-                                urltext += "...<snip>...\n";
-                            }
-
-                            JPanel p = new JPanel(new GridBagLayout());
-                            p.add(new JMultilineLabel(
-                                    tr("You have encountered an error in JOSM. Before you file a bug report " +
-                                            "make sure you have updated to the latest version of JOSM here:")), GBC.eol());
-                            p.add(new UrlLabel(Main.JOSM_WEBSITE,2), GBC.eop().insets(8,0,0,0));
-                            p.add(new JMultilineLabel(
-                                    tr("You should also update your plugins. If neither of those help please " +
-                                            "file a bug report in our bugtracker using this link:")), GBC.eol());
-                            p.add(getBugReportUrlLabel(urltext), GBC.eop().insets(8,0,0,0));
-                            p.add(new JMultilineLabel(
-                                    tr("There the error information provided below should already be " +
-                                            "filled in for you. Please include information on how to reproduce " +
-                                            "the error and try to supply as much detail as possible.")), GBC.eop());
-                            p.add(new JMultilineLabel(
-                                    tr("Alternatively, if that does not work you can manually fill in the information " +
-                                            "below at this URL:")), GBC.eol());
-                            p.add(new UrlLabel(Main.JOSM_WEBSITE+"/newticket",2), GBC.eop().insets(8,0,0,0));
-                            if (Utils.copyToClipboard(text)) {
-                                p.add(new JLabel(tr("(The text has already been copied to your clipboard.)")), GBC.eop());
-                            }
-
-                            JosmTextArea info = new JosmTextArea(text, 18, 60);
-                            info.setCaretPosition(0);
-                            info.setEditable(false);
-                            p.add(new JScrollPane(info), GBC.eop());
-
-                            for (Component c: p.getComponents()) {
-                                if (c instanceof JMultilineLabel) {
-                                    ((JMultilineLabel)c).setMaxWidth(400);
-                                }
-                            }
-
-                            JOptionPane.showMessageDialog(Main.parent, p, tr("You have encountered a bug in JOSM"), JOptionPane.ERROR_MESSAGE);
-                        } catch (Exception e1) {
-                            Main.error(e1);
-                        }
-                    }
-                });
+                bugReporterThread = new BugReporterThread(e);
+                bugReporterThread.start();
             }
         } finally {
             handlingInProgress = false;
+        }
+    }
+    
+    private static void askForBugReport(final Throwable e) {
+        try {
+            final int maxlen = 6000;
+            StringWriter stack = new StringWriter();
+            e.printStackTrace(new PrintWriter(stack));
+
+            String text = ShowStatusReportAction.getReportHeader() + stack.getBuffer().toString();
+            String urltext = text.replaceAll("\r","");
+            if (urltext.length() > maxlen) {
+                urltext = urltext.substring(0,maxlen);
+                int idx = urltext.lastIndexOf('\n');
+                // cut whole line when not loosing too much
+                if (maxlen-idx < 200) {
+                    urltext = urltext.substring(0,idx+1);
+                }
+                urltext += "...<snip>...\n";
+            }
+
+            JPanel p = new JPanel(new GridBagLayout());
+            p.add(new JMultilineLabel(
+                    tr("You have encountered an error in JOSM. Before you file a bug report " +
+                            "make sure you have updated to the latest version of JOSM here:")), GBC.eol());
+            p.add(new UrlLabel(Main.JOSM_WEBSITE,2), GBC.eop().insets(8,0,0,0));
+            p.add(new JMultilineLabel(
+                    tr("You should also update your plugins. If neither of those help please " +
+                            "file a bug report in our bugtracker using this link:")), GBC.eol());
+            p.add(getBugReportUrlLabel(urltext), GBC.eop().insets(8,0,0,0));
+            p.add(new JMultilineLabel(
+                    tr("There the error information provided below should already be " +
+                            "filled in for you. Please include information on how to reproduce " +
+                            "the error and try to supply as much detail as possible.")), GBC.eop());
+            p.add(new JMultilineLabel(
+                    tr("Alternatively, if that does not work you can manually fill in the information " +
+                            "below at this URL:")), GBC.eol());
+            p.add(new UrlLabel(Main.JOSM_WEBSITE+"/newticket",2), GBC.eop().insets(8,0,0,0));
+            if (Utils.copyToClipboard(text)) {
+                p.add(new JLabel(tr("(The text has already been copied to your clipboard.)")), GBC.eop());
+            }
+
+            JosmTextArea info = new JosmTextArea(text, 18, 60);
+            info.setCaretPosition(0);
+            info.setEditable(false);
+            p.add(new JScrollPane(info), GBC.eop());
+
+            for (Component c: p.getComponents()) {
+                if (c instanceof JMultilineLabel) {
+                    ((JMultilineLabel)c).setMaxWidth(400);
+                }
+            }
+
+            JOptionPane.showMessageDialog(Main.parent, p, tr("You have encountered a bug in JOSM"), JOptionPane.ERROR_MESSAGE);
+        } catch (Exception e1) {
+            Main.error(e1);
         }
     }
