diff --git a/CMake/VirtualFluidsMacros.cmake b/CMake/VirtualFluidsMacros.cmake
index 2e9abfeeeca983dd6035306358011a3cd071c63b..edb407e7c70d8623aebe0f8525d4ae94f0538797 100644
--- a/CMake/VirtualFluidsMacros.cmake
+++ b/CMake/VirtualFluidsMacros.cmake
@@ -90,7 +90,8 @@ endfunction()
 ## parameter:
 ## NAME      - Name of the target. If not passed the name is vf_get_library_name().
 ## BUILDTYPE - STATIC; SHARED; EXECUTABLE
-## DEPENDS   - libraries to link
+## PUBLIC_LINK  - public libraries to link
+## PRIVATE_LINK - private libraries to link
 ## FILES     - adds these files to the target
 ## FOLDER    - adds all files in these folders to the targets
 ## EXCLUDE   - excludes these files from the target
@@ -109,7 +110,7 @@ function(vf_add_library)
 
     set( options )
     set( oneValueArgs )
-    set( multiValueArgs NAME BUILDTYPE DEPENDS FILES FOLDER EXCLUDE)
+    set( multiValueArgs NAME BUILDTYPE PUBLIC_LINK PRIVATE_LINK FILES FOLDER EXCLUDE)
     cmake_parse_arguments( ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
 
     if(${ARG_NAME})
@@ -151,9 +152,13 @@ function(vf_add_library)
     #################################################################
     ###   ADDITIONAL LINK LIBRARIES                               ###
     #################################################################
-    status_lib("Link Depending Libraries: ${ARG_DEPENDS}")
-    if (ARG_DEPENDS)
-        target_link_libraries(${library_name} PRIVATE ${ARG_DEPENDS})
+    status_lib("Link Depending Libraries: ${ARG_PUBLIC_LINK}")
+    status_lib("Link Depending Libraries: ${ARG_PRIVATE_LINK}")
+    if (ARG_PUBLIC_LINK)
+        target_link_libraries(${library_name} PUBLIC ${ARG_PUBLIC_LINK})
+    endif()
+    if (ARG_PRIVATE_LINK)
+        target_link_libraries(${library_name} PRIVATE ${ARG_PRIVATE_LINK})
     endif()
 
     #################################################################
diff --git a/CMake/cmake_config_files/TESLA01.config.cmake b/CMake/cmake_config_files/TESLA01.config.cmake
index 97771db2a6058e26504d510fc2d796c2c02e4994..ab7f92aea592fb4f8f034ebc548df05c46c58382 100644
--- a/CMake/cmake_config_files/TESLA01.config.cmake
+++ b/CMake/cmake_config_files/TESLA01.config.cmake
@@ -9,9 +9,3 @@ SET(BOOST_LIBRARYDIR  "C:\\Libraries\\boost_1_65_1\\lib" CACHE PATH "BOOST_LIBRA
 
 SET(VTK_DIR "C:/Libraries/VTK-8.0.1/build")
 
-#################################################################################
-#  METIS
-#################################################################################
-SET(METIS_INCLUDEDIR "C:/Libraries/metis-5.1.0//include")
-SET(METIS_DEBUG_LIBRARY "C:/Libraries/metis-5.1.0/build/libmetis/Debug/metis.lib")
-SET(METIS_RELEASE_LIBRARY "C:/Libraries/metis-5.1.0/build/libmetis/Release/metis.lib")
diff --git a/apps/cpu/LaminarTubeFlow/CMakeLists.txt b/apps/cpu/LaminarTubeFlow/CMakeLists.txt
index 24e6fb397e31bae4856b174798972a0e130acf12..32e8d2fd9231e40002e972f370a19ebec27d995b 100644
--- a/apps/cpu/LaminarTubeFlow/CMakeLists.txt
+++ b/apps/cpu/LaminarTubeFlow/CMakeLists.txt
@@ -1,7 +1,7 @@
 
 PROJECT(ltf)
 
-vf_add_library(BUILDTYPE binary DEPENDS VirtualFluidsCore muparser basics ${MPI_CXX_LIBRARIES} FILES ltf.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore muparser basics ${MPI_CXX_LIBRARIES} FILES ltf.cpp )
 
 vf_get_library_name (library_name)
 target_include_directories(${library_name} PRIVATE ${APPS_ROOT_CPU})
\ No newline at end of file
diff --git a/apps/cpu/LidDrivenCavity/CMakeLists.txt b/apps/cpu/LidDrivenCavity/CMakeLists.txt
index 9527e73eab5b2bcfe7f874f640bb3cada7edc016..2afa5ee83ada573e3e31a89a33386d593a5bc261 100644
--- a/apps/cpu/LidDrivenCavity/CMakeLists.txt
+++ b/apps/cpu/LidDrivenCavity/CMakeLists.txt
@@ -1,4 +1,4 @@
 
 PROJECT(LidDrivenCavity)
 
-vf_add_library(NAME LidDrivenCavityCPU BUILDTYPE binary DEPENDS VirtualFluidsCore basics muparser FILES LidDrivenCavity.cpp)
+vf_add_library(NAME LidDrivenCavityCPU BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore FILES LidDrivenCavity.cpp)
diff --git a/apps/cpu/pChannel/CMakeLists.txt b/apps/cpu/pChannel/CMakeLists.txt
index e02916661b2575e68bed2b1a7e3c9566b46cb075..336ac6c018044246d9c6c2f26f6009cc1e19e485 100644
--- a/apps/cpu/pChannel/CMakeLists.txt
+++ b/apps/cpu/pChannel/CMakeLists.txt
@@ -2,4 +2,4 @@ PROJECT(PChannel)
 
 INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
 
-vf_add_library(BUILDTYPE binary DEPENDS VirtualFluidsCore VirtualFluidsBasic FILES pChannel.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore VirtualFluidsBasic FILES pChannel.cpp)
diff --git a/apps/gpu/GKS/Flame7cm/CMakeLists.txt b/apps/gpu/GKS/Flame7cm/CMakeLists.txt
index 1befef79f421268b3993aad6539880991fac92fa..c3f57dcdd8c9ea9e8ba891d72c039f5acdfc9cf9 100644
--- a/apps/gpu/GKS/Flame7cm/CMakeLists.txt
+++ b/apps/gpu/GKS/Flame7cm/CMakeLists.txt
@@ -1,6 +1,6 @@
 PROJECT(Flame7cm)
 
-vf_add_library(BUILDTYPE binary DEPENDS basics GridGenerator GksMeshAdapter GksVtkAdapter GksGpu FILES Flame7cm.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics GridGenerator GksMeshAdapter GksVtkAdapter GksGpu FILES Flame7cm.cpp )
 
 include (${VF_CMAKE_DIR}/3rd/cuda.cmake)
 include (${VF_CMAKE_DIR}/3rd/mpi.cmake)
diff --git a/apps/gpu/LBM/DrivenCavity/CMakeLists.txt b/apps/gpu/LBM/DrivenCavity/CMakeLists.txt
index 16cd3e1b927e552b47d0af41e6355322798b7164..e170d772bded31bb0f333dc7519ff434ec91e313 100644
--- a/apps/gpu/LBM/DrivenCavity/CMakeLists.txt
+++ b/apps/gpu/LBM/DrivenCavity/CMakeLists.txt
@@ -2,6 +2,6 @@ PROJECT(DrivenCavity)
 
 #LIST(APPEND CAB_COMPILER_ADDTIONAL_CXX_COMPILER_FLAGS "-DOMPI_SKIP_MPICXX" )
 
-vf_add_library(BUILDTYPE binary DEPENDS VirtualFluids_GPU basics GridGenerator FILES DrivenCavity.cpp )
+vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluids_GPU basics GridGenerator FILES DrivenCavity.cpp )
 
 linkCUDA()
diff --git a/apps/gpu/LBM/TGV_3D/CMakeLists.txt b/apps/gpu/LBM/TGV_3D/CMakeLists.txt
index c8a724bf1f5f43500cf9e373193769e155ef3f35..a8018feeb7c79d0d07c5788e31f03769ebb9ffa9 100644
--- a/apps/gpu/LBM/TGV_3D/CMakeLists.txt
+++ b/apps/gpu/LBM/TGV_3D/CMakeLists.txt
@@ -1,5 +1,5 @@
 PROJECT(TGV_3D)
 
-vf_add_library(BUILDTYPE binary DEPENDS basics VirtualFluids_GPU GridGenerator FILES TGV_3D.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES TGV_3D.cpp)
 
 linkCUDA()
diff --git a/apps/gpu/LBM/TGV_3D_MultiGPU/CMakeLists.txt b/apps/gpu/LBM/TGV_3D_MultiGPU/CMakeLists.txt
index 49846436eefc93093a57bebf045833efd3b5e3f5..5fbef792d1385e46a99aa0da4b274233959e0b1e 100644
--- a/apps/gpu/LBM/TGV_3D_MultiGPU/CMakeLists.txt
+++ b/apps/gpu/LBM/TGV_3D_MultiGPU/CMakeLists.txt
@@ -1,5 +1,5 @@
 PROJECT(TGV_3D_MultiGPU)
 
-vf_add_library(BUILDTYPE binary DEPENDS basics VirtualFluids_GPU GridGenerator FILES TGV_3D_MultiGPU.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES TGV_3D_MultiGPU.cpp)
 
 linkCUDA()
diff --git a/apps/gpu/LBM/TrafficTest/CMakeLists.txt b/apps/gpu/LBM/TrafficTest/CMakeLists.txt
index 9503271f88ded591c3d9e8c12666b65c99780f91..766debd8705a7123decd8a11bb885e8e35b6f2d0 100644
--- a/apps/gpu/LBM/TrafficTest/CMakeLists.txt
+++ b/apps/gpu/LBM/TrafficTest/CMakeLists.txt
@@ -6,7 +6,7 @@ set(includeDirectories "${CMAKE_SOURCE_DIR}/src"
 
 
 
-vf_add_library(BUILDTYPE binary DEPENDS Traffic basics GridGenerator)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK Traffic basics GridGenerator)
 
 vf_get_library_name(library_name)
 target_include_directories(${library_name} PRIVATE "${CMAKE_SOURCE_DIR}/src/basics")
diff --git a/apps/gpu/LBM/gridGeneratorTest/CMakeLists.txt b/apps/gpu/LBM/gridGeneratorTest/CMakeLists.txt
index cc8d8eb5d1390ac1b91ca2d6599fa0d82224735e..636870f1d809ac8e92f4017ffe8bad828075a8d8 100644
--- a/apps/gpu/LBM/gridGeneratorTest/CMakeLists.txt
+++ b/apps/gpu/LBM/gridGeneratorTest/CMakeLists.txt
@@ -1,5 +1,5 @@
 PROJECT(GridGeneratorTest)
 
-vf_add_library(BUILDTYPE binary DEPENDS basics VirtualFluids_GPU GridGenerator FILES gridGenerator.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES gridGenerator.cpp)
 
 linkCUDA()
diff --git a/apps/gpu/LidDrivenCavity/CMakeLists.txt b/apps/gpu/LidDrivenCavity/CMakeLists.txt
index f049da0390b5dac566531fbec690c6c81eae579d..108ab3c676e1abf2466f0b7ca61dce2df7eee792 100644
--- a/apps/gpu/LidDrivenCavity/CMakeLists.txt
+++ b/apps/gpu/LidDrivenCavity/CMakeLists.txt
@@ -3,4 +3,4 @@
 PROJECT(LidDrivenCavity)
 
 
-vf_add_library(BUILDTYPE binary DEPENDS basics GridGenerator VirtualFluids_GPU GksMeshAdapter GksGpu FILES LidDrivenCavity.cpp)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics GridGenerator VirtualFluids_GPU GksMeshAdapter GksGpu FILES LidDrivenCavity.cpp)
diff --git a/apps/gpu/tests/NumericalTestPostProcessing/CMakeLists.txt b/apps/gpu/tests/NumericalTestPostProcessing/CMakeLists.txt
index 137e2aa041030193afd2a8d52e3787fc845ab87d..4114004886660af9c9f95a0a7d5ed4fc90a7bd00 100644
--- a/apps/gpu/tests/NumericalTestPostProcessing/CMakeLists.txt
+++ b/apps/gpu/tests/NumericalTestPostProcessing/CMakeLists.txt
@@ -1,6 +1,6 @@
 project(NumericalTestPostProcessing)
 
-vf_add_library(BUILDTYPE binary DEPENDS VirtualFluids_GPU basics cudart_static)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluids_GPU basics cudart_static)
 
 vf_get_library_name(library_name)
 groupTarget(${library_name} ${testFolder})
diff --git a/apps/gpu/tests/NumericalTests/CMakeLists.txt b/apps/gpu/tests/NumericalTests/CMakeLists.txt
index cf4cf7213037f43b0ee5027a407228f0149d5f41..6b66befe0107d6bd54ff95cf6a35f5373ff5975c 100644
--- a/apps/gpu/tests/NumericalTests/CMakeLists.txt
+++ b/apps/gpu/tests/NumericalTests/CMakeLists.txt
@@ -1,6 +1,6 @@
 project(NumericalTestsGPU)
 set(collectTestFiles ON)
-vf_add_library(BUILDTYPE binary DEPENDS VirtualFluids_GPU GridGenerator basics fftw3 gtest gmock gmock_main cudart_static)
+vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluids_GPU GridGenerator basics fftw3 gtest gmock gmock_main cudart_static)
 
 vf_get_library_name(library_name)
 groupTarget(${library_name} ${testFolder})
diff --git a/src/cpu/VirtualFluidsCore/CMakeLists.txt b/src/cpu/VirtualFluidsCore/CMakeLists.txt
index f23e96006cea40e9ef7721c0de06586448a1e53e..032ce414c5a005acb1a84d89a4d5b51dd44a4595 100644
--- a/src/cpu/VirtualFluidsCore/CMakeLists.txt
+++ b/src/cpu/VirtualFluidsCore/CMakeLists.txt
@@ -23,7 +23,7 @@ IF(${USE_DEM_COUPLING})
    INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/../DemCoupling/DemCoupling.cmake)
 ENDIF()
 
-vf_add_library(BUILDTYPE static DEPENDS basics muparser ${MPI_LIBRARY} ${CAB_ADDITIONAL_LINK_LIBRARIES})
+vf_add_library(BUILDTYPE static PUBLIC_LINK basics muparser ${CAB_ADDITIONAL_LINK_LIBRARIES})
 
 vf_get_library_name(library_name)
 
diff --git a/src/gpu/GksGpu/CMakeLists.txt b/src/gpu/GksGpu/CMakeLists.txt
index 353a5c8424f8c454d21e58b1acb405611414462c..3bb439da1eaf72a24b5e9338a83e01a7b8d85a32 100644
--- a/src/gpu/GksGpu/CMakeLists.txt
+++ b/src/gpu/GksGpu/CMakeLists.txt
@@ -1,5 +1,5 @@
 
-vf_add_library(BUILDTYPE shared DEPENDS basics GksMeshAdapter)
+vf_add_library(BUILDTYPE shared PRIVATE_LINK basics GksMeshAdapter)
 
 linkCUDA()
 linkMPI()
diff --git a/src/gpu/GksMeshAdapter/CMakeLists.txt b/src/gpu/GksMeshAdapter/CMakeLists.txt
index 7e008f0cef544e51fa1f474b60a18e3d8ca9cbc9..3e47fe4abb10c9b9165d9e795bfcf034f607fd22 100644
--- a/src/gpu/GksMeshAdapter/CMakeLists.txt
+++ b/src/gpu/GksMeshAdapter/CMakeLists.txt
@@ -1,3 +1,3 @@
 
 
-vf_add_library(BUILDTYPE shared DEPENDS basics GridGenerator)
+vf_add_library(BUILDTYPE shared PRIVATE_LINK basics GridGenerator)
diff --git a/src/gpu/GksVtkAdapter/CMakeLists.txt b/src/gpu/GksVtkAdapter/CMakeLists.txt
index a5390e832155934861ee32e0b860d78d9c70a27d..644dc6defa101644338fc35211efa7eccabca3b0 100644
--- a/src/gpu/GksVtkAdapter/CMakeLists.txt
+++ b/src/gpu/GksVtkAdapter/CMakeLists.txt
@@ -1,5 +1,5 @@
 
 
-vf_add_library(BUILDTYPE shared DEPENDS basics GksGpu)
+vf_add_library(BUILDTYPE shared PRIVATE_LINK basics GksGpu)
 
 include (${VF_CMAKE_DIR}/3rd/vtk.cmake)
\ No newline at end of file
diff --git a/src/gpu/GridGenerator/CMakeLists.txt b/src/gpu/GridGenerator/CMakeLists.txt
index 2908e93ccfae8589b7d729c9f2dcdc8b2c9aaf44..aee5018a99a6749c13fda1459c3d3d6ce6b5e77d 100644
--- a/src/gpu/GridGenerator/CMakeLists.txt
+++ b/src/gpu/GridGenerator/CMakeLists.txt
@@ -1,6 +1,6 @@
 
 
-vf_add_library(BUILDTYPE shared DEPENDS basics)
+vf_add_library(BUILDTYPE shared PRIVATE_LINK basics)
 
 linkCUDA()
 linkOpenMP()
diff --git a/src/gpu/Traffic/CMakeLists.txt b/src/gpu/Traffic/CMakeLists.txt
index 8876b709009cf597d4d2e33c624486650acebb64..c836ac39130824ebc01da73c62a76c85656573a8 100644
--- a/src/gpu/Traffic/CMakeLists.txt
+++ b/src/gpu/Traffic/CMakeLists.txt
@@ -1,5 +1,5 @@
 
 
-vf_add_library(BUILDTYPE shared DEPENDS GridGenerator basics)
+vf_add_library(BUILDTYPE shared PRIVATE_LINK GridGenerator basics)
 
 linkCUDA()
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/CMakeLists.txt b/src/gpu/VirtualFluids_GPU/CMakeLists.txt
index d24037e51bb922823625ce8a7605d581098681cb..6635323c8be77c36682bac560dc0491d08f3a54f 100644
--- a/src/gpu/VirtualFluids_GPU/CMakeLists.txt
+++ b/src/gpu/VirtualFluids_GPU/CMakeLists.txt
@@ -7,7 +7,7 @@ ELSE(MSVC)
 ENDIF(MSVC)
 
 
-vf_add_library(BUILDTYPE shared DEPENDS ${libsToLink})
+vf_add_library(BUILDTYPE shared PRIVATE_LINK ${libsToLink})
 
 linkMPI()
 linkCUDA()