fold event into protocol, add test