using interfaces as decorators... maybe slightly less code.  Also, handling on_saved