cleared up many issues by reading eisenbud [ci skip]