new quaternion funcs