diff --git a/CMakeLists.txt b/CMakeLists.txt
index 75611ce3e0107441ab74b7a471831c785fdc3744..29c9611b63466464f2672cc982688a4d8b6ee3ee 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,7 +4,7 @@ if(${CMAKE_VERSION} VERSION_LESS 3.12)
     cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
 endif()
 
-project(VirtualFluids)
+project(VirtualFluids CXX)
 
 
 option(BUILD_VF_CPU "Build VirtualFluids cpu variant" ON)
diff --git a/cpu/Applications/pChannel/CMakeLists.txt b/cpu/Applications/pChannel/CMakeLists.txt
index 8b5f07fda67146c0b20c7e7b18e56e25371b3839..f909c9146d9b6ec626b510dbe43a34742ac3911e 100644
--- a/cpu/Applications/pChannel/CMakeLists.txt
+++ b/cpu/Applications/pChannel/CMakeLists.txt
@@ -1,5 +1,3 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-
 ########################################################
 ## C++ PROJECT                                       ###
 ########################################################
@@ -10,16 +8,17 @@ INCLUDE(${APPS_ROOT}/IncludsList.cmake)
 #################################################################
 ###   LOCAL FILES                                             ###
 #################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
+#FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
+#                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
+#                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
  
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
+#SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
+#SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
   
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluidsCore VirtualFluidsBasic)
+#SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluidsCore VirtualFluidsBasic)
 
 #################################################################
 ###   CREATE PROJECT                                          ###
 #################################################################
-CREATE_CAB_PROJECT(pchannel BINARY)
+#CREATE_CAB_PROJECT(pchannel BINARY)
+vf_add_library(BUILDTYPE binary DEPENDS VirtualFluidsCore VirtualFluidsBasic FILES pChannel.cpp)
diff --git a/cpu/CMake/VirtualFluidsMacros.cmake b/cpu/CMake/VirtualFluidsMacros.cmake
index bc4dbd573e7d4b133326b1735b2120b6719346ab..4991051f0de019e4867c54c61b8b45afb010d5df 100644
--- a/cpu/CMake/VirtualFluidsMacros.cmake
+++ b/cpu/CMake/VirtualFluidsMacros.cmake
@@ -21,115 +21,168 @@ function(vf_add_library)
 
     set( options )
     set( oneValueArgs )
-    set( multiValueArgs DEPENDS FOLDER)
+    set( multiValueArgs BUILDTYPE DEPENDS FILES FOLDER)
     cmake_parse_arguments( ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
 
-    #message("${ARG_FOLDER}")
+    message("Files: ${ARG_FILES}")
 
     vf_get_library_name (library_name)
-    message("${library_name}")
+
+    if (ARG_FILES)
+        set(sourceFiles ${sourceFiles} ${ARG_FILES})
+    endif()
 
     if (ARG_FOLDER)
         foreach(folder ${ARG_FOLDER})
             foreach(file ${VIRTUAL_FLUIDS_GLOB_FILES})
                 set (filePath ${folder}/${file})
                 #message("${filePath}")
-                file ( GLOB part_files ${filePath} )
+                file (GLOB part_files ${filePath} )
                 set(sourceFiles ${sourceFiles} ${part_files})
             endforeach()
         endforeach()
+    endif()
+
+    if (NOT ARG_FILES AND NOT ARG_FOLDER)
+        file ( GLOB_RECURSE sourceFiles ${VIRTUAL_FLUIDS_GLOB_FILES} )
+    endif()
 
-        else ()
-     file ( GLOB_RECURSE sourceFiles ${VIRTUAL_FLUIDS_GLOB_FILES} )
-endif()
+    #    foreach(X IN LISTS sourceFiles)
+    #      message(STATUS "${X}")
+    #    endforeach()
 
-    foreach(X IN LISTS sourceFiles)
-       #message(STATUS "${X}")
+
+    # SET SOURCE GROUP
+    # IF SOURCE GROUP ENABLED
+    foreach(source ${sourceFiles})
+        get_filename_component(source_dir ${source} DIRECTORY)
+
+        if (source_dir)
+          setSourceGroupForFilesIn(${source_dir} ${library_name})
+        endif()
     endforeach()
 
 
-    set (build_type STATIC)
-
-
-  MESSAGE(STATUS "configuring ${library_name} (type=${build_type})...")
-
-
-  #################################################################
-  ###   OS DEFINES                                              ###
-  #################################################################
-  IF(WIN32)
-      LIST(APPEND CAB_ADDTIONAL_COMPILER_FLAGS -D__WIN__)
-  ELSEIF(APPLE)
-      LIST(APPEND CAB_ADDTIONAL_COMPILER_FLAGS -D__APPLE__)
-  ELSEIF(UNIX)
-      LIST(APPEND CAB_ADDTIONAL_COMPILER_FLAGS -D__unix__)
-  ENDIF()
-
-  #################################################################
-  ###   ADDITIONAL_MAKE_CLEAN_FILES                             ###
-  #################################################################
-  #SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${GENERATED_FILES}")
-
-  #################################################################
-  ###   EXCECUTABLE                                             ###
-  #################################################################
-  IF(${build_type} MATCHES BINARY)
-      ADD_EXECUTABLE(${library_name} ${sourceFiles} )
-  ELSEIF(${build_type} MATCHES SHARED)
-      ADD_LIBRARY(${library_name} SHARED ${sourceFiles} )
-  ELSEIF(${build_type} MATCHES STATIC)
-      ADD_LIBRARY(${library_name} STATIC ${sourceFiles} )
-  ELSE()
-      MESSAGE(FATAL_ERROR "build_type=${build_type} doesn't match BINARY, SHARED or STATIC")
-  ENDIF()
-
-  #################################################################
-  ###   ADDITIONAL LINK LIBRARIES                               ###
-  #################################################################
+
+    MESSAGE(STATUS "configuring ${library_name} (type=${ARG_BUILDTYPE})...")
+
+
+    #################################################################
+    ###   OS DEFINES                                              ###
+    #################################################################
+    IF(WIN32)
+        LIST(APPEND CAB_ADDTIONAL_COMPILER_FLAGS -D__WIN__)
+    ELSEIF(APPLE)
+        LIST(APPEND CAB_ADDTIONAL_COMPILER_FLAGS -D__APPLE__)
+    ELSEIF(UNIX)
+        LIST(APPEND CAB_ADDTIONAL_COMPILER_FLAGS -D__unix__)
+    ENDIF()
+
+    #################################################################
+    ###   ADDITIONAL_MAKE_CLEAN_FILES                             ###
+    #################################################################
+    #SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${GENERATED_FILES}")
+
+    #################################################################
+    ###   EXCECUTABLE                                             ###
+    #################################################################
+    IF(${ARG_BUILDTYPE} MATCHES binary)
+        ADD_EXECUTABLE(${library_name} ${sourceFiles} )
+    ELSEIF(${ARG_BUILDTYPE} MATCHES shared)
+        ADD_LIBRARY(${library_name} shared ${sourceFiles} )
+    ELSEIF(${ARG_BUILDTYPE} MATCHES static)
+        ADD_LIBRARY(${library_name} STATIC ${sourceFiles} )
+    ELSE()
+        MESSAGE(FATAL_ERROR "build_type=${ARG_BUILDTYPE} doesn't match BINARY, SHARED or STATIC")
+    ENDIF()
+
+    #################################################################
+    ###   ADDITIONAL LINK LIBRARIES                               ###
+    #################################################################
     message("Link Depending Libraries: ${ARG_DEPENDS}")
     if (ARG_DEPENDS)
-    TARGET_LINK_LIBRARIES(${library_name} ${ARG_DEPENDS})
+        target_link_libraries(${library_name} PRIVATE ${ARG_DEPENDS})
+    endif()
+
+    IF(CAB_ADDITIONAL_LINK_LIBRARIES)
+        TARGET_LINK_LIBRARIES(${library_name} PRIVATE ${CAB_ADDITIONAL_LINK_LIBRARIES})
+    ENDIF()
+
+    #################################################################
+    ###   COMPILER Flags                                          ###
+    #################################################################
+    ADD_COMPILER_FLAGS_TO_PROJECT(${CAB_COMPILER} ${library_name} "CXX" ${ARG_BUILDTYPE})
+    MESSAGE(STATUS "compiler flags for compiler ${CAB_COMPILER} on machine ${CAB_MACHINE} for project ${project_name} (${ARG_BUILDTYPE}) have been configured")
+
+    IF(CAB_ADDTIONAL_COMPILER_FLAGS)
+        ADD_TARGET_PROPERTIES(${library_name} COMPILE_FLAGS ${CAB_ADDTIONAL_COMPILER_FLAGS})
+    ENDIF()
+    IF(CAB_ADDTIONAL_COMPILER_FLAGS_DEBUG)
+        MESSAGE(FATAL_ERROR "COMPILE_FLAGS_DEBUG_<CONFIG> not supported by cmake yet :-(")
+        ADD_TARGET_PROPERTIES(${library_name} COMPILE_FLAGS_DEBUG ${CAB_ADDTIONAL_COMPILER_FLAGS_DEBUG})
+    ENDIF()
+    IF(CAB_ADDTIONAL_COMPILER_FLAGS_RELEASE)
+        MESSAGE(FATAL_ERROR "COMPILE_FLAGS_<CONFIG> not supported by cmake yet :-(")
+        ADD_TARGET_PROPERTIES(${library_name} COMPILE_FLAGS_RELEASE ${CAB_ADDTIONAL_COMPILER_FLAGS_RELEASE})
+    ENDIF()
+
+    #################################################################
+    ###   ADDITIONAL LINK PROPERTIES                              ###
+    #################################################################
+    IF(CAB_ADDITIONAL_LINK_FLAGS)
+        ADD_TARGET_PROPERTIES(${library_name} LINK_FLAGS ${CAB_ADDITIONAL_LINK_FLAGS})
+    ENDIF()
+    IF(CAB_ADDITIONAL_LINK_FLAGS_DEBUG)
+        ADD_TARGET_PROPERTIES(${library_name} LINK_FLAGS_DEBUG ${CAB_ADDITIONAL_LINK_FLAGS_DEBUG})
+    ENDIF()
+    IF(CAB_ADDITIONAL_LINK_FLAGS_RELEASE)
+        ADD_TARGET_PROPERTIES(${library_name} LINK_FLAGS_RELEASE ${CAB_ADDITIONAL_LINK_FLAGS_RELEASE})
+    ENDIF()
+
+    #SET(project_name ${library_name} CACHE STRING "name of binary")
+
+    MESSAGE(STATUS "configuring ${library_name} (type=${ARG_BUILDTYPE})... done")
+
+endfunction(vf_add_library)
+
+
+
+
+macro(setSourceGroupForFilesIn package_dir targetName)
+    #input: target_name PACKAGE_SRCS
+    buildSourceGroup(${targetName} ${package_dir})
+
+    if(isAllTestSuite)
+        source_group(${targetName}\\${SOURCE_GROUP} FILES ${source})
+    else()
+        source_group(${SOURCE_GROUP} FILES ${source})
     endif()
+    #output: -
+endmacro(setSourceGroupForFilesIn)
 
-  IF(CAB_ADDITIONAL_LINK_LIBRARIES)
-      TARGET_LINK_LIBRARIES(${library_name} ${CAB_ADDITIONAL_LINK_LIBRARIES})
-  ENDIF()
-
-  #################################################################
-  ###   COMPILER Flags                                          ###
-  #################################################################
-    message (${CAB_COMPILER})
-  ADD_COMPILER_FLAGS_TO_PROJECT(${CAB_COMPILER}  ${library_name} "CXX" ${build_type})
-  MESSAGE(STATUS "compiler flags for compiler ${CAB_COMPILER} on machine ${CAB_MACHINE} for project ${project_name} (${build_type}) have been configured")
-
-  IF(CAB_ADDTIONAL_COMPILER_FLAGS)
-      ADD_TARGET_PROPERTIES(${library_name} COMPILE_FLAGS ${CAB_ADDTIONAL_COMPILER_FLAGS})
-  ENDIF()
-  IF(CAB_ADDTIONAL_COMPILER_FLAGS_DEBUG)
-      MESSAGE(FATAL_ERROR "COMPILE_FLAGS_DEBUG_<CONFIG> not supported by cmake yet :-(")
-      ADD_TARGET_PROPERTIES(${library_name} COMPILE_FLAGS_DEBUG ${CAB_ADDTIONAL_COMPILER_FLAGS_DEBUG})
-  ENDIF()
-  IF(CAB_ADDTIONAL_COMPILER_FLAGS_RELEASE)
-      MESSAGE(FATAL_ERROR "COMPILE_FLAGS_<CONFIG> not supported by cmake yet :-(")
-      ADD_TARGET_PROPERTIES(${library_name} COMPILE_FLAGS_RELEASE ${CAB_ADDTIONAL_COMPILER_FLAGS_RELEASE})
-  ENDIF()
-
-  #################################################################
-  ###   ADDITIONAL LINK PROPERTIES                              ###
-  #################################################################
-  IF(CAB_ADDITIONAL_LINK_FLAGS)
-      ADD_TARGET_PROPERTIES(${library_name} LINK_FLAGS ${CAB_ADDITIONAL_LINK_FLAGS})
-  ENDIF()
-  IF(CAB_ADDITIONAL_LINK_FLAGS_DEBUG)
-      ADD_TARGET_PROPERTIES(${library_name} LINK_FLAGS_DEBUG ${CAB_ADDITIONAL_LINK_FLAGS_DEBUG})
-  ENDIF()
-  IF(CAB_ADDITIONAL_LINK_FLAGS_RELEASE)
-      ADD_TARGET_PROPERTIES(${library_name} LINK_FLAGS_RELEASE ${CAB_ADDITIONAL_LINK_FLAGS_RELEASE})
-  ENDIF()
-
-  SET(project_name ${library_name} CACHE STRING "name of binary")
-
-  MESSAGE(STATUS "configuring ${library_name} (type=${build_type})... done")
-
-
-endfunction(vf_add_library)
\ No newline at end of file
+
+
+
+macro(buildSourceGroup targetName path)
+    #input: targetName (e.g. lib name, exe name)
+
+    unset(SOURCE_GROUP)
+    string(REPLACE "/" ";" folderListFromPath ${path})
+    set(findTargetName 0)
+
+    foreach(folder ${folderListFromPath})
+        if(findTargetName)
+            set(SOURCE_GROUP ${SOURCE_GROUP}\\${folder})
+        endif()
+
+        if(${folder} STREQUAL ${targetName})
+            SET(findTargetName 1)
+        endif()
+    endforeach()
+
+    if(NOT SOURCE_GROUP)
+        set(SOURCE_GROUP "general")
+    endif()
+    message("Source group: ${SOURCE_GROUP}")
+    #output: SOURCE_GROUP
+endmacro(buildSourceGroup)
\ No newline at end of file
diff --git a/cpu/VirtualFluidsBasic/CMakeLists.txt b/cpu/VirtualFluidsBasic/CMakeLists.txt
index dcf15e33549bfdb095aaaeca7483f0a204aa66b1..ea3869ed730010820b5a9bd1225199a4ea33ada5 100644
--- a/cpu/VirtualFluidsBasic/CMakeLists.txt
+++ b/cpu/VirtualFluidsBasic/CMakeLists.txt
@@ -18,7 +18,8 @@ SET(CAB_ADDITIONAL_LINK_LIBRARIES ${MPI_LIBRARY})
 INCLUDE_DIRECTORIES(${SOURCE_ROOT}/VirtualFluidsCore)
 INCLUDE_DIRECTORIES(${MPI_INCLUDE_PATH})
 
-vf_add_library(FOLDER
+vf_add_library(BUILDTYPE static
+               FOLDER
         ${CMAKE_CURRENT_LIST_DIR}/numerics/geometry3d
         ${CMAKE_CURRENT_LIST_DIR}/numerics/geometry3d/Creator
         ${CMAKE_CURRENT_LIST_DIR}/numerics/geometry3d/KdTree
diff --git a/cpu/VirtualFluidsCore/CMakeLists.txt b/cpu/VirtualFluidsCore/CMakeLists.txt
index 47bcdef2cfb83b863346bfc19e6b54ceeb211b49..2e7fab9f9262569d29f1cce67d3887ba132a0a41 100644
--- a/cpu/VirtualFluidsCore/CMakeLists.txt
+++ b/cpu/VirtualFluidsCore/CMakeLists.txt
@@ -1,5 +1,3 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
-
 
 #################################################################
 ###   PACKAGES						                          ###
@@ -97,7 +95,7 @@ message("CAB_ADDITIONAL_LINK_LIBRARIES: " ${CAB_ADDITIONAL_LINK_LIBRARIES})
 #CREATE_CAB_PROJECT(VirtualFluids STATIC)
 include (${PROJECT_SOURCE_DIR}/CMake/VirtualFluidsMacros.cmake)
 
-vf_add_library(DEPENDS VirtualFluidsBasic)
+vf_add_library(BUILDTYPE static DEPENDS VirtualFluidsBasic)
 
 vf_get_library_name(library_name)
 target_include_directories(${library_name} PRIVATE ${SOURCE_ROOT}/VirtualFluidsBasic)