change emitters to callbacks