refactor exceptions hierarchy
refactor