added doxygen to better understand the code structure