eventemitter draft done, let's do hard refactoring