Balancing mechanism overshoots target

The basics:
I wanted to make a physics based movement thing. It uses the built in `AngularVelocity` `BodyMover`.
It keeps the angular velocity at a specific value if the force acted on it is not large enough.

The balance:
I give a target `CFrame` and it gives the offset (in degrees) from the current body `CFrame`. Then i made a curve to make the speed less the closer it gets to the target.

Basically this curve.

The problem:
The character overshoots, oscillates and stabilises. If it decides to stabilise.

Possible solutions:
I was thinking of somehow including the base angular velocity of the object (the velocity it already rotates at) to compensate. But as to how? I don’t know.

The equation looks like this:

``````function Curve(Current) --this is applied to all of the offset axes (x,y,z)
local Result = (Current^2)/360 --360 is just the max offset value (180 to -180 is but it works differently in practice)
if Current == math.abs(Current) then --differentiate between backward and forward
return Result
else
return -Result
end
end
``````

Any and all help is appreciated. Thank you in advance.

`BodyGyro` is not suitable for my use case.