diff --git a/test/sumfact/poisson/facedir-facemod-variation/sumfact_poisson_dg_3d_facedir_facemod_variation.mini b/test/sumfact/poisson/facedir-facemod-variation/sumfact_poisson_dg_3d_facedir_facemod_variation.mini
index 53be1d4c32d0c076b9fa204b5d9e6fbcb11e47fd..664421e4f91a3893c42783c209068e306b110c7e 100644
--- a/test/sumfact/poisson/facedir-facemod-variation/sumfact_poisson_dg_3d_facedir_facemod_variation.mini
+++ b/test/sumfact/poisson/facedir-facemod-variation/sumfact_poisson_dg_3d_facedir_facemod_variation.mini
@@ -12,7 +12,7 @@ msh_suffix = msh{msh_number}
 {deg_suffix} == deg2 | exclude
 {diff_suffix} == numdiff | exclude
 {quadvec_suffix} == quadvec | exclude
-{gradvec_suffix} == gradvec | exclude
+# {gradvec_suffix} == gradvec | exclude
 
 
 msh_number = 00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 | expand
@@ -23,8 +23,9 @@ printresidual = 1
 
 
 [__static]
-CLASSNAME = localoperator_msh{msh_number}
+CLASSNAME = localoperator_{msh_suffix}_{gradvec_suffix}
 MSH_VARIANT = {msh_number} | toint
+GRADVEC = 1, 0 | expand grad
 
 [wrapper.vtkcompare]
 name = {__name}
@@ -37,7 +38,7 @@ debug_interpolate_input = 1
 
 [formcompiler.r]
 classname = {__static.CLASSNAME}
-filename = sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh{msh_number}.hh
+filename = sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_{msh_suffix}_{gradvec_suffix}.hh
 numerical_jacobian = 1, 0 | expand num
 sumfact = 1
 sumfact_regular_jacobians = 1
diff --git a/test/sumfact/poisson/facedir-facemod-variation/sumfact_poisson_dg_3d_facedir_facemod_variation_driver.cc b/test/sumfact/poisson/facedir-facemod-variation/sumfact_poisson_dg_3d_facedir_facemod_variation_driver.cc
index 62c09a9a03b827dc316a4237ec6591ef81bf2c80..4b57deaa50bc6e435b40dec8060d55e927797b2a 100644
--- a/test/sumfact/poisson/facedir-facemod-variation/sumfact_poisson_dg_3d_facedir_facemod_variation_driver.cc
+++ b/test/sumfact/poisson/facedir-facemod-variation/sumfact_poisson_dg_3d_facedir_facemod_variation_driver.cc
@@ -19,78 +19,150 @@
 #include "dune/pdelab/gridfunctionspace/gridfunctionadapter.hh"
 #include "dune/pdelab/common/functionutilities.hh"
 
-#if MSH_VARIANT == 0
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh00.hh"
-#elif MSH_VARIANT == 1
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh01.hh"
-#elif MSH_VARIANT == 2
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh02.hh"
-#elif MSH_VARIANT == 3
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh03.hh"
-#elif MSH_VARIANT == 4
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh04.hh"
-#elif MSH_VARIANT == 5
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh05.hh"
-#elif MSH_VARIANT == 6
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh06.hh"
-#elif MSH_VARIANT == 7
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh07.hh"
-#elif MSH_VARIANT == 8
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh08.hh"
-#elif MSH_VARIANT == 9
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh09.hh"
-#elif MSH_VARIANT == 10
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh10.hh"
-#elif MSH_VARIANT == 11
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh11.hh"
-#elif MSH_VARIANT == 12
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh12.hh"
-#elif MSH_VARIANT == 13
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh13.hh"
-#elif MSH_VARIANT == 14
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh14.hh"
-#elif MSH_VARIANT == 15
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh15.hh"
-#elif MSH_VARIANT == 16
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh16.hh"
-#elif MSH_VARIANT == 17
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh17.hh"
-#elif MSH_VARIANT == 18
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh18.hh"
-#elif MSH_VARIANT == 19
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh19.hh"
-#elif MSH_VARIANT == 20
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh20.hh"
-#elif MSH_VARIANT == 21
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh21.hh"
-#elif MSH_VARIANT == 22
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh22.hh"
-#elif MSH_VARIANT == 23
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh23.hh"
-#elif MSH_VARIANT == 24
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh24.hh"
-#elif MSH_VARIANT == 25
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh25.hh"
-#elif MSH_VARIANT == 26
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh26.hh"
-#elif MSH_VARIANT == 27
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh27.hh"
-#elif MSH_VARIANT == 28
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh28.hh"
-#elif MSH_VARIANT == 29
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh29.hh"
-#elif MSH_VARIANT == 30
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh30.hh"
-#elif MSH_VARIANT == 31
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh31.hh"
-#elif MSH_VARIANT == 32
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh32.hh"
-#elif MSH_VARIANT == 33
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh33.hh"
-#elif MSH_VARIANT == 34
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh34.hh"
+#if MSH_VARIANT == 0 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh00_nongradvec.hh"
+#elif MSH_VARIANT == 1 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh01_nongradvec.hh"
+#elif MSH_VARIANT == 2 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh02_nongradvec.hh"
+#elif MSH_VARIANT == 3 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh03_nongradvec.hh"
+#elif MSH_VARIANT == 4 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh04_nongradvec.hh"
+#elif MSH_VARIANT == 5 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh05_nongradvec.hh"
+#elif MSH_VARIANT == 6 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh06_nongradvec.hh"
+#elif MSH_VARIANT == 7 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh07_nongradvec.hh"
+#elif MSH_VARIANT == 8 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh08_nongradvec.hh"
+#elif MSH_VARIANT == 9 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh09_nongradvec.hh"
+#elif MSH_VARIANT == 10 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh10_nongradvec.hh"
+#elif MSH_VARIANT == 11 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh11_nongradvec.hh"
+#elif MSH_VARIANT == 12 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh12_nongradvec.hh"
+#elif MSH_VARIANT == 13 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh13_nongradvec.hh"
+#elif MSH_VARIANT == 14 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh14_nongradvec.hh"
+#elif MSH_VARIANT == 15 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh15_nongradvec.hh"
+#elif MSH_VARIANT == 16 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh16_nongradvec.hh"
+#elif MSH_VARIANT == 17 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh17_nongradvec.hh"
+#elif MSH_VARIANT == 18 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh18_nongradvec.hh"
+#elif MSH_VARIANT == 19 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh19_nongradvec.hh"
+#elif MSH_VARIANT == 20 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh20_nongradvec.hh"
+#elif MSH_VARIANT == 21 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh21_nongradvec.hh"
+#elif MSH_VARIANT == 22 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh22_nongradvec.hh"
+#elif MSH_VARIANT == 23 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh23_nongradvec.hh"
+#elif MSH_VARIANT == 24 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh24_nongradvec.hh"
+#elif MSH_VARIANT == 25 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh25_nongradvec.hh"
+#elif MSH_VARIANT == 26 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh26_nongradvec.hh"
+#elif MSH_VARIANT == 27 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh27_nongradvec.hh"
+#elif MSH_VARIANT == 28 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh28_nongradvec.hh"
+#elif MSH_VARIANT == 29 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh29_nongradvec.hh"
+#elif MSH_VARIANT == 30 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh30_nongradvec.hh"
+#elif MSH_VARIANT == 31 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh31_nongradvec.hh"
+#elif MSH_VARIANT == 32 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh32_nongradvec.hh"
+#elif MSH_VARIANT == 33 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh33_nongradvec.hh"
+#elif MSH_VARIANT == 34 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh34_nongradvec.hh"
+#elif MSH_VARIANT == 35 && GRADVEC == 0
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh35_nongradvec.hh"
+#elif MSH_VARIANT == 0 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh00_gradvec.hh"
+#elif MSH_VARIANT == 1 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh01_gradvec.hh"
+#elif MSH_VARIANT == 2 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh02_gradvec.hh"
+#elif MSH_VARIANT == 3 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh03_gradvec.hh"
+#elif MSH_VARIANT == 4 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh04_gradvec.hh"
+#elif MSH_VARIANT == 5 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh05_gradvec.hh"
+#elif MSH_VARIANT == 6 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh06_gradvec.hh"
+#elif MSH_VARIANT == 7 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh07_gradvec.hh"
+#elif MSH_VARIANT == 8 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh08_gradvec.hh"
+#elif MSH_VARIANT == 9 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh09_gradvec.hh"
+#elif MSH_VARIANT == 10 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh10_gradvec.hh"
+#elif MSH_VARIANT == 11 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh11_gradvec.hh"
+#elif MSH_VARIANT == 12 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh12_gradvec.hh"
+#elif MSH_VARIANT == 13 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh13_gradvec.hh"
+#elif MSH_VARIANT == 14 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh14_gradvec.hh"
+#elif MSH_VARIANT == 15 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh15_gradvec.hh"
+#elif MSH_VARIANT == 16 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh16_gradvec.hh"
+#elif MSH_VARIANT == 17 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh17_gradvec.hh"
+#elif MSH_VARIANT == 18 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh18_gradvec.hh"
+#elif MSH_VARIANT == 19 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh19_gradvec.hh"
+#elif MSH_VARIANT == 20 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh20_gradvec.hh"
+#elif MSH_VARIANT == 21 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh21_gradvec.hh"
+#elif MSH_VARIANT == 22 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh22_gradvec.hh"
+#elif MSH_VARIANT == 23 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh23_gradvec.hh"
+#elif MSH_VARIANT == 24 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh24_gradvec.hh"
+#elif MSH_VARIANT == 25 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh25_gradvec.hh"
+#elif MSH_VARIANT == 26 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh26_gradvec.hh"
+#elif MSH_VARIANT == 27 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh27_gradvec.hh"
+#elif MSH_VARIANT == 28 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh28_gradvec.hh"
+#elif MSH_VARIANT == 29 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh29_gradvec.hh"
+#elif MSH_VARIANT == 30 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh30_gradvec.hh"
+#elif MSH_VARIANT == 31 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh31_gradvec.hh"
+#elif MSH_VARIANT == 32 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh32_gradvec.hh"
+#elif MSH_VARIANT == 33 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh33_gradvec.hh"
+#elif MSH_VARIANT == 34 && GRADVEC == 1
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh34_gradvec.hh"
 #else
-#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh35.hh"
+#include "sumfact_poisson_dg_3d_facedir_facemod_variation_localoperator_msh35_gradvec.hh"
 #endif
 
 template <typename T>