Exercise 5-18. The rest of Chapter 5 put on hold due to issues running the boilerplate code.