Use contract for event dispatcher