added UML diagram