Index: /trunk/src/org/openstreetmap/josm/actions/DeleteAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/DeleteAction.java	(revision 12762)
+++ /trunk/src/org/openstreetmap/josm/actions/DeleteAction.java	(revision 12763)
@@ -19,7 +19,9 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationToChildReference;
 import org.openstreetmap.josm.gui.ConditionalOptionPaneUtil;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapFrame;
+import org.openstreetmap.josm.gui.dialogs.DeleteFromRelationConfirmationDialog;
 import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -45,4 +47,12 @@
         public boolean confirmRelationDeletion(Collection<Relation> relations) {
             return DeleteAction.confirmRelationDeletion(relations);
+        }
+
+        @Override
+        public boolean confirmDeletionFromRelation(Collection<RelationToChildReference> references) {
+            DeleteFromRelationConfirmationDialog dialog = DeleteFromRelationConfirmationDialog.getInstance();
+            dialog.getModel().populate(references);
+            dialog.setVisible(true);
+            return !dialog.isCanceled();
         }
     };
Index: /trunk/src/org/openstreetmap/josm/command/DeleteCommand.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/command/DeleteCommand.java	(revision 12762)
+++ /trunk/src/org/openstreetmap/josm/command/DeleteCommand.java	(revision 12763)
@@ -34,5 +34,4 @@
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.WaySegment;
-import org.openstreetmap.josm.gui.dialogs.DeleteFromRelationConfirmationDialog;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
@@ -42,4 +41,6 @@
 /**
  * A command to delete a number of primitives from the dataset.
+ * To be used correctly, this class requires an initial call to {@link #setDeletionCallback(DeletionCallback)} to
+ * allow interactive confirmation actions.
  * @since 23
  */
@@ -94,4 +95,12 @@
          */
         boolean confirmRelationDeletion(Collection<Relation> relations);
+
+        /**
+         * Confirm before removing a collection of primitives from their parent relations.
+         * @param references the list of relation-to-child references
+         * @return {@code true} if user confirms the deletion
+         * @since 12763
+         */
+        boolean confirmDeletionFromRelation(Collection<RelationToChildReference> references);
     }
 
@@ -577,10 +586,6 @@
             Set<RelationToChildReference> references = RelationToChildReference.getRelationToChildReferences(primitivesToDelete);
             references.removeIf(ref -> ref.getParent().isDeleted());
-            if (!references.isEmpty()) {
-                DeleteFromRelationConfirmationDialog dialog = DeleteFromRelationConfirmationDialog.getInstance();
-                dialog.getModel().populate(references);
-                dialog.setVisible(true);
-                if (dialog.isCanceled())
-                    return null;
+            if (!references.isEmpty() && !callback.confirmDeletionFromRelation(references)) {
+                return null;
             }
         }
