added documentation and uml diagrams