In FAnimInstanceProxy why there are two variables to store the same transform?

There does appear to be some redundancy there.

In FAnimInstanceProxy there are two members SkelMeshCompLocalToWorld and also ComponentTransform both apparently caching the same component transform. There is also a member called SkeletalMeshComponent that (surprise) stores a reference to the SkeleletalMeshComponent but still throughout the code its use is inconsistent many times concurring with InAnimInstance->GetOwningComponent(). For instance

void FAnimInstanceProxy::Initialize(UAnimInstance* InAnimInstance)
{
...
	if (const USkeletalMeshComponent* SkelMeshComp = InAnimInstance->GetOwningComponent())
	{
		ComponentTransform = SkelMeshComp->GetComponentTransform();
		ComponentRelativeTransform = SkeletalMeshComponent->GetRelativeTransform();

		const AActor* OwningActor = SkeletalMeshComponent->GetOwner();
		ActorTransform = OwningActor ? OwningActor->GetActorTransform() : FTransform::Identity;
	}
	else
	{
		ComponentTransform = FTransform::Identity;
		ComponentRelativeTransform = FTransform::Identity;
		ActorTransform = FTransform::Identity;
	}
}

What’s going on here?