Extensive documentation

[skip ci]