with doxygen documentation