added uml diagram