with mediator pattern