revert to having _collect and append by trait or value seperate