diff --git a/etc/doxygen/layout/Doxygen.css b/etc/doxygen/layout/Doxygen.css
old mode 100755
new mode 100644
diff --git a/scenarios/MotionControlTest/configs/Armar4KinematicUnit.cfg b/scenarios/MotionControlTest/configs/Armar4KinematicUnit.cfg
index 01ce93aebd0aa3e06568b2edba6e24dbaa9d218c..a4d3306ff1c5426a71180d7e9d23b9d09c25346b 100644
--- a/scenarios/MotionControlTest/configs/Armar4KinematicUnit.cfg
+++ b/scenarios/MotionControlTest/configs/Armar4KinematicUnit.cfg
@@ -1,5 +1,5 @@
 # test config file for KinematicUnit configured to be a Head
 
-ArmarX.KinematicUnitSimulation.RobotFileName=ArmarIV/RobotModel/ArmarIV.xml
+ArmarX.KinematicUnitSimulation.RobotFileName=/Armar4/data/robotmodel/ArmarIV.xml
 ArmarX.KinematicUnitSimulation.RobotNodeSetName=Robot           # node set name
 ArmarX.KinematicUnitSimulation.ObjectName=Armar4KinematicUnit  # name of the Ice adapter
diff --git a/scenarios/MotionControlTest/configs/Armar4Observer.cfg b/scenarios/MotionControlTest/configs/Armar4Observer.cfg
index 5e85df860ba2ceccc75acda2b4cc0135e8cc8c86..645b897d74b7928f26c7b0b78a62be378b543288 100644
--- a/scenarios/MotionControlTest/configs/Armar4Observer.cfg
+++ b/scenarios/MotionControlTest/configs/Armar4Observer.cfg
@@ -1,6 +1,6 @@
 # test config file for KinematicUnit configured to be a Head
 
-ArmarX.KinematicUnitObserver.RobotFileName=ArmarIV/RobotModel/ArmarIV.xml        	# model XML file path containing a VirtualRobot RobotNodeSet that defines the joints
+ArmarX.KinematicUnitObserver.RobotFileName=/Armar4/data/robotmodel/ArmarIV.xml      	# model XML file path containing a VirtualRobot RobotNodeSet that defines the joints
 ArmarX.KinematicUnitObserver.RobotNodeSetName=Robot					# node set name
 ArmarX.KinematicUnitObserver.ObjectName=Armar4Observer      				# name of the ICE adapter
 
diff --git a/scenarios/MotionControlTest/configs/ConditionHandler.cfg b/scenarios/MotionControlTest/configs/ConditionHandler.cfg
index a6137040c7cc1d04419d49bdbfffdbdd31e86450..af98c6f8d36ffafbd164f9d5f685c5d46def8582 100644
--- a/scenarios/MotionControlTest/configs/ConditionHandler.cfg
+++ b/scenarios/MotionControlTest/configs/ConditionHandler.cfg
@@ -1,3 +1,3 @@
-ArmarX.ConditionHandler.Observers=Armar4Observer,SystemObserver,ObjectMemoryObserver
+ArmarX.ConditionHandler.Observers=Armar4Observer,SystemObserver
 
 
diff --git a/scenarios/MotionControlTest/configs/MotionControlTest.cfg b/scenarios/MotionControlTest/configs/MotionControlTest.cfg
index 22e5b3092c407380ae98840a14968e9e11d466f8..66d8e812b0609e73358a3c3cd39aa771e8eb2c8c 100644
--- a/scenarios/MotionControlTest/configs/MotionControlTest.cfg
+++ b/scenarios/MotionControlTest/configs/MotionControlTest.cfg
@@ -1,5 +1,5 @@
 # test config file for KinematicUnit configured to be a Head
 
-ArmarX.MotionControl.KinematicUnitName=Armar4KinematicUnit
-ArmarX.MotionControl.KinematicUnitObserverName=Armar4Observer
+ArmarX.MotionControlStateHandler.KinematicUnitName=Armar4KinematicUnit
+ArmarX.MotionControlStateHandler.KinematicUnitObserverName=Armar4Observer
 
diff --git a/scenarios/MotionControlTest/configs/RobotStateComponent.cfg b/scenarios/MotionControlTest/configs/RobotStateComponent.cfg
index 0165df097bcb1f09b10f87029c17cabe322da173..ab75dab24fe5f81bf8fc3698de37537c7c75009c 100644
--- a/scenarios/MotionControlTest/configs/RobotStateComponent.cfg
+++ b/scenarios/MotionControlTest/configs/RobotStateComponent.cfg
@@ -1,4 +1,4 @@
-ArmarX.RobotStateComponent.RobotFileName=ArmarIV/RobotModel/ArmarIV.xml        	# model XML file path containing a VirtualRobot RobotNodeSet that defines the joints
+ArmarX.RobotStateComponent.RobotFileName=/Armar4/data/robotmodel/ArmarIV.xml       	# model XML file path containing a VirtualRobot RobotNodeSet that defines the joints
 ArmarX.RobotStateComponent.RobotNodeSetName=Robot					# node set name
 ArmarX.RobotStateComponent.ObjectName=RobotStateComponent      			# name of the ICE adapter
 
diff --git a/scenarios/MotionControlTest/motioncontrol.armarxgui b/scenarios/MotionControlTest/motioncontrol.armarxgui
new file mode 100644
index 0000000000000000000000000000000000000000..0cc6030d3ea0389215c5c2927fe4d8b6dd7cddbf
--- /dev/null
+++ b/scenarios/MotionControlTest/motioncontrol.armarxgui
@@ -0,0 +1,64 @@
+[General]
+MainWindowGeometry=@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\x6\xef\0\0\0\xb8\0\0\r\v\0\0\x3\xdb\0\0\x6\xf2\0\0\0\xd0\0\0\r\b\0\0\x3\xd8\0\0\0\0\0\0)
+DockWidgetsState="@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\0\0\0\x6\x17\0\0\x2\xdc\xfc\x2\0\0\0\x1\xfc\0\0\0\x17\0\0\x2\xdc\0\0\x1\xb5\0\xff\xff\xff\xfc\x1\0\0\0\x2\xfc\0\0\0\0\0\0\x3\xdc\0\0\x1\xff\0\xff\xff\xff\xfa\0\0\0\0\x2\0\0\0\x2\xfb\0\0\0\x1a\0\x44\0o\0\x63\0k\0L\0o\0g\0V\0i\0\x65\0w\0\x65\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\xe1\0\xff\xff\xff\xfb\0\0\0(\0\x44\0o\0\x63\0k\0K\0i\0n\0\x65\0m\0\x61\0t\0i\0\x63\0U\0n\0i\0t\0G\0U\0I\x1\0\0\0\x17\0\0\x2\a\0\0\x1\x45\0\xff\xff\xff\xfc\0\0\x3\xe2\0\0\x2\x35\0\0\0\xc8\0\xff\xff\xff\xfc\x2\0\0\0\x2\xfb\0\0\0\x1a\0\x44\0o\0\x63\0k\0\x33\0\x44\0 \0V\0i\0\x65\0w\0\x65\0r\x1\0\0\0\x17\0\0\x1\xd5\0\0\0\xb0\0\xff\xff\xff\xfc\0\0\x1\xf2\0\0\x1\x1\0\0\0\xff\x1\0\0\x1d\xfa\0\0\0\x1\x1\0\0\0\x2\xfb\0\0\0,\0\x44\0o\0\x63\0k\0S\0y\0s\0t\0\x65\0m\0S\0t\0\x61\0t\0\x65\0M\0o\0n\0i\0t\0o\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\xc8\0\xff\xff\xff\xfb\0\0\0\x1e\0\x44\0o\0\x63\0k\0\x45\0v\0\x65\0n\0t\0S\0\x65\0n\0\x64\0\x65\0r\x1\0\0\x3\xe2\0\0\x2\x35\0\0\0\xc8\0\xff\xff\xff\0\0\0\0\0\0\x2\xdc\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\0)"
+WidgetCustomNames=3D Viewer, EventSender, KinematicUnitGUI, LogViewer, SystemStateMonitor
+
+[3D%20Viewer]
+WidgetBaseName=3D Viewer
+widgetWidth=565
+widgetHeight=444
+
+[EventSender]
+WidgetBaseName=EventSender
+widgetWidth=565
+widgetHeight=202
+EventSender\size=3
+EventSender\1\eventSenderName=LoadScenario
+EventSender\1\description=
+EventSender\1\componentName=RobotControlStateHandler
+EventSender\1\globalStateIdentifier=RobotStatechart->RobotControl->Functional
+EventSender\1\eventName=EvLoadScenario
+EventSender\1\eventReceiverName=toAll
+EventSender\1\parameters\size=2
+EventSender\1\parameters\1\key=proxyName
+EventSender\1\parameters\1\VariantTypeId=-2125418521
+EventSender\1\parameters\1\value=MotionControlStateHandler
+EventSender\1\parameters\2\key=stateName
+EventSender\1\parameters\2\VariantTypeId=-2125418521
+EventSender\1\parameters\2\value=MotionControlTestStateIK
+EventSender\2\eventSenderName=StartRobot
+EventSender\2\description=
+EventSender\2\componentName=RobotControlStateHandler
+EventSender\2\globalStateIdentifier=RobotStatechart->RobotControl
+EventSender\2\eventName=EvStartRobot
+EventSender\2\eventReceiverName=toAll
+EventSender\2\parameters\size=0
+EventSender\3\eventSenderName=StopRobot
+EventSender\3\description=
+EventSender\3\componentName=RobotControlStateHandler
+EventSender\3\globalStateIdentifier=RobotStatechart->RobotControl
+EventSender\3\eventName=EvStopRobot
+EventSender\3\eventReceiverName=toAll
+EventSender\3\parameters\size=0
+
+[KinematicUnitGUI]
+WidgetBaseName=KinematicUnitGUI
+widgetWidth=988
+widgetHeight=627
+kinematicUnitName=Armar4KinematicUnit
+robotNodeSetName=Robot
+kinematicUnitFile=Armar4/data/robotmodel/ArmarIV.xml
+
+[LogViewer]
+WidgetBaseName=LogViewer
+widgetWidth=988
+widgetHeight=677
+verbosityLevel=1
+autoFilterAdding=true
+
+[SystemStateMonitor]
+WidgetBaseName=SystemStateMonitor
+widgetWidth=565
+widgetHeight=202
+ManagerRepository=@Invalid()
+MonitoredManagers=ArmarXGuiManager, ConditionHandlerManager, KinematicUnitObserverManager, KinematicUnitSimulationManager, MotionControlTestManager, RobotControlManager, RobotStateComponentManager, SystemObserverManager
diff --git a/scenarios/MotionControlTest/startGui.sh b/scenarios/MotionControlTest/startGui.sh
index 7bce78ab872d1be2c72d40c99022558a0f29b6a7..6e03a3372a90b5dd5d327b0e258c61521e99ed26 100755
--- a/scenarios/MotionControlTest/startGui.sh
+++ b/scenarios/MotionControlTest/startGui.sh
@@ -1,8 +1,8 @@
 
-export CORE_PATH=../../Core
-export GUI_PATH=../../Gui
-export VISIONX_PATH=../../VisionX
-export ARMAR4_PATH=../../Armar4/api/visualservo
+export CORE_PATH=../../../Core
+export GUI_PATH=../../../Gui
+export VISIONX_PATH=../../../VisionX
+export ARMAR4_PATH=../../../Armar4/api/visualservo
 export SCRIPT_PATH=$CORE_PATH/build/bin
 
 export CORE_BIN_PATH=$CORE_PATH/build/bin
diff --git a/scenarios/MotionControlTest/startScenario.sh b/scenarios/MotionControlTest/startScenario.sh
index 3d19637c5db99532d2eced5b06cbd7f3a5849a43..047e7c4bd9620608d494313a7d7501f746380d82 100755
--- a/scenarios/MotionControlTest/startScenario.sh
+++ b/scenarios/MotionControlTest/startScenario.sh
@@ -1,9 +1,9 @@
 
-export CORE_PATH=../../Core
-export GUI_PATH=../../Gui
-export VISIONX_PATH=../../VisionX
-export ARMAR4_PATH=../../Armar4
-export HUMANOIDROBOTAPI_PATH=../../HumanoidRobotAPI
+export CORE_PATH=../../../Core
+export GUI_PATH=../../../Gui
+export VISIONX_PATH=../..././VisionX
+export ARMAR4_PATH=../../../Armar4
+export HUMANOIDROBOTAPI_PATH=../../../RobotAPI
 export SCRIPT_PATH=$CORE_PATH/build/bin
 
 export CORE_BIN_PATH=$CORE_PATH/build/bin
@@ -30,10 +30,10 @@ $SCRIPT_PATH/startApplication.sh $CORE_BIN_PATH/RobotControlRun --Ice.Config=$GL
 #$SCRIPT_PATH/startApplication.sh $ARMAR4_BIN_PATH/diffkintestRun --Ice.Config=$GLOBAL_CONFIG &
 
 # vision x components
-$SCRIPT_PATH/startApplication.sh $VISIONX_BIN_PATH/DummyObjectRecognitionRun --Ice.Config=$GLOBAL_CONFIG,./configs/DummyObjectRecognitionConfig.txt &
-$SCRIPT_PATH/startApplication.sh $VISIONX_BIN_PATH/RobotHandLocalizationRun --Ice.Config=$GLOBAL_CONFIG,./configs/RobotHandLocalization.cfg &
-$SCRIPT_PATH/startApplication.sh $VISIONX_BIN_PATH/ObjectMemoryRun --Ice.Config=$GLOBAL_CONFIG,./configs/ObjectMemory.cfg &
-$SCRIPT_PATH/startApplication.sh $VISIONX_BIN_PATH/ObjectMemoryObserverRun --Ice.Config=$GLOBAL_CONFIG,./configs/ObjectMemoryObserver.cfg &
+#$SCRIPT_PATH/startApplication.sh $VISIONX_BIN_PATH/DummyObjectRecognitionRun --Ice.Config=$GLOBAL_CONFIG,./configs/DummyObjectRecognitionConfig.txt &
+#$SCRIPT_PATH/startApplication.sh $VISIONX_BIN_PATH/RobotHandLocalizationRun --Ice.Config=$GLOBAL_CONFIG,./configs/RobotHandLocalization.cfg &
+#$SCRIPT_PATH/startApplication.sh $VISIONX_BIN_PATH/ObjectMemoryRun --Ice.Config=$GLOBAL_CONFIG,./configs/ObjectMemory.cfg &
+#$SCRIPT_PATH/startApplication.sh $VISIONX_BIN_PATH/ObjectMemoryObserverRun --Ice.Config=$GLOBAL_CONFIG,./configs/ObjectMemoryObserver.cfg &
 
 $SCRIPT_PATH/startApplication.sh $CORE_BIN_PATH/ConditionHandlerRun --Ice.Config=$GLOBAL_CONFIG,./configs/ConditionHandler.cfg &
 
diff --git a/source/RobotAPI/motioncontrol/MotionControl.cpp b/source/RobotAPI/motioncontrol/MotionControl.cpp
index 478cec5deeaf44af9fbd959c8072545406ae6329..5230f245dfb24fed779deb32c07835df68731b63 100644
--- a/source/RobotAPI/motioncontrol/MotionControl.cpp
+++ b/source/RobotAPI/motioncontrol/MotionControl.cpp
@@ -40,20 +40,20 @@ void MoveJoints::defineParameters()
 {
     context = getContext<RobotStatechartContext>();
 
-    setConfigFile("RobotAPIConfigs/stateconfigs/MotionControl.xml");
+    setConfigFile("RobotAPI/data/stateconfigs/MotionControl.xml");
 
-    addToInputAsList("jointNames", VariantType::String, false);
-    addToInputAsList("targetJointValues", VariantType::Float, false);
+    addToInput("jointNames", VariantType::List(VariantType::String), false);
+    addToInput("targetJointValues", VariantType::Float, false);
 
     // TODO: add when we have decided how to do it
-    addToInputAsList("jointMaxSpeeds", VariantType::Float, true);
-    addToInput("jointMaxSpeed", VariantType::Float, true);
+    addToInput("jointMaxSpeeds", VariantType::List(VariantType::Float), true);
+    addToInput("jointMaxSpeed", VariantType::List(VariantType::Float), true);
 
     addToInput("targetTolerance", VariantType::Float, false);
 
     addToInput("timeoutInMs", VariantType::Int, false);
 
-    addToOutputAsList("jointDistancesToTargets", VariantType::Float, true);
+    addToOutput("jointDistancesToTargets", VariantType::List(VariantType::Float), true);
 }
 
 
@@ -61,8 +61,8 @@ void MoveJoints::defineParameters()
 void MoveJoints::onEnter()
 {
     NameValueMap targetJointAngles;
-    SingleTypeVariantListPtr jointNames = getInputList("jointNames");
-    SingleTypeVariantListPtr targetJointValues = getInputList("targetJointValues");
+    SingleTypeVariantListPtr jointNames = getInput<SingleTypeVariantList>("jointNames");
+    SingleTypeVariantListPtr targetJointValues = getInput<SingleTypeVariantList>("targetJointValues");
 
     if (jointNames->getSize()!=targetJointValues->getSize())
     {
@@ -71,8 +71,8 @@ void MoveJoints::onEnter()
 
     for(int i=0; i<jointNames->getSize(); i++ )
     {
-        targetJointAngles[jointNames->getElement(i)->getString()] = targetJointValues->getElement(i)->getFloat();
-        ARMARX_VERBOSE << "setting joint angle for joint '" << jointNames->getElement(i)->getString() << "' to " << targetJointValues->getElement(i)->getFloat() << std::endl;
+        targetJointAngles[jointNames->getVariant(i)->getString()] = targetJointValues->getVariant(i)->getFloat();
+        ARMARX_VERBOSE << "setting joint angle for joint '" << jointNames->getVariant(i)->getString() << "' to " << targetJointValues->getVariant(i)->getFloat() << std::endl;
     }
     // TODO: Set Max Velocities
 
@@ -84,10 +84,10 @@ void MoveJoints::onEnter()
     for(int i=0; i<jointNames->getSize(); i++ )
     {
         ParameterList inrangeCheck;
-        inrangeCheck.push_back(new Variant(targetJointValues->getElement(i)->getFloat()-tolerance));
-        inrangeCheck.push_back(new Variant(targetJointValues->getElement(i)->getFloat()+tolerance));
+        inrangeCheck.push_back(new Variant(targetJointValues->getVariant(i)->getFloat()-tolerance));
+        inrangeCheck.push_back(new Variant(targetJointValues->getVariant(i)->getFloat()+tolerance));
 
-        Literal inrangeLiteral(DataFieldIdentifier(context->getKinematicUnitObserverName(),"jointangles", jointNames->getElement(i)->getString()), "inrange", inrangeCheck);
+        Literal inrangeLiteral(DataFieldIdentifier(context->getKinematicUnitObserverName(),"jointangles", jointNames->getVariant(i)->getString()), "inrange", inrangeCheck);
         cond = cond && inrangeLiteral;
     }
 
@@ -110,16 +110,16 @@ void MoveJoints::onBreak()
 
 void MoveJoints::onExit()
 {
-    SingleTypeVariantListPtr jointNames = getInputList("jointNames");
-    SingleTypeVariantListPtr targetJointValues = getInputList("targetJointValues");
+    SingleTypeVariantListPtr jointNames = getInput<SingleTypeVariantList>("jointNames");
+    SingleTypeVariantListPtr targetJointValues = getInput<SingleTypeVariantList>("targetJointValues");
     SingleTypeVariantList resultList(VariantType::Float);
 
     for(int i=0; i<jointNames->getSize(); i++ )
     {
-        DataFieldIdentifierPtr datafield = new DataFieldIdentifier(context->getKinematicUnitObserverName(),"jointangles", jointNames->getElement(i)->getString());
+        DataFieldIdentifierPtr datafield = new DataFieldIdentifier(context->getKinematicUnitObserverName(),"jointangles", jointNames->getVariant(i)->getString());
         float jointAngleActual = context->kinematicUnitObserverPrx->getDataField(datafield)->getFloat();
-        float jointTargetValue = targetJointValues->getElement(i)->getFloat();
-        resultList.addElement(new Variant(jointAngleActual - jointTargetValue));
+        float jointTargetValue = targetJointValues->getVariant(i)->getFloat();
+        resultList.addVariant(Variant(jointAngleActual - jointTargetValue));
     }
     setOutput("jointDistancesToTargets", resultList);
 
@@ -135,13 +135,13 @@ void MoveJointsVelocityControl::defineParameters()
 {
     context = getContext<RobotStatechartContext>();
 
-    setConfigFile("RobotAPIConfigs/stateconfigs/MotionControl.xml");
+    setConfigFile("RobotAPI/data/stateconfigs/MotionControl.xml");
 
-    addToInputAsList("jointNames", VariantType::String, false);
-    addToInputAsList("targetJointVelocities", VariantType::Float, false);
+    addToInput("jointNames", VariantType::List(VariantType::String), false);
+    addToInput("targetJointVelocities", VariantType::List(VariantType::Float), false);
 
     // TODO: add when we have decided how to do it
-    addToInputAsList("jointMaxSpeeds", VariantType::Float, true);
+    addToInput("jointMaxSpeeds", VariantType::List(VariantType::Float), true);
     addToInput("jointMaxSpeed", VariantType::Float, true);
 
     addToInput("accelerationTime", VariantType::Float, false);
@@ -150,7 +150,7 @@ void MoveJointsVelocityControl::defineParameters()
 
     addToInput("timeoutInMs", VariantType::Int, false);
 
-    addToOutputAsList("jointVelocitiesDistancesToTargets", VariantType::Float, true);
+    addToOutput("jointVelocitiesDistancesToTargets", VariantType::Float, true);
 }
 
 
@@ -159,8 +159,8 @@ void MoveJointsVelocityControl::onEnter()
 {
     //float accelerationTime = getInput<float>("accelerationTime");
     NameValueMap targetJointVelocities;
-    SingleTypeVariantListPtr jointNames = getInputList("jointNames");
-    SingleTypeVariantListPtr targetVelocitiesValues = getInputList("targetJointVelocities");
+    SingleTypeVariantListPtr jointNames = getInput<SingleTypeVariantList>("jointNames");
+    SingleTypeVariantListPtr targetVelocitiesValues = getInput<SingleTypeVariantList>("targetJointVelocities");
 
     if (jointNames->getSize()!=targetVelocitiesValues->getSize())
     {
@@ -169,8 +169,8 @@ void MoveJointsVelocityControl::onEnter()
 
     for(int i=0; i<jointNames->getSize(); i++)
     {
-        targetJointVelocities[jointNames->getElement(i)->getString()] = targetVelocitiesValues->getElement(i)->getFloat();
-        ARMARX_VERBOSE << "setting joint angle for joint '" << jointNames->getElement(i)->getString() << "' to " << targetVelocitiesValues->getElement(i)->getFloat() << std::endl;
+        targetJointVelocities[jointNames->getVariant(i)->getString()] = targetVelocitiesValues->getVariant(i)->getFloat();
+        ARMARX_VERBOSE << "setting joint angle for joint '" << jointNames->getVariant(i)->getString() << "' to " << targetVelocitiesValues->getVariant(i)->getFloat() << std::endl;
     }
     // TODO: Set Max Velocities
 
@@ -181,10 +181,10 @@ void MoveJointsVelocityControl::onEnter()
     for(int i=0; i<jointNames->getSize(); i++)
     {
         ParameterList inrangeCheck;
-        inrangeCheck.push_back(new Variant(targetVelocitiesValues->getElement(i)->getFloat()-tolerance));
-        inrangeCheck.push_back(new Variant(targetVelocitiesValues->getElement(i)->getFloat()+tolerance));
+        inrangeCheck.push_back(new Variant(targetVelocitiesValues->getVariant(i)->getFloat()-tolerance));
+        inrangeCheck.push_back(new Variant(targetVelocitiesValues->getVariant(i)->getFloat()+tolerance));
 
-        Literal inrangeLiteral(DataFieldIdentifier(context->getKinematicUnitObserverName(),"jointvelocities", jointNames->getElement(i)->getString()), "inrange", inrangeCheck);
+        Literal inrangeLiteral(DataFieldIdentifier(context->getKinematicUnitObserverName(),"jointvelocities", jointNames->getVariant(i)->getString()), "inrange", inrangeCheck);
         cond = cond && inrangeLiteral;
     }
 
@@ -200,16 +200,16 @@ void MoveJointsVelocityControl::onEnter()
 
 void MoveJointsVelocityControl::onExit()
 {
-    SingleTypeVariantListPtr jointNames = getInputList("jointNames");
-    SingleTypeVariantListPtr targetJointVelocities = getInputList("targetJointVelocities");
+    SingleTypeVariantListPtr jointNames = getInput<SingleTypeVariantList>("jointNames");
+    SingleTypeVariantListPtr targetJointVelocities = getInput<SingleTypeVariantList>("targetJointVelocities");
     SingleTypeVariantList resultList(VariantType::Float);
 
     for(int i=0; i<jointNames->getSize(); i++)
     {
-        DataFieldIdentifierPtr datafield = new DataFieldIdentifier(context->getKinematicUnitObserverName(),"jointvelocities", jointNames->getElement(i)->getString());
+        DataFieldIdentifierPtr datafield = new DataFieldIdentifier(context->getKinematicUnitObserverName(),"jointvelocities", jointNames->getVariant(i)->getString());
         float jointVelocityActual = context->kinematicUnitObserverPrx->getDataField(datafield)->getFloat();
-        float jointVelocityTarget = targetJointVelocities->getElement(i)->getFloat();
-        resultList.addElement(new Variant(jointVelocityActual - jointVelocityTarget));
+        float jointVelocityTarget = targetJointVelocities->getVariant(i)->getFloat();
+        resultList.addVariant(Variant(jointVelocityActual - jointVelocityTarget));
     }
     setOutput("jointVelocitiesDistancesToTargets", resultList);
 
@@ -225,7 +225,7 @@ void MoveTCPPoseIK::defineParameters()
 {
     context = getContext<RobotStatechartContext>();
 
-    setConfigFile("RobotAPIConfigs/stateconfigs/MotionControl.xml");
+    setConfigFile("RobotAPI/data/stateconfigs/MotionControl.xml");
 
     addToInput("kinematicChainName", VariantType::String, false);
     addToInput("targetTCPPosition", VariantType::LinkedPosition, false);
@@ -279,11 +279,11 @@ void MoveTCPTrajectory::defineParameters()
 {
     context = getContext<RobotStatechartContext>();
 
-    setConfigFile("RobotAPIConfigs/stateconfigs/MotionControl.xml");
+    setConfigFile("RobotAPI/data/stateconfigs/MotionControl.xml");
 
     addToInput("kinematicChainName", VariantType::String, false);
-    addToInputAsList("targetTCPPositions", VariantType::LinkedPosition, false);
-    addToInputAsList("targetTCPOrientations", VariantType::LinkedOrientation, false);
+    addToInput("targetTCPPositions", VariantType::List(VariantType::LinkedPosition), false);
+    addToInput("targetTCPOrientations", VariantType::List(VariantType::LinkedOrientation), false);
 
     addToInput("tcpMaxSpeed", VariantType::Float, true);
 
@@ -303,14 +303,14 @@ void MoveTCPTrajectory::defineParameters()
 void MoveTCPTrajectory::onEnter()
 {
     timeoutEvent = setTimeoutEvent(getInput<int>("timeoutInMs"), createEvent<EvTimeout>());
-    int numberOfPoints = getInputList("targetTCPPositions")->getSize();
+    int numberOfPoints = getInput<SingleTypeVariantList>("targetTCPPositions")->getSize();
     if (numberOfPoints == 0)
     {
         sendEvent<EvSuccess>();
     }
-    else if (numberOfPoints != getInputList("targetTCPOrientations")->getSize())
+    else if (numberOfPoints != getInput<SingleTypeVariantList>("targetTCPOrientations")->getSize())
     {
-        throw armarx::exceptions::local::eLogicError("the number of targetTCPPositions does not equal the number of targetTCPOrientations");
+        throw armarx::exceptions::local::eStatechartLogicError("the number of targetTCPPositions does not equal the number of targetTCPOrientations");
         sendEvent<EvFailure>();
     }
 }
@@ -348,7 +348,7 @@ void MoveTCPTrajectory::defineSubstates()
 
 void MoveTCPTrajectoryInit::defineParameters()
 {
-    addToInputAsList("targetTCPPositions", VariantType::LinkedPosition, false);
+    addToInput("targetTCPPositions", VariantType::List(VariantType::LinkedPosition), false);
     addToOutput("trajectoryPointCounterID", VariantType::ChannelRef, false);
 }
 
@@ -358,7 +358,7 @@ void MoveTCPTrajectoryInit::defineParameters()
 void MoveTCPTrajectoryInit::onEnter()
 {
     // create a counter to keep track of the poses that were already reached. As we dont use the event, set the max to n+1 so it will never be sent
-    int numberOfPoints = getInputList("targetTCPPositions")->getSize();
+    int numberOfPoints = getInput<SingleTypeVariantList>("targetTCPPositions")->getSize();
     ARMARX_INFO << "number of points on trajectory: " << numberOfPoints;
     ActionEventIdentifier trajectoryPointCounterID = setCounterEvent(numberOfPoints, createEvent<EvLastPointReached>());
     setOutput("trajectoryPointCounterID", trajectoryPointCounterID.actionId.get());
@@ -371,7 +371,7 @@ void MoveTCPTrajectoryInit::onEnter()
 
 void MoveTCPTrajectoryCheckCounter::defineParameters()
 {
-    addToInputAsList("targetTCPPositions", VariantType::LinkedPosition, false);
+    addToInput("targetTCPPositions", VariantType::List(VariantType::LinkedPosition), false);
     addToInput("trajectoryPointCounterID", VariantType::ChannelRef, false);
     addToOutput("trajectoryPointCounterID", VariantType::ChannelRef, false);
 }
@@ -389,7 +389,7 @@ void MoveTCPTrajectoryCheckCounter::onEnter()
 
     ARMARX_INFO << "counter: " << counterValue;
 
-    if (counterValue < getInputList("targetTCPPositions")->getSize())
+    if (counterValue < getInput<SingleTypeVariantList>("targetTCPPositions")->getSize())
     {
         sendEvent<EvLastPointNotYetReached>();
     }
@@ -406,8 +406,8 @@ void MoveTCPTrajectoryCheckCounter::onEnter()
 void MoveTCPTrajectoryNextPoint::defineParameters()
 {
     addToInput("kinematicChainName", VariantType::String, false);
-    addToInputAsList("targetTCPPositions", VariantType::LinkedPosition, false);
-    addToInputAsList("targetTCPOrientations", VariantType::LinkedOrientation, false);
+    addToInput("targetTCPPositions", VariantType::List(VariantType::LinkedPosition), false);
+    addToInput("targetTCPOrientations", VariantType::List(VariantType::LinkedOrientation), false);
 
     addToInput("tcpMaxSpeed", VariantType::Float, true);
 
@@ -437,8 +437,8 @@ void MoveTCPTrajectoryNextPoint::onEnter()
 
     int counterValue = trajectoryPointCounterID->getDataField("value")->getInt();
 
-    setLocal("targetTCPPosition", *VariantPtr::dynamicCast(getInputList("targetTCPPositions")->getElement(counterValue)));
-    setLocal("targetTCPOrientation", *VariantPtr::dynamicCast(getInputList("targetTCPOrientations")->getElement(counterValue)));
+    setLocal("targetTCPPosition", *VariantPtr::dynamicCast(getInput<SingleTypeVariantList>("targetTCPPositions")->getVariant(counterValue)));
+    setLocal("targetTCPOrientation", *VariantPtr::dynamicCast(getInput<SingleTypeVariantList>("targetTCPOrientations")->getVariant(counterValue)));
 
     context->systemObserverPrx->incrementCounter(trajectoryPointCounterID);
 }
@@ -465,8 +465,8 @@ void CalculateJointAngleConfiguration::defineParameters()
     addToInput("targetTCPPosition", VariantType::LinkedPosition, false);
     addToInput("targetTCPOrientation", VariantType::LinkedOrientation, false);
 
-    addToOutputAsList("jointNames", VariantType::String, true);
-    addToOutputAsList("targetJointValues", VariantType::Float, true);
+    addToOutput("jointNames", VariantType::String, true);
+    addToOutput("targetJointValues", VariantType::Float, true);
 }
 
 
@@ -476,7 +476,7 @@ void CalculateJointAngleConfiguration::run()
     RobotStatechartContext* context = getContext<RobotStatechartContext>();
     VirtualRobot::RobotPtr robotPtr(new RemoteRobot(context->robotStateComponent->getRobotSnapshot("CalculateTCPPoseTime")));
     std::string robotModelFile;
-    ArmarXDataPath::getAbsolutePath("ArmarIV/RobotModel/ArmarIV.xml", robotModelFile);
+    ArmarXDataPath::getAbsolutePath("Armar4/data/Armar4/ArmarIV.xml", robotModelFile);
     VirtualRobot::RobotPtr robot = VirtualRobot::RobotIO::loadRobot(robotModelFile.c_str());
     //VirtualRobot::RobotConfigPtr configPtr(new VirtualRobot::RobotConfig(robotPtr, "blub"));
     //robotPtr->getRobotNodeSet("Root")->getJointValues(configPtr);
@@ -510,8 +510,8 @@ void CalculateJointAngleConfiguration::run()
         VirtualRobot::RobotNodeSetPtr kinematicChain = robot->getRobotNodeSet(getInput<std::string>("KinematicChainName") );
         for (int i = 0; i < (signed int)kinematicChain->getSize(); i++)
         {
-            jointNames.addElement(new Variant(kinematicChain->getNode(i)->getName()));
-            targetJointValues.addElement(new Variant(kinematicChain->getNode(i)->getJointValue()));
+            jointNames.addVariant(Variant(kinematicChain->getNode(i)->getName()));
+            targetJointValues.addVariant(Variant(kinematicChain->getNode(i)->getJointValue()));
         }
         setOutput("targetJointValues",targetJointValues);
         setOutput("jointNames",jointNames);
@@ -577,8 +577,8 @@ void MotionControlTestState::defineParameters()
 {
     setConfigFile("RobotAPIConfigs/stateconfigs/MotionControl.xml");
 
-    addToInputAsList("jointNames", VariantType::String, false);
-    addToInputAsList("targetJointValues", VariantType::Float, false);
+    addToInput("jointNames", VariantType::List(VariantType::String), false);
+    addToInput("targetJointValues", VariantType::List(VariantType::Float), false);
 
     addToInput("jointMaxSpeed", VariantType::Float, true);
 
@@ -586,7 +586,7 @@ void MotionControlTestState::defineParameters()
 
     addToInput("timeoutInMs", VariantType::Int, false);
 
-    addToOutputAsList("jointDistancesToTargets", VariantType::Float, true);
+    addToOutput("jointDistancesToTargets", VariantType::Float, true);
 }
 
 
@@ -612,8 +612,8 @@ void MotionControlTestStateIK::defineParameters()
     addToInput("kinematicChainName", VariantType::String, false);
     //addToInput("targetTCPPosition", VariantType::LinkedPosition, false);
     //addToInput("targetTCPOrientation", VariantType::LinkedOrientation, false);
-    addToInputAsList("targetTCPPositions", VariantType::LinkedPosition, false);
-    addToInputAsList("targetTCPOrientations", VariantType::LinkedOrientation, false);
+    addToInput("targetTCPPositions", VariantType::List(VariantType::LinkedPosition), false);
+    addToInput("targetTCPOrientations", VariantType::List(VariantType::LinkedOrientation), false);
 
     addToInput("tcpMaxSpeed", VariantType::Float, true);
 
diff --git a/source/RobotAPI/motioncontrol/MotionControl.h b/source/RobotAPI/motioncontrol/MotionControl.h
index fb63e94d8bce3765e891790e75891c782ea98b2a..03ba78265ab14751bf3e6fd1d843a9cbe1963255 100644
--- a/source/RobotAPI/motioncontrol/MotionControl.h
+++ b/source/RobotAPI/motioncontrol/MotionControl.h
@@ -96,7 +96,7 @@ namespace MotionControl
         MotionControlHandler();
         void onInitRemoteStateHandler();
         void onConnectRemoteStateHandler();
-        std::string getDefaultName() const { return "MotionControl"; }
+        std::string getHandlerName() const { return "MotionControl"; }
     };