diff --git a/CMake/External/External_VTK.cmake b/CMake/External/External_VTK.cmake
index b0901ddf59171289adac835b74d21c95e5d7a532..3588461bbd5317c91bdce382525e1a1f0e8de51e 100644
--- a/CMake/External/External_VTK.cmake
+++ b/CMake/External/External_VTK.cmake
@@ -1,7 +1,10 @@
 #-----------------------------------------------------------------------------
 # Dependencies
 #-----------------------------------------------------------------------------
-set(VTK_DEPENDENCIES "OpenVR")
+
+if (${PROJECT_NAME}_USE_RENDERING_VTK)
+  set(VTK_DEPENDENCIES "OpenVR")
+endif()
 
 set(${PROJECT_NAME}_VTK_REPO_SOURCE "9.1" CACHE STRING "Select VTK Source Branch/Tag")
 set(VTK_SOURCES "9.1;master;release;nightly-master" CACHE INTERNAL "List of available VTK branch,tags to get")
@@ -14,6 +17,7 @@ set(VTK_MODULE_SETTINGS
   -DVTK_MODULE_ENABLE_VTK_FiltersGeneral:STRING=YES
   -DVTK_MODULE_ENABLE_VTK_FiltersModeling:STRING=YES
   -DVTK_MODULE_ENABLE_VTK_ImagingGeneral:STRING=YES
+  -DVTK_MODULE_ENABLE_VTK_ImagingMath:STRING=YES
   -DVTK_MODULE_ENABLE_VTK_ImagingStencil:STRING=YES
   -DVTK_MODULE_ENABLE_VTK_IOExport:STRING=YES
   -DVTK_MODULE_ENABLE_VTK_IOGeometry:STRING=YES
@@ -25,21 +29,25 @@ set(VTK_MODULE_SETTINGS
   -DVTK_MODULE_ENABLE_VTK_IOXML:STRING=YES
   -DVTK_MODULE_ENABLE_VTK_InteractionStyle:STRING=YES
   -DVTK_MODULE_ENABLE_VTK_InteractionWidgets:STRING=YES
-  -DVTK_MODULE_ENABLE_VTK_RenderingAnnotation:STRING=YES
-  -DVTK_MODULE_ENABLE_VTK_RenderingContext2D:STRING=YES
-  -DVTK_MODULE_ENABLE_VTK_RenderingContextOpenGL2:STRING=YES
-  -DVTK_MODULE_ENABLE_VTK_RenderingExternal:STRING=YES
-  -DVTK_MODULE_ENABLE_VTK_RenderingOpenGL2:STRING=YES
-  -DVTK_MODULE_ENABLE_VTK_RenderingOpenVR:STRING=YES
-  -DVTK_MODULE_ENABLE_VTK_RenderingVolumeOpenGL2:STRING=YES
-  -DVTK_MODULE_ENABLE_VTK_ViewsContext2D:STRING=YES
   -DVTK_ENABLE_WRAPPING:STRING=OFF
-  -DVTK_MODULE_ENABLE_VTK_glew:STRING=YES
   -DVTK_BUILD_EXAMPLES:STRING=DONT_WANT
   -DVTK_BUILD_TESTING:STRING=OFF
   -DVTK_GROUP_ENABLE_StandAlone:STRING=DONT_WANT
   -DVTK_GROUP_ENABLE_Rendering:STRING=DONT_WANT
   )
+if (${PROJECT_NAME}_USE_RENDERING_VTK)
+  list(APPEND VTK_MODULE_SETTINGS
+    -DVTK_MODULE_ENABLE_VTK_glew:STRING=YES
+    -DVTK_MODULE_ENABLE_VTK_RenderingAnnotation:STRING=YES
+    -DVTK_MODULE_ENABLE_VTK_RenderingContext2D:STRING=YES
+    -DVTK_MODULE_ENABLE_VTK_RenderingContextOpenGL2:STRING=YES
+    -DVTK_MODULE_ENABLE_VTK_RenderingExternal:STRING=YES
+    -DVTK_MODULE_ENABLE_VTK_RenderingOpenGL2:STRING=YES
+    -DVTK_MODULE_ENABLE_VTK_RenderingOpenVR:STRING=YES
+    -DVTK_MODULE_ENABLE_VTK_RenderingVolumeOpenGL2:STRING=YES
+    -DVTK_MODULE_ENABLE_VTK_ViewsContext2D:STRING=YES
+    )
+endif()
 if (${PROJECT_NAME}_USE_VTK_OSMESA)
   list(APPEND VTK_MODULE_SETTINGS 
     -DVTK_DEFAULT_RENDER_WINDOW_OFFSCREEN=1
diff --git a/CMake/iMSTKConfig.cmake.in b/CMake/iMSTKConfig.cmake.in
index 26102372d28d4c0cae303d9fdc3e50f87119bae3..cc49f82c04441707731d73160c697ed17dd68cbd 100644
--- a/CMake/iMSTKConfig.cmake.in
+++ b/CMake/iMSTKConfig.cmake.in
@@ -15,6 +15,8 @@ set(iMSTK_DATA_DIR ${PACKAGE_PREFIX_DIR}/data)
 set(iMSTK_AUDIO_ENABLED @iMSTK_AUDIO_ENABLED@)
 set(iMSTK_USE_OpenHaptics @iMSTK_USE_OpenHaptics@)
 set(iMSTK_USE_VTK_OSMESA @iMSTK_USE_VTK_OSMESA@)
+set(iMSTK_USE_RENDERING_VTK @iMSTK_USE_RENDERING_VTK@)
+set(iMSTK_BUILD_BENCHMARK @iMSTK_BUILD_BENCHMARK@)
 set(iMSTK_BUILD_TESTING @iMSTK_BUILD_TESTING@)
 set(iMSTK_BUILD_TESTING @iMSTK_BUILD_TESTING@)
 set(iMSTK_BUILD_VISUAL_TESTING @iMSTK_BUILD_VISUAL_TESTING@)
@@ -51,18 +53,20 @@ if(iMSTK_BUILD_TESTING OR iMSTK_BUILD_VISUAL_TESTING)
 endif()
 
 # Google Benchmark
-set(iMSTK_BUILD_BENCHMARK @iMSTK_BUILD_BENCHMARK@)
 if (iMSTK_BUILD_BENCHMARK)
   find_package( benchmark REQUIRED )
 endif()
 
+# Libusb
 if (iMSTK_USE_VRPN)
-  # Libusb
+ 
   find_dependency( Libusb )
 endif()
 
 # OpenVR
-find_dependency( OpenVR )
+if (iMSTK_USE_RENDERING_VTK)
+  find_dependency( OpenVR )
+endif()
 
 # SFML
 if(iMSTK_AUDIO_ENABLED)
@@ -89,8 +93,10 @@ endif()
 
 # VTK
 find_dependency(VTK CONFIG)
-find_package(vtkRenderingOpenVR QUIET)
-find_package(vtkRenderingExternal QUIET)
+if (iMSTK_USE_RENDERING_VTK)
+  find_package(vtkRenderingOpenVR QUIET)
+  find_package(vtkRenderingExternal QUIET)
+endif()
 find_dependency(VTK COMPONENTS ${iMSTK_VTK_DEPENDENCIES})
 
 if(iMSTK_USE_VTK_OSMESA)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9a58152406f9b2eeec78e8666df7d750908414b1..56963182ad52729281c4950d974b726b8785e62a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -163,10 +163,17 @@ endif()
 option(${PROJECT_NAME}_USE_VRPN "Build with VRPN support" OFF)
 mark_as_superbuild(${PROJECT_NAME}_USE_VRPN:BOOL)
 
-option(iMSTK_USE_OpenHaptics "Use OpenHaptic Support." OFF)
-mark_as_superbuild(iMSTK_USE_OpenHaptics:BOOL)
-if(NOT WIN32 AND iMSTK_USE_OpenHaptics)
-  message(FATAL_ERROR "Setting iMSTK_USE_OpenHaptics to ON is only supported on Windows")
+option(${PROJECT_NAME}_USE_RENDERING_VTK "Build with/out VTK rendering support" ON)
+mark_as_superbuild(${PROJECT_NAME}_USE_RENDERING_VTK:BOOL)
+
+if (${PROJECT_NAME}_USE_RENDERING_VTK AND ${PROJECT_NAME}_USE_VTK_OSMESA)
+  message(FATAL_ERROR "Setting ${PROJECT_NAME}_USE_VTK_OSMESA ON is only supported when ${PROJECT_NAME}_USE_RENDERING_VTK is ON")
+endif()
+
+option(${PROJECT_NAME}_USE_OpenHaptics "Use OpenHaptic Support." OFF)
+mark_as_superbuild(${PROJECT_NAME}_USE_OpenHaptics:BOOL)
+if(NOT WIN32 AND ${PROJECT_NAME}_USE_OpenHaptics)
+  message(FATAL_ERROR "Setting ${PROJECT_NAME}_USE_OpenHaptics to ON is only supported on Windows")
 endif()
 
 #-----------------------------------------------------------------------------
@@ -206,7 +213,9 @@ if(${PROJECT_NAME}_SUPERBUILD)
   imstk_define_dependency(Assimp)
   imstk_define_dependency(Eigen3)
   imstk_define_dependency(g3log)
-  imstk_define_dependency(OpenVR)
+  if (${PROJECT_NAME}_USE_RENDERING_VTK)
+    imstk_define_dependency(OpenVR)
+  endif()
   imstk_define_dependency(TBB)
   imstk_define_dependency(VegaFEM)
   imstk_define_dependency(VTK)
@@ -291,8 +300,10 @@ if (${PROJECT_NAME}_USE_VRPN)
   find_package( Libusb REQUIRED)
 endif()
 
-# OpenVR
-find_package( OpenVR REQUIRED )
+if (${PROJECT_NAME}_USE_RENDERING_VTK)
+  # OpenVR
+  find_package( OpenVR REQUIRED )
+endif()
 
 # SFML
 if(NOT iMSTK_AUDIO_ENABLED)
@@ -329,8 +340,10 @@ find_package(VTK REQUIRED CONFIG)
 # modules are linked via `VTK::CommonCore`
 # vtk_module_autoinit is needed
 
-find_package(vtkRenderingOpenVR QUIET)
-find_package(vtkRenderingExternal QUIET)
+if (${PROJECT_NAME}_USE_RENDERING_VTK)
+  find_package(vtkRenderingOpenVR QUIET)
+  find_package(vtkRenderingExternal QUIET)
+endif()
 
 list(APPEND iMSTK_VTK_DEPENDENCIES
   ChartsCore
@@ -349,17 +362,20 @@ list(APPEND iMSTK_VTK_DEPENDENCIES
   ImagingCore
   ImagingGeneral
   ImagingStencil
-  InteractionStyle
-  RenderingAnnotation
-  RenderingContext2D
-  RenderingContextOpenGL2
-  RenderingCore
-  RenderingExternal
-  RenderingOpenGL2
-  RenderingOpenVR
-  RenderingVolume
-  RenderingVolumeOpenGL2
-  ViewsContext2D)
+  InteractionStyle)
+if (${PROJECT_NAME}_USE_RENDERING_VTK)
+  list(APPEND iMSTK_VTK_DEPENDENCIES
+    RenderingAnnotation
+    RenderingContext2D
+    RenderingContextOpenGL2
+    RenderingCore
+    RenderingExternal
+    RenderingOpenGL2
+    RenderingOpenVR
+    RenderingVolume
+    RenderingVolumeOpenGL2
+    ViewsContext2D)
+endif()
 find_package(VTK COMPONENTS ${iMSTK_VTK_DEPENDENCIES} REQUIRED)
 if(${PROJECT_NAME}_USE_VTK_OSMESA)
   add_definitions(-DiMSTK_USE_VTK_OSMESA)
@@ -438,7 +454,9 @@ add_subdirectory(Source/DataStructures)
 add_subdirectory(Source/Constraint)
 add_subdirectory(Source/Devices)
 add_subdirectory(Source/RenderingCore)
-add_subdirectory(Source/RenderingVTK)
+if (${PROJECT_NAME}_USE_RENDERING_VTK)
+  add_subdirectory(Source/RenderingVTK)
+endif()
 add_subdirectory(Source/Solvers)
 add_subdirectory(Source/DynamicalModels)
 add_subdirectory(Source/SceneEntities)
@@ -449,7 +467,9 @@ add_subdirectory(Source/CollisionHandling)
 add_subdirectory(Source/Scene)
 add_subdirectory(Source/SimulationManager)
 add_subdirectory(Source/ViewerCore)
-add_subdirectory(Source/ViewerVTK)
+if (${PROJECT_NAME}_USE_RENDERING_VTK)
+  add_subdirectory(Source/ViewerVTK)
+endif()
 add_subdirectory(Source/Testing)
 add_subdirectory(Source/Filtering)
 add_subdirectory(Source/FilteringCore)
@@ -553,20 +573,24 @@ if(WIN32 AND ${PROJECT_NAME}_USE_VRPN)
   set(CONFIG_CODE "${CONFIG_CODE}set(Libusb_LIB_DIR \"${Libusb_LIB_DIR}\")\n")
 endif()
 
-set(CONFIG_CODE "${CONFIG_CODE}# Add variables to CACHE to workaround issue related to use of\n")
-set(CONFIG_CODE "${CONFIG_CODE}# mark_as_advanced command in FindOpenVR and described in CMP0102\n")
-set(CONFIG_CODE "${CONFIG_CODE}# See https://cmake.org/cmake/help/latest/policy/CMP0102.html\n")
-set(CONFIG_CODE "${CONFIG_CODE}set(OpenVR_INCLUDE_DIR \"${OpenVR_INCLUDE_DIR}\" CACHE PATH \"\")\n")
-set(CONFIG_CODE "${CONFIG_CODE}set(OpenVR_LIBRARY \"${OpenVR_LIBRARY}\" CACHE FILEPATH \"\")\n")
-set(CONFIG_CODE "${CONFIG_CODE}set(OpenVR_ROOT_DIR \"${OpenVR_ROOT_DIR}\")\n")
-set(CONFIG_CODE "${CONFIG_CODE}set(OpenVR_LIB_DIR \"${OpenVR_LIB_DIR}\")\n")
+if (${PROJECT_NAME}_USE_RENDERING_VTK)
+  set(CONFIG_CODE "${CONFIG_CODE}# Add variables to CACHE to workaround issue related to use of\n")
+  set(CONFIG_CODE "${CONFIG_CODE}# mark_as_advanced command in FindOpenVR and described in CMP0102\n")
+  set(CONFIG_CODE "${CONFIG_CODE}# See https://cmake.org/cmake/help/latest/policy/CMP0102.html\n")
+  set(CONFIG_CODE "${CONFIG_CODE}set(OpenVR_INCLUDE_DIR \"${OpenVR_INCLUDE_DIR}\" CACHE PATH \"\")\n")
+  set(CONFIG_CODE "${CONFIG_CODE}set(OpenVR_LIBRARY \"${OpenVR_LIBRARY}\" CACHE FILEPATH \"\")\n")
+  set(CONFIG_CODE "${CONFIG_CODE}set(OpenVR_ROOT_DIR \"${OpenVR_ROOT_DIR}\")\n")
+  set(CONFIG_CODE "${CONFIG_CODE}set(OpenVR_LIB_DIR \"${OpenVR_LIB_DIR}\")\n")
+endif()
 
 set(CONFIG_CODE "${CONFIG_CODE}set(TBB_DIR \"${TBB_DIR}\")\n")
 
 set(CONFIG_CODE "${CONFIG_CODE}set(VegaFEM_DIR \"${VegaFEM_DIR}\")\n")
 set(CONFIG_CODE "${CONFIG_CODE}set(VTK_DIR \"${VTK_DIR}\")\n")
-set(CONFIG_CODE "${CONFIG_CODE}set(vtkRenderingOpenVR_DIR \"${vtkRenderingOpenVR_DIR}\")\n")
-set(CONFIG_CODE "${CONFIG_CODE}set(vtkRenderingExternal_DIR \"${vtkRenderingExternal_DIR}\")\n")
+if (${PROJECT_NAME}_USE_RENDERING_VTK)
+  set(CONFIG_CODE "${CONFIG_CODE}set(vtkRenderingOpenVR_DIR \"${vtkRenderingOpenVR_DIR}\")\n")
+  set(CONFIG_CODE "${CONFIG_CODE}set(vtkRenderingExternal_DIR \"${vtkRenderingExternal_DIR}\")\n")
+endif()
 
 set(CONFIG_CODE "${CONFIG_CODE}##################################################")
 set(build_config ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake)
@@ -595,12 +619,14 @@ set(CONFIG_CODE "${CONFIG_CODE}set(TBB_DIR \"${TBB_DIR}\")\n")
 set(CONFIG_CODE "${CONFIG_CODE}set(VegaFEM_DIR \"${VegaFEM_DIR}\")\n")
 set(CONFIG_CODE "${CONFIG_CODE}set(VTK_DIR \"${VTK_DIR}\")\n")
 set(CONFIG_CODE "${CONFIG_CODE}set(benchmark_DIR \"${benchmark_DIR}\")\n")
-set(CONFIG_CODE "${CONFIG_CODE}# Add variables to CACHE to workaround issue related to use of\n")
-set(CONFIG_CODE "${CONFIG_CODE}# mark_as_advanced command in FindOpenVR and described in CMP0102\n")
-set(CONFIG_CODE "${CONFIG_CODE}# See https://cmake.org/cmake/help/latest/policy/CMP0102.html\n")
-set(CONFIG_CODE "${CONFIG_CODE}set(OpenVR_INCLUDE_DIR \"${OpenVR_INCLUDE_DIR}\" CACHE PATH \"\")\n")
-set(CONFIG_CODE "${CONFIG_CODE}set(OpenVR_LIBRARY \"${OpenVR_LIBRARY}\" CACHE FILEPATH \"\")\n")
-set(CONFIG_CODE "${CONFIG_CODE}##################################################")
+if (${PROJECT_NAME}_USE_RENDERING_VTK)
+  set(CONFIG_CODE "${CONFIG_CODE}# Add variables to CACHE to workaround issue related to use of\n")
+  set(CONFIG_CODE "${CONFIG_CODE}# mark_as_advanced command in FindOpenVR and described in CMP0102\n")
+  set(CONFIG_CODE "${CONFIG_CODE}# See https://cmake.org/cmake/help/latest/policy/CMP0102.html\n")
+  set(CONFIG_CODE "${CONFIG_CODE}set(OpenVR_INCLUDE_DIR \"${OpenVR_INCLUDE_DIR}\" CACHE PATH \"\")\n")
+  set(CONFIG_CODE "${CONFIG_CODE}set(OpenVR_LIBRARY \"${OpenVR_LIBRARY}\" CACHE FILEPATH \"\")\n")
+  set(CONFIG_CODE "${CONFIG_CODE}##################################################")
+endif()
 
 set(install_config ${PROJECT_BINARY_DIR}/CMakeFiles/${PROJECT_NAME}Config.cmake)
 configure_package_config_file(
diff --git a/Source/SimulationManager/Testing/CMakeLists.txt b/Source/SimulationManager/Testing/CMakeLists.txt
index 40f19122f0c5af907edda27909489c93556d8217..a044302419276f07e070231a5f36219872f66e48 100644
--- a/Source/SimulationManager/Testing/CMakeLists.txt
+++ b/Source/SimulationManager/Testing/CMakeLists.txt
@@ -1,4 +1,6 @@
 include(imstkAddTest)
-imstk_add_test( SimulationManager )
-# Note: Links to ViewerVTK for rendering support in tests
-target_link_libraries(SimulationManagerTests SimulationManager ViewerVTK)
\ No newline at end of file
+if (iMSTK_USE_RENDERING_VTK)
+  imstk_add_test( SimulationManager )
+  # Note: Links to ViewerVTK for rendering support in tests
+  target_link_libraries(SimulationManagerTests SimulationManager ViewerVTK)
+endif()
\ No newline at end of file