diff --git a/Base/Rendering/RenderDelegate/imstkVTKCapsuleRenderDelegate.cpp b/Base/Rendering/RenderDelegate/imstkVTKCapsuleRenderDelegate.cpp
index 4093d1096cacafe86b7828bd2e0f16ca25a22218..d6e72cec69f61196541cee7af4227436548b401a 100644
--- a/Base/Rendering/RenderDelegate/imstkVTKCapsuleRenderDelegate.cpp
+++ b/Base/Rendering/RenderDelegate/imstkVTKCapsuleRenderDelegate.cpp
@@ -39,7 +39,7 @@ m_capsuleGeometry(capsule)
     source->SetThetaResolution(10);
 
     // Setup Mapper & Actor
-    this->setUpMapper(source->GetOutputPort());
+    this->setUpMapper(source->GetOutputPort(), true);
     this->updateActorTransform();
 }
 
diff --git a/Base/Rendering/RenderDelegate/imstkVTKCubeRenderDelegate.cpp b/Base/Rendering/RenderDelegate/imstkVTKCubeRenderDelegate.cpp
index 3b2565af842fee3397d993fbabe35eda2aa485b4..6d1fbce4679ceca03ceef0ea8f7a6431d69ee7b7 100644
--- a/Base/Rendering/RenderDelegate/imstkVTKCubeRenderDelegate.cpp
+++ b/Base/Rendering/RenderDelegate/imstkVTKCubeRenderDelegate.cpp
@@ -39,7 +39,7 @@ VTKCubeRenderDelegate::VTKCubeRenderDelegate(std::shared_ptr<Cube>cube) :
     source->SetZLength(width);
 
     // Setup Mapper & Actor
-    this->setUpMapper(source->GetOutputPort());
+    this->setUpMapper(source->GetOutputPort(), true);
     this->updateActorTransform();
 }
 
diff --git a/Base/Rendering/RenderDelegate/imstkVTKLineMeshRenderDelegate.cpp b/Base/Rendering/RenderDelegate/imstkVTKLineMeshRenderDelegate.cpp
index 88db79d305f50fa2929bd487c6e52bfc537bce18..c04294f83f49100effdb26ee11cad9ac98b46b9a 100644
--- a/Base/Rendering/RenderDelegate/imstkVTKLineMeshRenderDelegate.cpp
+++ b/Base/Rendering/RenderDelegate/imstkVTKLineMeshRenderDelegate.cpp
@@ -53,7 +53,7 @@ VTKLineMeshRenderDelegate::VTKLineMeshRenderDelegate(std::shared_ptr<LineMesh> l
     lines->SetPoints(points);
 
     // Setup Mapper & Actor
-    this->setUpMapper(lines->GetOutputPort());
+    this->setUpMapper(lines->GetOutputPort(), true);
     this->updateActorTransform();
 }
 
diff --git a/Base/Rendering/RenderDelegate/imstkVTKPlaneRenderDelegate.cpp b/Base/Rendering/RenderDelegate/imstkVTKPlaneRenderDelegate.cpp
index e48d464d4132ce74bd363a249d81be8070f9464c..1c4fa3779c70a90afd37caccc5cb79e6f0d2b219 100644
--- a/Base/Rendering/RenderDelegate/imstkVTKPlaneRenderDelegate.cpp
+++ b/Base/Rendering/RenderDelegate/imstkVTKPlaneRenderDelegate.cpp
@@ -35,7 +35,7 @@ VTKPlaneRenderDelegate::VTKPlaneRenderDelegate(std::shared_ptr<Plane>plane) :
     source->SetNormal(m_geometry->getNormal().data());
 
     // Setup Mapper & Actor
-    this->setUpMapper(source->GetOutputPort());
+    this->setUpMapper(source->GetOutputPort(), true);
     this->updateActorTransform();
 }
 
diff --git a/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.cpp b/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.cpp
index 217eb5c704c0bfcddf41cc1b43557bae47ab219b..cd2f793f47e425ea7aa13f8e8bb7b2545648f724 100644
--- a/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.cpp
+++ b/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.cpp
@@ -42,6 +42,7 @@
 
 #include "vtkOpenGLPolyDataMapper.h"
 #include "vtkOpenGLVertexBufferObject.h"
+#include "vtkPolyDataNormals.h"
 #include "vtkTriangleMeshPointNormals.h"
 #include "vtkTransform.h"
 
@@ -102,18 +103,26 @@ VTKRenderDelegate::make_delegate(std::shared_ptr<Geometry>geom)
 }
 
 void
-VTKRenderDelegate::setUpMapper(vtkAlgorithmOutput *source)
+VTKRenderDelegate::setUpMapper(vtkAlgorithmOutput *source, const bool rigid)
 {
     // Add normals
-    auto normalGen = vtkSmartPointer<vtkTriangleMeshPointNormals>::New();
+    vtkSmartPointer<vtkPolyDataAlgorithm> normalGen;
+    if (rigid)
+    {
+        normalGen = vtkSmartPointer<vtkPolyDataNormals>::New();
+        vtkPolyDataNormals::SafeDownCast(normalGen)->SplittingOff();
+    }
+    else
+    {
+        normalGen = vtkSmartPointer<vtkTriangleMeshPointNormals>::New();
+    }
     normalGen->SetInputConnection(source);
 
     m_mapper->SetInputConnection(normalGen->GetOutputPort());
 
     // Disable auto Shift & Scale which is slow for deformable objects
     // as it needs to compute a bounding box at every frame
-    auto mapper = dynamic_cast<vtkOpenGLPolyDataMapper*>(m_mapper.GetPointer());
-    if(mapper)
+    if(auto mapper = vtkOpenGLPolyDataMapper::SafeDownCast(m_mapper.GetPointer()))
     {
         mapper->SetVBOShiftScaleMethod(vtkOpenGLVertexBufferObject::DISABLE_SHIFT_SCALE);
     }
diff --git a/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.h b/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.h
index 6dd9d33d672136f67142fa7df4b56e49eb80f845..a9a46da3105839a0a08ecb11dc7b6a6105234313 100644
--- a/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.h
+++ b/Base/Rendering/RenderDelegate/imstkVTKRenderDelegate.h
@@ -57,7 +57,7 @@ public:
     ///
     /// \brief
     ///
-    void setUpMapper(vtkAlgorithmOutput *source);
+    void setUpMapper(vtkAlgorithmOutput *source, const bool rigid);
 
     ///
     /// \brief
diff --git a/Base/Rendering/RenderDelegate/imstkVTKSphereRenderDelegate.cpp b/Base/Rendering/RenderDelegate/imstkVTKSphereRenderDelegate.cpp
index f9069429bf6946920edfc302f8438960eac0ce6e..944381e61ae7f54023d2b89391ed3bd1115db38b 100644
--- a/Base/Rendering/RenderDelegate/imstkVTKSphereRenderDelegate.cpp
+++ b/Base/Rendering/RenderDelegate/imstkVTKSphereRenderDelegate.cpp
@@ -37,7 +37,7 @@ VTKSphereRenderDelegate::VTKSphereRenderDelegate(std::shared_ptr<Sphere>sphere)
     source->SetThetaResolution(20);
 
     // Setup Mapper & Actor
-    this->setUpMapper(source->GetOutputPort());
+    this->setUpMapper(source->GetOutputPort(), true);
     this->updateActorTransform();
 }
 
diff --git a/Base/Rendering/RenderDelegate/imstkVTKSurfaceMeshRenderDelegate.cpp b/Base/Rendering/RenderDelegate/imstkVTKSurfaceMeshRenderDelegate.cpp
index 40565d0d8014baadea0d3af6ded497a7a1f23476..83882f3b18583e54bbd80bf8300ac76f16302288 100644
--- a/Base/Rendering/RenderDelegate/imstkVTKSurfaceMeshRenderDelegate.cpp
+++ b/Base/Rendering/RenderDelegate/imstkVTKSurfaceMeshRenderDelegate.cpp
@@ -86,7 +86,7 @@ VTKSurfaceMeshRenderDelegate::VTKSurfaceMeshRenderDelegate(std::shared_ptr<Surfa
     source->SetOutput(polydata);
 
     // Setup Mapper & Actor
-    this->setUpMapper(source->GetOutputPort());
+    this->setUpMapper(source->GetOutputPort(), false);
     this->updateActorTransform();
 
     // Copy textures