Fatal Errors and General Improvements

The details are in the commit messages.

I broke it out into 2 commits so that wrapping the entire class in the class_exists check (e713578) didn't nuke any hope at a meaningful diff (6d48df2) for the bulk of the changes.