emitter refactor
merge