factored out body