diff --git a/Source/Rendering/VTKRenderer/imstkVTKRenderer.cpp b/Source/Rendering/VTKRenderer/imstkVTKRenderer.cpp
index 84ad4d2b49f272d98a52a4469c38d1504320bf0e..ada1a83e0ae3aaa1c7371be210ade24d2a9df50e 100644
--- a/Source/Rendering/VTKRenderer/imstkVTKRenderer.cpp
+++ b/Source/Rendering/VTKRenderer/imstkVTKRenderer.cpp
@@ -396,20 +396,24 @@ VTKRenderer::updateCamera()
     std::shared_ptr<Camera> cam = m_scene->getActiveCamera();
     getVtkRenderer()->SetActiveCamera(m_camera);
 
-    // Update the camera to obtain corrected view/proj matrices
-    cam->update();
+    // As long as we don't have a VR camera apply the camera view
+    if (vtkOpenVRCamera::SafeDownCast(m_camera) == nullptr)
+    {
+        // Update the camera to obtain corrected view/proj matrices
+        cam->update();
 
-    // Get the view matrix
-    const Mat4d& invView = cam->getInvView();
+        // Get the view matrix
+        const Mat4d& invView = cam->getInvView();
 
-    const double eyePos[3]  = { invView(0, 3), invView(1, 3), invView(2, 3) };
-    const double forward[3] = { invView(0, 2), invView(1, 2), invView(2, 2) };
-    const double up[3]      = { invView(0, 1), invView(1, 1), invView(2, 1) };
+        const double eyePos[3] = { invView(0, 3), invView(1, 3), invView(2, 3) };
+        const double forward[3] = { invView(0, 2), invView(1, 2), invView(2, 2) };
+        const double up[3] = { invView(0, 1), invView(1, 1), invView(2, 1) };
 
-    m_camera->SetPosition(eyePos);
-    m_camera->SetFocalPoint(eyePos[0] - forward[0], eyePos[1] - forward[1], eyePos[2] - forward[2]);
-    m_camera->SetViewUp(up[0], up[1], up[2]);
-    m_camera->SetViewAngle(cam->getFieldOfView());
+        m_camera->SetPosition(eyePos);
+        m_camera->SetFocalPoint(eyePos[0] - forward[0], eyePos[1] - forward[1], eyePos[2] - forward[2]);
+        m_camera->SetViewUp(up[0], up[1], up[2]);
+        m_camera->SetViewAngle(cam->getFieldOfView());
+    }
     m_camera->SetClippingRange(cam->getNearZ(), cam->getFarZ());
 
     // Copy the projection back to the camera
diff --git a/Source/SimulationManager/VTKRenderer/imstkVTKOpenVRViewer.cpp b/Source/SimulationManager/VTKRenderer/imstkVTKOpenVRViewer.cpp
index c1b5423ffa8ffd320710c5285deeeff2423b3df9..d9cd53a1eae906e03ed04925ca7e59e45dd56df3 100644
--- a/Source/SimulationManager/VTKRenderer/imstkVTKOpenVRViewer.cpp
+++ b/Source/SimulationManager/VTKRenderer/imstkVTKOpenVRViewer.cpp
@@ -20,6 +20,7 @@
 =========================================================================*/
 
 #include "imstkVTKOpenVRViewer.h"
+#include "imstkCamera.h"
 #include "imstkDeviceControl.h"
 #include "imstkLogger.h"
 #include "imstkOpenVRDeviceClient.h"
@@ -174,11 +175,12 @@ VTKOpenVRViewer::initModule()
     // \todo: Display devices in debug mode
     renWin->Render(); // Must do one render to initialize vtkOpenVRModel's to then hide the devices
 
+    // Actions must be added after initialization of interactor
     vtkInteractorStyleVR* iStyle = vtkInteractorStyleVR::SafeDownCast(m_vtkInteractorStyle.get());
     iStyle->addButtonActions();
     iStyle->addMovementActions();
 
-    // Hide all controllers
+    // Hide all controller models
     for (uint32_t i = 0; i < vr::k_unMaxTrackedDeviceCount; i++)
     {
         vtkVRModel* trackedDeviceModel = renWin->GetTrackedDeviceModel(i);
@@ -200,6 +202,12 @@ VTKOpenVRViewer::updateModule()
         return;
     }
 
+    // For the VR view we can't supply the a camera in the normal sense
+    // we need to pre multiply a "user view"
+    std::shared_ptr<Camera> cam = getActiveScene()->getActiveCamera();
+    const Mat4d& view = cam->getView();
+    setPhysicalToWorldTransform(view);
+
     // Update Camera
     // \todo: No programmatic control over VR camera currently
     //renderer->updateSceneCamera(getActiveScene()->getCamera());