refactor + shrink