refactor before extension
implement caching
1.3.0