use callback instead of mediator