[fixes #30] add optional caching