diff --git a/python/dune/perftool/options.py b/python/dune/perftool/options.py
index 5b5a6d158b7d38fdf814e06c196a73ba64316a27..e73ff9efe028c8a6f0524c7a50f9622e0093eb4f 100644
--- a/python/dune/perftool/options.py
+++ b/python/dune/perftool/options.py
@@ -79,6 +79,7 @@ class PerftoolFormOptionsArray(ImmutableRecord):
     constant_transformation_matrix = PerftoolOption(default=False, helpstr="set option if the jacobian of the transformation is constant on a cell")
     fastdg = PerftoolOption(default=False, helpstr="Use FastDGGridOperator from PDELab.")
     sumfact = PerftoolOption(default=False, helpstr="Use sumfactorization")
+    sumfact_regular_jacobians = PerftoolOption(default=False, helpstr="Generate non sum-factorized jacobians (only useful if sumfact is set)")
     vectorization_quadloop = PerftoolOption(default=False, helpstr="whether to generate code with explicit vectorization")
     vectorization_strategy = PerftoolOption(default="none", helpstr="The identifier of the vectorization cost model. Possible values: none|explicit|model")
     vectorization_not_fully_vectorized_error = PerftoolOption(default=False, helpstr="throw an error if nonquadloop vectorization did not fully vectorize")
diff --git a/python/dune/perftool/pdelab/driver/gridfunctionspace.py b/python/dune/perftool/pdelab/driver/gridfunctionspace.py
index 9100e4593a907df28871e323a349c38d49c25621..a4ae3604c06af34a774ba0494751085fcffc1a9e 100644
--- a/python/dune/perftool/pdelab/driver/gridfunctionspace.py
+++ b/python/dune/perftool/pdelab/driver/gridfunctionspace.py
@@ -3,7 +3,6 @@ from dune.perftool.generation import (include_file,
                                       )
 from dune.perftool.options import (get_form_option,
                                    get_option,
-                                   set_option,
                                    )
 from dune.perftool.pdelab.driver import (FEM_name_mangling,
                                          get_cell,
diff --git a/python/dune/perftool/pdelab/geometry.py b/python/dune/perftool/pdelab/geometry.py
index 16f75495847532accedfd4e35a5a9c6a4bc2636c..f56ef3dfc554592ce741d8fd1251a90fb40574e7 100644
--- a/python/dune/perftool/pdelab/geometry.py
+++ b/python/dune/perftool/pdelab/geometry.py
@@ -338,7 +338,7 @@ def define_jacobian_inverse_transposed(name, restriction):
     dim = world_dimension()
     temporary_variable(name, decl_method=define_jacobian_inverse_transposed_temporary(restriction), shape=(dim, dim))
     geo = name_cell_geometry(restriction)
-    pos = get_backend("qp_in_cell", selector=option_switch(("blockstructured", "sumfact")))(restriction)
+    pos = get_backend("qp_in_cell", selector=option_switch("blockstructured"))(restriction)
 
     return quadrature_preamble("{} = {}.jacobianInverseTransposed({});".format(name,
                                                                                geo,
@@ -392,7 +392,7 @@ def define_constant_jacobian_determinant(name):
 def define_jacobian_determinant(name):
     temporary_variable(name, shape=())
     geo = name_geometry()
-    pos = get_backend("quad_pos", selector=option_switch(("blockstructured", "sumfact")))()
+    pos = get_backend("quad_pos", selector=option_switch("blockstructured"))()
     code = "{} = {}.integrationElement({});".format(name,
                                                     geo,
                                                     str(pos),
diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py
index 5e9032060236d9fd0501701d7d1f5840381bfac2..4a374577055ffe6f3784bb9a9293488e1ac34b71 100644
--- a/python/dune/perftool/pdelab/localoperator.py
+++ b/python/dune/perftool/pdelab/localoperator.py
@@ -7,7 +7,8 @@ import numpy as np
 
 from dune.perftool.options import (get_form_option,
                                    get_option,
-                                   option_switch)
+                                   option_switch,
+                                   set_form_option)
 from dune.perftool.generation import (backend,
                                       base_class,
                                       class_basename,
@@ -840,6 +841,10 @@ def generate_jacobian_kernels(form, original_form):
     operator_kernels = {}
     with global_context(form_type="jacobian"):
         if get_form_option("generate_jacobians"):
+            if get_form_option("sumfact"):
+                was_sumfact = True
+                if get_form_option("sumfact_regular_jacobians"):
+                    set_form_option("sumfact", False)
             for measure in set(i.integral_type() for i in jacform.integrals()):
                 logger.info("generate_jacobian_kernels: measure {}".format(measure))
                 with global_context(integral_type=measure):
@@ -857,6 +862,9 @@ def generate_jacobian_kernels(form, original_form):
                 with global_context(integral_type=it):
                     from dune.perftool.pdelab.signatures import assembly_routine_signature
                     operator_kernels[(it, 'jacobian')] = [LoopyKernelMethod(assembly_routine_signature(), kernel=None)]
+            if get_form_option("sumfact_regular_jacobians"):
+                if was_sumfact:
+                    set_form_option("sumfact", True)
 
     # Jacobian apply methods for matrix-free computations
     if get_form_option("matrix_free"):
diff --git a/python/dune/perftool/sumfact/basis.py b/python/dune/perftool/sumfact/basis.py
index d535aebd7364ecf0bdac1edd00d139de20c06241..e9584d1d644ec6ec3c61b2b8cd863e54192b47c9 100644
--- a/python/dune/perftool/sumfact/basis.py
+++ b/python/dune/perftool/sumfact/basis.py
@@ -7,7 +7,6 @@ import itertools
 
 from dune.perftool.generation import (backend,
                                       domain,
-                                      get_backend,
                                       get_counted_variable,
                                       get_counter,
                                       get_global_context_value,
diff --git a/python/dune/perftool/sumfact/geometry.py b/python/dune/perftool/sumfact/geometry.py
index ecec31af151da1d9bbfda0e8a6ac46ac44b8cf94..c4471ee3ab329eef051bfd1a27f0eb0fce1bd4c3 100644
--- a/python/dune/perftool/sumfact/geometry.py
+++ b/python/dune/perftool/sumfact/geometry.py
@@ -3,7 +3,6 @@
 from dune.perftool.generation import (backend,
                                       class_member,
                                       domain,
-                                      get_backend,
                                       get_counted_variable,
                                       iname,
                                       include_file,
diff --git a/test/sumfact/poisson/poisson_dg_3d_unstructured.mini b/test/sumfact/poisson/poisson_dg_3d_unstructured.mini
index 8bbae0587de8d060873012a50cb8144e6bca2d57..012b3356b887eedc31a848b714790d2ac633445b 100644
--- a/test/sumfact/poisson/poisson_dg_3d_unstructured.mini
+++ b/test/sumfact/poisson/poisson_dg_3d_unstructured.mini
@@ -1,4 +1,4 @@
-__name = sumfact_poisson_dg_2d_unstructured_{__exec_suffix}
+__name = sumfact_poisson_dg_3d_unstructured_{__exec_suffix}
 __exec_suffix = {deg_suffix}_{diff_suffix}_{quadvec_suffix}_{gradvec_suffix}
 
 diff_suffix = numdiff, symdiff | expand num
@@ -27,6 +27,7 @@ grid_unstructured = 1
 [formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
 sumfact = 1
+sumfact_regular_jacobians = 1
 vectorization_quadloop = 1, 0 | expand quad
 vectorization_strategy = explicit, none | expand grad