add cache and helper method