Added documentation and cleaned up