please also document every public member functions and variables.