diff --git a/Domains/Microscopy/FindOpenSlide.cmake b/CMake/FindOpenSlide.cmake
similarity index 92%
rename from Domains/Microscopy/FindOpenSlide.cmake
rename to CMake/FindOpenSlide.cmake
index 85538d68f5d73693300d5e230bdd99110739e7fa..85b0c67d1c29904f8ca1848ab0b06b4477ffb8f1 100644
--- a/Domains/Microscopy/FindOpenSlide.cmake
+++ b/CMake/FindOpenSlide.cmake
@@ -26,7 +26,7 @@ mark_as_advanced( OPENSLIDE_LIBRARY )
 # the listed variables are TRUE.
 
 find_package( PackageHandleStandardArgs )
-FIND_PACKAGE_HANDLE_STANDARD_ARGS( OPENSLIDE DEFAULT_MSG OPENSLIDE_LIBRARY OPENSLIDE_INCLUDE_DIR )
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenSlide DEFAULT_MSG OPENSLIDE_LIBRARY OPENSLIDE_INCLUDE_DIR )
 
 if( OPENSLIDE_FOUND )
   set( OPENSLIDE_LIBRARIES ${OPENSLIDE_LIBRARY} )
diff --git a/Domains/Microscopy/CMakeLists.txt b/Domains/Microscopy/CMakeLists.txt
index 799ebb413e0994fd82edde8041f508436f944c13..1365e87572fce1cf6b3d282eff3aa8d1562973e5 100644
--- a/Domains/Microscopy/CMakeLists.txt
+++ b/Domains/Microscopy/CMakeLists.txt
@@ -1,16 +1,10 @@
-# OpenSlide required
-LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
-find_package(OpenSlide REQUIRED)
+set(classes
+  vtkOpenSlideReader)
 
-mark_as_advanced(OPENSLIDE_INCLUDE_DIR OPENSLIDE_LIBRARY)
+vtk_module_add_module(VTK::DomainsMicroscopy
+  CLASSES ${classes})
 
-set(OPENSLIDE_SRCS vtkOpenSlideReader.cxx)
-
-include_directories(${OPENSLIDE_INCLUDE_DIRS})
-
-set(${vtk-module}_SYSTEM_INCLUDE_DIRS
-    ${OPENSLIDE_INCLUDE_DIRS})
-
-vtk_module_library(vtkDomainsMicroscopy ${OPENSLIDE_SRCS})
-
-vtk_module_link_libraries(vtkDomainsMicroscopy LINK_PRIVATE ${OPENSLIDE_LIBRARY})
+vtk_module_find_package(PACKAGE OpenSlide)
+vtk_module_link(VTK::DomainsMicroscopy
+  PUBLIC
+    OpenSlide::OpenSlide)
diff --git a/Domains/Microscopy/Testing/CMakeLists.txt b/Domains/Microscopy/Testing/CMakeLists.txt
index aabac3feeebccac16370d1198c62a60ceab26bad..eff7e11d460c50a8688fc3cec4460214e011f2cb 100644
--- a/Domains/Microscopy/Testing/CMakeLists.txt
+++ b/Domains/Microscopy/Testing/CMakeLists.txt
@@ -1,5 +1,12 @@
+vtk_module_test_data(
+  Data/2LYZ.pdb
+  Data/Microscopy/small2.ndpi)
+
 add_subdirectory(Cxx)
 
 if (VTK_WRAP_PYTHON)
+  vtk_module_test_data(
+    Data/RectGrid2.vtk)
+
   add_subdirectory(Python)
 endif ()
diff --git a/Domains/Microscopy/Testing/Cxx/CMakeLists.txt b/Domains/Microscopy/Testing/Cxx/CMakeLists.txt
index 9c6ec2d63e98d4feee615153cda5c90099d7532e..8f6140f479cfc7dbfbe7689814e72486fb67f15e 100644
--- a/Domains/Microscopy/Testing/Cxx/CMakeLists.txt
+++ b/Domains/Microscopy/Testing/Cxx/CMakeLists.txt
@@ -3,12 +3,12 @@
 
 vtk_add_test_cxx(vtkDomainsMicroscopyCxxTests tests
   TestOpenSlideReader.cxx
-  "DATA{${VTK_TEST_INPUT_DIR}/Microscopy/small2.ndpi}"
+  "DATA{${_vtk_build_TEST_INPUT_DATA_DIRECTORY}/Data/Microscopy/small2.ndpi}"
   )
 
 vtk_add_test_cxx(vtkDomainsMicroscopyCxxTests  tests
     TestOpenSlideReaderPartialTIF,TestOpenSlideReaderPartial.cxx
-  "DATA{${VTK_TEST_INPUT_DIR}/Microscopy/pathology.tif}"
+  "DATA{${_vtk_build_TEST_INPUT_DATA_DIRECTORY}/Data/Microscopy/pathology.tif}"
   )
 
 vtk_test_cxx_executable(vtkDomainsMicroscopyCxxTests tests RENDERING_FACTORY)
diff --git a/Domains/Microscopy/Testing/Python/testOpenSlideReader.py b/Domains/Microscopy/Testing/Python/testOpenSlideReader.py
index 6d74c8a1bd987b3ce560b4eecb08df9da3789b93..8ce6a222956fb06ae2b98e96d272b640588a7e97 100755
--- a/Domains/Microscopy/Testing/Python/testOpenSlideReader.py
+++ b/Domains/Microscopy/Testing/Python/testOpenSlideReader.py
@@ -1,10 +1,11 @@
 #!/usr/bin/env python
 import vtk
+import vtk.test.Testing
 from vtk.util.misc import vtkGetDataRoot
 VTK_DATA_ROOT = vtkGetDataRoot()
 import sys
 
-class TestOpenSlideReader(Testing.vtkTest):
+class TestOpenSlideReader(vtk.test.Testing.vtkTest):
 
     def testCanReadFile(self):
         reader = vtk.vtkOpenSlideReader()
@@ -15,4 +16,4 @@ class TestOpenSlideReader(Testing.vtkTest):
         self.assertEqual(reader.CanReadFile(VTK_DATA_ROOT + "/Data/Microscopy/small2.ndpi"), 2)
 
 if __name__ == "__main__":
-    Testing.main([(TestOpenSlideReader, 'test')])
+    vtk.test.Testing.main([(TestOpenSlideReader, 'test')])
diff --git a/Domains/Microscopy/module.cmake b/Domains/Microscopy/module.cmake
deleted file mode 100644
index 909262bee2f37679a1e5482ebbfe541e4e66ff98..0000000000000000000000000000000000000000
--- a/Domains/Microscopy/module.cmake
+++ /dev/null
@@ -1,15 +0,0 @@
-vtk_module(vtkDomainsMicroscopy
-  DESCRIPTION "Readers and writers supporting whole slide images for microscopy domain"
-  TEST_DEPENDS
-    vtkTestingCore
-    vtkTestingRendering
-    vtkInteractionImage
-    vtkRenderingContextOpenGL2
-  EXCLUDE_FROM_ALL
-  DEPENDS
-    vtkIOImage
-  PRIVATE_DEPENDS
-    vtkCommonCore
-    vtkCommonDataModel
-    vtkCommonExecutionModel
-  )
diff --git a/Domains/Microscopy/vtk.module b/Domains/Microscopy/vtk.module
new file mode 100644
index 0000000000000000000000000000000000000000..d5bbff5c228b653342034152e2f671151dcd8b3e
--- /dev/null
+++ b/Domains/Microscopy/vtk.module
@@ -0,0 +1,17 @@
+NAME
+  VTK::DomainsMicroscopy
+LIBRARY_NAME
+  vtkDomainsMicroscopy
+DESCRIPTION
+  File readers for microscopy file formats
+DEPENDS
+  VTK::IOImage
+PRIVATE_DEPENDS
+  VTK::CommonCore
+  VTK::CommonDataModel
+  VTK::CommonExecutionModel
+TEST_DEPENDS
+  VTK::InteractionImage
+  VTK::RenderingContextOpenGL2
+  VTK::TestingCore
+  VTK::TestingRendering