all non trivial functions, structurs and their member variables should be documented