removed generics, added caching