should we use `Emitter` instead?