https://paul.staroch.name/thesis/thesis.pdf