chapter 12: part one, added self file