Split out composition and operations; refactor composition