adding Distribution abstraction