See source code comments!