final with refactor