Cleaned up the code and added comments