This document discusses refactoring and metaprogramming. It provides an overview of topics including refactoring basics, refactoring tools in Squeak, and the implementation of the refactoring engine. The refactoring engine uses an abstract syntax tree to represent code and tree rewriting to specify transformations. Reflection is discussed, noting that while refactoring changes a system using itself, the refactoring engine builds its own abstraction layer rather than using the system's reflective capabilities.