events uses mixin instead of wrapper, (to avoid creating duplicate objects)