Index: src/org/openstreetmap/josm/command/SequenceCommand.java
===================================================================
--- src/org/openstreetmap/josm/command/SequenceCommand.java	(revision 16671)
+++ src/org/openstreetmap/josm/command/SequenceCommand.java	(working copy)
@@ -7,6 +7,8 @@
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Objects;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import javax.swing.Icon;
 
@@ -14,6 +16,7 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.bugreport.ReportedException;
 
 /**
  * A command consisting of a sequence of other commands. Executes the other commands
@@ -104,7 +107,12 @@
 
     @Override public boolean executeCommand() {
         for (int i = 0; i < sequence.length; i++) {
-            boolean result = sequence[i].executeCommand();
+            boolean result = false;
+            try {
+                result = sequence[i].executeCommand();
+            } catch (AssertionError | Exception e) {
+                throw createReportedException(e, i);
+            }
             if (!result && !continueOnError) {
                 undoCommands(i-1);
                 return false;
@@ -126,10 +134,31 @@
 
     protected final void undoCommands(int start) {
         for (int i = start; i >= 0; --i) {
-            sequence[i].undoCommand();
+            try {
+                sequence[i].undoCommand();
+            } catch (AssertionError | Exception e) {
+                throw createReportedException(e, i);
+            }
         }
     }
 
+    private ReportedException createReportedException(Throwable e, int i) {
+        ReportedException exception = new ReportedException(e);
+        exception.startSection("sequence_information");
+        exception.put("sequence_name", getDescriptionText());
+        exception.put("sequence_command", sequence[i].getDescriptionText());
+        exception.put("sequence_index", i);
+        exception.put("sequence_commands", "[" +
+        Stream.of(sequence).map(o -> o.getClass().getCanonicalName())
+        .map(Object::toString).collect(Collectors.joining(";"))
+        + "]");
+        exception.put("sequence_commands_descriptions", "[" +
+        Stream.of(sequence).map(Command::getDescriptionText)
+        .collect(Collectors.joining(";"))
+        + "]");
+        return exception;
+    }
+
     @Override
     public void undoCommand() {
         // We probably aborted this halfway though the execution sequence because of a sub-command error.
