canvaslms refactoring