implement event bus. not finished