FGameplayTagCountContainer being overwritten in Client by Iris

Hi,

We are having an issue when moving the project to Iris. In the client, when AbilitySystemComponent is registered (OnRegister()), the owner of its GameplayTagCountContainer is set:

GameplayTagCountContainer.SetOwner(this); // Line 219 of AbilitySystemComponent.cpp

We also register some gameplaytagevents in the AbilitySystemComponent (that are registered in its GameplayTagCountContainer):

FOnGameplayEffectTagounterChanged& OnTagChanged = AbilitySystemComponent->RegisterGameplayTagEvent(TheTag, EGameplayTagEventType::AnyCountChange);
OnTagChanged.AddUObject(...);

But later, when that AbilitySystemComponent is replicated from the Server, that GameplayTagCountContainer property is being overwritten with empty data on some of its properties that shouldn’t be replicated (as the owner)

I know there is a problem with FGameplayTagCounter being replicated in Iris (AbilitySystem.Fix.ReplicateTagCountContainerWithIris). I’ve tried with AbilitySystem.Fix.ReplicateTagCountContainerWithIris set to false and true and both failed.

This is the callstack when Owner is being overwritten:

UE::CoreUObject::Private::Copy<…>(void *, const void *, int) Class.h:1362
[Inlined] UScriptStruct::ICppStructOps::Copy(void *, const void *, int) Class.h:1978
UScriptStruct::CopyScriptStruct(void *, const void *, int) Class.cpp:3745
FStructProperty::CopyValuesInternal(void *, const void *, int) PropertyStruct.cpp:342
[Inlined] FProperty::CopySingleValue(void *, const void *) UnrealType.h:889
UE::Net::Private::InternalApplyPropertyValue(const UE::Net::FReplicationStateDescriptor *,unsigned int,void *__restrict,const void *__restrict) InternalPropertyReplicationState.cpp:389
[Inlined] UE::Net::FPropertyReplicationState::PushPropertyValue(unsigned int, void *) PropertyReplicationState.cpp:196
UE::Net::FPropertyReplicationState::PushPropertyReplicationState(const UObject *,void *__restrict,bool) PropertyReplicationState.cpp:415
UE::Net::FPropertyReplicationFragment::ApplyReplicatedState(UE::Net::FReplicationStateApplyContext &) PropertyReplicationFragment.cpp:151
UE::Net::Private::FDequantizeAndApplyHelper::ApplyAndCallLegacyPreApplyFunction(UE::Net::Private::FDequantizeAndApplyHelper::FContext *, UE::Net::FNetSerializationContext &) DequantizeAndApplyHelper.cpp:234
UE::Net::Private::FReplicationReader::DispatchStateData(UE::Net::FNetSerializationContext &) ReplicationReader.cpp:2384
UE::Net::Private::FReplicationReader::Read(UE::Net::FNetSerializationContext &) ReplicationReader.cpp:3198
UDataStreamManager::FImpl::ReadData(UE::Net::FNetSerializationContext &) DataStreamManager.cpp:885
UDataStreamChannel::ReceivedBunch(FInBunch &) DataStreamChannel.cpp:135
UChannel::ReceivedSequencedBunch(FInBunch &) DataChannel.cpp:575
UChannel::ReceivedNextBunch(FInBunch &, bool &) DataChannel.cpp:1080
UChannel::ReceivedRawBunch(FInBunch &, bool &) DataChannel.cpp:696
UNetConnection::DispatchPacket(FBitReader &, int, bool &, bool &) NetConnection.cpp:4065
UNetConnection::ReceivedPacket(FBitReader &, bool, bool) NetConnection.cpp:3430
UNetConnection::ReceivedRawPacket(void *, int) NetConnection.cpp:2187
UIpNetDriver::TickDispatch(float) IpNetDriver.cpp:1293
UNetDriver::InternalTickDispatch(float) NetDriver.cpp:2363
[Inlined] Invoke(void (UNetDriver::*)(float), UNetDriver *&, float &&) Invoke.h:66
[Inlined] UE::Core::Private::Tuple::TTupleBase::ApplyAfter(void (UNetDriver::*&)(float), UNetDriver *&, float &&) Tuple.h:326
TBaseUObjectMethodDelegateInstance::ExecuteIfSafe(float) DelegateInstancesImpl.h:713
[Inlined] TMulticastDelegateBase::Broadcast(float) MulticastDelegateBase.h:301
TMulticastDelegate::Broadcast(float) DelegateSignatureImpl.inl:1076
UWorld::Tick(ELevelTick, float) LevelTick.cpp:1545

Any help would be appreciated,

Thanks.

Nacho.