should switch to use `_on` to remove need for self