implement event manager