add caching for list operation