James C - Compiler
James C - cleaned up pattern matching a little
James C - added exceptions