Presentation logic factored out from service