extract caching
optional