diff --git a/source/RobotAPI/components/NaturalIKTest/NaturalIKTest.cpp b/source/RobotAPI/components/NaturalIKTest/NaturalIKTest.cpp
index 2daf4424e7c5014211bc6a02c8452ea23e96f548..f230c8305809e4d0657b5fea04570c82fd462eec 100644
--- a/source/RobotAPI/components/NaturalIKTest/NaturalIKTest.cpp
+++ b/source/RobotAPI/components/NaturalIKTest/NaturalIKTest.cpp
@@ -582,6 +582,7 @@ namespace armarx
         ik_L.setLowerArmLength(lower_arm_length);
 
 
+
         NaturalIK::ArmJoints arm_R;
         arm_R.rns = rns_R;
         arm_R.elbow = elb_R;
@@ -664,6 +665,7 @@ namespace armarx
             Eigen::Matrix4f target_R = math::Helpers::Pose(p.target + offset, targetOri);
 
 
+
             NaturalDiffIK::Result ikResult;
             if (p.setOri)
             {
@@ -686,6 +688,17 @@ namespace armarx
             }
             //ARMARX_IMPORTANT << ss.str();
 
+            CompositeDiffIK cik_R(rns_R);
+            cik_R.addTarget(arm_R.tcp, target_R, VirtualRobot::IKSolver::CartesianSelection::All);
+            CompositeDiffIK::NullspaceJointTargetPtr nsjt(new CompositeDiffIK::NullspaceJointTarget(rns_R));
+            nsjt->set(2, 0.2, 1);
+            cik_R.addNullspaceGradient(nsjt);
+            CompositeDiffIK::NullspaceJointLimitAvoidancePtr nsjla(new CompositeDiffIK::NullspaceJointLimitAvoidance(rns_R));
+            nsjla->set(2, 0);
+            cik_R.addNullspaceGradient(nsjla);
+            CompositeDiffIK::Paramaters cp;
+            CompositeDiffIK cikResult = cik_R.solve(cp);
+
             vizrobot.joints(arm_R.rns->getJointValueMap());
 
 
diff --git a/source/RobotAPI/libraries/diffik/CompositeDiffIK.cpp b/source/RobotAPI/libraries/diffik/CompositeDiffIK.cpp
index daefa367e00fef27f84f71a154f2489d2d1bb312..0e72540bd51656cea2b5695669a1cf6d6ca1c50b 100644
--- a/source/RobotAPI/libraries/diffik/CompositeDiffIK.cpp
+++ b/source/RobotAPI/libraries/diffik/CompositeDiffIK.cpp
@@ -34,11 +34,16 @@ CompositeDiffIK::CompositeDiffIK(const VirtualRobot::RobotNodeSetPtr& rns)
     ik.reset(new VirtualRobot::DifferentialIK(rns, rns->getRobot()->getRootNode(), VirtualRobot::JacobiProvider::eSVDDamped));
 }
 
-void CompositeDiffIK::addTarget(const CompositeDiffIK::TargetPtr& target)
+void CompositeDiffIK::addTarget(const TargetPtr& target)
 {
     targets.emplace_back(target);
 }
 
+void CompositeDiffIK::addTarget(const VirtualRobot::RobotNodePtr& tcp, const Eigen::Matrix4f& target, VirtualRobot::IKSolver::CartesianSelection mode)
+{
+    addTarget(std::make_shared<Target>(rns, tcp, target, mode));
+}
+
 void CompositeDiffIK::addNullspaceGradient(const CompositeDiffIK::NullspaceGradientPtr& gradient)
 {
     nullspaceGradients.emplace_back(gradient);
diff --git a/source/RobotAPI/libraries/diffik/CompositeDiffIK.h b/source/RobotAPI/libraries/diffik/CompositeDiffIK.h
index f306fb6ed9fe02ba938677f763f94e08c42b8e42..5bf5f383b440df5e719d7c93ca6031c415d3beed 100644
--- a/source/RobotAPI/libraries/diffik/CompositeDiffIK.h
+++ b/source/RobotAPI/libraries/diffik/CompositeDiffIK.h
@@ -153,6 +153,7 @@ namespace armarx
         CompositeDiffIK(const VirtualRobot::RobotNodeSetPtr& rns);
 
         void addTarget(const TargetPtr& target);
+        void addTarget(const VirtualRobot::RobotNodePtr& tcp, const Eigen::Matrix4f& target, VirtualRobot::IKSolver::CartesianSelection mode);
         void addNullspaceGradient(const NullspaceGradientPtr& gradient);
 
         Result solve(Parameters params);