diff --git a/server/unittools.cpp b/server/unittools.cpp
index 5455e76af9..c035a3016a 100644
--- a/server/unittools.cpp
+++ b/server/unittools.cpp
@@ -1413,6 +1413,10 @@ void bounce_unit(struct unit *punit, int max_distance,
     }
   }
 
+  if (on_failure) {
+    on_failure({.bunit = punit});
+  }
+
   /* Didn't find a place to bounce the unit, going to disband it.
    * Try to bounce transported units. */
   if (0 < get_transporter_occupancy(punit)) {
@@ -1428,10 +1432,6 @@ void bounce_unit(struct unit *punit, int max_distance,
     }
   }
 
-  if (on_failure) {
-    on_failure({.bunit = punit});
-  }
-
   wipe_unit(punit, ULR_STACK_CONFLICT, nullptr);
 }