begin with refactor