I am not sure this is a more elegant solution.  It's saving part of the data from the move but not all of it.  And there is a rollback after that checks this condition.