fixed event emitter so it works intuitively...still some redundances to be optimized out though