Refactor drive()