Cleaned up the code and added some docstrings