Refactor report and add cache