Regular Canon type and conversion method, plus refactoring.