add offline caching ability