added bunch of documentation