events: WIP add before/after observer callbacks