refactor ReportEngine