This is an exercise for the Nashville Software School. Not intended to be perfect.