copied some documentation from various library places