Implement better exceptions throughout.

Signed-off-by: Jason Lewis <jason.lewis1991@gmail.com>