clean up the code, and added comments