Exercise 5.8
Modify 5.3 ~ 5.4