added UML diagram and stuffs