improve move()