First class-based refactor changes, with some doc