diff --git a/.gitmodules b/.gitmodules
index 16e5ec3036bf18be65971518cc18fd0897f3feea..cc275fed76c6f3bdb8a21f597b98066e92b319d7 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -7,3 +7,6 @@
 [submodule "ThirdParty/VtkOsgConverter"]
 	path = ThirdParty/VtkOsgConverter
 	url = git://github.com/ufz-vislab/VtkOsgConverter.git
+[submodule "ThirdParty/tetgen"]
+	path = ThirdParty/tetgen
+	url = https://github.com/ufz/tetgen.git
diff --git a/ThirdParty/CMakeLists.txt b/ThirdParty/CMakeLists.txt
index 7856812f94cd83d5a9ae680194dec0c317ae3877..f1d9f23c1a76d61449c75265de55a4da8022c946 100644
--- a/ThirdParty/CMakeLists.txt
+++ b/ThirdParty/CMakeLists.txt
@@ -33,3 +33,13 @@ IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/VtkOsgConverter/CMakeLists.txt
 	AND OGS_USE_OPTIONAL_SUBMODULES)
 	ADD_SUBDIRECTORY(VtkOsgConverter)
 ENDIF()
+
+# tetgen
+IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/tetgen/CMakeLists.txt)
+	ADD_SUBDIRECTORY(tetgen)
+	IF(APPLE)
+		INSTALL (PROGRAMS $<TARGET_FILE:tetgen> DESTINATION ogs-gui.app/Contents/MacOS COMPONENT ogs_extras)
+	ELSE()
+		INSTALL (PROGRAMS $<TARGET_FILE:tetgen> DESTINATION bin COMPONENT ogs_extras)
+	ENDIF()
+ENDIF()
diff --git a/ThirdParty/tetgen b/ThirdParty/tetgen
new file mode 160000
index 0000000000000000000000000000000000000000..9c4b70d479c6f67cb9e16dbe65f81ec3b821acad
--- /dev/null
+++ b/ThirdParty/tetgen
@@ -0,0 +1 @@
+Subproject commit 9c4b70d479c6f67cb9e16dbe65f81ec3b821acad
diff --git a/scripts/cmake/SubmoduleSetup.cmake b/scripts/cmake/SubmoduleSetup.cmake
index 885a6fd0c1c0d83bb1d85b5600d7eecbb39fea47..115251634e1a5354c89e21fbb5c3d22c258f914a 100644
--- a/scripts/cmake/SubmoduleSetup.cmake
+++ b/scripts/cmake/SubmoduleSetup.cmake
@@ -9,6 +9,10 @@ SET(REQUIRED_SUBMODULES
 	${OGS_ADDITIONAL_SUBMODULES_TO_CHECKOUT}
 )
 
+IF(OGS_BUILD_GUI)
+	SET(REQUIRED_SUBMODULES ${REQUIRED_SUBMODULES} ThirdParty/tetgen)
+ENDIF()
+
 FOREACH(SUBMODULE ${REQUIRED_SUBMODULES})
 	IF(WIN32)
 		SET(SUBMODULE_STATE 1)
@@ -34,4 +38,4 @@ FOREACH(SUBMODULE ${REQUIRED_SUBMODULES})
 			WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
 		)
 	ENDIF()
-ENDFOREACH()
\ No newline at end of file
+ENDFOREACH()