implement caching
readme!