introduced caching via conditional get