A bit of refactoring: Protocol.handle takes a future param, DiscardEvent is a singleton