preserve needs across combinations with | as the parent operation
new version