- add 'fatal' argument - improve internal logic and flow - raise known exception on error - update exception hierarchy