diff --git a/src/org/openstreetmap/josm/actions/ReportBugAction.java b/src/org/openstreetmap/josm/actions/ReportBugAction.java
index 28ddc37..c7caab4 100644
--- a/src/org/openstreetmap/josm/actions/ReportBugAction.java
+++ b/src/org/openstreetmap/josm/actions/ReportBugAction.java
@@ -6,10 +6,8 @@ import static org.openstreetmap.josm.tools.I18n.tr;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 
-import org.openstreetmap.josm.tools.BugReportExceptionHandler;
-import org.openstreetmap.josm.tools.OpenBrowser;
 import org.openstreetmap.josm.tools.Shortcut;
-import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.bugreport.BugReportSender;
 
 /**
  * Reports a ticket to JOSM bugtracker.
@@ -17,33 +15,48 @@ import org.openstreetmap.josm.tools.Utils;
  */
 public class ReportBugAction extends JosmAction {
 
+    private final String text;
+
     /**
-     * Constructs a new {@code ReportBugAction}.
+     * Constructs a new {@code ReportBugAction} that reports the normal status report.
      */
     public ReportBugAction() {
+        this(ShowStatusReportAction.getReportHeader());
+    }
+
+    /**
+     * Constructs a new {@link ReportBugAction} for the given debug text.
+     * @param text The text to send
+     */
+    public ReportBugAction(String text) {
         super(tr("Report bug"), "bug", tr("Report a ticket to JOSM bugtracker"),
                 Shortcut.registerShortcut("reportbug", tr("Report a ticket to JOSM bugtracker"),
                         KeyEvent.CHAR_UNDEFINED, Shortcut.NONE), true);
+        this.text = text;
     }
 
     @Override
     public void actionPerformed(ActionEvent e) {
-        reportBug();
+        BugReportSender.reportBug(text);
     }
 
     /**
      * Reports a ticket to JOSM bugtracker.
+     * @deprecated Use {@link BugReportSender#reportBug(String)}
      */
+    @Deprecated
     public static void reportBug() {
-        reportBug(ShowStatusReportAction.getReportHeader());
+        BugReportSender.reportBug(ShowStatusReportAction.getReportHeader());
     }
 
     /**
      * Reports a ticket to JOSM bugtracker with given status report.
+     * Replaced by {@link BugReportSender#reportBug(String)}
      * @param report Status report header containing technical, non-personal information
+     * @deprecated Use {@link BugReportSender#reportBug(String)}
      */
+    @Deprecated
     public static void reportBug(String report) {
-        OpenBrowser.displayUrl(BugReportExceptionHandler.getBugReportUrl(
-                Utils.strip(report)).toExternalForm());
+        BugReportSender.reportBug(report);
     }
 }
diff --git a/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java b/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java
index 1f8f5fb..53c7d92 100644
--- a/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java
+++ b/src/org/openstreetmap/josm/actions/ShowStatusReportAction.java
@@ -19,19 +19,17 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
-import javax.swing.JScrollPane;
-
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.DatasetConsistencyTest;
 import org.openstreetmap.josm.data.preferences.Setting;
 import org.openstreetmap.josm.gui.ExtendedDialog;
-import org.openstreetmap.josm.gui.widgets.JosmTextArea;
 import org.openstreetmap.josm.plugins.PluginHandler;
 import org.openstreetmap.josm.tools.PlatformHookUnixoid;
 import org.openstreetmap.josm.tools.Shortcut;
-import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.bugreport.BugReportSender;
+import org.openstreetmap.josm.tools.bugreport.DebugTextDisplay;
 
 /**
  * @author xeen
@@ -183,23 +181,19 @@ public final class ShowStatusReportAction extends JosmAction {
             Main.error(x);
         }
 
-        JosmTextArea ta = new JosmTextArea(text.toString());
-        ta.setWrapStyleWord(true);
-        ta.setLineWrap(true);
-        ta.setEditable(false);
-        JScrollPane sp = new JScrollPane(ta);
+        DebugTextDisplay ta = new DebugTextDisplay(text.toString());
 
         ExtendedDialog ed = new ExtendedDialog(Main.parent,
                 tr("Status Report"),
                 new String[] {tr("Copy to clipboard and close"), tr("Report bug"), tr("Close") });
         ed.setButtonIcons(new String[] {"copy", "bug", "cancel" });
-        ed.setContent(sp, false);
+        ed.setContent(ta, false);
         ed.setMinimumSize(new Dimension(380, 200));
         ed.setPreferredSize(new Dimension(700, Main.parent.getHeight()-50));
 
         switch (ed.showDialog().getValue()) {
-            case 1: Utils.copyToClipboard(text.toString()); break;
-            case 2: ReportBugAction.reportBug(reportHeader); break;
+            case 1: ta.copyToClippboard(); break;
+            case 2: BugReportSender.reportBug(reportHeader); break;
         }
     }
 }
diff --git a/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java b/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java
index 0fac45f..f980e36 100644
--- a/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java
+++ b/src/org/openstreetmap/josm/tools/BugReportExceptionHandler.java
@@ -15,23 +15,25 @@ import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
 import java.util.zip.GZIPOutputStream;
 
+import javax.swing.JButton;
 import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
-import javax.swing.JScrollPane;
 import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.ReportBugAction;
 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;
 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;
+import org.openstreetmap.josm.tools.bugreport.BugReportSender;
+import org.openstreetmap.josm.tools.bugreport.DebugTextDisplay;
 
 /**
  * An exception handler that asks the user to send a bug report.
@@ -193,21 +195,11 @@ public final class BugReportExceptionHandler implements Thread.UncaughtException
 
     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";
-            }
+            text = text.replaceAll("\r", "");
 
             JPanel p = new JPanel(new GridBagLayout());
             p.add(new JMultilineLabel(
@@ -219,7 +211,7 @@ public final class BugReportExceptionHandler implements Thread.UncaughtException
                     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().fill(GridBagConstraints.HORIZONTAL));
-            p.add(getBugReportUrlLabel(urltext), GBC.eop().insets(8, 0, 0, 0));
+            p.add(new JButton(new ReportBugAction(text)), 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 " +
@@ -231,17 +223,14 @@ public final class BugReportExceptionHandler implements Thread.UncaughtException
             p.add(new UrlLabel(Main.getJOSMWebsite()+"/newticket", 2), GBC.eop().insets(8, 0, 0, 0));
 
             // Wiki formatting for manual copy-paste
-            text = "{{{\n"+text+"}}}";
+            DebugTextDisplay textarea = new DebugTextDisplay(text);
 
-            if (Utils.copyToClipboard(text)) {
+            if (textarea.copyToClippboard()) {
                 p.add(new JLabel(tr("(The text has already been copied to your clipboard.)")),
                         GBC.eop().fill(GridBagConstraints.HORIZONTAL));
             }
 
-            JosmTextArea info = new JosmTextArea(text, 18, 60);
-            info.setCaretPosition(0);
-            info.setEditable(false);
-            p.add(new JScrollPane(info), GBC.eop().fill());
+            p.add(textarea, GBC.eop().fill());
 
             for (Component c: p.getComponents()) {
                 if (c instanceof JMultilineLabel) {
@@ -264,9 +253,10 @@ public final class BugReportExceptionHandler implements Thread.UncaughtException
     }
 
     /**
-     * Replies the URL to create a JOSM bug report with the given debug text
+     * Replies the URL to create a JOSM bug report with the given debug text. GZip is used to reduce the length of the parameter.
      * @param debugText The debug text to provide us
      * @return The URL to create a JOSM bug report with the given debug text
+     * @see BugReportSender#reportBug(String) if you want to send long debug texts along.
      * @since 5849
      */
     public static URL getBugReportUrl(String debugText) {
diff --git a/src/org/openstreetmap/josm/tools/bugreport/BugReportSender.java b/src/org/openstreetmap/josm/tools/bugreport/BugReportSender.java
new file mode 100644
index 0000000..962c468
--- /dev/null
+++ b/src/org/openstreetmap/josm/tools/bugreport/BugReportSender.java
@@ -0,0 +1,159 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.tools.bugreport;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
+import org.openstreetmap.josm.gui.widgets.UrlLabel;
+import org.openstreetmap.josm.tools.Base64;
+import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.HttpClient;
+import org.openstreetmap.josm.tools.HttpClient.Response;
+import org.openstreetmap.josm.tools.OpenBrowser;
+import org.openstreetmap.josm.tools.Utils;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+/**
+ * This class handles sending the bug report to JOSM website.
+ * <p>
+ * Currently, we try to open a browser window for the user that displays the bug report.
+ *
+ * @author Michael Zangl
+ */
+public class BugReportSender extends Thread {
+
+    private final String statusText;
+
+    /**
+     * Creates a new sender.
+     * @param statusText The status text to send.
+     */
+    public BugReportSender(String statusText) {
+        super("Bug report sender");
+        this.statusText = statusText;
+    }
+
+    @Override
+    public void run() {
+        try {
+            // first, send the debug text using post.
+            String debugTextPasteId = pasteDebugText();
+
+            // then open a browser to display the pasted text.
+            String openBrowserError = OpenBrowser.displayUrl(getJOSMTicketURL() + "?pdata_stored=" + debugTextPasteId);
+            if (openBrowserError != null) {
+                Main.warn(openBrowserError);
+                failed(openBrowserError);
+            }
+        } catch (BugReportSenderException e) {
+            Main.warn(e);
+            failed(e.getMessage());
+        }
+    }
+
+    /**
+     * Sends the debug text to the server.
+     * @return The token which was returned by the server. We need to pass this on to the ticket system.
+     * @throws BugReportSenderException if sending the report failed.
+     */
+    private String pasteDebugText() throws BugReportSenderException {
+        try {
+            String text = Utils.strip(statusText);
+            String postQuery = "pdata=" + Base64.encode(text, true);
+            HttpClient client = HttpClient.create(new URL(getJOSMTicketURL()), "POST")
+                    .setHeader("Content-Type", "application/x-www-form-urlencoded")
+                    .setRequestBody(postQuery.getBytes(StandardCharsets.UTF_8));
+
+            Response connection = client.connect();
+
+            try (InputStream in = connection.getContent()) {
+                DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+                Document document = builder.parse(in);
+                return retriveDebugToken(document);
+            }
+        } catch (IOException | SAXException | ParserConfigurationException | XPathExpressionException t) {
+            throw new BugReportSenderException(t);
+        }
+    }
+
+    private String getJOSMTicketURL() {
+        return Main.getJOSMWebsite() + "/josmticket";
+    }
+
+    private String retriveDebugToken(Document document) throws XPathExpressionException, BugReportSenderException {
+        XPathFactory factory = XPathFactory.newInstance();
+        XPath xpath = factory.newXPath();
+        String status = (String) xpath.compile("/josmticket/@status").evaluate(document, XPathConstants.STRING);
+        if (!"ok".equals(status)) {
+            String message = (String) xpath.compile("/josmticket/error/text()").evaluate(document,
+                    XPathConstants.STRING);
+            if (message.isEmpty()) {
+                message = "Error in server response but server did not tell us what happened.";
+            }
+            throw new BugReportSenderException(message);
+        }
+
+        String token = (String) xpath.compile("/josmticket/preparedid/text()")
+                .evaluate(document, XPathConstants.STRING);
+        if (token.isEmpty()) {
+            throw new BugReportSenderException("Server did not respond with a prepared id.");
+        }
+        return token;
+    }
+
+    private void failed(String string) {
+        SwingUtilities.invokeLater(new Runnable() {
+            @Override
+            public void run() {
+                JPanel errorPanel = new JPanel();
+                errorPanel.setLayout(new GridBagLayout());
+                errorPanel.add(new JMultilineLabel(
+                        tr("Opening the bug report failed. Please report manually using this website:")),
+                        GBC.eol().fill(GridBagConstraints.HORIZONTAL));
+                errorPanel.add(new UrlLabel(Main.getJOSMWebsite() + "/newticket", 2), GBC.eop().insets(8, 0, 0, 0));
+                errorPanel.add(new DebugTextDisplay(statusText));
+
+                JOptionPane.showMessageDialog(Main.parent, errorPanel, tr("You have encountered a bug in JOSM"),
+                        JOptionPane.ERROR_MESSAGE);
+            }
+        });
+    }
+
+    private static class BugReportSenderException extends Exception {
+        BugReportSenderException(String message) {
+            super(message);
+        }
+
+        BugReportSenderException(Throwable cause) {
+            super(cause);
+        }
+    }
+
+    /**
+     * Opens the bug report window on the JOSM server.
+     * @param statusText The status text to send along to the server.
+     */
+    public static void reportBug(String statusText) {
+        new BugReportSender(statusText).start();
+    }
+}
diff --git a/src/org/openstreetmap/josm/tools/bugreport/DebugTextDisplay.java b/src/org/openstreetmap/josm/tools/bugreport/DebugTextDisplay.java
new file mode 100644
index 0000000..12bbab6
--- /dev/null
+++ b/src/org/openstreetmap/josm/tools/bugreport/DebugTextDisplay.java
@@ -0,0 +1,38 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.tools.bugreport;
+
+import java.awt.Dimension;
+
+import javax.swing.JScrollPane;
+
+import org.openstreetmap.josm.gui.widgets.JosmTextArea;
+import org.openstreetmap.josm.tools.Utils;
+
+/**
+ * This is a text area that displays the debug text with scroll bars.
+ * @author Michael Zangl
+ */
+public class DebugTextDisplay extends JScrollPane {
+    private String text;
+
+    /**
+     * Creates a new text are with the fixed text
+     * @param textToDisplay The text to display.
+     */
+    public DebugTextDisplay(String textToDisplay) {
+        text = "{{{\n" + Utils.strip(textToDisplay) + "\n}}}";
+        JosmTextArea textArea = new JosmTextArea(text);
+        textArea.setCaretPosition(0);
+        textArea.setEditable(false);
+        setViewportView(textArea);
+        setPreferredSize(new Dimension(600, 300));
+    }
+
+    /**
+     * Copies the debug text to the clippboard.
+     * @return <code>true</code> if copy was successful
+     */
+    public boolean copyToClippboard() {
+        return Utils.copyToClipboard(text);
+    }
+}
