Cleaned up the code a little bit, added comments.