Index: trunk/src/org/openstreetmap/josm/tools/bugreport/BugReport.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/bugreport/BugReport.java	(revision 10884)
+++ trunk/src/org/openstreetmap/josm/tools/bugreport/BugReport.java	(revision 10886)
@@ -123,5 +123,9 @@
         PrintWriter out = new PrintWriter(stringWriter);
         if (isIncludeStatusReport()) {
-            out.println(ShowStatusReportAction.getReportHeader());
+            try {
+                out.println(ShowStatusReportAction.getReportHeader());
+            } catch (RuntimeException e) {
+                out.println("Could not generate status report: " + e.getMessage());
+            }
         }
         if (isIncludeData()) {
Index: trunk/src/org/openstreetmap/josm/tools/bugreport/BugReportQueue.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/bugreport/BugReportQueue.java	(revision 10884)
+++ trunk/src/org/openstreetmap/josm/tools/bugreport/BugReportQueue.java	(revision 10886)
@@ -5,5 +5,7 @@
 import java.util.ArrayList;
 import java.util.LinkedList;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.function.BiFunction;
+import java.util.function.Predicate;
 
 import org.openstreetmap.josm.Main;
@@ -23,4 +25,5 @@
     private Thread displayThread;
     private final BiFunction<ReportedException, Integer, SuppressionMode> bugReportHandler = getBestHandler();
+    private final CopyOnWriteArrayList<Predicate<ReportedException>> handlers = new CopyOnWriteArrayList<>();
     private int displayedErrors;
 
@@ -97,4 +100,8 @@
 
     private SuppressionMode displayFor(ReportedException e) {
+        if (handlers.stream().anyMatch(p -> p.test(e))) {
+            Main.trace("Intercepted by handler.");
+            return SuppressionMode.NONE;
+        }
         return bugReportHandler.apply(e, getDisplayedErrors());
     }
@@ -123,4 +130,18 @@
     }
 
+    /**
+     * Allows you to peek or even intersect the bug reports.
+     * @param handler The handler. It can return false to stop all further handling of the exception.
+     * @since 10886
+     */
+    public void addBugReportHandler(Predicate<ReportedException> handler) {
+        handlers.add(handler);
+    }
+
+    /**
+     * Gets the global bug report queue
+     * @return The queue
+     * @since 10886
+     */
     public static BugReportQueue getInstance() {
         return INSTANCE;
