diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2c29e6ef67afe19404f82d8c6686328df71ad838..4459f06610f2daa724c9e12b0f8fcbab60619ce0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -102,7 +102,11 @@ INCLUDE(scripts/cmake/Pack.cmake)
 OPTION(Boost_USE_STATIC_LIBS "This option has to be set from the command line (before boost gets found)!" OFF)
 INCLUDE(scripts/cmake/ExternalProjectBoost.cmake)
 OPTION(OGS_SYSTEM_VTK_ONLY "If On VTK will be searched if installed and will not be build locally." OFF)
-INCLUDE(scripts/cmake/ExternalProjectVtk.cmake)
+IF(OGS_BUILD_GUI)
+	INCLUDE(scripts/cmake/ExternalProjectVtk.cmake)
+ELSE()
+	INCLUDE(scripts/cmake/ExternalProjectCatalyst.cmake)
+ENDIF()
 INCLUDE_DIRECTORIES( SYSTEM ${Boost_INCLUDE_DIRS} )
 IF(OGS_USE_EIGEN)
 	INCLUDE(scripts/cmake/ExternalProjectEigen.cmake)
diff --git a/scripts/cmake/ExternalProjectCatalyst.cmake b/scripts/cmake/ExternalProjectCatalyst.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..2b523903a5288016580f794a7a2303cc1239c142
--- /dev/null
+++ b/scripts/cmake/ExternalProjectCatalyst.cmake
@@ -0,0 +1,46 @@
+INCLUDE(ThirdPartyLibVersions)
+INCLUDE(ExternalProject)
+
+SET(CATALYST_GIT_URL https://github.com/ufz/catalyst-io.git)
+
+FIND_PACKAGE(ParaView 4.2 COMPONENTS vtkIOXML QUIET)
+
+IF(ParaView_FOUND)
+	INCLUDE("${PARAVIEW_USE_FILE}")
+	# MESSAGE("Using Catalyst in ${ParaView_FOUND}")
+	RETURN()
+ELSE()
+	SET(ParaView_DIR ${CMAKE_BINARY_DIR}/External/catalyst/src/catalyst-build CACHE PATH "" FORCE)
+ENDIF()
+
+IF(WIN32)
+	SET(CATALYST_MAKE_COMMAND
+		cmake --build . --config Release &&
+		cmake --build . --config Debug)
+	SET(CATALYST_CONFIGURE_COMMAND cmake.bat)
+	# MESSAGE(STATUS ${CATALYST_MAKE_COMMAND})
+ELSE()
+	IF($ENV{CI})
+		SET(CATALYST_MAKE_COMMAND make)
+	ELSE()
+		SET(CATALYST_MAKE_COMMAND make -j ${NUM_PROCESSORS})
+	ENDIF()
+	SET(CATALYST_CONFIGURE_COMMAND cmake.sh)
+ENDIF()
+
+ExternalProject_Add(Catalyst
+	PREFIX ${CMAKE_BINARY_DIR}/External/catalyst
+	GIT_REPOSITORY ${CATALYST_GIT_URL}
+	#URL ${OGS_VTK_URL}
+	#URL_MD5 ${OGS_VTK_MD5}
+	CONFIGURE_COMMAND ../Catalyst/${CATALYST_CONFIGURE_COMMAND} ../Catalyst
+	BUILD_COMMAND ${CATALYST_MAKE_COMMAND}
+	INSTALL_COMMAND ""
+)
+
+IF(NOT ${ParaView_FOUND})
+	# Rerun cmake in initial build
+	ADD_CUSTOM_TARGET(CatalystRescan ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR} DEPENDS Catalyst)
+ELSE()
+	ADD_CUSTOM_TARGET(CatalystRescan) # dummy target for caching
+ENDIF()