cleaned up the code and added some comments