I can move CFrame of the primary part of my model, but after moving to absolute coordinates the rotation of the model is reset. Is there a neat way to preserve it, or do I really need to save the angles and reapply them after the move?
Note, I can do a relative move by (11,11,11) like this:
local model = workspace.model
local ppcf = model:GetPrimaryPartCFrame()
model:SetPrimaryPartCFrame( ppcf + Vector3.new(11,11,11) )
But when doing the absolute coordinates (22,22,22) the rotation is lost:
model:SetPrimaryPartCFrame( CFrame.new() + Vector3.new(22,22,22) )
One solution that comes to mind is to get all the components of the CFrame, change the (x, y, z) and send the components back to the primary part.
local x, y, z, m11, m12, m13, m21, m22, m23, m31, m32, m33 = ppcf:components()
x = 22
y = 22
z = 22
model:SetPrimaryPartCFrame( CFrame.new( x, y, z, m11, m12, m13, m21, m22, m23, m31, m32, m33 ) )
But that seems to be too cumbersome... Is there a better, more elegant or efficient way?

2 comments
Because you're doing CFrame.new() which creates a new cframe and then adding a v3? Add it to the current CFrame.
If I add to the current, it will move to a relative location. I want to specify an absolute location. I suppose another approach is to subtract the primary part position vector from the relative shift vector to achieve absolute shift..