diff --git a/sway/input/seat.c b/sway/input/seat.c
index cffceaaec..659ec89bb 100644
--- a/sway/input/seat.c
+++ b/sway/input/seat.c
@@ -1110,9 +1110,6 @@ static void seat_end_move_tiling(struct sway_seat *seat) {
 	int after = edge != WLR_EDGE_TOP && edge != WLR_EDGE_LEFT;
 
 	container_detach(con);
-	if (old_parent) {
-		container_reap_empty(old_parent);
-	}
 
 	// Moving container into empty workspace
 	if (target_node->type == N_WORKSPACE && edge == WLR_EDGE_NONE) {
@@ -1135,6 +1132,10 @@ static void seat_end_move_tiling(struct sway_seat *seat) {
 		workspace_insert_tiling(new_ws, con, after);
 	}
 
+	if (old_parent) {
+		container_reap_empty(old_parent);
+	}
+
 	// This is a bit dirty, but we'll set the dimensions to that of a sibling.
 	// I don't think there's any other way to make it consistent without
 	// changing how we auto-size containers.