throw exceptions instead of emitting events