added inverse kinematics