diff --git a/source/RobotAPI/components/units/KinematicUnitObserver.cpp b/source/RobotAPI/components/units/KinematicUnitObserver.cpp
index f387672b1e5a0181463413093dcdb27720d6dda8..a90f70c0f177e36e7f8a95f38af7fa7b9749760b 100644
--- a/source/RobotAPI/components/units/KinematicUnitObserver.cpp
+++ b/source/RobotAPI/components/units/KinematicUnitObserver.cpp
@@ -159,7 +159,8 @@ void KinematicUnitObserver::reportJointAngles(const NameValueMap& jointAngles, I
             return;
         }
 
-        nameValueMapToDataFields("jointangles", jointAngles, timestamp);
+        nameValueMapToDataFields("jointangles", jointAngles, timestamp, aValueChanged);
+
 
         updateChannel("jointangles");
 
@@ -180,7 +181,9 @@ void KinematicUnitObserver::reportJointVelocities(const NameValueMap& jointVeloc
             return;
         }
 
-        nameValueMapToDataFields("jointvelocities", jointVelocities, timestamp);
+
+        nameValueMapToDataFields("jointvelocities", jointVelocities, timestamp, aValueChanged);
+
         updateChannel("jointvelocities");
     }
     catch (...)
@@ -198,7 +201,9 @@ void KinematicUnitObserver::reportJointTorques(const NameValueMap& jointTorques,
             return;
         }
 
-        nameValueMapToDataFields("jointtorques", jointTorques, timestamp);
+
+        nameValueMapToDataFields("jointtorques", jointTorques, timestamp, aValueChanged);
+
         updateChannel("jointtorques");
     }
     catch (...)
@@ -221,7 +226,9 @@ void KinematicUnitObserver::reportJointCurrents(const NameValueMap& jointCurrent
             return;
         }
 
-        nameValueMapToDataFields("jointcurrents", jointCurrents, timestamp);
+
+        nameValueMapToDataFields("jointcurrents", jointCurrents, timestamp, aValueChanged);
+
         updateChannel("jointcurrents");
     }
     catch (...)
@@ -239,7 +246,9 @@ void KinematicUnitObserver::reportJointMotorTemperatures(const NameValueMap& joi
             return;
         }
 
-        nameValueMapToDataFields("jointmotortemperatures", jointMotorTemperatures, timestamp);
+
+        nameValueMapToDataFields("jointmotortemperatures", jointMotorTemperatures, timestamp, aValueChanged);
+
         updateChannel("jointmotortemperatures");
     }
     catch (...)
@@ -255,22 +264,34 @@ void KinematicUnitObserver::reportJointStatuses(const NameStatusMap& jointStatus
 // ********************************************************************
 // private methods
 // ********************************************************************
-void KinematicUnitObserver::nameValueMapToDataFields(const std::string& channelName, const NameValueMap& nameValueMap, Ice::Long timestamp)
+void KinematicUnitObserver::nameValueMapToDataFields(const std::string& channelName, const NameValueMap& nameValueMap, Ice::Long timestamp, bool aValueChanged)
 {
     //    ARMARX_INFO << deactivateSpam(10) << " timestamp is " << (IceUtil::Time::now() - IceUtil::Time::microSeconds(timestamp)).toMicroSecondsDouble() << " µs old";
-    StringVariantBaseMap map;
-    for (const auto & it : nameValueMap)
+    if (aValueChanged || initializedChannels.count(channelName) == 0)
     {
+        initializedChannels.insert(channelName);
+        boost::unordered_map< ::std::string, ::armarx::VariantBasePtr> map;
         if (timestamp < 0)
         {
-            map[it.first] = new Variant(it.second);
+            for (const auto & it : nameValueMap)
+            {
+                map[it.first] = new Variant(it.second);
+            }
         }
         else
         {
-            map[it.first] = new TimedVariant(it.second, IceUtil::Time::microSecondsDouble(timestamp));
+            for (const auto & it : nameValueMap)
+            {
+                map[it.first] = new TimedVariant(new Variant(it.second), IceUtil::Time::microSeconds(timestamp));
+            }
         }
+        setDataFieldsFlatCopy(channelName, map);
     }
-    setDataFieldsFlatCopy(channelName, map);
+    else
+    {
+        updateDatafieldTimestamps(channelName, timestamp);
+    }
+
 }
 
 PropertyDefinitionsPtr KinematicUnitObserver::createPropertyDefinitions()
diff --git a/source/RobotAPI/components/units/KinematicUnitObserver.h b/source/RobotAPI/components/units/KinematicUnitObserver.h
index 8272327b7828a9788083a0b01edf27649a95c2f4..31ebe7633f01209d4df74ee9d844e89f9bfa3a13 100644
--- a/source/RobotAPI/components/units/KinematicUnitObserver.h
+++ b/source/RobotAPI/components/units/KinematicUnitObserver.h
@@ -138,8 +138,8 @@ namespace armarx
         }
 
     protected:
-        void nameValueMapToDataFields(const std::string& channelName, const NameValueMap& nameValueMap, Ice::Long timestamp);
-
+        void nameValueMapToDataFields(const std::string& channelName, const NameValueMap& nameValueMap, Ice::Long timestamp, bool aValueChanged);
+        std::set<std::string> initializedChannels;
     private:
         std::string robotNodeSetName;
     };