diff --git a/cmake/modules/Codegen.cmake b/cmake/modules/Codegen.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..73ca31ddfa6dac399dc3d2fe37993b791ef0583c
--- /dev/null
+++ b/cmake/modules/Codegen.cmake
@@ -0,0 +1,25 @@
+function(add_code_generate_targets _target)
+
+  get_target_property( compiledefs ${_target} COMPILE_DEFINITIONS )
+  string(REPLACE "compiledefs-NOTFOUND" "" compiledefs "${compiledefs}")
+
+  #Add targets and executables
+  add_executable( ${_target}_generatecode ${ARGN} )
+  set_property(TARGET ${_target}_generatecode APPEND PROPERTY COMPILE_DEFINITIONS "NDEBUG;BASEFUNCTIONSET_CODEGEN_GENERATE;${compiledefs}")
+  dune_target_link_libraries( ${_target}_generatecode "${DUNE_LIBS}" )
+
+  add_executable( ${_target}_compilecode ${ARGN} )
+  set_property(TARGET ${_target}_compilecode APPEND PROPERTY COMPILE_DEFINITIONS "NUSE_BASEFUNCTIONSET_CODEGEN;${compiledefs}")
+  dune_target_link_libraries( ${_target}_compilecode "${DUNE_LIBS}" )
+
+  add_custom_target( ${_target}_generate 
+    ${CMAKE_COMMAND} -D RUN_CODEGEN_PROGRAM=${CMAKE_CURRENT_BINARY_DIR}/${_target}_generatecode -D RUN_CODEGEN_PARAMFILE="" -P ${CMAKE_SOURCE_DIR}/cmake/scripts/RunGenerate.cmake ) 
+  
+  add_custom_target( ${_target}_codegen )
+
+  #Add depenencies  
+  add_dependencies( ${_target}_generate ${_target}_generatecode )
+  add_dependencies( ${_target}_compilecode ${_target}_generate )
+  add_dependencies( ${_target}_codegen ${_target}_compilecode )
+
+endfunction(add_code_generate_targets _target)
diff --git a/cmake/modules/DuneFemDgMacros.cmake b/cmake/modules/DuneFemDgMacros.cmake
index 2641d5df12508431cbd6564f3651fe69603f3a61..3f6bea099e9812c8234bfd5ccd0557dd3cbd88d4 100644
--- a/cmake/modules/DuneFemDgMacros.cmake
+++ b/cmake/modules/DuneFemDgMacros.cmake
@@ -1,10 +1,6 @@
 # the main files for all the tests are in the same dir
 set(FEMDG_MAIN_DIR "${CMAKE_SOURCE_DIR}/dune/fem-dg/main")
 
-# helper variables
-set(SOURCEMAIN  ${FEMDG_MAIN_DIR}/main.cc)
-set(SOURCEONE   ${SOURCEMAIN} ${FEMDG_MAIN_DIR}/main_pol.cc)
-set(SOURCEALL   ${SOURCEMAIN} ${FEMDG_MAIN_DIR}/main_0.cc ${FEMDG_MAIN_DIR}/main_1.cc ${FEMDG_MAIN_DIR}/main_2.cc ${FEMDG_MAIN_DIR}/main_3.cc ${FEMDG_MAIN_DIR}/main_4.cc)
-
+include(Codegen)
 include(TargetDistclean)
 message(AUTHOR_WARNING "TODO: Implement module test.")
diff --git a/cmake/scripts/RunGenerate.cmake b/cmake/scripts/RunGenerate.cmake
index aa04c01272e395a7de622072a4ff8a44f49bb281..a5078ea956e51f79fc0b18f274c613648041b5ae 100644
--- a/cmake/scripts/RunGenerate.cmake
+++ b/cmake/scripts/RunGenerate.cmake
@@ -1,5 +1,3 @@
-
-message( "${RUN_GENERATE_CODE_PROGRAM} fem.eoc.steps:1 femdg.stepper.maximaltimesteps:1 fem.io.outputformat:none ${RUN_GENERATE_CODE_PARAMFILE} " )
 execute_process(COMMAND 
-  ${RUN_GENERATE_CODE_PROGRAM} fem.eoc.steps:1 femdg.stepper.maximaltimesteps:1 fem.io.outputformat:none ${RUN_GENERATE_CODE_PARAMFILE} )
+  ${RUN_CODEGEN_PROGRAM} fem.eoc.steps:1 femdg.stepper.maximaltimesteps:1 fem.io.outputformat:none ${RUN_CODEGEN_PARAMFILE} )
 
diff --git a/cmake/scripts/RunGenerateCode.cmake b/cmake/scripts/RunGenerateCode.cmake
deleted file mode 100644
index 50b78875b3dd1da6e01f8bfde8a240a829131ef1..0000000000000000000000000000000000000000
--- a/cmake/scripts/RunGenerateCode.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-message("COMMAND ${RUN_GENERATE_CODE_EXEC}" )
-execute_process(COMMAND make ${RUN_GENERATE_CODE_EXEC} )
-message( "${RUN_GENERATE_CODE_PROGRAM} fem.eoc.steps:1 femdg.stepper.maximaltimesteps:1 fem.io.outputformat:none ${RUN_GENERATE_CODE_PARAMFILE} " )
-execute_process(COMMAND 
-  ${RUN_GENERATE_CODE_PROGRAM} fem.eoc.steps:1 femdg.stepper.maximaltimesteps:1 fem.io.outputformat:none ${RUN_GENERATE_CODE_PARAMFILE} )
-
diff --git a/dune/fem-dg/test/advdiff/CMakeLists.txt b/dune/fem-dg/test/advdiff/CMakeLists.txt
index da8e5e52d7120645645c1eeab9eba562f590d5d0..44d3dae1260233f550bb69795a8e2738039c6751 100644
--- a/dune/fem-dg/test/advdiff/CMakeLists.txt
+++ b/dune/fem-dg/test/advdiff/CMakeLists.txt
@@ -18,42 +18,7 @@ dune_target_link_libraries(advdiff "${DUNE_LIBS}")
 set_property(TARGET advdiff APPEND PROPERTY 
              COMPILE_DEFINITIONS "ONLY_ONE_P;POLORDER=2")
 
-           #add_code_generate_targets( advdiff main.cc )
-           #add_code_generate_targets( advdiffall main.cc )
-           #
-           #add_custom_target( generate 
-           #  ${CMAKE_COMMAND} -D RUN_GENERATE_CODE_PROGRAM=${CMAKE_CURRENT_BINARY_DIR}/${PROG}_generatecode -D RUN_GENERATE_CODE_PARAMFILE="" -P ${CMAKE_SOURCE_DIR}/cmake/scripts/RunGenerate.cmake ) 
-           #
-           #add_custom_target( generate_code 
-           #  ${CMAKE_COMMAND} -D RUN_GENERATE_CODE_EXEC=${PROG}_generatecode -D RUN_GENERATE_CODE_PROGRAM=${CMAKE_CURRENT_BINARY_DIR}/${PROG}_generatecode -D RUN_GENERATE_CODE_PARAMFILE="" -P ${CMAKE_SOURCE_DIR}/cmake/scripts/RunGenerateCode.cmake ) 
-           #
-           #add_custom_target( compile_code 
-           #                   ${PROG}_compilecode )
-           #
-           #
-           #add_custom_target( codegen
-           #                   generate_code
-           #                   COMMAND compile_code )
-           #
-           #add_dependencies( codegen generate_code compile_code )
+add_code_generate_targets( advdiff main.cc )
+add_code_generate_targets( advdiffall main.cc )
 
-#add_dependencies( advdiff generate )
-
-#generatecode:
-#	$(MAKE) -i clean
-#	$(MAKE) CODEGEN_OBJFILE=  CXXFLAGS="-g -Wall -Wfatal-errors -DBASEFUNCTIONSET_CODEGEN_GENERATE" $(PROG)
-#	$(MAKE) generate
-#
-#generate:
-#	./$(PROG) fem.eoc.steps:1 femdg.stepper.maximaltimesteps:1 fem.io.outputformat:none fem.ode.order:1 paramFiles/paramNSWaves 
-#
-#compilecode:
-#	$(MAKE) clean 
-#	$(MAKE) CXXFLAGS="$(CXXFLAGS) -DUSE_BASEFUNCTIONSET_CODEGEN" $(PROG)
-#
-#codegen:
-#	$(MAKE) generatecode
-#	$(MAKE) compilecode
-#
-#
 dune_add_test( advdiff advdiffall )