diff --git a/Applications/Utils/Tests.cmake b/Applications/Utils/Tests.cmake
index 412819363098cbec5a023a1d5fe2a26e162a1bf2..5a109f848d6e1b764076a60797a5a0a9143c6e52 100644
--- a/Applications/Utils/Tests.cmake
+++ b/Applications/Utils/Tests.cmake
@@ -1411,11 +1411,10 @@ endif()
 
 AddTest(
     NAME RemoveMeshElements_AABB_2D_regular
-    PATH MeshLib
-    WORKING_DIRECTORY ${Data_SOURCE_DIR}/MeshLib
+    PATH Utils/VoxelGridFromLayers
     EXECUTABLE removeMeshElements
-    EXECUTABLE_ARGS -i AREHS_Layer17.vtu
-                    -o ${Data_BINARY_DIR}/MeshLib/AREHS_2D_AABB_regular.vtu
+    EXECUTABLE_ARGS -i <SOURCE_PATH>/AREHS_Layer17.vtu
+                    -o AREHS_2D_AABB_regular.vtu
                     --x-min 12000 --x-max 15000 --y-min 12000
     REQUIREMENTS NOT (OGS_USE_MPI)
     TESTER vtkdiff-mesh
@@ -1424,11 +1423,10 @@ AddTest(
 
 AddTest(
     NAME RemoveMeshElements_AABB_2D_inverted
-    PATH MeshLib
-    WORKING_DIRECTORY ${Data_SOURCE_DIR}/MeshLib
+    PATH Utils/VoxelGridFromLayers
     EXECUTABLE removeMeshElements
-    EXECUTABLE_ARGS -i AREHS_Layer17.vtu
-                    -o ${Data_BINARY_DIR}/MeshLib/AREHS_2D_AABB_inverted.vtu
+    EXECUTABLE_ARGS -i <SOURCE_PATH>/AREHS_Layer17.vtu
+                    -o AREHS_2D_AABB_inverted.vtu
                     --x-min 12000 --x-max 15000 --y-min 12000 --invert
     REQUIREMENTS NOT (OGS_USE_MPI)
     TESTER vtkdiff-mesh
@@ -1437,11 +1435,10 @@ AddTest(
 
 AddTest(
     NAME RemoveMeshElements_AABB_3D_regular
-    PATH MeshLib
-    WORKING_DIRECTORY ${Data_SOURCE_DIR}/MeshLib
+    PATH Utils/VoxelGridFromLayers
     EXECUTABLE removeMeshElements
-    EXECUTABLE_ARGS -i AREHS_test.vtu
-                    -o ${Data_BINARY_DIR}/MeshLib/AREHS_3D_AABB_regular.vtu
+    EXECUTABLE_ARGS -i <SOURCE_PATH>/AREHS_test.vtu
+                    -o AREHS_3D_AABB_regular.vtu
                     --x-min 12000 --x-max 15000 --y-min 12000 --z-min -3000 --z-max -2000
     REQUIREMENTS NOT (OGS_USE_MPI)
     TESTER vtkdiff-mesh
@@ -1450,11 +1447,10 @@ AddTest(
 
 AddTest(
     NAME RemoveMeshElements_AABB_3D_inverted
-    PATH MeshLib
-    WORKING_DIRECTORY ${Data_SOURCE_DIR}/MeshLib
+    PATH Utils/VoxelGridFromLayers
     EXECUTABLE removeMeshElements
-    EXECUTABLE_ARGS -i AREHS_test.vtu
-                    -o ${Data_BINARY_DIR}/MeshLib/AREHS_3D_AABB_inverted.vtu
+    EXECUTABLE_ARGS -i <SOURCE_PATH>/AREHS_test.vtu
+                    -o AREHS_3D_AABB_inverted.vtu
                     --x-min 12000 --x-max 15000 --y-min 12000 --z-min -3000 --z-max -2000 --invert
     REQUIREMENTS NOT (OGS_USE_MPI)
     TESTER vtkdiff-mesh
diff --git a/Applications/Utils/VoxelGridFromLayers.smk b/Applications/Utils/VoxelGridFromLayers.smk
deleted file mode 100644
index c67ef318e9d50b880dc4675c1488f7dae02581eb..0000000000000000000000000000000000000000
--- a/Applications/Utils/VoxelGridFromLayers.smk
+++ /dev/null
@@ -1,70 +0,0 @@
-# Usage, e.g.:
-#   snakemake -s VoxelGridFromLayers.smk -j 1 --configfile $HOME/code/ogs6/build/buildinfo.yaml
-#
-# buildinfo.yaml contains variables such as Data_BINARY_DIR
-
-import os
-os.environ["PATH"] += os.pathsep + os.pathsep.join([config['BIN_DIR']])
-workdir: f"{config['Data_SOURCE_DIR']}/MeshLib"
-out_dir = f"{config['Data_BINARY_DIR']}/MeshLib"
-
-rule all:
-    input:
-        f"{out_dir}/AREHS_test_diff_geometry.out",
-        f"{out_dir}/AREHS_test_fault_diff.out",
-        f"{out_dir}/AREHS_test_iso_diff_geometry.out"
-
-rule layers_to_grid:
-    input:
-        "AREHS_test_layers.txt"
-    output:
-        f"{out_dir}/AREHS_test.vtu"
-    shell:
-        "Layers2Grid -i {input} -o {output} -x 500 -y 300 -z 100"
-
-rule vtkdiff_grid_geometry:
-    input:
-        out = rules.layers_to_grid.output,
-        ref = "AREHS_test.vtu"
-    output:
-        f"{out_dir}/AREHS_test_diff_geometry.out"
-    shell:
-        "vtkdiff -m {input.out} {input.ref} 2>&1 | tee {output}"
-
-rule add_fault_to_grid:
-    input:
-        grid = rules.layers_to_grid.output,
-        fault = "AREHS_fault.vtu"
-    output:
-        f"{out_dir}/AREHS_test_fault.vtu"
-    shell:
-        "AddFaultToVoxelGrid -i {input.grid} -f {input.fault} -o {output}"
-
-rule vtkdiff_fault:
-    input:
-        a = rules.add_fault_to_grid.output,
-        b = "AREHS_test_fault.vtu"
-    output:
-        f"{out_dir}/AREHS_test_fault_diff.out"
-    params:
-        check_mesh = True,
-        fields = [["MaterialIDs", 0, 0]]
-    wrapper:
-        f"file://{config['SOURCE_DIR']}/scripts/snakemake/vtkdiff"
-
-rule layers_to_grid_iso:
-    input:
-        "AREHS_test_layers.txt"
-    output:
-        f"{out_dir}/AREHS_test_iso.vtu"
-    shell:
-        "Layers2Grid -i {input} -o {output} -x 500"
-
-rule vtkdiff_grid_iso_geometry:
-    input:
-        out = rules.layers_to_grid_iso.output,
-        ref = "AREHS_test_iso.vtu"
-    output:
-        f"{out_dir}/AREHS_test_iso_diff_geometry.out"
-    shell:
-        "vtkdiff -m {input.out} {input.ref} 2>&1 | tee {output}"
diff --git a/Tests/Data/MeshLib/AREHS_2D_AABB_inverted.vtu b/Tests/Data/Utils/VoxelGridFromLayers/AREHS_2D_AABB_inverted.vtu
similarity index 100%
rename from Tests/Data/MeshLib/AREHS_2D_AABB_inverted.vtu
rename to Tests/Data/Utils/VoxelGridFromLayers/AREHS_2D_AABB_inverted.vtu
diff --git a/Tests/Data/MeshLib/AREHS_2D_AABB_regular.vtu b/Tests/Data/Utils/VoxelGridFromLayers/AREHS_2D_AABB_regular.vtu
similarity index 100%
rename from Tests/Data/MeshLib/AREHS_2D_AABB_regular.vtu
rename to Tests/Data/Utils/VoxelGridFromLayers/AREHS_2D_AABB_regular.vtu
diff --git a/Tests/Data/MeshLib/AREHS_3D_AABB_inverted.vtu b/Tests/Data/Utils/VoxelGridFromLayers/AREHS_3D_AABB_inverted.vtu
similarity index 100%
rename from Tests/Data/MeshLib/AREHS_3D_AABB_inverted.vtu
rename to Tests/Data/Utils/VoxelGridFromLayers/AREHS_3D_AABB_inverted.vtu
diff --git a/Tests/Data/MeshLib/AREHS_3D_AABB_regular.vtu b/Tests/Data/Utils/VoxelGridFromLayers/AREHS_3D_AABB_regular.vtu
similarity index 100%
rename from Tests/Data/MeshLib/AREHS_3D_AABB_regular.vtu
rename to Tests/Data/Utils/VoxelGridFromLayers/AREHS_3D_AABB_regular.vtu
diff --git a/Tests/Data/MeshLib/AREHS_Layer0.vtu b/Tests/Data/Utils/VoxelGridFromLayers/AREHS_Layer0.vtu
similarity index 100%
rename from Tests/Data/MeshLib/AREHS_Layer0.vtu
rename to Tests/Data/Utils/VoxelGridFromLayers/AREHS_Layer0.vtu
diff --git a/Tests/Data/MeshLib/AREHS_Layer15.vtu b/Tests/Data/Utils/VoxelGridFromLayers/AREHS_Layer15.vtu
similarity index 100%
rename from Tests/Data/MeshLib/AREHS_Layer15.vtu
rename to Tests/Data/Utils/VoxelGridFromLayers/AREHS_Layer15.vtu
diff --git a/Tests/Data/MeshLib/AREHS_Layer17.vtu b/Tests/Data/Utils/VoxelGridFromLayers/AREHS_Layer17.vtu
similarity index 100%
rename from Tests/Data/MeshLib/AREHS_Layer17.vtu
rename to Tests/Data/Utils/VoxelGridFromLayers/AREHS_Layer17.vtu
diff --git a/Tests/Data/MeshLib/AREHS_Layer9.vtu b/Tests/Data/Utils/VoxelGridFromLayers/AREHS_Layer9.vtu
similarity index 100%
rename from Tests/Data/MeshLib/AREHS_Layer9.vtu
rename to Tests/Data/Utils/VoxelGridFromLayers/AREHS_Layer9.vtu
diff --git a/Tests/Data/MeshLib/AREHS_fault.vtu b/Tests/Data/Utils/VoxelGridFromLayers/AREHS_fault.vtu
similarity index 100%
rename from Tests/Data/MeshLib/AREHS_fault.vtu
rename to Tests/Data/Utils/VoxelGridFromLayers/AREHS_fault.vtu
diff --git a/Tests/Data/MeshLib/AREHS_test.vtu b/Tests/Data/Utils/VoxelGridFromLayers/AREHS_test.vtu
similarity index 100%
rename from Tests/Data/MeshLib/AREHS_test.vtu
rename to Tests/Data/Utils/VoxelGridFromLayers/AREHS_test.vtu
diff --git a/Tests/Data/MeshLib/AREHS_test_fault.vtu b/Tests/Data/Utils/VoxelGridFromLayers/AREHS_test_fault.vtu
similarity index 100%
rename from Tests/Data/MeshLib/AREHS_test_fault.vtu
rename to Tests/Data/Utils/VoxelGridFromLayers/AREHS_test_fault.vtu
diff --git a/Tests/Data/MeshLib/AREHS_test_iso.vtu b/Tests/Data/Utils/VoxelGridFromLayers/AREHS_test_iso.vtu
similarity index 100%
rename from Tests/Data/MeshLib/AREHS_test_iso.vtu
rename to Tests/Data/Utils/VoxelGridFromLayers/AREHS_test_iso.vtu
diff --git a/Tests/Data/MeshLib/AREHS_test_layers.txt b/Tests/Data/Utils/VoxelGridFromLayers/AREHS_test_layers.txt
similarity index 100%
rename from Tests/Data/MeshLib/AREHS_test_layers.txt
rename to Tests/Data/Utils/VoxelGridFromLayers/AREHS_test_layers.txt
diff --git a/Tests/Data/Utils/VoxelGridFromLayers/test_voxelgrid_from_layers.py b/Tests/Data/Utils/VoxelGridFromLayers/test_voxelgrid_from_layers.py
new file mode 100644
index 0000000000000000000000000000000000000000..fb1e52650c1f0125b0f91a43773addb81e67a2f5
--- /dev/null
+++ b/Tests/Data/Utils/VoxelGridFromLayers/test_voxelgrid_from_layers.py
@@ -0,0 +1,40 @@
+import os
+from pathlib import Path
+
+from ogs import cli
+
+
+def test_voxelgrid_from_layers(tmp_path):
+    os.chdir(Path(__file__).resolve().parent)
+
+    mesh_file = Path(f"{tmp_path}/AREHS_test.vtu")
+
+    cli.Layers2Grid(i="AREHS_test_layers.txt", o=mesh_file, x=500, y=300, z=100)
+    assert mesh_file.exists()
+
+    assert cli.vtkdiff(mesh_file, "AREHS_test.vtu", mesh_check=None) == 0
+
+    fault_mesh_file = Path(f"{tmp_path}/AREHS_test_fault.vtu")
+    cli.AddFaultToVoxelGrid(i=mesh_file, f="AREHS_fault.vtu", o=fault_mesh_file)
+    assert fault_mesh_file.exists()
+
+    assert cli.vtkdiff(fault_mesh_file, "AREHS_test_fault.vtu", mesh_check=None) == 0
+    assert (
+        cli.vtkdiff(
+            fault_mesh_file,
+            "AREHS_test_fault.vtu",
+            a="MaterialIDs",
+            b="MaterialIDs",
+            abs=0,
+            rel=0,
+        )
+        == 0
+    )
+
+    # iso
+    mesh_file = Path(f"{tmp_path}/AREHS_test_iso.vtu")
+
+    cli.Layers2Grid(i="AREHS_test_layers.txt", o=mesh_file, x=500)
+    assert mesh_file.exists()
+
+    assert cli.vtkdiff(mesh_file, "AREHS_test_iso.vtu", mesh_check=None) == 0