diff --git a/python/dune/codegen/sumfact/symbolic.py b/python/dune/codegen/sumfact/symbolic.py
index 8b28f8f37eedb349ab3cf1f1d78e7565910990f5..a0868a5c32118ab0bd162311a5fb3a6e8d0f61a0 100644
--- a/python/dune/codegen/sumfact/symbolic.py
+++ b/python/dune/codegen/sumfact/symbolic.py
@@ -130,7 +130,7 @@ class VectorSumfactKernelInput(SumfactKernelInterfaceBase):
 
     @property
     def signature_args(self):
-        if get_form_option("fastdg"):
+        if self.interfaces[0].direct_is_possible:
             return tuple("const {}* fastdg{}".format(type_floatingpoint(), i) for i, _ in enumerate(remove_duplicates(self.interfaces)))
         else:
             return ()
@@ -385,7 +385,9 @@ class SumfactKernel(SumfactKernelBase, ImmutableRecord, prim.Variable):
         # TODO: For now we do not vectorize SumfactKernels with different
         # quadrature_permutation. This should be handled like upper/lower
         # vectorization
-        return tuple(m.basis_size for m in self.matrix_sequence_quadrature_permuted) + (self.stage, self.buffer, self.interface.within_inames)
+        return tuple(m.quadrature_size for m in self.matrix_sequence_quadrature_permuted) + tuple(m.basis_size for m in self.matrix_sequence_quadrature_permuted) + (self.stage, self.buffer, self.interface.within_inames) + (self.interface.direct_is_possible,)
+        # return tuple(m.quadrature_size for m in self.matrix_sequence_quadrature_permuted) + tuple(m.basis_size for m in self.matrix_sequence_quadrature_permuted) + (self.stage, self.buffer, self.interface.within_inames)
+        # return tuple(m.basis_size for m in self.matrix_sequence_quadrature_permuted) + (self.stage, self.buffer, self.interface.within_inames)
 
     @property
     def cache_key(self):
@@ -631,6 +633,8 @@ class VectorizedSumfactKernel(SumfactKernelBase, ImmutableRecord, prim.Variable)
         assert len(set(k.predicates for k in kernels)) == 1
 
         # Assert properties of the matrix sequence of the underlying kernels
+        # For now we don't mix direct and non_direct input. Could be done in an upper/lower way.
+        assert len(set(tuple(k.interface.direct_is_possible for k in kernels))) == 1
         for i in range(kernels[0].length):
             assert len(set(tuple(k.matrix_sequence_quadrature_permuted[i].rows for k in kernels))) == 1
             assert len(set(tuple(k.matrix_sequence_quadrature_permuted[i].cols for k in kernels))) == 1
diff --git a/test/sumfact/poisson/CMakeLists.txt b/test/sumfact/poisson/CMakeLists.txt
index fb5c4ac3a73f8f20a70e5135264465d158135c68..3adde6321cc11930a69dbb166e9ba954850d55b5 100644
--- a/test/sumfact/poisson/CMakeLists.txt
+++ b/test/sumfact/poisson/CMakeLists.txt
@@ -71,6 +71,11 @@ if(consistent-edge-orientation_FOUND)
                                     INIFILE poisson_dg_3d_gmsh.mini
                                     ANALYZE_GRID
                                     )
+  dune_add_formcompiler_system_test(UFLFILE poisson_dg_2d.ufl
+                                    BASENAME sumfact_poisson_fastdg_2d_gmsh
+                                    INIFILE poisson_fastdg_2d_gmsh.mini
+                                    ANALYZE_GRID
+                                    )
   dune_add_formcompiler_system_test(UFLFILE poisson_dg_3d.ufl
                                     BASENAME sumfact_poisson_fastdg_3d_gmsh
                                     INIFILE poisson_fastdg_3d_gmsh.mini
diff --git a/test/sumfact/poisson/poisson_fastdg_2d_gmsh.mini b/test/sumfact/poisson/poisson_fastdg_2d_gmsh.mini
new file mode 100644
index 0000000000000000000000000000000000000000..56b69c773b1ce95fa6387f5313af47a94980f8c0
--- /dev/null
+++ b/test/sumfact/poisson/poisson_fastdg_2d_gmsh.mini
@@ -0,0 +1,32 @@
+__name = sumfact_poisson_fastdg_2d_gmsh_{__exec_suffix}
+__exec_suffix = {deg_suffix}_{quadvec_suffix}_{gradvec_suffix}
+
+quadvec_suffix = quadvec, nonquadvec | expand quad
+gradvec_suffix = gradvec, nongradvec | expand grad
+deg_suffix = deg{formcompiler.ufl_variants.degree}
+
+# {deg_suffix} == deg1 | exclude
+{quadvec_suffix} == quadvec | exclude
+# {gradvec_suffix} == gradvec | exclude
+
+gmshFile = square_quad.msh
+
+[wrapper.vtkcompare]
+name = {__name}
+extension = vtu
+
+[formcompiler]
+compare_l2errorsquared = 5e-5, 5e-7 | expand deg
+grid_unstructured = 1
+debug_interpolate_input = 1
+
+[formcompiler.r]
+numerical_jacobian = 0
+sumfact = 1
+fastdg = 1
+sumfact_regular_jacobians = 1
+vectorization_quadloop = 1, 0 | expand quad
+vectorization_strategy = model, none | expand grad
+
+[formcompiler.ufl_variants]
+degree = 1, 2 | expand deg
diff --git a/test/sumfact/poisson/poisson_fastdg_3d_gmsh.mini b/test/sumfact/poisson/poisson_fastdg_3d_gmsh.mini
index 7e669e5d83912489ae69b39acaaa970eb2c04023..438b8d009c56e42e9f65bd4b708e8f6acd1f6e06 100644
--- a/test/sumfact/poisson/poisson_fastdg_3d_gmsh.mini
+++ b/test/sumfact/poisson/poisson_fastdg_3d_gmsh.mini
@@ -7,7 +7,7 @@ deg_suffix = deg{formcompiler.ufl_variants.degree}
 
 {deg_suffix} == deg1 | exclude
 {quadvec_suffix} == quadvec | exclude
-{gradvec_suffix} == gradvec | exclude
+# {gradvec_suffix} == gradvec | exclude
 
 gmshFile = cube_hexa.msh