While I'm usually skeptical about this kind of change, it makes sense to allocate collections more carefully beneath ConstraintTree as that's code executed for each single constraint.