refactor + caching