diff --git a/source/RobotAPI/components/ArViz/Coin/ElementVisualizer.cpp b/source/RobotAPI/components/ArViz/Coin/ElementVisualizer.cpp
index aff982525aa9d36f8774463e00d3d622d7dbdd12..1acd8b4e7847bac18dde8939141f73060bbd89bd 100644
--- a/source/RobotAPI/components/ArViz/Coin/ElementVisualizer.cpp
+++ b/source/RobotAPI/components/ArViz/Coin/ElementVisualizer.cpp
@@ -19,16 +19,31 @@ namespace armarx
                 transform = new SoTransform;
                 material = new SoMaterial;
 
-                seperator = new SoSeparator;
-                seperator->addChild(units);
-                seperator->addChild(transform);
-                seperator->addChild(material);
+                separator = new SoSeparator;
+                separator->addChild(units);
+                separator->addChild(transform);
+                separator->addChild(material);
+            }
+
+            void ElementVisualization::updateBase(Element const& element)
+            {
+                auto& p = element.pose;
+                transform->translation.setValue(p.x, p.y, p.z);
+                transform->rotation.setValue(p.qx, p.qy, p.qz, p.qw);
+                transform->scaleFactor.setValue(element.scale, element.scale, element.scale);
+
+                auto color = element.color;
+                const float conv = 1.0f / 255.0f;
+                SbColor coinColor(conv * color.r, conv * color.g, conv * color.b);
+                material->ambientColor.setValue(coinColor);
+                material->diffuseColor.setValue(coinColor);
+                material->transparency.setValue(1.0f - conv * color.a);
+
             }
 
             std::unique_ptr<ElementVisualization> ElementVisualizer::create(const Element& element)
             {
-                std::unique_ptr<ElementVisualization> result(createElement_());
-                result->seperator->addChild(result->getNode());
+                std::unique_ptr<ElementVisualization> result(createDerived());
                 update(element, result.get());
 
                 return result;
@@ -36,24 +51,8 @@ namespace armarx
 
             bool ElementVisualizer::update(Element const& element, ElementVisualization* visu)
             {
-                if (visu->transform)
-                {
-                    auto& p = element.pose;
-                    visu->transform->translation.setValue(p.x, p.y, p.z);
-                    visu->transform->rotation.setValue(p.qx, p.qy, p.qz, p.qw);
-                    visu->transform->scaleFactor.setValue(element.scale, element.scale, element.scale);
-                }
-                if (visu->material)
-                {
-                    auto color = element.color;
-                    const float conv = 1.0f / 255.0f;
-                    SbColor coinColor(conv * color.r, conv * color.g, conv * color.b);
-                    visu->material->ambientColor.setValue(coinColor);
-                    visu->material->diffuseColor.setValue(coinColor);
-                    visu->material->transparency.setValue(1.0f - conv * color.a);
-                }
-
-                return updateElement_(element, visu);
+                visu->updateBase(element);
+                return updateDerived(element, visu);
             }
         }
     }
diff --git a/source/RobotAPI/components/ArViz/Coin/ElementVisualizer.h b/source/RobotAPI/components/ArViz/Coin/ElementVisualizer.h
index dbab6fe521e9373d291135c9f70d7c0566057406..13cb06f47540009c319422c176eba8f132872c16 100644
--- a/source/RobotAPI/components/ArViz/Coin/ElementVisualizer.h
+++ b/source/RobotAPI/components/ArViz/Coin/ElementVisualizer.h
@@ -22,12 +22,12 @@ namespace armarx
 
                 virtual ~ElementVisualization() = default;
 
-                virtual SoNode* getNode() = 0;
+                void updateBase(Element const& element);
 
-                SoSeparator* seperator = nullptr;
-                SoUnits* units = nullptr;
-                SoTransform* transform = nullptr;
-                SoMaterial* material = nullptr;
+                SoSeparator* separator;
+                SoUnits* units;
+                SoTransform* transform;
+                SoMaterial* material;
             };
 
             template <typename NodeT>
@@ -40,11 +40,6 @@ namespace armarx
                     node = new NodeType;
                 }
 
-                NodeType* getNode() final
-                {
-                    return node;
-                }
-
                 NodeType* node;
             };
 
@@ -53,31 +48,34 @@ namespace armarx
             public:
                 virtual ~ElementVisualizer() = default;
 
-                virtual std::unique_ptr<ElementVisualization> create(Element const& element) final;
-                virtual bool update(Element const& element, ElementVisualization* visu) final;
+                std::unique_ptr<ElementVisualization> create(Element const& element);
+                bool update(Element const& element, ElementVisualization* visu);
 
-                virtual ElementVisualization* createElement_() = 0;
-                virtual bool updateElement_(Element const& element, ElementVisualization* data) = 0;
+                virtual ElementVisualization* createDerived() = 0;
+                virtual bool updateDerived(Element const& element, ElementVisualization* data) = 0;
             };
 
             template <typename DataT>
-            class TypedElementVisualizer2 : public ElementVisualizer
+            class TypedElementVisualizer : public ElementVisualizer
             {
             public:
                 using DataType = DataT;
                 using ElementType = typename DataType::ElementType;
 
-                DataType* createElement_() override
+                DataType* createDerived() final
                 {
-                    return new DataType;
+                    DataType* result = new DataType;
+                    result->separator->addChild(result->node);
+                    return result;
                 }
 
-                bool updateElement_(Element const& element_, ElementVisualization* data_) override
+                bool updateDerived(Element const& element_, ElementVisualization* data_) final
                 {
                     auto const& element = static_cast<ElementType const&>(element_);
                     auto* data = dynamic_cast<DataType*>(data_);
                     if (data)
                     {
+                        // We want to call  update with the correctly downcasted arguments
                         return data->update(element);
                     }
                     return false;
diff --git a/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp b/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp
index f396ff632e4511f3fee5e2ac80ff3c51d4ce7c03..bcd0eda902ca828cb1e8bbfdb273bd1a840e397c 100644
--- a/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp
+++ b/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp
@@ -155,7 +155,7 @@ namespace armarx
                         case Element_ADD:
                         {
                             // Remove old element and create a new one below
-                            layer.node->removeChild(oldElement.seperator);
+                            layer.node->removeChild(oldElement.separator);
                         }
                         break;
                         case Element_UPDATE:
@@ -168,14 +168,14 @@ namespace armarx
                             else
                             {
                                 // Types are different, so we delete the old element and create a new one
-                                layer.node->removeChild(oldElement.seperator);
+                                layer.node->removeChild(oldElement.separator);
                             }
                         }
                         break;
                         case Element_DELETE:
                         {
                             layer.elements.erase(oldElementIter);
-                            layer.node->removeChild(oldElement.seperator);
+                            layer.node->removeChild(oldElement.separator);
                             continue;
                         }
                         break;
@@ -193,9 +193,9 @@ namespace armarx
                     continue;
                 }
                 auto elementVisu = visualizer.create(updatedElement);
-                if (elementVisu->seperator)
+                if (elementVisu->separator)
                 {
-                    layer.node->addChild(elementVisu->seperator);
+                    layer.node->addChild(elementVisu->separator);
                     layer.elements[updatedElement.id] = std::move(elementVisu);
                 }
                 else
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizerArrow.h b/source/RobotAPI/components/ArViz/Coin/VisualizerArrow.h
index e66b3dbb33a4908f8b8408d428addde44ee6bdd8..adf85ebb98b0147358821b1235934513bf1f9b04 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizerArrow.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizerArrow.h
@@ -53,7 +53,7 @@ namespace armarx::viz::coin
         SoCone* cone;
     };
 
-    struct VisualizerArrow : TypedElementVisualizer2<VisualizationArrow>
+    struct VisualizerArrow : TypedElementVisualizer<VisualizationArrow>
     {
     };
 }
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizerArrowCircle.h b/source/RobotAPI/components/ArViz/Coin/VisualizerArrowCircle.h
index 984bfd9e52349c2cacf059a1b6294809d8cc7271..5904df956f0da0411547931cc8e72c1ef73c8ace 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizerArrowCircle.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizerArrowCircle.h
@@ -66,7 +66,7 @@ namespace armarx::viz::coin
         }
     };
 
-    struct VisualizerArrowCircle: TypedElementVisualizer2<VisualizationArrowCircle>
+    struct VisualizerArrowCircle: TypedElementVisualizer<VisualizationArrowCircle>
     {
     };
 }
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizerBox.h b/source/RobotAPI/components/ArViz/Coin/VisualizerBox.h
index 0750f7a5a29b7aa4a0f1242a05637dec242270bf..9a553c89771d2c13b96ad7038939c89339497e59 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizerBox.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizerBox.h
@@ -21,7 +21,7 @@ namespace armarx::viz::coin
         }
     };
 
-    class VisualizerBox : public TypedElementVisualizer2<VisualizationBox>
+    class VisualizerBox : public TypedElementVisualizer<VisualizationBox>
     {
     };
 }
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizerCylinder.h b/source/RobotAPI/components/ArViz/Coin/VisualizerCylinder.h
index db85f4c9f43c71728012894515ef5a784dba4797..389ca4bdbcbf60a0131f6973a1c791d66d9b9895 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizerCylinder.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizerCylinder.h
@@ -20,7 +20,7 @@ namespace armarx::viz::coin
         }
     };
 
-    class VisualizerCylinder : public TypedElementVisualizer2<VisualizationCylinder>
+    class VisualizerCylinder : public TypedElementVisualizer<VisualizationCylinder>
     {
     };
 }
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizerLine.h b/source/RobotAPI/components/ArViz/Coin/VisualizerLine.h
index c5100af6b69aebf9414e301786dbc2e65ef647c0..cf2a102bea97568a16bf5ae07b2d17ff50a13511 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizerLine.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizerLine.h
@@ -43,7 +43,7 @@ namespace armarx::viz::coin
         SoCoordinate3* coordinate3;
     };
 
-    struct VisualizerLine: TypedElementVisualizer2<VisualizationLine>
+    struct VisualizerLine: TypedElementVisualizer<VisualizationLine>
     {
     };
 }
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizerMesh.h b/source/RobotAPI/components/ArViz/Coin/VisualizerMesh.h
index e2eb2848d56de9ba95dd816585c25d5ddb36c530..d6f8e43bf639ba63e90b86a516f8307e43c6eb0e 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizerMesh.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizerMesh.h
@@ -131,7 +131,7 @@ namespace armarx::viz::coin
         std::vector<int32_t> matInx;
     };
 
-    struct VisualizerMesh: TypedElementVisualizer2<VisualizationMesh>
+    struct VisualizerMesh: TypedElementVisualizer<VisualizationMesh>
     {
     };
 }
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizerPointCloud.h b/source/RobotAPI/components/ArViz/Coin/VisualizerPointCloud.h
index cfd055f9432c16b2e9f970b5ac227ea738934cc9..9503849e272799b37a7dadd93715b98ba6b71213 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizerPointCloud.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizerPointCloud.h
@@ -69,7 +69,7 @@ namespace armarx::viz::coin
         std::vector<SbVec3f> coords;
     };
 
-    struct VisualizerPointCloud: TypedElementVisualizer2<VisualizationPointCloud>
+    struct VisualizerPointCloud: TypedElementVisualizer<VisualizationPointCloud>
     {
 
     };
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizerPolygon.h b/source/RobotAPI/components/ArViz/Coin/VisualizerPolygon.h
index 11b8fda3e9db0c77d17fa9fc6210a4a3ebf05659..05c7fbcaaf928757d86864f4b5577f96aa604be2 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizerPolygon.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizerPolygon.h
@@ -93,7 +93,7 @@ namespace armarx::viz::coin
         SoMaterial* lineMaterial;
     };
 
-    struct VisualizerPolygon : TypedElementVisualizer2<VisualizationPolygon>
+    struct VisualizerPolygon : TypedElementVisualizer<VisualizationPolygon>
     {
     };
 }
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizerPose.h b/source/RobotAPI/components/ArViz/Coin/VisualizerPose.h
index 5f496242c9cefef69269f3e411331abc0ed29a0b..fb7825add74e8a8918b9e632c9719797bddca1ae 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizerPose.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizerPose.h
@@ -154,7 +154,7 @@ namespace armarx::viz::coin
         std::array<SoTransform*, 3> t2_;
     };
 
-    struct VisualizerPose: TypedElementVisualizer2<VisualizationPose>
+    struct VisualizerPose: TypedElementVisualizer<VisualizationPose>
     {
 
     };
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizerRobot.h b/source/RobotAPI/components/ArViz/Coin/VisualizerRobot.h
index 47f8f3ce548025bb5af01d140a91c9c764fa8767..d0228d2ce05c41cd7be791f1aaf97b83c5e38e70 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizerRobot.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizerRobot.h
@@ -23,7 +23,7 @@ namespace armarx::viz::coin
         }
     };
 
-    struct VisualizerRobot: TypedElementVisualizer2<VisualizationRobot>
+    struct VisualizerRobot: TypedElementVisualizer<VisualizationRobot>
     {
     };
 }
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizerSphere.h b/source/RobotAPI/components/ArViz/Coin/VisualizerSphere.h
index 9510c5daab48ef7d93b0a814405d8e8494b64369..f2f9f065a00e6aeda26f63505a3f7a88a9a4e832 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizerSphere.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizerSphere.h
@@ -19,7 +19,7 @@ namespace armarx::viz::coin
         }
     };
 
-    struct VisualizerSphere: TypedElementVisualizer2<VisualizationSphere>
+    struct VisualizerSphere: TypedElementVisualizer<VisualizationSphere>
     {
 
     };
diff --git a/source/RobotAPI/components/ArViz/Coin/VisualizerText.h b/source/RobotAPI/components/ArViz/Coin/VisualizerText.h
index f4d4fd55c719cee2eb21310352a11eabc067fc63..8046f5be0fdc9a0c128643a3ae09111cbf5133dc 100644
--- a/source/RobotAPI/components/ArViz/Coin/VisualizerText.h
+++ b/source/RobotAPI/components/ArViz/Coin/VisualizerText.h
@@ -20,7 +20,7 @@ namespace armarx::viz::coin
         }
     };
 
-    struct VisualizerText: TypedElementVisualizer2<VisualizationText>
+    struct VisualizerText: TypedElementVisualizer<VisualizationText>
     {
     };
 }