Fixed design: Observer pattern + program flow