diff --git a/.cmake-format.yaml b/.cmake-format.yaml
index 52d892d02be32f96be80cdc491d9880a89a23159..04c795a59f8e202e7fabd0b573e81beb4603715d 100644
--- a/.cmake-format.yaml
+++ b/.cmake-format.yaml
@@ -57,28 +57,6 @@ parse:
         RUNTIME: 1
         WRAPPER: +
 
-    meshtest:
-      pargs:
-        nargs: "*"
-        flags:
-          - NONE
-      spelling: MeshTest
-      kwargs:
-        EXECUTABLE: 1
-        PATH: 1
-        NAME: 1
-        WRAPPER: 1
-        RUNTIME: 1
-        WORKING_DIRECTORY: 1
-        EXECUTABLE_ARGS: +
-        DATA: +
-        DIFF_DATA:
-          pargs:
-            tags:
-              - cmdline
-        WRAPPER_ARGS: +
-        REQUIREMENTS: +
-
     cpmaddpackage:
       pargs:
         nargs: "*"
diff --git a/scripts/cmake/test/AddTest.cmake b/scripts/cmake/test/AddTest.cmake
index 6d177aa70253eba93fef4662d8eac95ba97ff4e5..b7c6515136c42f4ba12385bd826489e1bf0544b1 100644
--- a/scripts/cmake/test/AddTest.cmake
+++ b/scripts/cmake/test/AddTest.cmake
@@ -12,7 +12,7 @@
 #   EXECUTABLE_ARGS <arguments>
 #   WRAPPER <time|mpirun> # optional
 #   WRAPPER_ARGS <arguments> # optional
-#   TESTER <diff|vtkdiff|gmldiff|memcheck> # optional
+#   TESTER <diff|vtkdiff|vtkdiff-mesh|gmldiff|memcheck> # optional
 #   TESTER_ARGS <argument> # optional
 #   REQUIREMENTS # optional simple boolean expression which has to be true to
 #                  enable the test, e.g.
@@ -134,8 +134,7 @@ function(AddTest)
         endforeach()
     endif()
 
-    # --- Implement wrappers ---
-    # check if exe is part of build
+    # check requirements, disable if not met
     if(NOT TARGET ${AddTest_EXECUTABLE})
         set(DISABLED_TESTS_LOG
             "${DISABLED_TESTS_LOG}\nTest exe ${AddTest_EXECUTABLE} not built! Disabling test ${AddTest_NAME}."
@@ -143,7 +142,6 @@ function(AddTest)
         )
         return()
     endif()
-    # check requirements, disable if not met
     if(${AddTest_REQUIREMENTS})
         message(DEBUG "Enabling test ${AddTest_NAME}.")
     else()
@@ -154,6 +152,7 @@ function(AddTest)
         return()
     endif()
 
+    # --- Implement wrappers ---
     if(AddTest_WRAPPER STREQUAL "time")
         if(TIME_TOOL_PATH)
             set(WRAPPER_COMMAND time)
@@ -192,6 +191,9 @@ function(AddTest)
     if(AddTest_TESTER STREQUAL "vtkdiff" AND NOT TARGET vtkdiff)
         return()
     endif()
+    if(AddTest_TESTER STREQUAL "vtkdiff-mesh" AND NOT TARGET vtkdiff)
+        return()
+    endif()
     if(AddTest_TESTER STREQUAL "xdmfdiff" AND NOT TARGET xdmfdiff)
         return()
     endif()
@@ -215,7 +217,7 @@ function(AddTest)
         endif()
     endif()
 
-    if((AddTest_TESTER STREQUAL "diff" OR AddTest_TESTER STREQUAL "vtkdiff"
+    if((AddTest_TESTER STREQUAL "diff" OR AddTest_TESTER MATCHES "vtkdiff"
         OR AddTest_TESTER STREQUAL "xdmfdiff") AND NOT AddTest_DIFF_DATA
     )
         message(FATAL_ERROR "AddTest(): ${AddTest_NAME} - no DIFF_DATA given!")
@@ -224,7 +226,7 @@ function(AddTest)
     if(AddTest_TESTER STREQUAL "diff")
         set(SELECTED_DIFF_TOOL_PATH ${DIFF_TOOL_PATH})
         set(TESTER_ARGS "-sbB")
-    elseif(AddTest_TESTER STREQUAL "vtkdiff")
+    elseif(AddTest_TESTER MATCHES "vtkdiff")
         set(SELECTED_DIFF_TOOL_PATH $<TARGET_FILE:vtkdiff>)
     elseif(AddTest_TESTER STREQUAL "xdmfdiff")
         set(SELECTED_DIFF_TOOL_PATH $<TARGET_FILE:xdmfdiff>)
@@ -331,6 +333,34 @@ Use six arguments version of AddTest with absolute and relative tolerances"
                     "For vtkdiff tester the number of diff data arguments must be a multiple of six."
             )
         endif()
+    elseif(AddTest_TESTER STREQUAL "vtkdiff-mesh")
+        list(LENGTH AddTest_DIFF_DATA DiffDataLength)
+        math(EXPR DiffDataLengthMod3 "${DiffDataLength} % 3")
+        if(${DiffDataLengthMod3} EQUAL 0)
+            math(EXPR DiffDataLastIndex "${DiffDataLength}-1")
+            foreach(DiffDataIndex RANGE 0 ${DiffDataLastIndex} 4)
+                list(GET AddTest_DIFF_DATA "${DiffDataIndex}"
+                     REFERENCE_VTK_FILE
+                )
+                math(EXPR DiffDataAuxIndex "${DiffDataIndex}+1")
+                list(GET AddTest_DIFF_DATA "${DiffDataAuxIndex}" VTK_FILE)
+                math(EXPR DiffDataAuxIndex "${DiffDataIndex}+2")
+                list(GET AddTest_DIFF_DATA "${DiffDataAuxIndex}" ABS_TOLERANCE)
+
+                list(
+                    APPEND
+                    TESTER_COMMAND
+                    "${SELECTED_DIFF_TOOL_PATH} -m \
+                ${AddTest_SOURCE_PATH}/${REFERENCE_VTK_FILE} \
+                ${AddTest_BINARY_PATH}/${VTK_FILE} \
+                --abs ${ABS_TOLERANCE}"
+                )
+            endforeach()
+        else()
+            message(FATAL_ERROR "The number of diff data arguments must be a
+            multiple of three: expected.vtu output.vtu absolute_tolerance."
+            )
+        endif()
     elseif(AddTest_TESTER STREQUAL "gmldiff")
         list(LENGTH AddTest_DIFF_DATA DiffDataLength)
         math(EXPR DiffDataLastIndex "${DiffDataLength}-1")
@@ -423,7 +453,7 @@ Use six arguments version of AddTest with absolute and relative tolerances"
         if(NOT (TEST ${AddTest_DEPENDS} OR TARGET ${AddTest_DEPENDS}))
             message(
                 FATAL_ERROR
-                    "AddTest ${AddTest_Name}: dependency ${AddTest_DEPENDS} does not exist!"
+                    "AddTest ${TEST_NAME}: dependency ${AddTest_DEPENDS} does not exist!"
             )
         endif()
         set_tests_properties(${TEST_NAME} PROPERTIES DEPENDS ${AddTest_DEPENDS})
diff --git a/scripts/cmake/test/MeshTest.cmake b/scripts/cmake/test/MeshTest.cmake
deleted file mode 100644
index 1dc89efcc8ab9f80dc8d5596ce4aa23d82530c81..0000000000000000000000000000000000000000
--- a/scripts/cmake/test/MeshTest.cmake
+++ /dev/null
@@ -1,219 +0,0 @@
-#
-# MeshTest
-# -------
-#
-# ~~~
-# MeshTest(
-#   NAME <name of the the test>
-#   PATH <working directory> # relative to SourceDir/Tests/Data
-#   EXECUTABLE <executable target> # optional, defaults to ogs
-#   EXECUTABLE_ARGS <arguments>
-#   WRAPPER <time|mpirun> # optional
-#   WRAPPER_ARGS <arguments> # optional
-#   REQUIREMENTS # optional simple boolean expression which has to be true to
-#                  enable the test, e.g.
-#                  OGS_USE_PETSC AND (FOO OR BAR)
-#   RUNTIME <in seconds> # optional for optimizing ctest duration
-#                          values should be taken from envinf1 serial job
-# )
-# ~~~
-# cmake-lint: disable=C0103,R0912,R0915
-function(MeshTest)
-    if(NOT OGS_BUILD_TESTING)
-        return()
-    endif()
-    # parse arguments
-    set(options NONE)
-    set(oneValueArgs EXECUTABLE PATH NAME WRAPPER RUNTIME WORKING_DIRECTORY)
-    set(multiValueArgs EXECUTABLE_ARGS DATA DIFF_DATA WRAPPER_ARGS REQUIREMENTS)
-    cmake_parse_arguments(
-        MeshTest "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}
-    )
-
-    set(MeshTest_SOURCE_PATH "${Data_SOURCE_DIR}/${MeshTest_PATH}")
-    set(MeshTest_BINARY_PATH "${Data_BINARY_DIR}/${MeshTest_PATH}")
-    file(MAKE_DIRECTORY ${MeshTest_BINARY_PATH})
-    file(TO_NATIVE_PATH "${MeshTest_BINARY_PATH}" MeshTest_BINARY_PATH_NATIVE)
-    set(MeshTest_STDOUT_FILE_PATH
-        "${MeshTest_BINARY_PATH}/${MeshTest_NAME}_stdout.log"
-    )
-
-    # set defaults
-    if(NOT DEFINED MeshTest_REQUIREMENTS)
-        set(MeshTest_REQUIREMENTS TRUE)
-    endif()
-    set(timeout ${ogs.ctest.large_runtime})
-    if(DEFINED MeshTest_RUNTIME)
-        math(EXPR timeout "${MeshTest_RUNTIME} * 3")
-    else()
-        set(MeshTest_RUNTIME 1)
-    endif()
-    if(NOT DEFINED MeshTest_WORKING_DIRECTORY)
-        set(MeshTest_WORKING_DIRECTORY ${MeshTest_BINARY_PATH})
-    endif()
-
-    if(DEFINED OGS_EXCLUDE_CTESTS)
-        foreach(regexp ${OGS_EXCLUDE_CTESTS})
-            if("${MeshTest_NAME}" MATCHES "${regexp}")
-                message(
-                    STATUS "Disabled by OGS_EXCLUDE_CTESTS: ${MeshTest_NAME}"
-                )
-                return()
-            endif()
-        endforeach()
-    endif()
-
-    # --- Implement wrappers ---
-    # check requirements, disable if not met
-    if(${MeshTest_REQUIREMENTS})
-        # message(STATUS "Enabling test ${MeshTest_NAME}.")
-    else()
-        set(DISABLED_TESTS_LOG
-            "${DISABLED_TESTS_LOG}\nRequirement ${MeshTest_REQUIREMENTS} not met! Disabling test ${MeshTest_NAME}."
-            CACHE INTERNAL ""
-        )
-        return()
-    endif()
-
-    if(MeshTest_WRAPPER STREQUAL "time")
-        if(TIME_TOOL_PATH)
-            set(WRAPPER_COMMAND time)
-        else()
-            set(DISABLED_TESTS_LOG
-                "${DISABLED_TESTS_LOG}\nDisabling time wrapper for ${MeshTest_NAME} as time exe was not found!"
-                CACHE INTERNAL ""
-            )
-            set(MeshTest_WRAPPER_ARGS "")
-        endif()
-    elseif(MeshTest_WRAPPER STREQUAL "mpirun")
-        if(MPIRUN_TOOL_PATH)
-            set(WRAPPER_COMMAND ${MPIRUN_TOOL_PATH})
-        else()
-            message(
-                STATUS
-                    "ERROR: mpirun was not found but is required for ${MeshTest_NAME}!"
-            )
-            return()
-        endif()
-    endif()
-
-    # --- Implement testers ---
-    if(NOT MeshTest_DIFF_DATA)
-        message(
-            FATAL_ERROR "MeshTest(): ${MeshTest_NAME} - no DIFF_DATA given!"
-        )
-    endif()
-
-    string(LENGTH "${MeshTest_DIFF_DATA}" DIFF_DATA_LENGTH)
-    if(${DIFF_DATA_LENGTH} GREATER 7500)
-        message(
-            FATAL_ERROR
-                "${MeshTest_NAME}: DIFF_DATA to long! Consider using regex-syntax: TODO"
-        )
-    endif()
-
-    set(SELECTED_DIFF_TOOL_PATH $<TARGET_FILE:vtkdiff>)
-
-    list(LENGTH MeshTest_DIFF_DATA DiffDataLength)
-    math(EXPR DiffDataLengthMod3 "${DiffDataLength} % 3")
-    if(${DiffDataLengthMod3} EQUAL 0)
-        math(EXPR DiffDataLastIndex "${DiffDataLength}-1")
-        foreach(DiffDataIndex RANGE 0 ${DiffDataLastIndex} 4)
-            list(GET MeshTest_DIFF_DATA "${DiffDataIndex}" REFERENCE_VTK_FILE)
-            math(EXPR DiffDataAuxIndex "${DiffDataIndex}+1")
-            list(GET MeshTest_DIFF_DATA "${DiffDataAuxIndex}" VTK_FILE)
-            math(EXPR DiffDataAuxIndex "${DiffDataIndex}+2")
-            list(GET MeshTest_DIFF_DATA "${DiffDataAuxIndex}" ABS_TOLERANCE)
-
-            list(
-                APPEND
-                TESTER_COMMAND
-                "${SELECTED_DIFF_TOOL_PATH} -m \
-            ${MeshTest_SOURCE_PATH}/${REFERENCE_VTK_FILE} \
-            ${MeshTest_BINARY_PATH}/${VTK_FILE} \
-            --abs ${ABS_TOLERANCE}"
-            )
-        endforeach()
-    else()
-        message(FATAL_ERROR "The number of diff data arguments must be a
-        multiple of three: expected.vtu output.vtu absolute_tolerance."
-        )
-    endif()
-
-    # -----------
-    if(TARGET ${MeshTest_EXECUTABLE})
-        set(MeshTest_EXECUTABLE_PARSED $<TARGET_FILE:${MeshTest_EXECUTABLE}>)
-    else()
-        set(MeshTest_EXECUTABLE_PARSED ${MeshTest_EXECUTABLE})
-    endif()
-
-    set(FILES_TO_DELETE "")
-    list(APPEND FILES_TO_DELETE "${MeshTest_STDOUT_FILE_PATH}")
-    foreach(ITEM ${MeshTest_DIFF_DATA})
-        if(ITEM MATCHES "^.*\.(vtu|vtk)$")
-            list(APPEND FILES_TO_DELETE "${ITEM}")
-        endif()
-    endforeach()
-
-    # Run the wrapper
-    if(DEFINED MeshTest_WRAPPER)
-        set(MeshTest_WRAPPER_STRING "-${MeshTest_WRAPPER}")
-    endif()
-    set(TEST_NAME
-        "${MeshTest_EXECUTABLE}-${MeshTest_NAME}${MeshTest_WRAPPER_STRING}"
-    )
-    add_test(
-        NAME ${TEST_NAME}
-        COMMAND
-            ${CMAKE_COMMAND} -DEXECUTABLE=${MeshTest_EXECUTABLE_PARSED}
-            "-DEXECUTABLE_ARGS=${MeshTest_EXECUTABLE_ARGS}" # Quoted because
-                                                            # passed as list see
-                                                            # https://stackoverflow.com/a/33248574/80480
-            -DBINARY_PATH=${MeshTest_BINARY_PATH}
-            -DWRAPPER_COMMAND=${WRAPPER_COMMAND}
-            "-DWRAPPER_ARGS=${MeshTest_WRAPPER_ARGS}"
-            "-DFILES_TO_DELETE=${FILES_TO_DELETE}"
-            -DSTDOUT_FILE_PATH=${MeshTest_STDOUT_FILE_PATH}
-            -DWORKING_DIRECTORY=${MeshTest_WORKING_DIRECTORY}
-            -DLOG_FILE=${PROJECT_BINARY_DIR}/logs/${TEST_NAME}.log -P
-            ${PROJECT_SOURCE_DIR}/scripts/cmake/test/AddTestWrapper.cmake
-    )
-    current_dir_as_list(ProcessLib labels)
-    if(${MeshTest_RUNTIME} LESS_EQUAL ${ogs.ctest.large_runtime})
-        list(APPEND labels default)
-    else()
-        list(APPEND labels large)
-    endif()
-    set_tests_properties(
-        ${TEST_NAME} PROPERTIES COST ${MeshTest_RUNTIME} LABELS
-                                "meshtest;${labels}"
-    )
-
-    if(TARGET ${MeshTest_EXECUTABLE})
-        add_dependencies(ctest ${MeshTest_EXECUTABLE})
-        add_dependencies(ctest-large ${MeshTest_EXECUTABLE})
-    endif()
-
-    # Run the tester
-    set(MeshTest_TESTER "vtkdiff")
-    set(TESTER_NAME "${TEST_NAME}-${MeshTest_TESTER}")
-    add_test(
-        NAME ${TESTER_NAME}
-        COMMAND
-            ${CMAKE_COMMAND} -DSOURCE_PATH=${MeshTest_SOURCE_PATH}
-            -DBINARY_PATH=${${MeshTest_BINARY_PATH}}
-            -DSELECTED_DIFF_TOOL_PATH=${SELECTED_DIFF_TOOL_PATH}
-            "-DTESTER_COMMAND=${TESTER_COMMAND}"
-            -DBINARY_PATH=${MeshTest_BINARY_PATH}
-            -DLOG_FILE_BASE=${PROJECT_BINARY_DIR}/logs/${TESTER_NAME}
-            -DGLOB_MODE=${GLOB_MODE} -P
-            ${PROJECT_SOURCE_DIR}/scripts/cmake/test/AddTestTester.cmake
-            --debug-output
-        WORKING_DIRECTORY ${MeshTest_SOURCE_PATH}
-    )
-    set_tests_properties(
-        ${TESTER_NAME} PROPERTIES DEPENDS ${TEST_NAME} LABELS
-                                  "tester;${labels}"
-    )
-
-endfunction()
diff --git a/scripts/cmake/test/Test.cmake b/scripts/cmake/test/Test.cmake
index 5ca9b90a1ba24991519f591a19764ca35384ce77..118e3f957b6d876f10bffce266066b1477df6d08 100644
--- a/scripts/cmake/test/Test.cmake
+++ b/scripts/cmake/test/Test.cmake
@@ -33,7 +33,6 @@ endif()
 enable_testing() # Enable CTest
 
 include(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/test/AddTest.cmake)
-include(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/test/MeshTest.cmake)
 include(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/test/OgsTest.cmake)
 include(${CMAKE_CURRENT_SOURCE_DIR}/scripts/cmake/test/NotebookTest.cmake)