updated, changed emit/on to generics