Almost finished version with comments about the code and the process.