refactored again to generic cbv