Challenge 18 mostly implemented.