diff --git a/source/RobotAPI/components/units/InertialMeasurementUnitObserver.cpp b/source/RobotAPI/components/units/InertialMeasurementUnitObserver.cpp
index 388f3939f916e4c7cf55cdb9917fdf8df6b9f911..3f387568df7d54c2b6c93ea27852269ff39ba562 100644
--- a/source/RobotAPI/components/units/InertialMeasurementUnitObserver.cpp
+++ b/source/RobotAPI/components/units/InertialMeasurementUnitObserver.cpp
@@ -72,10 +72,6 @@ void InertialMeasurementUnitObserver::reportSensorValues(const std::string& devi
 
     TimestampVariantPtr timestampPtr = TimestampVariantPtr::dynamicCast(timestamp);
 
-    Vector3Ptr acceleration = new Vector3(values.acceleration.at(0), values.acceleration.at(1), values.acceleration.at(2));
-    Vector3Ptr gyroscopeRotation = new Vector3(values.gyroscopeRotation.at(0), values.gyroscopeRotation.at(1), values.gyroscopeRotation.at(2));
-    Vector3Ptr magneticRotation = new Vector3(values.magneticRotation.at(0), values.magneticRotation.at(1), values.magneticRotation.at(2));
-    QuaternionPtr orientationQuaternion =  new Quaternion(values.orientationQuaternion.at(0), values.orientationQuaternion.at(1), values.orientationQuaternion.at(2), values.orientationQuaternion.at(3));
 
     if (!existsChannel(device))
     {
@@ -83,29 +79,52 @@ void InertialMeasurementUnitObserver::reportSensorValues(const std::string& devi
     }
 
     offerOrUpdateDataField(device, "name", Variant(name), "Name of the IMU sensor");
-    offerValue(device, "acceleration", acceleration);
-    offerValue(device, "gyroscopeRotation", gyroscopeRotation);
-    offerValue(device, "magneticRotation", magneticRotation);
-    offerValue(device, "acceleration", acceleration);
-    offerOrUpdateDataField(device, "orientationQuaternion", orientationQuaternion,  "orientation quaternion values");
+    Vector3Ptr acceleration;
+    QuaternionPtr orientationQuaternion;
+    if (values.acceleration.size() > 0)
+    {
+        ARMARX_CHECK_EXPRESSION(values.acceleration.size() == 3);
+        acceleration = new Vector3(values.acceleration.at(0), values.acceleration.at(1), values.acceleration.at(2));
+        offerValue(device, "acceleration", acceleration);
+    }
+    if (values.gyroscopeRotation.size() > 0)
+    {
+        ARMARX_CHECK_EXPRESSION(values.gyroscopeRotation.size() == 3);
+        Vector3Ptr gyroscopeRotation = new Vector3(values.gyroscopeRotation.at(0), values.gyroscopeRotation.at(1), values.gyroscopeRotation.at(2));
+        offerValue(device, "gyroscopeRotation", gyroscopeRotation);
+    }
+    if (values.magneticRotation.size() > 0)
+    {
+        ARMARX_CHECK_EXPRESSION(values.magneticRotation.size() == 3);
+        Vector3Ptr magneticRotation = new Vector3(values.magneticRotation.at(0), values.magneticRotation.at(1), values.magneticRotation.at(2));
+        offerValue(device, "magneticRotation", magneticRotation);
+    }
+    if (values.orientationQuaternion.size() > 0)
+    {
+        ARMARX_CHECK_EXPRESSION(values.orientationQuaternion.size() == 4);
+        orientationQuaternion =  new Quaternion(values.orientationQuaternion.at(0), values.orientationQuaternion.at(1), values.orientationQuaternion.at(2), values.orientationQuaternion.at(3));
+        offerOrUpdateDataField(device, "orientationQuaternion", orientationQuaternion,  "orientation quaternion values");
+    }
     offerOrUpdateDataField(device, "timestamp", timestampPtr, "Timestamp");
 
     updateChannel(device);
 
-    Eigen::Vector3f zero;
-    zero.setZero();
-
-    DrawColor color;
-    color.r = 1;
-    color.g = 1;
-    color.b = 0;
-    color.a = 0.5;
 
-    Eigen::Vector3f ac = acceleration->toEigen();
-    ac *= 10;
 
-    if (getProperty<bool>("EnableVisualization").getValue())
+    if (orientationQuaternion && acceleration && getProperty<bool>("EnableVisualization").getValue())
     {
+        Eigen::Vector3f zero;
+        zero.setZero();
+
+        DrawColor color;
+        color.r = 1;
+        color.g = 1;
+        color.b = 0;
+        color.a = 0.5;
+
+        Eigen::Vector3f ac = acceleration->toEigen();
+        ac *= 10;
+
         debugDrawerPrx->setLineVisu("IMU", "acceleration", new Vector3(), new Vector3(ac), 2.0f, color);
 
         PosePtr posePtr = new Pose(orientationQuaternion->toEigen(), zero);