diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.cpp b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.cpp
index 99f95201e220830607148af08c1a9cce6ded71d2..ff3c4df2e224718958dcf119f71015f97923ef4d 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.cpp
+++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.cpp
@@ -5,26 +5,30 @@
 namespace armarx::aron
 {
 
-    std::string DataDisplayVisitor::getValue(const data::VariantPtr& n)
+    std::string
+    DataDisplayVisitor::getValue(const data::VariantPtr& n)
     {
         DataDisplayVisitor v;
         data::visit(v, n);
         return v.value.str();
     }
 
-    void DataDisplayVisitor::visitDict(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitDict(const data::VariantPtr& n)
     {
         auto x = data::Dict::DynamicCastAndCheck(n);
         value << x->childrenSize() << " items";
     }
 
-    void DataDisplayVisitor::visitList(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitList(const data::VariantPtr& n)
     {
         auto x = data::List::DynamicCastAndCheck(n);
         value << x->childrenSize() << " items";
     }
 
-    void DataDisplayVisitor::visitBool(const data::VariantPtr& b)
+    void
+    DataDisplayVisitor::visitBool(const data::VariantPtr& b)
     {
         auto x = data::Bool::DynamicCastAndCheck(b);
         if (x->getValue())
@@ -37,41 +41,83 @@ namespace armarx::aron
         }
     }
 
-    void DataDisplayVisitor::visitDouble(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitDouble(const data::VariantPtr& n)
     {
         auto x = data::Double::DynamicCastAndCheck(n);
         value << x->getValue();
     }
 
-    void DataDisplayVisitor::visitFloat(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitFloat(const data::VariantPtr& n)
     {
         auto x = data::Float::DynamicCastAndCheck(n);
         value << x->getValue();
     }
 
-    void DataDisplayVisitor::visitInt(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitInt(const data::VariantPtr& n)
     {
         auto x = data::Int::DynamicCastAndCheck(n);
         value << x->getValue();
     }
 
-    void DataDisplayVisitor::visitLong(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitLong(const data::VariantPtr& n)
     {
         auto x = data::Long::DynamicCastAndCheck(n);
         value << x->getValue();
     }
 
-    void DataDisplayVisitor::visitString(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitString(const data::VariantPtr& n)
     {
         auto x = data::String::DynamicCastAndCheck(n);
         value << "'" << x->getValue() << "'";
     }
 
-    void DataDisplayVisitor::visitNDArray(const data::VariantPtr& n)
+    void
+    DataDisplayVisitor::visitNDArray(const data::VariantPtr& data)
     {
-        auto x = data::NDArray::DynamicCastAndCheck(n);
-        value << "shape " << aron::data::NDArray::DimensionsToString(x->getShape()) << ", type '" << x->getType() << "'";
+        auto d = data::NDArray::DynamicCastAndCheck(data);
+
+        auto base = [this, &d]()
+        {
+            value << "shape " << aron::data::NDArray::DimensionsToString(d->getShape())
+                  << ", type '" << d->getType() << "'";
+        };
+
+        if (std::max(d->getShape().at(0), d->getShape().at(1)) > 10)
+        {
+            // Just show the shape.
+            base();
+        }
+        else if (d->getType() == "float")
+        {
+            setStreamPrecision();
+            processMatrix<float>(*d);
+        }
+        else if (d->getType() == "double")
+        {
+            setStreamPrecision();
+            processMatrix<double>(*d);
+        }
+        else
+        {
+            base();
+        }
+    }
+
+    template <typename ScalarT>
+    void
+    DataDisplayVisitor::processMatrix(const data::NDArray& data)
+    {
+        Eigen::Map<Eigen::Matrix<ScalarT, Eigen::Dynamic, Eigen::Dynamic>> m(
+            reinterpret_cast<ScalarT*>(data.getData()),
+            data.getShape().at(0),
+            data.getShape().at(1));
+        value << m.format(eigenIof);
     }
 
 
-}
+} // namespace armarx::aron
diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.h b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.h
index d6341001207674f171f5172039987a0afaec2366..8f15373c0d90e24f042ffd15ce16fbbcf0b96a48 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.h
+++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/DataDisplayVisitor.h
@@ -27,6 +27,10 @@ namespace armarx::aron
         void visitString(const data::VariantPtr& n) override;
 
         void visitNDArray(const data::VariantPtr& n) override;
+
+    private:
+        template <typename ScalarT>
+        void processMatrix(const data::NDArray& data);
     };
 
 } // namespace armarx::aron
diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.cpp b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.cpp
index 72ee86e05c866cc37c5e6d5f1b9f40d647e10358..768a69b885efa7ae7aa36d8534cb52ece737dd00 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.cpp
+++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.cpp
@@ -4,6 +4,11 @@
 
 namespace armarx::aron
 {
+    StringStreamMixin::StringStreamMixin() :
+        coeffSep("  "), eigenIof(Eigen::StreamPrecision, 0, coeffSep, "\n", "", "", "", "")
+    {
+    }
+
     void
     StringStreamMixin::setStreamPrecision()
     {
diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.h b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.h
index 1b3316af4c9d40f89c7e7a34ec91f1552ee26432..01dfb9d91bef2208400c7a25cad3c5cfa29b8df5 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.h
+++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/StringStreamMixin.h
@@ -2,17 +2,26 @@
 
 #include <sstream>
 
+#include <Eigen/Core>
+
 namespace armarx::aron
 {
 
     class StringStreamMixin
     {
     public:
-        std::stringstream value;
+        StringStreamMixin();
 
     protected:
         void setStreamPrecision();
         void setStreamPrecision(std::ostream& os);
+
+    public:
+        std::stringstream value;
+
+    protected:
+        const std::string coeffSep;
+        const Eigen::IOFormat eigenIof;
     };
 
 } // namespace armarx::aron
diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp
index b51cf38df43a8c2d4695cf67a102d70c53e7fba1..e9bb7bc4441bb2246ca2d360dc747a3398b4fdfd 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp
+++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.cpp
@@ -24,8 +24,7 @@ namespace armarx::aron
         return v.value.str();
     }
 
-    TypedDataDisplayVisitor::TypedDataDisplayVisitor() :
-        coeffSep("  "), eigenIof(Eigen::StreamPrecision, 0, coeffSep, "\n", "", "", "", "")
+    TypedDataDisplayVisitor::TypedDataDisplayVisitor()
     {
     }
 
@@ -160,28 +159,7 @@ namespace armarx::aron
     void
     TypedDataDisplayVisitor::visitMatrix(const data::VariantPtr& data, const type::VariantPtr& type)
     {
-        auto t = *type::Matrix::DynamicCastAndCheck(type);
-        auto d = *data::NDArray::DynamicCastAndCheck(data);
-
-        if (std::max(d.getShape().at(0), d.getShape().at(1)) > 10)
-        {
-            // Just show the shape.
-            value << DataDisplayVisitor::getValue(data);
-        }
-        else if (d.getType() == "float")
-        {
-            setStreamPrecision();
-            processMatrix<float>(t, d);
-        }
-        else if (d.getType() == "double")
-        {
-            setStreamPrecision();
-            processMatrix<double>(t, d);
-        }
-        else
-        {
-            value << DataDisplayVisitor::getValue(data);
-        }
+        value << DataDisplayVisitor::getValue(data);
     }
 
     void
diff --git a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h
index 6700f95693c4ec281e1e6bc168fa9eb66eec27d6..cdbcf69129ff9a3224c3f14d8f87a168d54238c4 100644
--- a/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h
+++ b/source/RobotAPI/libraries/armem_gui/instance/display_visitors/TypedDataDisplayVisitor.h
@@ -45,11 +45,6 @@ namespace armarx::aron
         // What about NDArray? currently defaulted
 
 
-    protected:
-        std::string coeffSep;
-        Eigen::IOFormat eigenIof;
-
-
     private:
         template <typename ScalarT>
         void processMatrix(const type::Matrix&, const data::NDArray& data);