more documentation and explanation