refactor and per rquest method cache