Game semantics is a class of denotational models for programming languages, in which types are interpreted as games and programs as strategies. In order to interpret pure programs, one has to restrict to innocent strategies. Two key results then entail that they are the morphisms of a category: associativity of composition and stability of innocence. These are non-trivial results, and significant work, notably by Melliès, has been devoted to better understanding them. Recently, games models have been extended to concurrent languages, using presheaves as generalised strategies and recasting innocence as a sheaf condition. We here revisit composition of strategies in concurrent game semantics with abstract categorical tools that make most of the reasoning automatic and extract the few crucial lemmas that give composition of strategies all its desired properties. The approach applies to non-concurrent strategies as well.