There's a case for moving destination aside, if it exists, so that we can put it back on failure.  Not sure if it's relevant to how this function is used.