diff --git a/cmake/waLBerlaFunctions.cmake b/cmake/waLBerlaFunctions.cmake
index 861496568c86a6f4a0ee6d029b8aa8f1d60c1845..3de113afac0545faed736328fb79f84d1aa35b79 100644
--- a/cmake/waLBerlaFunctions.cmake
+++ b/cmake/waLBerlaFunctions.cmake
@@ -91,7 +91,7 @@ function ( waLBerla_add_module )
     if ( hasSourceFiles )
         set( generatedSourceFiles )
         set( generatorSourceFiles )
-        handle_python_codegen(sourceFiles generatedSourceFiles generatorSourceFiles codeGenRequired ${sourceFiles})
+        handle_python_codegen(sourceFiles generatedSourceFiles generatorSourceFiles codeGenRequired "default_codegen" ${sourceFiles})
         if( NOT WALBERLA_BUILD_WITH_CODEGEN AND codeGenRequired)
             message(STATUS "Skipping ${ARG_NAME} since pystencils code generation is not enabled")
             return()
@@ -125,6 +125,10 @@ function ( waLBerla_add_module )
                                                ARCHIVE DESTINATION lib )
     endif( )
 
+    if( codeGenRequired)
+        target_include_directories(${ARG_NAME} PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/default_codegen")
+    endif()
+
     # Install rule for header
     install ( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/
               DESTINATION "walberla/${moduleName}"
@@ -159,12 +163,13 @@ endfunction ( waLBerla_add_module )
 # The application is linked against all waLBerla modules that are listed after DEPENDS
 #
 #
-#   NAME    [required]   Name of application
-#   GROUP   [optional]   IDE group name (e.g. VS)
-#   DEPENDS [required]   list of modules, that this application depends on
-#   FILES   [optional]   list of all source and header files belonging to that application
-#                        if this is not given, all source and header files in the directory are added.
-#                        Careful: when file was added or deleted, cmake has to be run again
+#   NAME    [required]    Name of application
+#   GROUP   [optional]    IDE group name (e.g. VS)
+#   DEPENDS [required]    list of modules, that this application depends on
+#   FILES   [optional]    list of all source and header files belonging to that application
+#                         if this is not given, all source and header files in the directory are added.
+#                         Careful: when file was added or deleted, cmake has to be run again
+#   CODGEN_CFG [optional] string passed to code generation scripts
 #
 #  Example:
 #     waLBerla_compile_app ( NAME myApp DEPENDS core field lbm/boundary )
@@ -172,14 +177,18 @@ endfunction ( waLBerla_add_module )
 
 function ( waLBerla_add_executable )
     set( options )
-    set( oneValueArgs NAME GROUP )
-    set( multiValueArgs FILES DEPENDS )
+    set( oneValueArgs NAME GROUP CODEGEN_CFG)
+    set( multiValueArgs FILES DEPENDS)
     cmake_parse_arguments( ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
 
     if( NOT ARG_NAME )
       message ( FATAL_ERROR "waLBerla_add_executable called without a NAME" )
     endif()
 
+    if( NOT ARG_CODEGEN_CFG)
+        set(ARG_CODEGEN_CFG "default_codegen")
+    endif()
+
     # Skip this app, if it depends on modules that have not been built ( because they for example depend on PE)
     foreach ( depMod ${ARG_DEPENDS} )
         get_module_library_name ( depModLibraryName ${depMod} )
@@ -211,7 +220,8 @@ function ( waLBerla_add_executable )
 
     set( generatedSourceFiles )
     set( generatorSourceFiles )
-    handle_python_codegen(sourceFiles generatedSourceFiles generatorSourceFiles codeGenRequired ${sourceFiles})
+    handle_python_codegen(sourceFiles generatedSourceFiles generatorSourceFiles
+                          codeGenRequired ${ARG_CODEGEN_CFG} ${sourceFiles} )
 
     if( NOT WALBERLA_BUILD_WITH_CODEGEN AND codeGenRequired)
         message(STATUS "Skipping ${ARG_NAME} since pystencils code generation is not enabled")
@@ -237,6 +247,10 @@ function ( waLBerla_add_executable )
         set_property( TARGET  ${ARG_NAME}  PROPERTY  FOLDER  ${ARG_GROUP} )
     endif()
 
+    if( codeGenRequired )
+        target_include_directories(${ARG_NAME} PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/${ARG_CODEGEN_CFG}")
+    endif()
+
 endfunction ( waLBerla_add_executable )
 
 #######################################################################################################################
diff --git a/cmake/waLBerlaHelperFunctions.cmake b/cmake/waLBerlaHelperFunctions.cmake
index a52d2d5cd8b377ebaa58803826538aeba4afe6c9..7a49ab385cc9ff12ef819b44a8db25deb51d76eb 100644
--- a/cmake/waLBerlaHelperFunctions.cmake
+++ b/cmake/waLBerlaHelperFunctions.cmake
@@ -31,7 +31,7 @@ endfunction ( add_flag )
 # The python script, when called with -l, should return a semicolon-separated list of generated files
 # if this list changes, CMake has to be run manually again.
 #######################################################################################################################
-function( handle_python_codegen sourceFilesOut generatedSourceFilesOut generatorsOut codeGenRequiredOut )
+function( handle_python_codegen sourceFilesOut generatedSourceFilesOut generatorsOut codeGenRequiredOut codegenCfg)
     set(result )
     set(generatedResult )
     set(generatorsResult )
@@ -45,7 +45,7 @@ function( handle_python_codegen sourceFilesOut generatedSourceFilesOut generator
 
                 set( generatedWithAbsolutePath )
                 foreach( filename ${generatedSourceFiles} )
-                    list(APPEND generatedWithAbsolutePath ${CMAKE_CURRENT_BINARY_DIR}/${filename})
+                    list(APPEND generatedWithAbsolutePath ${CMAKE_CURRENT_BINARY_DIR}/${codegenCfg}/${filename})
                 endforeach()
 
                 list(APPEND generatedResult  ${generatedWithAbsolutePath} )
@@ -56,6 +56,7 @@ function( handle_python_codegen sourceFilesOut generatedSourceFilesOut generator
                         "\\\{\"EXPECTED_FILES\": [\"${jsonFileList}\"], \"CMAKE_VARS\" : \\\{  "
                             "\"WALBERLA_OPTIMIZE_FOR_LOCALHOST\": \"${WALBERLA_OPTIMIZE_FOR_LOCALHOST}\","
                             "\"WALBERLA_DOUBLE_ACCURACY\": \"${WALBERLA_DOUBLE_ACCURACY}\","
+                            "\"CODEGEN_CFG\": \"${codegenCfg}\","
                             "\"WALBERLA_BUILD_WITH_MPI\": \"${WALBERLA_BUILD_WITH_MPI}\","
                             "\"WALBERLA_BUILD_WITH_CUDA\": \"${WALBERLA_BUILD_WITH_CUDA}\","
                             "\"WALBERLA_BUILD_WITH_OPENMP\": \"${WALBERLA_BUILD_WITH_OPENMP}\" \\\} \\\}"
@@ -63,11 +64,11 @@ function( handle_python_codegen sourceFilesOut generatedSourceFilesOut generator
                 string(REPLACE "\"" "\\\"" pythonParameters ${pythonParameters})   # even one more quoting level required
                 string(REPLACE "\n" "" pythonParameters ${pythonParameters})  # remove newline characters
 
+                file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${codegenCfg}")
                 add_custom_command(OUTPUT ${generatedWithAbsolutePath}
                                    DEPENDS ${sourceFile}
                                    COMMAND ${PYTHON_EXECUTABLE} ${sourceFile} ${pythonParameters}
-                                   WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
-                include_directories(${CMAKE_CURRENT_BINARY_DIR})
+                                   WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${codegenCfg}")
             endif()
         else()
             list(APPEND result ${sourceFile})