diff --git a/Applications/DataExplorer/DataView/CMakeLists.txt b/Applications/DataExplorer/DataView/CMakeLists.txt
index 0d528722995faa9c84ff048d6cde5f8d1f8f84bd..4b92840af318a47b42d78c4c04a49880a720c61e 100644
--- a/Applications/DataExplorer/DataView/CMakeLists.txt
+++ b/Applications/DataExplorer/DataView/CMakeLists.txt
@@ -131,7 +131,7 @@ if(GEOTIFF_FOUND)
     include_directories(${GEOTIFF_INCLUDE_DIRS})
 endif() # GEOTIFF_FOUND
 
-ogs_add_library(QtDataView STATIC ${SOURCES} ${HEADERS} ${UIS})
+ogs_add_library(QtDataView ${SOURCES} ${HEADERS} ${UIS})
 
 target_link_libraries(
     QtDataView
diff --git a/Applications/DataExplorer/VtkVis/CMakeLists.txt b/Applications/DataExplorer/VtkVis/CMakeLists.txt
index 5fe7c6cd2abd55f10ec10f0fc1b206cdd447c929..e233a2e7e1d2c142d07ad1b1d9f91dfec33fa684 100644
--- a/Applications/DataExplorer/VtkVis/CMakeLists.txt
+++ b/Applications/DataExplorer/VtkVis/CMakeLists.txt
@@ -1,22 +1,15 @@
-set(SOURCES
-    MeshFromRasterDialog.cpp
-    QVtkDataSetMapper.cpp
-    VisPrefsDialog.cpp
-    VisualizationWidget.cpp
-    VtkAddFilterDialog.cpp
+# ---- VtkVisFilter ----
+set(FILTER_SOURCES
     VtkAlgorithmProperties.cpp
-    VtkAlgorithmPropertyCheckbox.cpp
-    VtkAlgorithmPropertyLineEdit.cpp
-    VtkAlgorithmPropertyVectorEdit.cpp
     VtkAppendArrayFilter.cpp
     VtkBGImageSource.cpp
     VtkColorByHeightFilter.cpp
     VtkColorLookupTable.cpp
-    VtkCompositeFilter.cpp
     VtkCompositeColorByHeightFilter.cpp
     VtkCompositeColormapToImageFilter.cpp
     VtkCompositeContourFilter.cpp
     VtkCompositeElementSelectionFilter.cpp
+    VtkCompositeFilter.cpp
     VtkCompositeGeoObjectFilter.cpp
     VtkCompositeImageToCylindersFilter.cpp
     VtkCompositeImageToPointCloudFilter.cpp
@@ -26,20 +19,58 @@ set(SOURCES
     VtkCompositePointToGlyphFilter.cpp
     VtkCompositeTextureOnSurfaceFilter.cpp
     VtkCompositeThresholdFilter.cpp
-    VtkConsoleOutputWindow.cpp
-    VtkCustomInteractorStyle.cpp
-    VtkFilterFactory.cpp
     VtkGeoImageSource.cpp
     VtkImageDataToLinePolyDataFilter.cpp
     VtkImageDataToPointCloudFilter.cpp
     VtkImageDataToSurfacePointsFilter.cpp
-    VtkPickCallback.cpp
-    VtkPolylinesSource.cpp
     VtkPointsSource.cpp
+    VtkPolylinesSource.cpp
     VtkRaster.cpp
     VtkStationSource.cpp
     VtkSurfacesSource.cpp
     VtkTextureOnSurfaceFilter.cpp
+)
+if(OGS_USE_NETCDF)
+    list(APPEND FILTER_SOURCES NetCdfConfigureDialog.cpp NetCdfConfigure.ui)
+    set(UIS NetCdfConfigure.ui)
+endif()
+
+ogs_add_library(VtkVisFilter ${FILTER_SOURCES})
+target_include_directories(VtkVisFilter PUBLIC ${VTK_INCLUDE_DIRS})
+target_link_libraries(VtkVisFilter PRIVATE GeoLib Qt5::Core Qt5::Widgets)
+
+if(OGS_USE_NETCDF)
+    target_link_libraries(
+        VtkVisFilter PUBLIC ${NETCDF_LIBRARIES_CXX} ${NETCDF_LIBRARIES_C}
+                            ${HDF5_HL_LIBRARIES} ${HDF5_LIBRARIES}
+    )
+    if(OGS_USE_CONAN AND MSVC)
+        target_link_libraries(VtkVisFilter PUBLIC ${CONAN_LIBS})
+    endif()
+    # Workaround for system installed VTK (tested on arch)
+    if(NOT OGS_USE_CONAN)
+        target_include_directories(
+            VtkVisFilter SYSTEM PUBLIC ${NETCDF_INCLUDES_C}
+                                       ${NETCDF_INCLUDES_CXX}
+        )
+    endif()
+    add_autogen_include(VtkVisFilter)
+endif()
+
+# ---- VtkVis ----
+set(SOURCES
+    MeshFromRasterDialog.cpp
+    QVtkDataSetMapper.cpp
+    VisPrefsDialog.cpp
+    VisualizationWidget.cpp
+    VtkAddFilterDialog.cpp
+    VtkAlgorithmPropertyCheckbox.cpp
+    VtkAlgorithmPropertyLineEdit.cpp
+    VtkAlgorithmPropertyVectorEdit.cpp
+    VtkConsoleOutputWindow.cpp
+    VtkCustomInteractorStyle.cpp
+    VtkFilterFactory.cpp
+    VtkPickCallback.cpp
     VtkVisHelper.cpp
     VtkVisImageItem.cpp
     VtkVisPipeline.cpp
@@ -55,7 +86,6 @@ set(HEADERS
     VisPrefsDialog.h
     VisualizationWidget.h
     VtkAddFilterDialog.h
-    VtkAlgorithmProperties.h
     VtkAlgorithmPropertyLineEdit.h
     VtkAlgorithmPropertyCheckbox.h
     VtkAlgorithmPropertyVectorEdit.h
@@ -100,15 +130,16 @@ set(HEADERS
     VtkVisTabWidget.h
 )
 
-set(UIS MeshFromRaster.ui VisPrefs.ui VisualizationWidgetBase.ui
-        VtkAddFilterDialogBase.ui VtkVisTabWidgetBase.ui
+list(
+    APPEND
+    UIS
+    MeshFromRaster.ui
+    VisPrefs.ui
+    VisualizationWidgetBase.ui
+    VtkAddFilterDialogBase.ui
+    VtkVisTabWidgetBase.ui
 )
 
-if(OGS_USE_NETCDF)
-    set(SOURCES ${SOURCES} NetCdfConfigureDialog.h NetCdfConfigureDialog.cpp)
-    set(UIS ${UIS} NetCdfConfigure.ui)
-endif()
-
 # Visual Studio folder
 source_group("Filter Header Files" REGULAR_EXPRESSION "[.]*Filter.h")
 source_group("Filter Source Files" REGULAR_EXPRESSION "[.]*Filter.cpp")
@@ -132,7 +163,7 @@ include_directories(
     ${GUI_SOURCE_DIR_REL}/VtkModules/Qt
 )
 
-ogs_add_library(VtkVis STATIC ${SOURCES} ${HEADERS} ${UIS})
+ogs_add_library(VtkVis ${SOURCES} ${HEADERS} ${UIS})
 
 if(GEOTIFF_FOUND)
     target_compile_definitions(VtkVis PRIVATE GEOTIFF_FOUND)
@@ -141,26 +172,10 @@ if(GEOTIFF_FOUND)
 endif() # GEOTIFF_FOUND
 
 target_link_libraries(
-    VtkVis PUBLIC BaseLib GeoLib MeshLib DataHolderLib QtBase
+    VtkVis PUBLIC BaseLib GeoLib MeshLib DataHolderLib QtBase VtkVisFilter
     PRIVATE MathLib ApplicationsFileIO Qt5::Gui spdlog::spdlog
 )
 
-if(OGS_USE_NETCDF)
-    target_link_libraries(
-        VtkVis PUBLIC ${NETCDF_LIBRARIES_CXX} ${NETCDF_LIBRARIES_C}
-                      ${HDF5_HL_LIBRARIES} ${HDF5_LIBRARIES}
-    )
-    if(OGS_USE_CONAN AND MSVC)
-        target_link_libraries(VtkVis PUBLIC ${CONAN_LIBS})
-    endif()
-    # Workaround for system installed VTK (tested on arch)
-    if(NOT OGS_USE_CONAN)
-        target_include_directories(
-            VtkVis SYSTEM PUBLIC ${NETCDF_INCLUDES_C} ${NETCDF_INCLUDES_CXX}
-        )
-    endif()
-endif()
-
 set_property(TARGET VtkVis PROPERTY FOLDER "DataExplorer")
 
 add_autogen_include(VtkVis)
diff --git a/Applications/Utils/PostProcessing/CMakeLists.txt b/Applications/Utils/PostProcessing/CMakeLists.txt
index 39848c6874d0118e533eb901d97e41136769a818..c1fdad22e94c08048faf01eba30c259fab8d58f0 100644
--- a/Applications/Utils/PostProcessing/CMakeLists.txt
+++ b/Applications/Utils/PostProcessing/CMakeLists.txt
@@ -7,14 +7,8 @@ endif()
 if(OGS_BUILD_GUI)
     add_executable(Raster2PointCloud Raster2PointCloud.cpp)
     target_link_libraries(
-        Raster2PointCloud
-        GitInfoLib
-        ApplicationsFileIO
-        BaseLib
-        GeoLib
-        VtkVis
-        QtDataView
-        tclap
+        Raster2PointCloud ApplicationsFileIO BaseLib GitInfoLib tclap
+        VtkVisFilter
     )
     install(TARGETS Raster2PointCloud RUNTIME DESTINATION bin)
 endif()
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index fe0cc47d49dae68f3a0dffeed9f995726f3d598d..3755de89719561cf7681b92c0e478954a8b1e479 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -91,7 +91,7 @@ if(OGS_BUILD_GUI)
                 Qt5::Gui
                 Qt5::Xml
                 Qt5::Network
-                VtkVis
+                VtkVisFilter
                 QtDataView
     )
     if(GEOTIFF_FOUND)