added caching to abstract handler