refactor + design