Added documentation and cleaned up code