Generify event source (wip)