refactor
refactor exceptions