diff --git a/source/RobotAPI/drivers/GamepadUnit/GamepadUnit.cpp b/source/RobotAPI/drivers/GamepadUnit/GamepadUnit.cpp
index 1e7dacc348c3101705f4ae650ab978b031cd23d7..14cc8fb49d139d177425040e4b69334f4e9e042a 100644
--- a/source/RobotAPI/drivers/GamepadUnit/GamepadUnit.cpp
+++ b/source/RobotAPI/drivers/GamepadUnit/GamepadUnit.cpp
@@ -22,6 +22,7 @@
 
 #include "GamepadUnit.h"
 
+#include "ArmarXCore/core/logging/Logging.h"
 #include <ArmarXCore/util/CPPUtility/trace.h>
 #include <ArmarXCore/observers/variant/TimestampVariant.h>
 #include <linux/joystick.h>
@@ -53,7 +54,7 @@ void GamepadUnit::onConnectComponent()
         ARMARX_TRACE;
         if (!dataTimestamp)
         {
-            ARMARX_INFO << "dataTimestamp is null, waiting for value";
+            ARMARX_INFO << deactivateSpam(1) << "dataTimestamp is null, waiting for value";
             return;
         }
         ARMARX_CHECK_NOT_NULL(dataTimestamp);
diff --git a/source/RobotAPI/drivers/GamepadUnit/Joystick.h b/source/RobotAPI/drivers/GamepadUnit/Joystick.h
index 8befbe9d5c08bd6d13220cd7c709884c906afc7b..af7cc386dc35a8b1b8ec3122545fd0bb88fef4bd 100644
--- a/source/RobotAPI/drivers/GamepadUnit/Joystick.h
+++ b/source/RobotAPI/drivers/GamepadUnit/Joystick.h
@@ -220,7 +220,7 @@ namespace armarx
             stop.type = EV_FF;
             stop.code = e.id;
             stop.value = 0;
-            const int stopStatus = write(fdEvent, static_cast<const void*>(&stop), sizeof(stop));
+            [[maybe_unused]] const int stopStatus = write(fdEvent, static_cast<const void*>(&stop), sizeof(stop));
 
 
             ret = ioctl(fdEvent, EVIOCRMFF, e.id);
diff --git a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
index fa8011d66e9fb45de290395eab222e9299888620..7c7cfae4d2fba28158d7bbe6cb2a3cb89fd5c195 100644
--- a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
+++ b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
@@ -74,6 +74,7 @@
 #include <iostream>
 #include <memory>
 #include <optional>
+#include <stdexcept>
 #include <string>
 
 
@@ -81,8 +82,10 @@
 //#define KINEMATIC_UNIT_FILE_DEFAULT_PACKAGE std::string("RobotAPI")
 #define KINEMATIC_UNIT_NAME_DEFAULT "Robot"
 //#define TOPIC_NAME_DEFAULT "RobotState"
-#define SLIDER_POS_DEG_MULTIPLIER 5
-#define SLIDER_POS_RAD_MULTIPLIER 100
+
+constexpr float SLIDER_POS_DEG_MULTIPLIER = 5;
+constexpr float SLIDER_POS_RAD_MULTIPLIER = 100;
+constexpr float SLIDER_POS_HEMI_MULTIPLIER = 100;
 
 namespace armarx
 {
@@ -648,15 +651,26 @@ namespace armarx
         {
             if (currentNode)
             {
-                const bool isDeg = ui.checkBoxUseDegree->isChecked();
-                const bool isRot = currentNode->isRotationalJoint();
-                const auto factor =
-                    isRot && !isDeg ? SLIDER_POS_RAD_MULTIPLIER : SLIDER_POS_DEG_MULTIPLIER;
-                float conversionFactor = isRot && isDeg ? 180.0 / M_PI : 1.0f;
-                float pos = currentNode->getJointValue() * conversionFactor;
-
-                ui.lcdNumberKinematicUnitJointValue->display((int)pos);
-                ui.horizontalSliderKinematicUnitPos->setSliderPosition((int)(pos * factor));
+                if (currentNode->isRotationalJoint() or currentNode->isHemisphereJoint())
+                {
+                    const bool isDeg = ui.checkBoxUseDegree->isChecked();
+                    const auto factor =
+                        isDeg ? SLIDER_POS_DEG_MULTIPLIER : SLIDER_POS_RAD_MULTIPLIER;
+                    const float conversionFactor = isDeg ? 180.0 / M_PI : 1.0f;
+                    const float pos = currentNode->getJointValue() * conversionFactor;
+
+                    ui.lcdNumberKinematicUnitJointValue->display((int)pos);
+                    ui.horizontalSliderKinematicUnitPos->setSliderPosition((int)(pos * factor));
+                }
+
+                if (currentNode->isTranslationalJoint())
+                {
+                    const auto factor = SLIDER_POS_DEG_MULTIPLIER;
+                    const float pos = currentNode->getJointValue();
+
+                    ui.lcdNumberKinematicUnitJointValue->display((int)pos);
+                    ui.horizontalSliderKinematicUnitPos->setSliderPosition((int)(pos * factor));
+                }
             }
         }
     }
@@ -712,15 +726,49 @@ namespace armarx
 
         if (currentNode)
         {
-            QString unit = currentNode->isRotationalJoint()
-                               ? (ui.checkBoxUseDegree->isChecked() ? "deg" : "rad")
-                               : "mm";
+            const QString unit = [&]() -> QString
+            {
+                if (currentNode->isRotationalJoint() or currentNode->isHemisphereJoint())
+                {
+                    if (ui.checkBoxUseDegree->isChecked())
+                    {
+                        return "deg";
+                    }
+
+                    return "rad";
+                }
+
+                if (currentNode->isTranslationalJoint())
+                {
+                    return "mm";
+                }
+
+                throw std::invalid_argument("unknown/unsupported joint type");
+            }();
+
             ui.labelUnit->setText(unit);
-            const bool isDeg = ui.checkBoxUseDegree->isChecked();
-            const bool isRot = currentNode->isRotationalJoint();
-            const auto factor =
-                isRot && !isDeg ? SLIDER_POS_RAD_MULTIPLIER : SLIDER_POS_DEG_MULTIPLIER;
-            float conversionFactor = isRot && isDeg ? 180.0 / M_PI : 1.0f;
+
+
+            const auto [factor, conversionFactor] = [&]() -> std::pair<float, float>
+            {
+                if (currentNode->isRotationalJoint() or currentNode->isHemisphereJoint())
+                {
+                    const bool isDeg = ui.checkBoxUseDegree->isChecked();
+                    if (isDeg)
+                    {
+                        return {SLIDER_POS_DEG_MULTIPLIER, 180.0 / M_PI};
+                    }
+                    return {SLIDER_POS_RAD_MULTIPLIER, 1};
+                }
+
+                if (currentNode->isTranslationalJoint())
+                {
+                    return {SLIDER_POS_DEG_MULTIPLIER, 1};
+                }
+
+                throw std::invalid_argument("unknown/unsupported joint type");
+            }();
+
             jointModes[currentNode->getName()] = ePositionControl;
 
             if (kinematicUnitInterfacePrx)
@@ -728,8 +776,8 @@ namespace armarx
                 kinematicUnitInterfacePrx->switchControlMode(jointModes);
             }
 
-            float lo = currentNode->getJointLimitLo() * conversionFactor;
-            float hi = currentNode->getJointLimitHi() * conversionFactor;
+            const float lo = currentNode->getJointLimitLo() * conversionFactor;
+            const float hi = currentNode->getJointLimitHi() * conversionFactor;
 
             if (hi - lo <= 0.0f)
             {
@@ -745,7 +793,7 @@ namespace armarx
                 synchronizeRobotJointAngles();
             }
 
-            float pos = currentNode->getJointValue() * conversionFactor;
+            const float pos = currentNode->getJointValue() * conversionFactor;
             ARMARX_INFO << "Setting position control for current node "
                         << "(name '" << currentNode->getName() << "' with current value " << pos
                         << ")";
@@ -754,8 +802,18 @@ namespace armarx
             // This will initially send a position target with a small delta to the joint.
             ui.horizontalSliderKinematicUnitPos->blockSignals(true);
 
-            ui.horizontalSliderKinematicUnitPos->setMaximum(hi * factor);
-            ui.horizontalSliderKinematicUnitPos->setMinimum(lo * factor);
+            const float sliderMax = hi * factor;
+            const float sliderMin = lo * factor;
+
+            ui.horizontalSliderKinematicUnitPos->setMaximum(sliderMax);
+            ui.horizontalSliderKinematicUnitPos->setMinimum(sliderMin);
+
+            const std::size_t desiredNumberOfTicks = 1'000;
+
+            const float tickInterval = (sliderMax - sliderMin) / desiredNumberOfTicks;
+            ARMARX_INFO << VAROUT(tickInterval);
+
+            ui.horizontalSliderKinematicUnitPos->setTickInterval(tickInterval);
             ui.lcdNumberKinematicUnitJointValue->display(pos);
 
             ui.horizontalSliderKinematicUnitPos->blockSignals(false);
@@ -780,14 +838,37 @@ namespace armarx
             // set the velocity to zero to stop any previous controller (e.g. torque controller)
             jointVelocities[currentNode->getName()] = 0;
 
-            const bool isDeg = ui.checkBoxUseDegree->isChecked();
-            const bool isRot = currentNode->isRotationalJoint();
-            QString unit = isRot ? (isDeg ? "deg/s" : "rad/(100*s)") : "mm/s";
+
+            const QString unit = [&]() -> QString
+            {
+                if (currentNode->isRotationalJoint() or currentNode->isHemisphereJoint())
+                {
+                    if (ui.checkBoxUseDegree->isChecked())
+                    {
+                        return "deg/s";
+                    }
+
+                    return "rad/(100*s)";
+                }
+
+                if (currentNode->isTranslationalJoint())
+                {
+                    return "mm/s";
+                }
+
+                throw std::invalid_argument("unknown/unsupported joint type");
+            }();
+
+
             ui.labelUnit->setText(unit);
             ARMARX_INFO << "setting velocity control for current Node Name: "
                         << currentNode->getName() << flush;
-            float lo = isRot ? (isDeg ? -90 : -M_PI * 100) : -1000;
-            float hi = isRot ? (isDeg ? +90 : +M_PI * 100) : 1000;
+
+            const bool isDeg = ui.checkBoxUseDegree->isChecked();
+            const bool isRot = currentNode->isRotationalJoint() or currentNode->isHemisphereJoint();
+
+            const float lo = isRot ? (isDeg ? -90 : -M_PI * 100) : -1000;
+            const float hi = isRot ? (isDeg ? +90 : +M_PI * 100) : 1000;
 
             try
             {
@@ -1105,7 +1186,7 @@ namespace armarx
         const ControlMode currentControlMode = getSelectedControlMode();
 
         const bool isDeg = ui.checkBoxUseDegree->isChecked();
-        const bool isRot = currentNode->isRotationalJoint();
+        const bool isRot = currentNode->isRotationalJoint() or currentNode->isHemisphereJoint();
 
         if (currentControlMode == ePositionControl)
         {
@@ -1361,7 +1442,10 @@ namespace armarx
 
             QModelIndex index = ui.tableJointList->model()->index(i, eTabelColumnAngleProgressbar);
             float conversionFactor =
-                ui.checkBoxUseDegree->isChecked() && node->isRotationalJoint() ? 180.0 / M_PI : 1;
+                ui.checkBoxUseDegree->isChecked() &&
+                        (node->isRotationalJoint() or node->isHemisphereJoint())
+                    ? 180.0 / M_PI
+                    : 1;
             ui.tableJointList->model()->setData(
                 index,
                 (int)(cutJitter(currentValue * conversionFactor) * 100) / 100.0f,
@@ -1401,7 +1485,8 @@ namespace armarx
             }
 
             float currentValue = it->second;
-            if (ui.checkBoxUseDegree->isChecked() && rn[i]->isRotationalJoint())
+            if (ui.checkBoxUseDegree->isChecked() &&
+                (rn[i]->isRotationalJoint() or rn[i]->isHemisphereJoint()))
             {
                 currentValue *= 180.0 / M_PI;
             }
diff --git a/source/RobotAPI/libraries/armem_grasping/client/KnownGraspCandidateReader.cpp b/source/RobotAPI/libraries/armem_grasping/client/KnownGraspCandidateReader.cpp
index efe2d01c13731c5c32ba876a3837b2e1816ea41a..6eafef5ed875232aa83ab237f058a3c29db08a60 100644
--- a/source/RobotAPI/libraries/armem_grasping/client/KnownGraspCandidateReader.cpp
+++ b/source/RobotAPI/libraries/armem_grasping/client/KnownGraspCandidateReader.cpp
@@ -3,29 +3,25 @@
 #include <mutex>
 #include <optional>
 
-#include <ArmarXCore/core/logging/Logging.h>
 #include <ArmarXCore/core/PackagePath.h>
+#include <ArmarXCore/core/logging/Logging.h>
 
+#include <RobotAPI/libraries/armem/client/query/Builder.h>
 #include <RobotAPI/libraries/armem/core/Time.h>
 #include <RobotAPI/libraries/armem/core/error.h>
-#include <RobotAPI/libraries/armem/client/query/Builder.h>
 #include <RobotAPI/libraries/armem/core/wm/memory_definitions.h>
 #include <RobotAPI/libraries/armem/util/util.h>
-#include <RobotAPI/libraries/armem_robot/robot_conversions.h>
-#include <RobotAPI/libraries/armem_robot/aron_conversions.h>
-#include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h>
 #include <RobotAPI/libraries/armem_objects/aron/Attachment.aron.generated.h>
 #include <RobotAPI/libraries/armem_objects/aron_conversions.h>
+#include <RobotAPI/libraries/armem_robot/aron/Robot.aron.generated.h>
+#include <RobotAPI/libraries/armem_robot/aron_conversions.h>
+#include <RobotAPI/libraries/armem_robot/robot_conversions.h>
 #include <RobotAPI/libraries/aron/common/aron_conversions.h>
 
-
 namespace armarx::armem::grasping::known_grasps
 {
-    Reader::Reader(armem::client::MemoryNameSystem& memoryNameSystem) :
-        memoryNameSystem(memoryNameSystem)
-    {}
-
-    void Reader::registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def)
+    void
+    Reader::registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def)
     {
         ARMARX_DEBUG << "Reader: registerPropertyDefinitions";
 
@@ -38,8 +34,8 @@ namespace armarx::armem::grasping::known_grasps
                       "Name of the memory core segment to use for object instances.");
     }
 
-
-    void Reader::connect()
+    void
+    Reader::connect(armem::client::MemoryNameSystem& memoryNameSystem)
     {
         // Wait for the memory to become available and add it as dependency.
         ARMARX_IMPORTANT << "Reader: Waiting for memory '" << properties.memoryName << "' ...";
@@ -55,7 +51,8 @@ namespace armarx::armem::grasping::known_grasps
         }
     }
 
-    std::optional<armem::grasping::arondto::KnownGraspInfo> Reader::queryKnownGraspInfo(const armem::wm::Memory& memory, const armem::Time&)
+    std::optional<armem::grasping::arondto::KnownGraspInfo>
+    Reader::queryKnownGraspInfo(const armem::wm::Memory& memory, const armem::Time&)
     {
         // clang-format off
         const armem::wm::CoreSegment& s = memory
@@ -63,8 +60,7 @@ namespace armarx::armem::grasping::known_grasps
         // clang-format on
 
         const armem::wm::EntityInstance* instance = nullptr;
-        s.forEachInstance([&instance](const wm::EntityInstance& i)
-                                        { instance = &i; });
+        s.forEachInstance([&instance](const wm::EntityInstance& i) { instance = &i; });
         if (instance == nullptr)
         {
             ARMARX_VERBOSE << "No entity snapshots found";
@@ -73,7 +69,9 @@ namespace armarx::armem::grasping::known_grasps
         return armem::grasping::arondto::KnownGraspInfo::FromAron(instance->data());
     }
 
-    std::optional<armarx::armem::grasping::arondto::KnownGraspInfo> Reader::queryKnownGraspInfoByEntityName(const std::string& entityName, const armem::Time& timestamp)
+    std::optional<armarx::armem::grasping::arondto::KnownGraspInfo>
+    Reader::queryKnownGraspInfoByEntityName(const std::string& entityName,
+                                            const armem::Time& timestamp)
     {
         // Query all entities from all provider.
         armem::client::query::Builder qb;
@@ -103,7 +101,8 @@ namespace armarx::armem::grasping::known_grasps
             auto split = simox::alg::split(entityName, "/");
             if (split.size() > 2) // there is more than just dataset/class
             {
-                ARMARX_INFO << "No grasp found for object entity " << entityName << ". Search for grasp without the index";
+                ARMARX_INFO << "No grasp found for object entity " << entityName
+                            << ". Search for grasp without the index";
                 return queryKnownGraspInfoByEntityName(split[0] + "/" + split[1], timestamp);
             }
         }
@@ -111,4 +110,4 @@ namespace armarx::armem::grasping::known_grasps
         return ret;
     }
 
-}  // namespace armarx::armem::attachment
+} // namespace armarx::armem::grasping::known_grasps
diff --git a/source/RobotAPI/libraries/armem_grasping/client/KnownGraspCandidateReader.h b/source/RobotAPI/libraries/armem_grasping/client/KnownGraspCandidateReader.h
index e421d4ee185b092ece8f81f3af45116e04c3d723..d0057afc8d23a30da6e5c6335143d58c638d0557 100644
--- a/source/RobotAPI/libraries/armem_grasping/client/KnownGraspCandidateReader.h
+++ b/source/RobotAPI/libraries/armem_grasping/client/KnownGraspCandidateReader.h
@@ -28,38 +28,36 @@
 
 #include <RobotAPI/libraries/armem/client/MemoryNameSystem.h>
 #include <RobotAPI/libraries/armem/client/Reader.h>
-
 #include <RobotAPI/libraries/armem_grasping/aron/KnownGraspCandidate.aron.generated.h>
 
-
 namespace armarx::armem::grasping::known_grasps
 {
     class Reader
     {
     public:
-        Reader(armem::client::MemoryNameSystem& memoryNameSystem);
+        Reader() = default;
         virtual ~Reader() = default;
 
         void registerPropertyDefinitions(armarx::PropertyDefinitionsPtr& def);
-        void connect();
+        void connect(armem::client::MemoryNameSystem& memoryNameSystem);
 
-        std::optional<armem::grasping::arondto::KnownGraspInfo> queryKnownGraspInfoByEntityName(const std::string&, const armem::Time&);
-        std::optional<armem::grasping::arondto::KnownGraspInfo> queryKnownGraspInfo(const armem::wm::Memory& memory, const armem::Time&);
+        std::optional<armem::grasping::arondto::KnownGraspInfo>
+        queryKnownGraspInfoByEntityName(const std::string&, const armem::Time&);
+        std::optional<armem::grasping::arondto::KnownGraspInfo>
+        queryKnownGraspInfo(const armem::wm::Memory& memory, const armem::Time&);
 
     private:
-
         struct Properties
         {
-            std::string memoryName                  = "Grasp";
-            std::string coreSegmentName             = "KnownGraspCandidate";
+            std::string memoryName = "Grasp";
+            std::string coreSegmentName = "KnownGraspCandidate";
         } properties;
 
         const std::string propertyPrefix = "mem.grasping.knowngrasps.";
 
-        armem::client::MemoryNameSystem& memoryNameSystem;
         armem::client::Reader memoryReader;
         mutable std::mutex memoryWriterMutex;
     };
 
 
-}  // namespace armarx::armem::attachment
+} // namespace armarx::armem::grasping::known_grasps
diff --git a/source/RobotAPI/libraries/armem_robot_state/aron/Proprioception.xml b/source/RobotAPI/libraries/armem_robot_state/aron/Proprioception.xml
index bfb14cb23d8dd6a169b5b9bd916723af9cbd6a2a..db6a0a9c5898f6332df65199da67c0b4b7b16c1c 100644
--- a/source/RobotAPI/libraries/armem_robot_state/aron/Proprioception.xml
+++ b/source/RobotAPI/libraries/armem_robot_state/aron/Proprioception.xml
@@ -267,6 +267,31 @@
                 </Dict>
             </ObjectChild>
 
+            <ObjectChild key="extraBools">
+                <Dict>
+                    <bool />
+                </Dict>
+            </ObjectChild>
+
+            <ObjectChild key="extraShorts">
+                <Dict>
+                    <int32 />
+                </Dict>
+            </ObjectChild>
+
+            <ObjectChild key="extraInts">
+                <Dict>
+                    <int32 />
+                </Dict>
+            </ObjectChild>
+
+            <ObjectChild key="extraBytes">
+                <Dict>
+                    <int32 />
+                </Dict>
+            </ObjectChild>
+
+
         </Object>
 
             
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp
index 8d94400263d0deb04152cda8f96d9b9dcbd8c9f2..a8280d7e93ee5513449571a8c13d8ee086c9843d 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/client/common/RobotReader.cpp
@@ -51,12 +51,11 @@ namespace armarx::armem::robot_state
         transformReader.connect(memoryNameSystem);
 
         // Wait for the memory to become available and add it as dependency.
-        ARMARX_IMPORTANT << "RobotReader: Waiting for memory '" << constants::memoryName << "' ...";
+        ARMARX_INFO << "RobotReader: Waiting for memory '" << constants::memoryName << "' ...";
         try
         {
             memoryReader = memoryNameSystem.useReader(constants::memoryName);
-            ARMARX_IMPORTANT << "RobotReader: Connected to memory '" << constants::memoryName
-                             << "'";
+            ARMARX_INFO << "RobotReader: Connected to memory '" << constants::memoryName << "'";
         }
         catch (const armem::error::CouldNotResolveMemoryServer& e)
         {
@@ -87,7 +86,7 @@ namespace armarx::armem::robot_state
                            .config = {}, // will be populated by synchronize
                            .timestamp = timestamp};
 
-        synchronize(robot, timestamp);
+        ARMARX_CHECK(synchronize(robot, timestamp));
 
         return robot;
     }
diff --git a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.cpp b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.cpp
index 7fa14f5a1bf7ab5a9519584f8432aa92f04a5617..51739021f56c5b87a47b930fa39cd51a8358607d 100644
--- a/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/client/localization/TransformReader.cpp
@@ -79,12 +79,11 @@ namespace armarx::armem::client::robot_state::localization
     TransformReader::connect(armem::client::MemoryNameSystem& memoryNameSystem)
     {
         // Wait for the memory to become available and add it as dependency.
-        ARMARX_IMPORTANT << "TransformReader: Waiting for memory '" << properties.memoryName
-                         << "' ...";
+        ARMARX_INFO << "TransformReader: Waiting for memory '" << properties.memoryName << "' ...";
         try
         {
             memoryReader = memoryNameSystem.useReader(properties.memoryName);
-            ARMARX_IMPORTANT << "TransformReader: Connected to memory '" << properties.memoryName;
+            ARMARX_INFO << "TransformReader: Connected to memory '" << properties.memoryName;
         }
         catch (const armem::error::CouldNotResolveMemoryServer& e)
         {
diff --git a/source/RobotAPI/libraries/armem_robot_state/server/proprioception/converters/Armar6Converter.cpp b/source/RobotAPI/libraries/armem_robot_state/server/proprioception/converters/Armar6Converter.cpp
index 4dda540b2596801f1492c4ae8ac532455af002a4..dcbe1b7783190849e6a5d8d442a0124ca22c1b4c 100644
--- a/source/RobotAPI/libraries/armem_robot_state/server/proprioception/converters/Armar6Converter.cpp
+++ b/source/RobotAPI/libraries/armem_robot_state/server/proprioception/converters/Armar6Converter.cpp
@@ -1,8 +1,10 @@
 #include "Armar6Converter.h"
+#include <cstddef>
 
 #include <SimoxUtility/algorithm/get_map_keys_values.h>
 #include <SimoxUtility/algorithm/advanced.h>
 
+#include <RobotAPI/interface/units/RobotUnit/RobotUnitInterface.h>
 #include <RobotAPI/libraries/RobotUnitDataStreamingReceiver/RobotUnitDataStreamingReceiver.h>
 #include <RobotAPI/libraries/aron/core/data/variant/container/Dict.h>
 
@@ -86,6 +88,18 @@ namespace armarx::armem::server::robot_state::proprioception
                     case RobotUnitDataStreaming::NodeTypeLong:
                         dto.extraLongs[key] = getValueAs<long>(value);
                         break;
+                    case RobotUnitDataStreaming::NodeTypeBool:
+                        dto.extraBools[key] = getValueAs<bool>(value);
+                        break;
+                    case RobotUnitDataStreaming::NodeTypeInt:
+                        dto.extraInts[key] = getValueAs<int>(value);
+                        break;
+                    case RobotUnitDataStreaming::NodeTypeShort:
+                        dto.extraShorts[key] = getValueAs<Ice::Short>(value);
+                        break;
+                    case RobotUnitDataStreaming::NodeTypeByte:
+                        dto.extraBytes[key] = getValueAs<Ice::Byte>(value);
+                        break;
                     default:
                         ARMARX_DEBUG << "Cannot handle extra field '" << key << "' of type "
                                      << RobotUnitDataStreaming::DataEntryNames.to_name(value.entry.type);