Personal work from 2019 - updated version.