reworked exceptions, david's fault