Usually, the displacement effect is not at all welcome. When you modify, for example, the rotation centers of the train model, so that the wagons can travel along the next curve, any displacement effect would ruin the motion. What you want is - to rotate the wagons to an arbitrary orientation, - then choose a new origin, avoiding any errant phantom motion, - then go on rotating the wagons, now using the new origin as center of rotation. The improved code is basically the yCenter-origin-method. The new code has a second zRotate channel, and an additional xCenterB channel. This post explains the channels and the script execution order. The following post will show how to calculate the values. The code starts again with the initial yCenterA channel. This is a common yTran channel, which moves the prop geometry to a temporary y position. Then the OffsetA's are evaluated, and the Poser Origin is activated. Next, the rotations are evaluated. This time, there are two parallel zRotate channels. Both zRotate channels rotate about the Poser Origin, which is activated at this point. Next, the xCenterB and yCenterB channels are evaluated. They reset the prop geometry from the temporary y position to the previous y position. The "sum" of the xCenterB and yCenterB channels is the opposite (the negative value) of the yCenterA channel. Finally, the OffsetB's reset the default origin, and the scene is rendered. The parallel zRotate channels are used, to rotate around the Poser Origin, and the new variable origin. But how can these channels rotate about different centers, as they are both evaluated at the same point in the script execution order? Well, the rotation center depends on the values of the three Center channels, when you are going to set one of the Rotate channels. Your "sequence of use" makes the difference. Thus, to rotate around different centers, you must apply a specific sequence when using the dials: 1. Set all Center channels (yCenterA, xCenterB, and yCenterB) to zero. 2. Then use the first rotation, that is channel zRotateA, to rotate around the Poser Origin. Since all Center channels are zero, they have no effect. So, zRotateA is an ordinary z-rotation around the ordinary Poser Origin. You could even use the zRotateB channel at this point, which works exactly like zRotateA. The first rotation, zRotateA in this example, is the "preexisting rotation". This means, zRotateA is already set (not zero), when you're going to switch origins. The second parallel rotation, zRotateB, must be zero, when you're going to switch origins. 3. Then you switch origins. To define the new origin, you choose appropriate values for the three Center channels. The Center channels activate a new origin, such that further rotations use a different center of rotation. In the script evaluation, the yCenterB channel simply resets the prop geometry to the previous position. Therefore, yCenterB should be the opposite of the yCenterA motion. But this time, there is a preexisting rotation (zRotateA is already set, when you switch origins). So you get a phantom motion. The CenterB motion must create the opposite of the yCenterA motion, and at the same time compensate for the phantom motion. We need two channels, xCenterB and yCenterB, to create the proper reset translation. 4. Next (in your sequence of use), you set the second zRotate channel, zRotateB, to rotate around the new origin. At this point, you can no longer modify the preexisting rotation (the value of zRotateA), because the Center channels create the proper reset motion for one specific zRotateA value. Therefore, you have to use a second parallel zRotate channel, to rotate around the new origin.