lots of refactoring of move methods