Added some tests and cleaned up the code a bit.