cleaned up code and added comments for readability