Exceptions are caused by the occurrence of unusual conditions during program execution; raising an exception invokes the operating system to manage recovery from the unusual condition. Although many exceptions can be handled and dismissed transparently to the user (e.g., page faults), some must be exported in some form (invoke handler, core dump, etc.). This paper concerns the design and implementation of exception handling facilities that perform this exporting for general purpose operating systems. It discusses both the overall design principles for these facilities and the specific design and implementation of an exception handling facility for the Mach operating system. It also discusses the support provided to applications that use exception (e.g., debuggers) by this facility and other Mach kernel facilities.