More granular exception hierarchy, improve naming consistency