So Im rotating my geometry with: vector rot = my_normalized_axis; // this is local axis, not some global like {0, 1, 0} float angle = this_is_my_angle; vector piv = my_nice_pivot; matrix3 rotm = ident(); prerotate(rotm, angle, rot); vector4 orient = quaternion(rotm); matrix m = instance(piv, 0, 1, 0, orient, piv); @P *= m; And everything is nice and dandy, except that now I want for my vector rot to apply the rotation too. Because now it just stays as it is. So this sounds easy but I just cannot make it to work. I tried converting to quat and them qmultiply, extracting rotation from m with cracktransform. But the rotations are weird, not what I want. Closest where I got was with qmultiply, as one of the components of rot seemed to be doing its thing. But other were off. And since im not rotating with some global rotation axis like {0, 1, 0} I cannot just simply take just one component and discard others.