diff --git a/src/org/openstreetmap/josm/gui/progress/swing/ProgressMonitorExecutor.java b/src/org/openstreetmap/josm/gui/progress/swing/ProgressMonitorExecutor.java
index 2a4a84765f..d0b04127a2 100644
--- a/src/org/openstreetmap/josm/gui/progress/swing/ProgressMonitorExecutor.java
+++ b/src/org/openstreetmap/josm/gui/progress/swing/ProgressMonitorExecutor.java
@@ -1,6 +1,7 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.progress.swing;
 
+import java.awt.GraphicsEnvironment;
 import java.util.concurrent.CancellationException;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
@@ -10,6 +11,7 @@ import java.util.concurrent.TimeUnit;
 
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.bugreport.BugReport;
 
 /**
  * Executor that displays the progress monitor to the user.
@@ -58,6 +60,15 @@ public class ProgressMonitorExecutor extends ThreadPoolExecutor {
         }
         if (t != null) {
             Logging.error("Thread {0} raised {1}", Thread.currentThread().getName(), t);
+            // Assume that a no graphics environment should *always* print the stack trace (these are almost always
+            // test environments). Also log if trace is enabled.
+            if (GraphicsEnvironment.isHeadless() || Logging.isDebugEnabled()) {
+                Logging.error(t);
+            }
+            // For now, only show the user bug report windows when debug is enabled
+            if (Logging.isDebugEnabled() || Utils.isRunningWebStart()) {
+                BugReport.intercept(t).warn();
+            }
         }
     }
 }
