When checking the terminated value, check all parents until you either find one that is TRUE, or run out of parents. Do *not* go up the chain of parents when *setting* terminated. Background threads still can't set it (TODO?).