add exceptions hierarchy and handling