Cleaned up the code and added more comments