fixed do_move and undo_move