a lot of documentation added