subsections:
Abstract interfaces
Representation and implementation
Adding new generators
Adding new observers