diff --git a/python/dune/perftool/options.py b/python/dune/perftool/options.py
index 9376c6b3744de7d2dc83208001db17a815a7ac11..c3fffbc52f4a5fa53ddf06545e35ff9e24b33518 100644
--- a/python/dune/perftool/options.py
+++ b/python/dune/perftool/options.py
@@ -192,7 +192,16 @@ def set_option(key, value):
     any other options.
     """
     global _global_options
-    _global_options = process_options(_global_options).copy(**{key: value})
+    _global_options = process_global_options(_global_options).copy(**{key: value})
+
+
+def set_form_option(key, value, form=None):
+    if form is None:
+        from dune.perftool.generation import get_global_context_value
+        form = get_global_context_value("form_identifier", 0)
+    if isinstance(form, int):
+        form = get_option("operators").split(",")[form].strip()
+    _form_options[form] = _form_options[form].copy(**{key: value})
 
 
 def get_option(key):
diff --git a/python/dune/perftool/pdelab/driver/__init__.py b/python/dune/perftool/pdelab/driver/__init__.py
index d0241f5378b42f52b561bb5fd0c4c58ca3e7b0f4..b26af2359153546509d33abe683a28ab32b38f9f 100644
--- a/python/dune/perftool/pdelab/driver/__init__.py
+++ b/python/dune/perftool/pdelab/driver/__init__.py
@@ -248,7 +248,8 @@ def generate_driver():
         from dune.perftool.loopy.target import type_floatingpoint
         pre_include("#define HP_TIMER_OPCOUNTER {}".format(type_floatingpoint()), filetag="driver")
         evaluate_residual_timer()
-        apply_jacobian_timer()
+        if get_form_option("matrix_free"):
+            apply_jacobian_timer()
     elif is_stationary():
         from dune.perftool.pdelab.driver.solve import dune_solve
         vec = dune_solve()
diff --git a/python/dune/perftool/pdelab/driver/gridfunctionspace.py b/python/dune/perftool/pdelab/driver/gridfunctionspace.py
index 410036b9e8c95b3dae16c8b8eb8aa4a64e44988a..f95cbefecbfa012ced6eb06de2daf65ff31968de 100644
--- a/python/dune/perftool/pdelab/driver/gridfunctionspace.py
+++ b/python/dune/perftool/pdelab/driver/gridfunctionspace.py
@@ -50,10 +50,6 @@ def type_range():
 def typedef_grid(name):
     dim = get_dimension()
     if isQuadrilateral(get_trial_element().cell()):
-        # For Yasp Grids the jacobian of the transformation is diagonal and constant on each cell
-        set_option('diagonal_transformation_matrix', True)
-        set_option('constant_transformation_matrix', True)
-
         range_type = type_range()
         if get_option("yaspgrid_offset"):
             gridt = "Dune::YaspGrid<{0}, Dune::EquidistantOffsetCoordinates<{1}, {0}>>".format(dim, range_type)
diff --git a/python/dune/perftool/pdelab/driver/timings.py b/python/dune/perftool/pdelab/driver/timings.py
index d003c1c6226a243788fb0bf4e777bee7364538c2..1adba1a1a8b26dcd43a24728f1a20e6113418dbe 100644
--- a/python/dune/perftool/pdelab/driver/timings.py
+++ b/python/dune/perftool/pdelab/driver/timings.py
@@ -1,6 +1,6 @@
 """ Timing related generator functions """
 
-from dune.perftool.options import get_option, set_option
+from dune.perftool.options import get_option
 from dune.perftool.generation import (cached,
                                       include_file,
                                       pre_include,
@@ -119,9 +119,6 @@ def evaluate_residual_timer():
 
 @preamble
 def apply_jacobian_timer():
-    # Set the matrix_free option to True!
-    set_option("matrix_free", True)
-
     formdata = get_formdata()
     n_go = name_gridoperator(formdata)
     v = name_vector(formdata)
diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py
index 253917ba0b225f62a28d60b0caabec165696dfcb..f038e48410413ab3ce5e091fa868b5da876ef5e9 100644
--- a/python/dune/perftool/pdelab/localoperator.py
+++ b/python/dune/perftool/pdelab/localoperator.py
@@ -718,6 +718,14 @@ def generate_localoperator_kernels(operator):
     from dune.perftool.pdelab.parameter import name_paramclass
     name_paramclass()
 
+    # Set some options!
+    from dune.perftool.pdelab.driver import isQuadrilateral
+    if isQuadrilateral(form.coefficients()[0].ufl_element().cell()):
+        from dune.perftool.options import set_form_option
+        # For Yasp Grids the jacobian of the transformation is diagonal and constant on each cell
+        set_form_option('diagonal_transformation_matrix', True)
+        set_form_option('constant_transformation_matrix', True)
+
     # Add right base classes for stationary/instationary operators
     base_class('Dune::PDELab::LocalOperatorDefaultFlags', classtag="operator")
     from dune.perftool.pdelab.driver import is_stationary