diff --git a/CMakeLists.txt b/CMakeLists.txt
index fd49d63f6a15b10ed518075143a5e43338b721e4..e7f54da32579b30f00c886bf83321e746c414a27 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -25,6 +25,7 @@ INCLUDE(scripts/cmake/FindIncludeHeader.cmake)
 INCLUDE(scripts/cmake/Functions.cmake)
 INCLUDE(scripts/cmake/CMakeSetup.cmake)
 INCLUDE(scripts/cmake/CompilerSetup.cmake)
+INCLUDE(scripts/cmake/SubmoduleSetup.cmake)
 IF(NOT OGS_NO_EXTERNAL_LIBS)
 	INCLUDE(scripts/cmake/Find.cmake)
 ENDIF() # NOT OGS_NO_EXTERNAL_LIBS
diff --git a/GeoLib/CMakeLists.txt b/GeoLib/CMakeLists.txt
index 928424bb772476e11c952619d34093ae614e8cc1..d0b60e6785a6f590960b632032f61431327a7dd6 100644
--- a/GeoLib/CMakeLists.txt
+++ b/GeoLib/CMakeLists.txt
@@ -7,8 +7,8 @@ ADD_LIBRARY(GeoLib STATIC ${SOURCES_GeoLib})
 
 include_directories(
 	.
-	../BaseLib
-	../MathLib
+	${CMAKE_SOURCE_DIR}/BaseLib
+	${CMAKE_SOURCE_DIR}/MathLib
 )
 
 
diff --git a/scripts/cmake/SubmoduleCheck.sh b/scripts/cmake/SubmoduleCheck.sh
new file mode 100755
index 0000000000000000000000000000000000000000..85d61dfcf33c960efc3eabf461897374912532de
--- /dev/null
+++ b/scripts/cmake/SubmoduleCheck.sh
@@ -0,0 +1,5 @@
+# Checks for unitialized git submodules
+# Parameter 1: The path to the submodule
+# Returns 0 if there is no such submodule
+# Returns 1 if the module is already initialized
+result=$(git submodule status $1 | grep '^-' | wc -l); exit $result
\ No newline at end of file
diff --git a/scripts/cmake/SubmoduleSetup.cmake b/scripts/cmake/SubmoduleSetup.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..9f1e49a9f5aad9c39dc2d4ec4aa9b31881db6fa7
--- /dev/null
+++ b/scripts/cmake/SubmoduleSetup.cmake
@@ -0,0 +1,23 @@
+# This file initializes the required submodules
+
+SET(REQUIRED_SUBMODULES
+	Tests/quickcheck
+)
+
+FOREACH(SUBMODULE ${REQUIRED_SUBMODULES})
+	# Check if submodule is already initialized
+	# MESSAGE(STATUS "Checking module ${SUBMODULE}")
+	EXECUTE_PROCESS(
+		COMMAND bash ${CMAKE_SOURCE_DIR}/scripts/cmake/SubmoduleCheck.sh ${SUBMODULE}
+		WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+		RESULT_VARIABLE SUBMODULE_IS_NOT_INITIALIZED
+	)
+
+	IF(SUBMODULE_IS_NOT_INITIALIZED)
+		MESSAGE(STATUS "Initializing submodule ${SUBMODULE}")
+		EXECUTE_PROCESS(
+			COMMAND git submodule update --init ${SUBMODULE}
+			WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+		)
+	ENDIF()
+ENDFOREACH()
\ No newline at end of file