Following the "script-execution-order" theory, we can insert Rotate channels in the code, which are evaluated, before the origin data is activated. This example code starts with a block of Rotate channels (xRotateA, yRotateA, and zRotateA). The OffsetA channels are next, followed by a second block of Rotate channels (xRotateB, yRotateB, and zRotateB). The code ends with the OffsetB channels. Note that you must rename the additional Rotate channels, so that all channels have unique channel names. The first block of rotations could be named "RotateA", the second one "RotateB", for example. When this code is executed, Poser starts at the default origin x=0, y=0, z=0, and evaluates the RotateA channels (step 1). At this point, the center of rotation is x=0, y=0, z=0. Thus, the arrow rotates around the bottom end, if zRotateA is set. Next, Poser evaluates the OffsetA channels. The origin data activates a new center of rotation, which is now x=0, y=1, z=0 (step 2). Next, the RotateB channels are evaluated (step 3). At this point, the center of rotation is at x=0, y=1, z=0. The arrow rotates around its upper end, if zRotateB is set. Finally (step 4), the OffsetB channels reset the origin (again x=0, y=0, z=0), and the scene is updated and rendered.