so that we could swap SourceEvent easily (for firebase)