added comments, and cleaned up code a bit