diff --git a/.gitmodules b/.gitmodules
index 9b6b544e3178d0d8f03c6a76bac7fa4d74837478..e95352252a208049789981d774151ede5d8d8ba2 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -7,3 +7,6 @@
 [submodule "ThirdParty/bilke/cmake-modules"]
 	path = ThirdParty/bilke/cmake-modules
 	url = https://github.com/bilke/cmake-modules.git
+[submodule "ThirdParty/collection"]
+	path = ThirdParty/collection
+	url = https://gitlab.opengeosys.org/ogs/libs/collection.git
diff --git a/ThirdParty/collection b/ThirdParty/collection
new file mode 160000
index 0000000000000000000000000000000000000000..d1ab058c383e29c95e25f9a0a63c687a3ef27a39
--- /dev/null
+++ b/ThirdParty/collection
@@ -0,0 +1 @@
+Subproject commit d1ab058c383e29c95e25f9a0a63c687a3ef27a39
diff --git a/scripts/cmake/CMakeSetup.cmake b/scripts/cmake/CMakeSetup.cmake
index b22f06c5a687f1e7974d08c9281e454054b0248f..9b3a3840782778addf1202284c6c142e4808d368 100644
--- a/scripts/cmake/CMakeSetup.cmake
+++ b/scripts/cmake/CMakeSetup.cmake
@@ -9,10 +9,11 @@ if("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}")
     )
 endif()
 
-if(EXISTS "${OGS_HELPER_REPO}")
-    include(${OGS_HELPER_REPO}/Setup.cmake)
-elseif(DEFINED OGS_HELPER_REPO)
-    message(FATAL_ERROR "Helper repo at ${OGS_HELPER_REPO} not found!")
+set(_collection ${PROJECT_SOURCE_DIR}/ThirdParty/collection)
+# If submodules in ThirdParty/collection are initialized and is a Guix
+# build use submodule as CPM sources.
+if(EXISTS ${_collection}/ufz/vtkdiff/CMakeLists.txt AND GUIX_BUILD)
+    include(${_collection}/Setup.cmake)
 endif()
 
 # Set additional CMake modules path