Server to client replication issue with constraints and body forces

I’ve recently created a sentry gun that automatically aims at nearby NPCs. The sentry consists of three moving parts: a centre part and two turrets on either side of the centre part.

The centre part is anchored and faced towards the NPC via CFrame manipulation.
The two turrets are unanchored and attached to the main part via BallSocketConstraints. They each have BodyGyro inside them and its CFrame is manipulated to face the NPC just like the centre part.

RobloxStudioBeta_oVZQAYXjWr

The issue I am encountering is that the turrets’ positions do not replicate from the server to the clients until the sentry stops moving. The gyros’ CFrame are tweened every heartbeat if certain conditions are met.

ts:Create(gun1Gyro, TweenInfo.new(.3), {CFrame = CFrame.new(gun1Attachment.WorldPosition, targetPos)}):Play()
ts:Create(gun2Gyro, TweenInfo.new(.3), {CFrame = CFrame.new(gun2Attachment.WorldPosition, targetPos)}):Play()

Here’s a video showing the server and client point of views (look at the turrets):

So the question is how would I get the turret positions to replicate to the clients every frame like they should? I previously had both the turrets anchored and changed their CFrames directly which worked better, however there was still a noticeable stutter and it was more performance intensive, so I switched to using this layout.

I should mention that I set the network ownership of both the turrets to the server. If I don’t do this then the opposite effect is created: the positions replicate to the client immediately, however they don’t replicate on the server until the sentry stops moving.