diff --git a/python/dune/perftool/options.py b/python/dune/perftool/options.py
index 6c239ccd5af49e9c042528024a4e6fc5c13b4d0f..bca3b2a28be7a4ffd7a34de7734297e9949c380e 100644
--- a/python/dune/perftool/options.py
+++ b/python/dune/perftool/options.py
@@ -69,7 +69,7 @@ class PerftoolFormOptionsArray(ImmutableRecord):
     filename = PerftoolOption(default=None, helpstr="The filename to use for this LocalOperator")
     classname = PerftoolOption(default=None, helpstr="The name of the C++ class to generate")
     numerical_jacobian = PerftoolOption(default=False, helpstr="use numerical jacobians (only makes sense, if uflpdelab for some reason fails to generate analytic jacobians)")
-    matrix_free = PerftoolOption(default=False, helpstr="Use iterative solver with matrix free jacobian application")
+    matrix_free = PerftoolOption(default=False, helpstr="Generate jacobian_apply_* methods for matrix free solvers")
     print_transformations = PerftoolOption(default=False, helpstr="print out dot files after ufl tree transformations")
     print_transformations_dir = PerftoolOption(default=".", helpstr="place where to put dot files (can be omitted)")
     quadrature_order = PerftoolOption(_type=int, helpstr="Quadrature order used for all integrals.")
@@ -87,6 +87,7 @@ class PerftoolFormOptionsArray(ImmutableRecord):
     simplify = PerftoolOption(default=False, helpstr="Whether to simplify expressions using sympy")
     assure_statement_ordering = PerftoolOption(default=False, helpstr="Whether special care should be taken for a good statement ordering in sumfact kernels, runs into a loopy scheduler performance bug, but is necessary for production.")
     generate_jacobians = PerftoolOption(default=True, helpstr="Whether jacobian_* methods should be generated. This is set to false automatically, when numerical_jacobian is set to true.")
+    generate_residuals = PerftoolOption(default=True, helpstr="Whether alpha_* methods should be generated.")
     unroll_dimension_loops = PerftoolOption(default=False, helpstr="whether loops over the geometric dimension should be unrolled")
     precompute_quadrature_info = PerftoolOption(default=True, helpstr="compute quadrature points and weights in the constructor of the local operator")
     blockstructured = PerftoolOption(default=False, helpstr="Use block structure")
diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py
index 1a9d9c4661af5e4454e81098a22cbe1797b9eaa0..9f196a654599cf5a48978f0606148c94c79cbaf4 100644
--- a/python/dune/perftool/pdelab/localoperator.py
+++ b/python/dune/perftool/pdelab/localoperator.py
@@ -745,6 +745,9 @@ def local_operator_default_settings(operator, form):
 
 
 def generate_residual_kernels(form, original_form):
+    if not get_form_option("generate_residuals"):
+        return {}
+
     logger = logging.getLogger(__name__)
     with global_context(form_type='residual'):
         operator_kernels = {}