Updated through exercise 16