Needs to be an event emitter.