diff --git a/source/RobotAPI/components/units/HapticObserver.cpp b/source/RobotAPI/components/units/HapticObserver.cpp
index 6517a665fb808abfa44636e3a4f96e5a24d050ed..8f5d8293318f8518b978c448cd503816dd7be34f 100644
--- a/source/RobotAPI/components/units/HapticObserver.cpp
+++ b/source/RobotAPI/components/units/HapticObserver.cpp
@@ -56,23 +56,26 @@ void HapticObserver::reportSensorValues(const std::string& device, const std::st
     Eigen::MatrixXf eigenMatrix = matrix->toEigen();
     float max = eigenMatrix.maxCoeff();
     float mean = eigenMatrix.mean();
-    if(!existsChannel(device))
+    std::string channelName = name;
+    if(!existsChannel(channelName))
     {
-        offerChannel(device, "Haptic data");
-        offerDataFieldWithDefault(device, "name", Variant(name), "Name of the tactile sensor");
-        offerDataFieldWithDefault(device, "matrix", matrix, "Raw tactile matrix data");
-        offerDataFieldWithDefault(device, "max", Variant(max), "Maximum value");
-        offerDataFieldWithDefault(device, "mean", Variant(mean), "Mean value");
-        offerDataFieldWithDefault(device, "timestamp", timestampPtr, "Timestamp");
-        offerDataFieldWithDefault(device, "rate", Variant(0.0f), "Sample rate");
+        offerChannel(channelName, "Haptic data");
+        offerDataFieldWithDefault(channelName, "device", Variant(device), "Device of the tactile sensor");
+        offerDataFieldWithDefault(channelName, "name", Variant(name), "Name of the tactile sensor");
+        offerDataFieldWithDefault(channelName, "matrix", matrix, "Raw tactile matrix data");
+        offerDataFieldWithDefault(channelName, "max", Variant(max), "Maximum value");
+        offerDataFieldWithDefault(channelName, "mean", Variant(mean), "Mean value");
+        offerDataFieldWithDefault(channelName, "timestamp", timestampPtr, "Timestamp");
+        offerDataFieldWithDefault(channelName, "rate", Variant(0.0f), "Sample rate");
     }
     else
     {
-        setDataField(device, "name", Variant(name));
-        setDataField(device, "matrix", matrix);
-        setDataField(device, "max", Variant(max));
-        setDataField(device, "mean", Variant(mean));
-        setDataField(device, "timestamp", timestampPtr);
+        setDataField(channelName, "device", Variant(device));
+        setDataField(channelName, "name", Variant(name));
+        setDataField(channelName, "matrix", matrix);
+        setDataField(channelName, "max", Variant(max));
+        setDataField(channelName, "mean", Variant(mean));
+        setDataField(channelName, "timestamp", timestampPtr);
     }
     /*if(statistics.count(device) > 0)
     {
@@ -87,7 +90,7 @@ void HapticObserver::reportSensorValues(const std::string& device, const std::st
         statistics.insert(std::map<std::string,HapticSampleStatistics>::value_type(device, HapticSampleStatistics(100, timestamp->timestamp)));
     }*/
 
-    updateChannel(device);
+    updateChannel(channelName);
 }
 
 PropertyDefinitionsPtr HapticObserver::createPropertyDefinitions()
diff --git a/source/RobotAPI/components/units/TCPControlUnit.cpp b/source/RobotAPI/components/units/TCPControlUnit.cpp
index 32660272f6bbad1663fec6f8f148c801a5fdc866..f219538068ff9141ef5e211e0463ea007c5e5f11 100644
--- a/source/RobotAPI/components/units/TCPControlUnit.cpp
+++ b/source/RobotAPI/components/units/TCPControlUnit.cpp
@@ -342,7 +342,7 @@ namespace armarx
             if(data.orientationVelocity)
             {
                 data.orientationVelocity = FramedVector3::ChangeFrame(localRobot, *data.orientationVelocity, refFrame);
-//                ARMARX_INFO << deactivateSpam(1) << "Orientation in " << refFrame << ": " << data.orientationVelocity->output();
+                ARMARX_INFO << deactivateSpam(1) << "Orientation in " << refFrame << ": " << data.orientationVelocity->output();
                 Eigen::Matrix3f rot;
                 rot = Eigen::AngleAxisf(data.orientationVelocity->z*cycleTime*0.001, Eigen::Vector3f::UnitZ())
                     * Eigen::AngleAxisf(data.orientationVelocity->y*cycleTime*0.001, Eigen::Vector3f::UnitY())
@@ -359,7 +359,7 @@ namespace armarx
             if(data.translationVelocity)
             {
                 data.translationVelocity = FramedVector3::ChangeFrame(localRobot, *data.translationVelocity, refFrame);
-//                ARMARX_INFO << deactivateSpam(1) << "Translation in " << refFrame << ": " << data.translationVelocity->toEigen();
+                ARMARX_INFO << deactivateSpam(1) << "Translation in " << refFrame << ": " << data.translationVelocity->toEigen();
                 m.block(0,3,3,1) = tcpNode->getGlobalPose().block(0,3,3,1) + data.translationVelocity->toEigen()*cycleTime*0.001;
             }
 
@@ -396,7 +396,7 @@ namespace armarx
 //            ARMARX_VERBOSE << deactivateSpam(1) << "Old Pos: \n" << robotNodeSet->getTCP()->getGlobalPose();
 //            dIK->setVerbose(true);
             Eigen::VectorXf jointDelta;
-            dIK->computeSteps(jointDelta, 0.8f, 0.001, 1, &DifferentialIK::computeStep); // 1.0, 0.00001, 50
+            dIK->computeSteps(jointDelta, 0.8f, 0.001, 1, &EDifferentialIK::computeStep); // 1.0, 0.00001, 50
 //            ARMARX_VERBOSE << deactivateSpam(1) << "New Goal: \n" << robotNodeSet->getTCP()->getGlobalPose();
 
             MatrixXf fullJac = dIK->calcFullJacobian();
@@ -666,10 +666,11 @@ namespace armarx
 
             for (unsigned int i=0; i<nodes.size();i++)
             {
+                ARMARX_INFO_S << VAROUT(nodes[i]->getJointValue()) << VAROUT(dTheta[i]);
                 jv[i] = (nodes[i]->getJointValue() + dTheta[i]);
                 if (boost::math::isnan(jv[i]) || boost::math::isinf(jv[i]))
                 {
-                    VR_WARNING << "Aborting, invalid joint value (nan)" << endl;
+                    ARMARX_WARNING_S << "Aborting, invalid joint value (nan)" << endl;
                     dofWeights = tempDOFWeights;
                     return false;
                 }
@@ -795,10 +796,11 @@ namespace armarx
 
         }
 
-        applyDOFWeightsToJacobian(Jacobian);
-
+//        applyDOFWeightsToJacobian(Jacobian);
+        ARMARX_INFO_S << VAROUT(Jacobian);
         MatrixXf pseudo = computePseudoInverseJacobianMatrix(Jacobian);
-
+        ARMARX_INFO_S << VAROUT(Jacobian);
+        ARMARX_INFO_S << VAROUT(error);
         return pseudo * error;
     }
 
diff --git a/source/RobotAPI/gui_plugins/HapticUnitPlugin/HapticUnitGuiPlugin.cpp b/source/RobotAPI/gui_plugins/HapticUnitPlugin/HapticUnitGuiPlugin.cpp
index 56acc084cb150570380fdc3c921058dd862712c7..ff77ae283299e3c2a62e1d9f632443c0a9e1ed19 100644
--- a/source/RobotAPI/gui_plugins/HapticUnitPlugin/HapticUnitGuiPlugin.cpp
+++ b/source/RobotAPI/gui_plugins/HapticUnitPlugin/HapticUnitGuiPlugin.cpp
@@ -170,6 +170,11 @@ void HapticUnitWidget::createMatrixWidgets()
 
 void HapticUnitWidget::updateDisplayWidgets()
 {
+    QLayoutItem *child;
+    while ((child = layout->takeAt(0)) != 0) {
+        delete child;
+    }
+
     int i = 0;
     ChannelRegistry channels = hapticObserverProxy->getAvailableChannels(false);
     for(std::pair<std::string, ChannelRegistryEntry> pair : channels)