added own caching system