diff --git a/python/dune/perftool/options.py b/python/dune/perftool/options.py
index 7853bb547268bf587aa56fa4aaaa2fb1896508f4..9661737148258057dbcaef3d775ef6d584ebc881 100644
--- a/python/dune/perftool/options.py
+++ b/python/dune/perftool/options.py
@@ -80,6 +80,7 @@ class PerftoolFormOptionsArray(ImmutableRecord):
     sumfact = PerftoolOption(default=False, helpstr="Use sumfactorization")
     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")
     vectorization_horizontal = PerftoolOption(default=None, helpstr="an explicit value for horizontal vectorization read by the 'explicit' strategy")
     vectorization_vertical = PerftoolOption(default=None, helpstr="an explicit value for vertical vectorization read by the 'explicit' strategy")
     vectorization_padding = PerftoolOption(default=None, helpstr="an explicit value for the allowed padding in vectorization")
@@ -234,14 +235,19 @@ def get_form_option(key, form=None):
 
 def option_switch(opt):
     def _switch():
+        if isinstance(opt, tuple):
+            opts = opt
+        else:
+            assert isinstance(opt, str)
+            opts = (opt,)
         try:
-            if get_option(opt):
-                return opt
-            else:
-                return "default"
+            for o in opts:
+                if get_option(o):
+                    return o
+            return "default"
         except AttributeError:
-            if get_form_option(opt):
-                return opt
-            else:
-                return "default"
+            for o in opts:
+                if get_form_option(o):
+                    return o
+            return "default"
     return _switch
diff --git a/python/dune/perftool/pdelab/geometry.py b/python/dune/perftool/pdelab/geometry.py
index d308917adbd3391d4b61832938b3a1c4f3355eb5..80ab0387e9728b2c05c2a214b9e7b2fb35c75ea4 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"))(restriction)
+    pos = get_backend("qp_in_cell", selector=option_switch(("blockstructured", "sumfact")))(restriction)
     return quadrature_preamble("{} = {}.jacobianInverseTransposed({});".format(name,
                                                                                geo,
                                                                                str(pos),
diff --git a/python/dune/perftool/sumfact/__init__.py b/python/dune/perftool/sumfact/__init__.py
index fa28b0f4e744164349c92712088a7e09873161e1..33d3e2d68398f1eda22a98e3d4125df5b99aae96 100644
--- a/python/dune/perftool/sumfact/__init__.py
+++ b/python/dune/perftool/sumfact/__init__.py
@@ -5,7 +5,6 @@ from dune.perftool.pdelab.argument import (name_applycontainer,
                                            )
 from dune.perftool.sumfact.quadrature import (quadrature_inames,
                                               quadrature_weight,
-                                              pymbolic_quadrature_position,
                                               )
 
 from dune.perftool.sumfact.basis import (lfs_inames,
diff --git a/python/dune/perftool/sumfact/geometry.py b/python/dune/perftool/sumfact/geometry.py
index 7b78de412d2e2c5a893e2d1d1d7e32315bd6aafd..0f0f25e8635fd2e6cd89d6e21d811bc7c2f47f9d 100644
--- a/python/dune/perftool/sumfact/geometry.py
+++ b/python/dune/perftool/sumfact/geometry.py
@@ -87,7 +87,7 @@ def pymbolic_spatial_coordinate_multilinear(do_predicates, visitor):
 
     from dune.perftool.sumfact.symbolic import SumfactKernel
     sf = SumfactKernel(matrix_sequence=matrix_sequence,
-                       input=inp,
+                       interface=inp,
                        )
 
     vsf = attach_vectorization_info(sf)
@@ -173,8 +173,8 @@ def pymbolic_spatial_coordinate_axiparallel(do_predicates, visitor):
         iindex = index
         if face is not None and index > face:
             iindex = iindex - 1
-        from dune.perftool.sumfact.quadrature import pymbolic_quadrature_position
-        x = pymbolic_quadrature_position(iindex, visitor)
+        from dune.perftool.sumfact.quadrature import pymbolic_indexed_quadrature_position
+        x = pymbolic_indexed_quadrature_position(iindex, visitor)
 
     visitor.indices = None
     return prim.Subscript(prim.Variable(lowcorner), (index,)) + x * prim.Subscript(prim.Variable(meshwidth), (index,))
diff --git a/python/dune/perftool/sumfact/quadrature.py b/python/dune/perftool/sumfact/quadrature.py
index cfd7fbb58a77178b203ab0e389e45bef071c5ff1..fdd359578cec007e0bfe0ac9fa52fe7783afa0fc 100644
--- a/python/dune/perftool/sumfact/quadrature.py
+++ b/python/dune/perftool/sumfact/quadrature.py
@@ -192,8 +192,7 @@ def define_quadrature_position(name, index):
                 )
 
 
-@backend(interface="quad_pos", name="sumfact")
-def pymbolic_quadrature_position(index, visitor):
+def pymbolic_indexed_quadrature_position(index, visitor):
     # Return the non-precomputed version
     if not get_form_option("precompute_quadrature_info"):
         name = 'pos'
@@ -237,5 +236,8 @@ def pymbolic_quadrature_position(index, visitor):
 
 @backend(interface="qp_in_cell", name="sumfact")
 def pymbolic_quadrature_position_in_cell(restriction):
+    # TODO: This code path is broken at the moment.
+    assert False
+
     from dune.perftool.pdelab.geometry import to_cell_coordinates
     return to_cell_coordinates(pymbolic_quadrature_position(), restriction)
diff --git a/python/dune/perftool/sumfact/vectorization.py b/python/dune/perftool/sumfact/vectorization.py
index 788229347bd1f2d6a1caaadf863a8d353213be80..3e79419dcb97777c86a130deb3f0b82b84d4c950 100644
--- a/python/dune/perftool/sumfact/vectorization.py
+++ b/python/dune/perftool/sumfact/vectorization.py
@@ -32,6 +32,9 @@ import math
 
 @generator_factory(item_tags=("vecinfo", "dryrundata"), cache_key_generator=lambda o, n: o)
 def _cache_vectorization_info(old, new):
+    if get_form_option("vectorization_not_fully_vectorized_error"):
+        if not isinstance(new, VectorizedSumfactKernel):
+            raise PerftoolVectorizationError("Did not fully vectorize!")
     if new is None:
         raise PerftoolVectorizationError("Vectorization info for sum factorization kernel was not gathered correctly!")
     return new