use chained eventemitter - make sure events happen in order