Refactor BaseUserType
Customize exception