`apply` should take a flag argument that indicates whether it should return the result of `func` on the engines directly, or if it should store the result on the engines like here.  Sometimes we want the result returned to the client, other times we want the result stored on the engines and the name returned.