diff --git a/bin/analyzegrid/analyze_grid.cc b/bin/analyzegrid/analyze_grid.cc
index c4bf9eb6f76df7d8176a216cde231dc617da2f72..61eddbf158de79a000bebf35ae899ab4a0865dcf 100644
--- a/bin/analyzegrid/analyze_grid.cc
+++ b/bin/analyzegrid/analyze_grid.cc
@@ -17,7 +17,7 @@
 int main(int argc, char** argv){
   try
   {
-    if (argc != 2){
+    if (argc != 3){
       std::cout << "Need ini file as command line argument." << std::endl;
       return 1;
     }
@@ -39,7 +39,7 @@ int main(int argc, char** argv){
     bool unstructured = initree.get("formcompiler.grid_unstructured", false);
     std::cout << "unstructured: " << unstructured << std::endl;
 
-    std::string filename = initree.get("analyze_grid_filename", "analyze_grid.txt");
+    std::string filename = std::string(argv[2]);
     std::cout << "writing into: " << filename << std::endl;
 
     if (quadrilateral){
diff --git a/cmake/modules/DunePerftoolMacros.cmake b/cmake/modules/DunePerftoolMacros.cmake
index ca33bfae93d7bcedc198d864518f424944924efb..42446c123d63b57dd0e5bab5c92a7d57b188c7c1 100644
--- a/cmake/modules/DunePerftoolMacros.cmake
+++ b/cmake/modules/DunePerftoolMacros.cmake
@@ -71,7 +71,7 @@ endif()
 file(GLOB_RECURSE UFL2PDELAB_SOURCES ${UFL2PDELAB_GLOB_PATTERN})
 
 function(add_generated_executable)
-  set(OPTIONS EXCLUDE_FROM_ALL)
+  set(OPTIONS EXCLUDE_FROM_ALL ANALYZE_GRID)
   set(SINGLE TARGET SOURCE UFLFILE INIFILE)
   set(MULTI FORM_COMPILER_ARGS DEPENDS)
   include(CMakeParseArguments)
@@ -115,6 +115,18 @@ function(add_generated_executable)
     set(GEN_EXCLUDE_FROM_ALL "")
   endif()
 
+  # Process analyze grid option
+  set(ANALYZE_GRID_FILE)
+  set(ANALYZE_GRID_OPTION)
+  if(GEN_ANALYZE_GRID)
+    set(ANALYZE_GRID_FILE "${GEN_INIFILE}.csv")
+    set(ANALYZE_GRID_OPTION "--sumfact-grid-info=${ANALYZE_GRID_FILE}")
+    add_custom_command(OUTPUT ${ANALYZE_GRID_FILE}
+                       COMMAND ${CMAKE_BINARY_DIR}/bin/analyzegrid/analyze_grid ${GEN_INIFILE} ${ANALYZE_GRID_FILE}
+                       COMMENT "Analyzing the grid for target ${GEN_TARGET}..."
+                       )
+  endif()
+
   # Parse a mapping of operators to build and their respective filenames
   dune_execute_process(COMMAND ${CMAKE_BINARY_DIR}/run-in-dune-env python ${perftool_path}/deplist.py ${GEN_INIFILE} ${GEN_TARGET}
                        OUTPUT_VARIABLE depdata
@@ -132,7 +144,8 @@ function(add_generated_executable)
                                --ini-file ${GEN_INIFILE}
                                --target-name ${GEN_TARGET}
                                --operator-to-build ${op}
-                       DEPENDS ${GEN_UFLFILE} ${UFL2PDELAB_SOURCES} ${GEN_DEPENDS} ${DUNE_PERFTOOL_ADDITIONAL_PYTHON_SOURCES}
+                               ${ANALYZE_GRID_OPTION}
+                       DEPENDS ${GEN_UFLFILE} ${UFL2PDELAB_SOURCES} ${GEN_DEPENDS} ${DUNE_PERFTOOL_ADDITIONAL_PYTHON_SOURCES} ${ANALYZE_GRID_FILE}
                        COMMENT "Generating operator file ${depdata___${op}} for the target ${GEN_TARGET}"
                        )
     set(header_deps ${header_deps} ${depdata___${op}})
diff --git a/cmake/modules/GeneratedSystemtests.cmake b/cmake/modules/GeneratedSystemtests.cmake
index 2b1d87728c04a9359df79f3711c0df9c4f3f621e..41975df0e51fb575136c0c05510c9fb0eb7b5adc 100644
--- a/cmake/modules/GeneratedSystemtests.cmake
+++ b/cmake/modules/GeneratedSystemtests.cmake
@@ -3,7 +3,7 @@
 
 function(dune_add_formcompiler_system_test)
   # parse arguments
-  set(OPTION DEBUG NO_TESTS)
+  set(OPTION DEBUG NO_TESTS ANALYZE_GRID)
   set(SINGLE INIFILE BASENAME SCRIPT UFLFILE SOURCE)
   set(MULTI CREATED_TARGETS)
   cmake_parse_arguments(SYSTEMTEST "${OPTION}" "${SINGLE}" "${MULTI}" ${ARGN})
@@ -21,6 +21,10 @@ function(dune_add_formcompiler_system_test)
   if(SYSTEMTEST_SOURCE)
     set(SOURCE SOURCE ${SYSTEMTEST_SOURCE})
   endif()
+  set(ANALYZE_GRID_STR "")
+  if(SYSTEMTEST_ANALYZE_GRID)
+    set(ANALYZE_GRID_STR "ANALYZE_GRID")
+  endif()
 
   # set a default for the script. call_executable.py just calls the executable.
   # There, it is also possible to hook in things depending on the inifile
@@ -57,6 +61,7 @@ function(dune_add_formcompiler_system_test)
                              DEPENDS ${SYSTEMTEST_INIFILE}
                              EXCLUDE_FROM_ALL
                              ${SOURCE}
+                             ${ANALYZE_GRID_STR}
                              )
 
     # Enrich the target with preprocessor variables from the __static section
diff --git a/test/sumfact/poisson/CMakeLists.txt b/test/sumfact/poisson/CMakeLists.txt
index bf99ee3c85a7011335445b0d50052bb2f9acee0a..9dda49d781ddcca1f93ac845d3528bcda919bc93 100644
--- a/test/sumfact/poisson/CMakeLists.txt
+++ b/test/sumfact/poisson/CMakeLists.txt
@@ -53,6 +53,7 @@ dune_add_formcompiler_system_test(UFLFILE poisson_3d.ufl
 dune_add_formcompiler_system_test(UFLFILE poisson_dg_2d.ufl
                                   BASENAME sumfact_poisson_dg_2d_unstructured
                                   INIFILE poisson_dg_2d_unstructured.mini
+                                  ANALYZE_GRID
                                   )
 # dune_add_formcompiler_system_test(UFLFILE poisson_dg_3d.ufl
 #                                   BASENAME sumfact_poisson_dg_3d_unstructured