implement event source functions