up to exercise 3.20
up to exercise 3.23