Cleaned up the code and added some comments