added more comments and cleaned up code