Still reworking with more abstraction in the Events.
Merge remote-tracking branch 'origin/coderevision' into coderevision