This should support at least an Observer implementation (plus other ideas @benjchristensen has in mind)