diff --git a/apps/example_app_codegen/CMakeLists.txt b/apps/example_app_codegen/CMakeLists.txt
index 60a8c8e23f3a4091240f24994bc475479535bcce..4ab7c412a56f64286c604d6e2bc5ad2ca5a8ebb8 100644
--- a/apps/example_app_codegen/CMakeLists.txt
+++ b/apps/example_app_codegen/CMakeLists.txt
@@ -1,13 +1,23 @@
 waLBerla_link_files_to_builddir( *.prm  *.py)
 
-waLBerla_generate_target_from_python(NAME LatticeModelGenerated FILE LatticeModel.py
+waLBerla_generate_target_from_python(NAME LatticeModelGenerated FILE ExampleApp.py
         OUT_FILES CumulantMRTSweep.h CumulantMRTSweep.cpp CumulantMRTPackInfo.h CumulantMRTPackInfo.cpp InitialPDFsSetter.h InitialPDFsSetter.cpp CumulantMRTNoSlip.h CumulantMRTNoSlip.cpp
-	CumulantMRTSweepAVX.h CumulantMRTSweepAVX.cpp CumulantMRTPackInfoAVX.h CumulantMRTPackInfoAVX.cpp InitialPDFsSetterAVX.h InitialPDFsSetterAVX.cpp CumulantMRTNoSlipAVX.h CumulantMRTNoSlipAVX.cpp
+)
+
+waLBerla_generate_target_from_python(NAME LatticeModelGeneratedAVX FILE ExampleAppAVX.py
+	OUT_FILES CumulantMRTSweepAVX.h CumulantMRTSweepAVX.cpp CumulantMRTPackInfoAVX.h CumulantMRTPackInfoAVX.cpp InitialPDFsSetterAVX.h InitialPDFsSetterAVX.cpp CumulantMRTNoSlipAVX.h CumulantMRTNoSlipAVX.cpp
 )
 target_compile_options(LatticeModelGenerated PRIVATE -mavx2)
+target_compile_options(LatticeModelGeneratedAVX PRIVATE -mavx2)
 
 waLBerla_add_executable ( NAME ExampleAppCodegen
                           FILES ExampleApp.cpp
                           DEPENDS blockforest core field lbm geometry timeloop gui
                                   LatticeModelGenerated)
 target_compile_options(ExampleAppCodegen PRIVATE -mavx2)
+
+waLBerla_add_executable ( NAME ExampleAppCodegenAVX
+                          FILES ExampleApp.cpp
+                          DEPENDS blockforest core field lbm geometry timeloop gui
+			  LatticeModelGeneratedAVX)
+target_compile_options(ExampleAppCodegenAVX PRIVATE -mavx2 -DWALBERLA_BUILD_WITH_AVX)
diff --git a/apps/example_app_codegen/LatticeModel.py b/apps/example_app_codegen/LatticeModel.py
index b0d28978c984be91a90811841b212af0dd32c6c9..8730764c96849a1d337ce8d6ddf4b2608b265bac 100755
--- a/apps/example_app_codegen/LatticeModel.py
+++ b/apps/example_app_codegen/LatticeModel.py
@@ -71,16 +71,8 @@ cpu_vectorize_info = {
 params_cpu = {"target": ps.Target.CPU}
 params_avx = {"target": ps.Target.CPU, "cpu_vectorize_info": cpu_vectorize_info}
 
-with CodeGeneration() as ctx:
-    for optim, params in zip(("", "AVX"), (params_cpu, params_avx)):
-        print(f"generating kernels for CPU {optim}")
-        """
-        generate_sweep(ctx, f"CumulantMRTSweep{optim}", lbm_update_rule, field_swaps=[(pdfs, pdfs_tmp)], **params)
-        generate_pack_info_from_kernel(ctx, f"CumulantMRTPackInfo{optim}", lbm_update_rule, **params)
-        generate_sweep(ctx, f"InitialPDFsSetter{optim}", pdfs_setter, **params)
-        generate_boundary(ctx, f"CumulantMRTNoSlip{optim}", NoSlip(), lbm_method, **params)
-        """
-        generate_sweep(ctx, f"CumulantMRTSweep{optim}", lbm_update_rule, field_swaps=[(pdfs, pdfs_tmp)], **params)
-        generate_pack_info_from_kernel(ctx, f"CumulantMRTPackInfo{optim}", lbm_update_rule, **params)
-        generate_sweep(ctx, f"InitialPDFsSetter{optim}", pdfs_setter, **params)
-        generate_boundary(ctx, f"CumulantMRTNoSlip{optim}", NoSlip(), lbm_method, **params)
+def generate(ctx, optim, params):
+    generate_sweep(ctx, f"CumulantMRTSweep{optim}", lbm_update_rule, field_swaps=[(pdfs, pdfs_tmp)], **params)
+    generate_pack_info_from_kernel(ctx, f"CumulantMRTPackInfo{optim}", lbm_update_rule, **params)
+    generate_sweep(ctx, f"InitialPDFsSetter{optim}", pdfs_setter, **params)
+    generate_boundary(ctx, f"CumulantMRTNoSlip{optim}", NoSlip(), lbm_method, **params)
diff --git a/apps/example_app_codegen/Readme.md b/apps/example_app_codegen/Readme.md
index 228799d588ced3fd95e375a753d2f4dc8a1f7fd1..fff2bb66a551273309dfd15ca6d9404284dd6bb5 100644
--- a/apps/example_app_codegen/Readme.md
+++ b/apps/example_app_codegen/Readme.md
@@ -14,13 +14,6 @@ VERSION=0.4.4 DEPS="/work/jgrad/walberla_deps" PYTHONPATH="${DEPS}/${VERSION}/lb
 VERSION=0.4.4 DEPS="/work/jgrad/walberla_deps" PYTHONPATH="${DEPS}/${VERSION}/lbmpy:${DEPS}/${VERSION}/pystencils:${DEPS}/devel/walberla/python/" make -j$(nproc)
 ```
 
-Then compile the AVX binary separately with:
-```sh
-(cd /work/jgrad/walberla_deps/devel/example_app/build/apps/example_app_codegen && /usr/bin/ccache /usr/bin/clang++  -DBOOST_ALL_NO_LIB -I/work/jgrad/walberla_deps/devel/example_app/build/walberla/src -I/work/jgrad/walberla_deps/devel/walberla/src -I/work/jgrad/walberla_deps/devel/example_app/build/apps/example_app_codegen/default_codegen -isystem /work/jgrad/walberla_deps/devel/example_app/src -isystem /work/jgrad/walberla_deps/devel/example_app/build/src -isystem /work/jgrad/walberla_deps/0.4.4/pystencils/pystencils/include -isystem /usr/lib/x86_64-linux-gnu/openmpi/include/openmpi -isystem /usr/lib/x86_64-linux-gnu/openmpi/include  -Wall -Wconversion -Wshadow -Wno-c++11-extensions -Qunused-arguments -pthread -pthread -g   -std=gnu++17 -DWALBERLA_BUILD_WITH_AVX -mavx2 -o CMakeFiles/ExampleAppCodegen.dir/ExampleAppAVX.cpp.o -c /work/jgrad/walberla_deps/devel/example_app/apps/example_app_codegen/ExampleApp.cpp)
-(cd /work/jgrad/walberla_deps/devel/example_app/build/apps/example_app_codegen && /tikhome/jgrad/.local/lib/python3.8/site-packages/cmake/data/bin/cmake -E cmake_link_script CMakeFiles/ExampleAppCodegen.dir/link.txt --verbose=1
-/usr/bin/clang++   -Wall -Wconversion -Wshadow -Wno-c++11-extensions -Qunused-arguments -pthread -pthread -g    CMakeFiles/ExampleAppCodegen.dir/ExampleAppAVX.cpp.o  -o ExampleAppCodegenAVX  -Wl,-rpath,/usr/lib/x86_64-linux-gnu/openmpi/lib ../../walberla/src/blockforest/libblockforest.a ../../walberla/src/core/libcore.a ../../walberla/src/field/libfield.a ../../walberla/src/lbm/liblbm.a ../../walberla/src/geometry/libgeometry.a ../../walberla/src/timeloop/libtimeloop.a ../../walberla/src/gui/libgui.a libLatticeModelGenerated.a ../../walberla/src/domain_decomposition/libdomain_decomposition.a ../../walberla/src/vtk/libvtk.a ../../walberla/src/boundary/libboundary.a ../../walberla/src/blockforest/libblockforest.a ../../walberla/src/core/libcore.a ../../walberla/src/field/libfield.a ../../walberla/src/lbm/liblbm.a ../../walberla/src/geometry/libgeometry.a ../../walberla/src/timeloop/libtimeloop.a ../../walberla/src/gui/libgui.a libLatticeModelGenerated.a ../../walberla/src/domain_decomposition/libdomain_decomposition.a ../../walberla/src/vtk/libvtk.a ../../walberla/src/boundary/libboundary.a ../../walberla/src/blockforest/libblockforest.a ../../walberla/src/core/libcore.a ../../walberla/src/field/libfield.a ../../walberla/src/lbm/liblbm.a ../../walberla/src/geometry/libgeometry.a ../../walberla/src/timeloop/libtimeloop.a ../../walberla/src/gui/libgui.a libLatticeModelGenerated.a ../../walberla/src/domain_decomposition/libdomain_decomposition.a ../../walberla/src/vtk/libvtk.a ../../walberla/src/boundary/libboundary.a /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so /usr/lib/libpfft.so /usr/lib/x86_64-linux-gnu/libfftw3.so /usr/lib/x86_64-linux-gnu/libfftw3_mpi.so ../../walberla/extern/lodepng/liblodepng.a /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so /usr/lib/libpfft.so /usr/lib/x86_64-linux-gnu/libfftw3.so /usr/lib/x86_64-linux-gnu/libfftw3_mpi.so)
-```
-
 Run the binaries with the parameter files:
 ```sh
 apps/example_app_codegen/ExampleAppCodegen ../apps/example_app_codegen/ExampleApp.prm