The variable origin is made of two Rotate channels, which rotate around different rotation centers. The first center of rotation is the standard Poser Origin, i.e. the origin coordinates you define for example in the Joint Editor. The second center of rotation is defined by the values of the three Center channels (yCenterA, xCenterB, and yCenterB). When you use the model, you apply the dials in a specific sequence: You first set the zRotateA rotation, next you set the Center channels to switch origins, then you use zRotateB to rotate around the new origin. The first rotation (zRotateA channel) rotates around the Poser origin. In the arrow example shown, you use zRotateA, to rotate the prop by 45 around the Poser Origin (the bottom end of the arrow at x=0, y=0, z=0). zRotateA is the preexisting rotation, when you switch origins. We express the preexisting rotation in angle "alpha". Alpha is the angle between the default orientation of the prop and the preexisting zRotateA rotation. If you make an animation, angle alpha is the value of the RotateA channel at the point, where you want to switch origins. In the railway example, alpha is the RotateA value of a wagon, which has finished the first curve, and is about to move along the next curve at a different radius. To define the new origin, you calculate the value for the yCenterA channel. The formula is: yCenterA = PoserOrigin - yCenterOrigin To calculate yCenterA in the arrow example, you find out the y coordinate of the Poser Origin. This is the y value of the origin data displayed for example in the Joint Editor (y=0 in this case). Then you define the y coordinate of the new origin, the yCenter origin. You want for example the yCenter origin in the center of the arrow body at y=0.5. As the Poser Origin is y=0, and the yCenter origin should be y=0.5, you find yCenterA = 0 - 0.5 = -0.5 Be careful with negative values: If the Poser Origin is y=1, and the new origin should be y=-0.5, the formula evaluates to 1 + 0.5 = 1.5. The result is the value of channel yCenterA at the point, where you switch origins. Then you calculate the corresponding values for the xCenterB and yCenterB channels. The equations use the value of the zRotateA channel (i.e. angle alpha), and the value of the yCenterA channel: xCenterB = yCenterA * sine(alpha) yCenterB = -yCenterA * cosine(alpha). In the arrow example, alpha (that is zRotateA) is 45, and yCenterA is -0.5. Therefore, the formulas evaluate to xCenterB = -0.5 * sine(45) ? -0.3535 yCenterB = 0.5 * cosine(45) ? 0.3535. The formulas work with positive and negative alphas. The resulting values are the channel values of the CenterB channels at the point, where you switch origins. Once the three Center channels have the proper values, you can rotate the arrow using the zRotateB channel. In this example, the new center of rotation (the yCenter origin) is at the center of the arrow body (the green dot). So the tilted arrow rotates around a new center without any errant phantom translation. You can set the variable yCenter origin to any value, and switch at any preexisting zRotateA rotation. However, once the Center channels are set, further zRotateA rotations will generate phantom motions. Your Center channel values match a specific angle alpha (zRotateA value). If you change zRotateA, you get a new angle alpha, which requires different values of the three Center channels. The picture maybe helps you to better understand the math of the two CenterB channels: When the rotations are evaluated, the yCenterB channel should reset the geometry to the previous position. yCenterB is the opposite (negative value) of yCenterA, such that the yCenterA and yCenterB translations cancel each other out. To compensate for the phantom motion, the yCenterB reset motion is a motion vector consisting of an x component ("delta x" in the example) and a y component ("delta y"). Delta x is the value of the xCenterB channel, delta y is the value of the yCenterB channel. Only the sum of both components creates the exact opposite of the yCenterA motion. When yCenterA is evaluated, the prop geometry is at the default orientation, so the yCenterA motion vector is a vertical line along the y axis. A vertical line is one motion component, that is one yTran channel. When the yCenterB channel is evaluated, the prop is bent (because of the preexisting zRotateA rotation). Now, the yCenterB motion is a diagonal line between the y axis and the x axis. To create a diagonal motion, you need two Tran channels, therefore you have yCenterB and xCenterB channels. Some preexisting rotations, for example zRotateA=90, have a horizontal reset translation along the x axis. Thus, you need only the xCenterB reset translation, but no yCenterB reset translation. If you wish a variable origin for yRotate instead of zRotate, the Center channels are different dimensions: The Center channels are the axes of the rotation plane. For a zRotate channel (the arrow example), the x and y axes are the axes of the rotation plane, so you have xCenter and yCenter channels. For a yRotate channel (the railway example), the x and z axes form the rotation plane (this is the ground plane). So you use xCenter and zCenter channels, to animate the origin of the yRotate channel.