diff --git a/cmake/modules/DunePerftoolMacros.cmake b/cmake/modules/DunePerftoolMacros.cmake
index c9b67421f9b111e76ed82a25044ada1f7e8a82d6..b41785183706378813dbd8e9b58facee7b44d908 100644
--- a/cmake/modules/DunePerftoolMacros.cmake
+++ b/cmake/modules/DunePerftoolMacros.cmake
@@ -89,8 +89,19 @@ function(add_generated_executable)
     set(GEN_INIFILE ${CMAKE_CURRENT_SOURCE_DIR}/${GEN_INIFILE})
   endif()
   if(NOT GEN_SOURCE)
+    # Generate a driver file
     set(GEN_DRIVER ${GEN_TARGET}_driver.hh)
-    set(GEN_FORM_COMPILER_ARGS ${GEN_FORM_COMPILER_ARGS} --driver-file ${GEN_DRIVER})
+    add_custom_command(OUTPUT ${GEN_DRIVER}
+                       COMMAND ${CMAKE_BINARY_DIR}/run-in-dune-env generate_driver
+                               --uflfile ${GEN_UFLFILE}
+                               --ini-file ${GEN_INIFILE}
+                               --target-name ${GEN_TARGET}
+                               --driver-file ${GEN_DRIVER}
+                               --project-basedir ${CMAKE_BINARY_DIR}
+                               ${GEN_FORM_COMPILER_ARGS}
+                       DEPENDS ${GEN_UFLFILE} ${UFL2PDELAB_SOURCES} ${GEN_DEPENDS} ${DUNE_PERFTOOL_ADDITIONAL_PYTHON_SOURCES}
+                       COMMENT "Generating driver for the target ${GEN_TARGET}"
+                       )
     set(GEN_SOURCE ${GEN_TARGET}_main.cc)
     dune_module_path(MODULE dune-perftool
                      RESULT perftool_path
@@ -103,15 +114,15 @@ function(add_generated_executable)
                        OUTPUT_VARIABLE header_deps
                        )
 
-  add_custom_command(OUTPUT ${GEN_DRIVER} ${header_deps}
-                     COMMAND ${CMAKE_BINARY_DIR}/run-in-dune-env ufl2pdelab
+  add_custom_command(OUTPUT ${header_deps}
+                     COMMAND ${CMAKE_BINARY_DIR}/run-in-dune-env generate_operators
                              --project-basedir ${CMAKE_BINARY_DIR}
                              ${GEN_FORM_COMPILER_ARGS}
                              --uflfile ${GEN_UFLFILE}
                              --ini-file ${GEN_INIFILE}
                              --target-name ${GEN_TARGET}
                      DEPENDS ${GEN_UFLFILE} ${UFL2PDELAB_SOURCES} ${GEN_DEPENDS} ${DUNE_PERFTOOL_ADDITIONAL_PYTHON_SOURCES}
-                     COMMENT "Running ufl2pdelab for the target ${GEN_TARGET}"
+                     COMMENT "Generating operators for the target ${GEN_TARGET}"
                     )
 
   add_executable(${GEN_TARGET} ${GEN_SOURCE} ${GEN_DRIVER} ${header_deps})
diff --git a/cmake/modules/deplist.py b/cmake/modules/deplist.py
new file mode 100755
index 0000000000000000000000000000000000000000..d65ad4afecbb60f7b84dccfc098e5eec18a06d5d
--- /dev/null
+++ b/cmake/modules/deplist.py
@@ -0,0 +1,21 @@
+# Return the list of generated files for a given ini file 
+# This is used by the build system, do not use this yourself!
+
+from dune.testtools.parser import parse_ini_file
+
+import sys
+
+ini = parse_ini_file(sys.argv[1])
+section = ini["formcompiler"]
+operators = section.get("operators", "operator")
+
+result = []
+for operator in [i.strip() for i in operators.split(",")]:
+    ssection = ini.get("formcompiler.{}".format(operator), {})
+    if ssection.get("filename", None):
+        result.append(ssection["filename"])
+    else:
+        classname = ssection.get("classname", "{}Operator".format(ssection.get("form", operator)))
+        result.append("{}_{}_file.hh".format(sys.argv[2], classname))
+
+sys.stdout.write(" ".join(result))
diff --git a/python/dune/perftool/compile.py b/python/dune/perftool/compile.py
index 8886a4d85b1f590f739082244cfcbb55b355654e..3bb356bb98ad832d446de3d98e7f64060780e6fd 100644
--- a/python/dune/perftool/compile.py
+++ b/python/dune/perftool/compile.py
@@ -103,17 +103,23 @@ def read_ufl(uflfile):
     return data
 
 
-# This function is the entrypoint of the ufl2pdelab executable
-def compile_form():
+def entry_generate_driver():
+    """ This is the entry point for driver generation """
     initialize_options()
     data = read_ufl(get_option("uflfile"))
 
     with global_context(data=data):
-        # Generate driver file
-        if get_option("driver_file"):
-            generate_driver()
+        generate_driver()
 
+
+def entry_generate_operators():
+    """ This is the entry point for operator generation """
+    initialize_options()
+    data = read_ufl(get_option("uflfile"))
+
+    with global_context(data=data):
         for operator in get_option("operators").split(","):
+            operator = operator.strip()
             with global_context(form_identifier=operator):
                 # Make sure cache is empty
                 delete_cache_items()
diff --git a/python/dune/perftool/options.py b/python/dune/perftool/options.py
index aeb6baef9fcaf292c48326993ba85006f72f1626..f186a324e869cd4f7ced288f0a24aaab527055f4 100644
--- a/python/dune/perftool/options.py
+++ b/python/dune/perftool/options.py
@@ -49,7 +49,7 @@ class PerftoolGlobalOptionsArray(ImmutableRecord):
     yaspgrid_offset = PerftoolOption(default=False, helpstr="Set to true if you want a yasp grid where the lower left corner is not in the origin.")
     precision_bits = PerftoolOption(default=64, helpstr="The number of bits for the floating point type")
     overlapping = PerftoolOption(default=False, helpstr="Use an overlapping solver and constraints. You still need to make sure to construct a grid with overlap! The parallel option will be set automatically.")
-    operators = PerftoolOption(default="operator", helpstr="A comma separated list of operators, each name will be interpreted as a subsection name within the formcompiler section")
+    operators = PerftoolOption(default="r", helpstr="A comma separated list of operators, each name will be interpreted as a subsection name within the formcompiler section")
     target_name = PerftoolOption(default=None, helpstr="The target name from CMake")
 
     # Arguments that are mainly to be set by logic depending on other options
@@ -68,7 +68,7 @@ class PerftoolFormOptionsArray(ImmutableRecord):
         ImmutableRecord.__init__(self, **opts)
 
     # Form specific options
-    form = PerftoolOption(default="r", helpstr="The name of the UFL object representing the form in the UFL file")
+    form = PerftoolOption(default=None, helpstr="The name of the UFL object representing the form in the UFL file")
     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)")
@@ -139,7 +139,7 @@ def update_options_from_inifile(opt):
         opt = opt.copy(**parse_ini("formcompiler"))
 
         # Also parse form-specific options
-        for form in opt.operators.split(","):
+        for form in [i.strip() for i in opt.operators.split(",")]:
             _form_options[form] = PerftoolFormOptionsArray(**parse_ini("formcompiler.{}".format(form)))
 
     return opt
@@ -157,13 +157,16 @@ def process_global_options(opt):
 
 
 @memoize
-def process_form_options(opt):
+def process_form_options(opt, form):
     if opt.sumfact:
         opt = opt.copy(unroll_dimension_loops=True)
 
     if opt.numerical_jacobian:
         opt = opt.copy(generate_jacobians=False)
 
+    if opt.form is None:
+        opt = opt.copy(form=form)
+
     if opt.classname is None:
         opt = opt.copy(classname="{}Operator".format(opt.form))
 
@@ -205,8 +208,8 @@ def get_form_option(key, form=None):
         from dune.perftool.generation import get_global_context_value
         form = get_global_context_value("form_identifier", 0)
     if isinstance(form, int):
-        form = get_option("operators").split(",")[form]
-    processed_form_opts = process_form_options(_form_options[form])
+        form = get_option("operators").split(",")[form].strip()
+    processed_form_opts = process_form_options(_form_options[form], form)
     return getattr(processed_form_opts, key)
 
 
diff --git a/python/dune/perftool/pdelab/driver/__init__.py b/python/dune/perftool/pdelab/driver/__init__.py
index f11875d043302a9f94ded59ec06514ba4b61a294..f8ec2059d32fc7dc6b6b37569733b74941fe6895 100644
--- a/python/dune/perftool/pdelab/driver/__init__.py
+++ b/python/dune/perftool/pdelab/driver/__init__.py
@@ -28,23 +28,17 @@ from dune.perftool.options import (get_form_option,
 # to quantities that are needed throughout the process of generating the driver! 
 #
 
-def get_form_ident(index=0):
-    return get_option("operators").split(",")[index]
+def get_form_ident():
+    idents = [i.strip() for i in get_option("operators").split(",")]
+    if len(idents) == 2:
+        idents.remove("mass")
+    assert(len(idents) == 1)
+    return idents[0]
 
 
-def get_form(what=None):
-    """ Return the ith form specified """
-    if what is None:
-        what = get_global_context_value("form_identifier", 0)
-    if isinstance(what, int):
-        what = get_form_ident(what)
+def get_form():
     data = get_global_context_value("data")
-    return data.object_by_name[get_form_option("form", what)]
-
-
-def get_preprocessed_form(what=None):
-    from dune.perftool.ufl.preprocess import preprocess_form
-    return preprocess_form(get_form(what)).preprocessed_form
+    return data.object_by_name[get_form_option("form", get_form_ident())]
 
 
 def get_dimension():
@@ -64,10 +58,7 @@ def get_trial_element():
 
 
 def is_stationary():
-    # TODO I am completely unsure how this should work in the future
-    # This only fixes instationary stuff, it will break Renes adjoint stuff
-    return len(get_option("operators").split(",")) == 1
-#     return 'mass_form' not in _driver_data
+    return "mass" not in [i.strip() for i in get_option("operators").split(",")]
 
 
 def is_linear(form=None):
diff --git a/python/dune/perftool/pdelab/driver/gridoperator.py b/python/dune/perftool/pdelab/driver/gridoperator.py
index 64a6177774beecf3b3438f04f247af307d75542c..c1e22873cc2f9c7c200013d7d8b8366ddf373b88 100644
--- a/python/dune/perftool/pdelab/driver/gridoperator.py
+++ b/python/dune/perftool/pdelab/driver/gridoperator.py
@@ -77,7 +77,7 @@ def name_gridoperator(form_ident):
 def typedef_localoperator(name, form_ident):
     ugfs = type_trial_gfs()
     vgfs = type_test_gfs()
-    filename = get_form_option("filename")
+    filename = get_form_option("filename", form_ident)
     include_file(filename, filetag="driver")
     lopname = localoperator_basename(form_ident)
     range_type = type_range()
diff --git a/python/dune/perftool/pdelab/driver/instationary.py b/python/dune/perftool/pdelab/driver/instationary.py
index 11390040db6a1056bc52a00fbf6a0c8f033b7167..becb79b0d05bc59ee6bdabcf3f4a2a29561c14b0 100644
--- a/python/dune/perftool/pdelab/driver/instationary.py
+++ b/python/dune/perftool/pdelab/driver/instationary.py
@@ -1,7 +1,8 @@
 from dune.perftool.generation import (include_file,
                                       preamble,
                                       )
-from dune.perftool.pdelab.driver import (get_trial_element,
+from dune.perftool.pdelab.driver import (get_form_ident,
+                                         get_trial_element,
                                          is_linear,
                                          name_initree,
                                          preprocess_leaf_data,
@@ -50,12 +51,11 @@ def solve_instationary():
 @preamble
 def time_loop():
     ini = name_initree()
-    formdata = get_formdata()
-    params = name_parameters(formdata)
+    params = name_parameters(get_form_ident())
     time = name_time()
     element = get_trial_element()
-    vector_type = type_vector(formdata)
-    vector = name_vector(formdata)
+    vector_type = type_vector(get_form_ident())
+    vector = name_vector(get_form_ident())
     interpolate_dirichlet_data(vector)
 
     is_dirichlet = preprocess_leaf_data(element, "is_dirichlet")
@@ -156,8 +156,8 @@ def name_timesteppingmethod():
 @preamble
 def typedef_instationarygridoperator(name):
     include_file("dune/pdelab/gridoperator/onestep.hh", filetag="driver")
-    go_type = type_gridoperator(get_formdata())
-    mass_go_type = type_gridoperator(get_mass_formdata())
+    go_type = type_gridoperator(get_form_ident())
+    mass_go_type = type_gridoperator("mass")
     explicit = get_option('explicit_time_stepping')
     if explicit:
         return "using {} = Dune::PDELab::OneStepGridOperator<{},{},false>;".format(name, go_type, mass_go_type)
@@ -173,8 +173,8 @@ def type_instationarygridoperator():
 @preamble
 def define_instationarygridoperator(name):
     igo_type = type_instationarygridoperator()
-    go = name_gridoperator(get_formdata())
-    mass_go = name_gridoperator(get_mass_formdata())
+    go = name_gridoperator(get_form_ident())
+    mass_go = name_gridoperator("mass")
     return "{} {}({}, {});".format(igo_type, name, go, mass_go)
 
 
@@ -188,7 +188,7 @@ def typedef_onestepmethod(name):
     r_type = type_range()
     igo_type = type_instationarygridoperator()
     snp_type = type_stationarynonlinearproblemssolver(igo_type)
-    vector_type = type_vector(get_formdata())
+    vector_type = type_vector(get_form_ident())
     return "using {} = Dune::PDELab::OneStepMethod<{}, {}, {}, {}, {}>;".format(name, r_type, igo_type, snp_type, vector_type, vector_type)
 
 
@@ -217,7 +217,7 @@ def typedef_explicitonestepmethod(name):
     r_type = type_range()
     igo_type = type_instationarygridoperator()
     ls_type = type_linearsolver()
-    vector_type = type_vector(get_formdata())
+    vector_type = type_vector(get_form_ident())
     return "using {} = Dune::PDELab::ExplicitOneStepMethod<{}, {}, {}, {}>;".format(name, r_type, igo_type, ls_type, vector_type)
 
 
diff --git a/python/dune/perftool/pdelab/driver/interpolate.py b/python/dune/perftool/pdelab/driver/interpolate.py
index 73d44a560b16882b024016c1414e38d35cbe1fbc..4985f8c8d44d85081b23a4de6d7394ce499e7198 100644
--- a/python/dune/perftool/pdelab/driver/interpolate.py
+++ b/python/dune/perftool/pdelab/driver/interpolate.py
@@ -5,6 +5,7 @@ from dune.perftool.generation import (cached,
                                       preamble,
                                       )
 from dune.perftool.pdelab.driver import (FEM_name_mangling,
+                                         get_form_ident,
                                          get_trial_element,
                                          is_stationary,
                                          preprocess_leaf_data,
@@ -72,7 +73,7 @@ def define_boundary_function(name, dirichlet):
                                                                                       lambdaname,
                                                                                       )
     else:
-        params = name_parameters(get_formdata())
+        params = name_parameters(get_form_ident())
         return "auto {} = Dune::PDELab::makeInstationaryGridFunctionFromCallable({}, {}, {});".format(name,
                                                                                                       gv,
                                                                                                       lambdaname,
diff --git a/python/dune/perftool/pdelab/driver/solve.py b/python/dune/perftool/pdelab/driver/solve.py
index 44b4cd7e3f87440231399397a7089f6a8a5d875f..2e9b3ee1a8c64f4401df31b049c806f21c0547de 100644
--- a/python/dune/perftool/pdelab/driver/solve.py
+++ b/python/dune/perftool/pdelab/driver/solve.py
@@ -178,7 +178,7 @@ def name_stationarylinearproblemsolver():
 def typedef_stationarynonlinearproblemsolver(name, go_type):
     include_file("dune/pdelab/newton/newton.hh", filetag="driver")
     ls_type = type_linearsolver()
-    x_type = type_vector(form_ident)
+    x_type = type_vector(get_form_ident())
     return "using {} = Dune::PDELab::Newton<{}, {}, {}>;".format(name, go_type, ls_type, x_type)
 
 
diff --git a/python/dune/perftool/pdelab/driver/vtk.py b/python/dune/perftool/pdelab/driver/vtk.py
index b131040e12b5cb376acce4c1266504351b82f03f..a9096628a70b9dea5c9369d535f71df595a8ce02 100644
--- a/python/dune/perftool/pdelab/driver/vtk.py
+++ b/python/dune/perftool/pdelab/driver/vtk.py
@@ -131,7 +131,7 @@ def visualize_initial_condition():
     vtkwriter = name_vtk_sequence_writer()
     element = get_trial_element()
     gfs = name_trial_gfs()
-    vector = name_vector(get_formdata())
+    vector = name_vector(get_form_ident())
     predicate = name_predicate()
     from dune.perftool.pdelab.driver.instationary import name_time
     time = name_time()
diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py
index 05c2adc38ae0904e3265d24c2cdba7373af8e9f6..253917ba0b225f62a28d60b0caabec165696dfcb 100644
--- a/python/dune/perftool/pdelab/localoperator.py
+++ b/python/dune/perftool/pdelab/localoperator.py
@@ -250,7 +250,8 @@ def boundary_predicates(expr, measure, subdomain_id):
 
         # Get the original form and inspect the present measures
         from dune.perftool.generation import get_global_context_value
-        original_form = get_global_context_value("formdata").original_form
+        data = get_global_context_value("data")
+        original_form = data.object_by_name[get_form_option("form")]
 
         sd = original_form.subdomain_data()
         assert len(sd) == 1
@@ -681,10 +682,10 @@ def generate_localoperator_kernels(operator):
     logger = logging.getLogger(__name__)
 
     data = get_global_context_value("data")
-    form = data.object_by_name[get_form_option("form")]
+    original_form = data.object_by_name[get_form_option("form")]
 
     from dune.perftool.ufl.preprocess import preprocess_form
-    form = preprocess_form(form).preprocessed_form
+    form = preprocess_form(original_form).preprocessed_form
 
     # Reset the generation cache
     from dune.perftool.generation import delete_cache_items
@@ -768,7 +769,7 @@ def generate_localoperator_kernels(operator):
                     # In the case of matrix free operator evaluation we need jacobian apply methods
                     if get_form_option("matrix_free"):
                         from dune.perftool.pdelab.driver import is_linear
-                        if is_linear(formdata.original_form):
+                        if is_linear(original_form):
                             # Numeical jacobian apply base class
                             base_class("Dune::PDELab::NumericalJacobianApply{}<{}>".format(which, loptype), classtag="operator")
 
@@ -793,7 +794,7 @@ def generate_localoperator_kernels(operator):
     if not get_form_option("numerical_jacobian"):
         logger.info("generate_localoperator_kernels: create jacobian methods")
         from ufl import derivative
-        jacform = derivative(formdata.original_form, formdata.original_form.coefficients()[0])
+        jacform = derivative(original_form, original_form.coefficients()[0])
 
         from dune.perftool.ufl.preprocess import preprocess_form
         jacform = preprocess_form(jacform).preprocessed_form
diff --git a/python/dune/perftool/pdelab/quadrature.py b/python/dune/perftool/pdelab/quadrature.py
index bf798fc8392b55a7492a910c1dff586cb43a74d7..d0350d4b33c65156e1dfda3395ea5c08bb83338b 100644
--- a/python/dune/perftool/pdelab/quadrature.py
+++ b/python/dune/perftool/pdelab/quadrature.py
@@ -179,13 +179,14 @@ def name_quadrature_weights():
 
     return name
 
-
 def _estimate_quadrature_order():
     """Estimate quadrature order using polynomial degree estimation from UFL"""
     # According to UFL documentation estimate_total_polynomial_degree
     # should only be called on preprocessed forms.
-    from dune.perftool.pdelab.driver import get_preprocessed_form
-    form = get_preprocessed_form()
+    data = get_global_context_value("data")
+    form = data.object_by_name[get_form_option("form")]
+    from dune.perftool.ufl.preprocess import preprocess_form
+    form = preprocess_form(form).preprocessed_form
 
     # Estimate polynomial degree of integrals of current type (eg 'Cell')
     integral_type = get_global_context_value("integral_type")
diff --git a/python/setup.py b/python/setup.py
index c7e80ce1b0de4a2a561ee1a1a4d2189ec0df0d0c..f193748a5e814895f23fee033c74c850aaf39573 100644
--- a/python/setup.py
+++ b/python/setup.py
@@ -44,7 +44,7 @@ setup(name='dune.perftool',
       cmdclass={'test': PyTest},
       entry_points = {
         "console_scripts": [
-            "ufl2pdelab = dune.perftool.compile:compile_form",
-            "picklevecstrats = dune.perftool.sumfact.vectorization:pickle_vectorization_strategies",
+            "generate_operators = dune.perftool.compile:entry_generate_operators",
+            "generate_driver = dune.perftool.compile:entry_generate_driver",
         ]
     })
diff --git a/test/heatequation/heatequation.mini b/test/heatequation/heatequation.mini
index 6059854ec5b6c09a97d06712b928d1e7044ef3af..24a699673927de379260c45e50ea6b707dde95be 100644
--- a/test/heatequation/heatequation.mini
+++ b/test/heatequation/heatequation.mini
@@ -14,6 +14,7 @@ extension = vtu
 [formcompiler]
 explicit_time_stepping = 0, 1 | expand scheme
 compare_l2errorsquared = 1e-7
+operators = mass, poisson
 
 # Disable explicit tests for now
 {__exec_suffix} == explicit | exclude
diff --git a/test/heatequation/heatequation.ufl b/test/heatequation/heatequation.ufl
index 726b84a310871ba49ba02d9079b63fd46f8a0c32..8a4ef977b3bd956c86df1f2aff8acb43d7ebd45b 100644
--- a/test/heatequation/heatequation.ufl
+++ b/test/heatequation/heatequation.ufl
@@ -13,7 +13,6 @@ v = TestFunction(V)
 mass = (u*v)*dx
 poisson = (inner(grad(u), grad(v)) - f*v)*dx
 
-forms = [mass, poisson]
 interpolate_expression = g
 is_dirichlet = 1
 exact_solution = g
\ No newline at end of file
diff --git a/test/heatequation/heatequation_dg.mini b/test/heatequation/heatequation_dg.mini
index 3c21abe6c6a6f4ef80563db46ff49d83fdfdc17f..169be57b4a3d485505cc47ff132aa3cabecee212 100644
--- a/test/heatequation/heatequation_dg.mini
+++ b/test/heatequation/heatequation_dg.mini
@@ -14,6 +14,7 @@ extension = vtu
 [formcompiler]
 explicit_time_stepping = 0, 1 | expand scheme
 compare_l2errorsquared = 1e-7
+operators = mass, poisson
 
 # Disable explicit tests for now
 {__exec_suffix} == explicit | exclude
diff --git a/test/heatequation/heatequation_dg.ufl b/test/heatequation/heatequation_dg.ufl
index 288d1e675578c72e8c5b2c150d6677f663cc42f7..4f5c2da5f393ab31c8084405fe0d74daca9f2394 100644
--- a/test/heatequation/heatequation_dg.ufl
+++ b/test/heatequation/heatequation_dg.ufl
@@ -32,7 +32,6 @@ poisson = inner(grad(u), grad(v))*dx \
 
 mass = (u*v)*dx
 
-forms = [mass, poisson]
 interpolate_expression = g
 is_dirichlet = 1
 exact_solution = g
\ No newline at end of file
diff --git a/test/heatequation/heatequation_time_dependent_bc.mini b/test/heatequation/heatequation_time_dependent_bc.mini
index 191cc52f1c9ff806496affb5eb6a7d8ebbdb25d9..762951ac66010cdc35f7c37c59873d22a72c7eaa 100644
--- a/test/heatequation/heatequation_time_dependent_bc.mini
+++ b/test/heatequation/heatequation_time_dependent_bc.mini
@@ -14,6 +14,7 @@ extension = vtu
 [formcompiler]
 explicit_time_stepping = 0, 1 | expand scheme
 compare_l2errorsquared = 2e-4
+operators = mass, poisson
 
 [instat]
 T = 1.0
diff --git a/test/heatequation/heatequation_time_dependent_bc.ufl b/test/heatequation/heatequation_time_dependent_bc.ufl
index 8bf2a2d853c27a5a2724f2813f52ae0814983096..6b8443c5712df1463c84576ba23702cb42c5c45b 100644
--- a/test/heatequation/heatequation_time_dependent_bc.ufl
+++ b/test/heatequation/heatequation_time_dependent_bc.ufl
@@ -16,7 +16,6 @@ v = TestFunction(V)
 mass = (u*v)*dx
 poisson = (inner(grad(u), grad(v)) - f*v)*dx
 
-forms = [mass, poisson]
 interpolate_expression = g
 is_dirichlet = 1
 exact_solution = g
diff --git a/test/hyperbolic/linearacoustics.mini b/test/hyperbolic/linearacoustics.mini
index 5ccd60388b75b190883de796ce1bd9f4ea2394e4..ad1cc95b405ebd4a7624ef8057b99834fb52ccbc 100644
--- a/test/hyperbolic/linearacoustics.mini
+++ b/test/hyperbolic/linearacoustics.mini
@@ -13,5 +13,11 @@ name = {__name}
 extension = vtu
 
 [formcompiler]
+explicit_time_stepping = 1
+operators = mass, r
+
+[formcompiler.mass]
+numerical_jacobian = 1
+
+[formcompiler.r]
 numerical_jacobian = 1
-explicit_time_stepping = 1
\ No newline at end of file
diff --git a/test/hyperbolic/linearacoustics.ufl b/test/hyperbolic/linearacoustics.ufl
index d72476ccbf99ae6cae34114b19300064820ded14..844a3078bc6fb4994f9379a85aa8fa879c27df07 100644
--- a/test/hyperbolic/linearacoustics.ufl
+++ b/test/hyperbolic/linearacoustics.ufl
@@ -28,5 +28,4 @@ r = -1. * inner(flux, grad(v))*dx \
   - inner(numerical_flux, jump(v))*dS \
   + inner(u, v)*ds
 
-forms = [mass, r]
 interpolate_expression = f, 0.0, 0.0
diff --git a/test/hyperbolic/lineartransport.mini b/test/hyperbolic/lineartransport.mini
index 1ca4dedeb11ae71cc2d9f3f99e55306ebd9580ed..60a465d670b1acc664c514afe6371a3c7038b51b 100644
--- a/test/hyperbolic/lineartransport.mini
+++ b/test/hyperbolic/lineartransport.mini
@@ -18,6 +18,12 @@ name = {__name}
 extension = vtu
 
 [formcompiler]
-numerical_jacobian = 1, 0 | expand diff
 explicit_time_stepping = 0, 1 | expand scheme
-compare_l2errorsquared = 1e-10
\ No newline at end of file
+compare_l2errorsquared = 1e-10
+operators = mass, r
+
+[formcompiler.mass]
+numerical_jacobian = 1, 0 | expand diff
+
+[formcompiler.r]
+numerical_jacobian = 1, 0 | expand diff
diff --git a/test/hyperbolic/lineartransport.ufl b/test/hyperbolic/lineartransport.ufl
index 20ad8bf5a4bf7f2a59ff58e0088ec01b66eaac91..04497a40d8d85b24ec44d31d86a1328add3d2623 100644
--- a/test/hyperbolic/lineartransport.ufl
+++ b/test/hyperbolic/lineartransport.ufl
@@ -25,7 +25,6 @@ r = -1.*u*inner(beta, grad(v))*dx \
   + inner(beta, n)*u*v*dso \
   + numerical_flux(n, 0.0, u('-'))*v*dsd
 
-forms = [mass, r]
 is_dirichlet = dirichlet
 interpolate_expression = initial
 exact_solution = 0
\ No newline at end of file
diff --git a/test/hyperbolic/shallowwater.mini b/test/hyperbolic/shallowwater.mini
index f72b422b2fb19fa39969fc0febae5cb39d647c88..39408b491829daadb409652db25a4c41e8606c31 100644
--- a/test/hyperbolic/shallowwater.mini
+++ b/test/hyperbolic/shallowwater.mini
@@ -14,5 +14,11 @@ name = {__name}
 extension = vtu
 
 [formcompiler]
-numerical_jacobian = 1
+operators = mass, r
 explicit_time_stepping = 1
+
+[formcompiler.mass]
+numerical_jacobian = 1
+
+[formcompiler.r]
+numerical_jacobian = 1
diff --git a/test/hyperbolic/shallowwater.ufl b/test/hyperbolic/shallowwater.ufl
index eee5ea804c3c28d54f1e79365b3437e548f46bac..56267c99a725c7357bc923c2bdd844e81d141af9 100644
--- a/test/hyperbolic/shallowwater.ufl
+++ b/test/hyperbolic/shallowwater.ufl
@@ -32,5 +32,4 @@ r = -1. * inner(flux, grad(v))*dx \
   - inner(numerical_flux, jump(v))*dS \
   + inner(boundary_flux, v)*ds
 
-forms = [mass, r]
 interpolate_expression = f, 0.0
diff --git a/test/laplace/laplace.mini b/test/laplace/laplace.mini
index 4926306f0716c84a6bbfe1b5a02c0ad4acc6fe51..cdc9b9dc62f935f7200f3ac224363659b451b208 100644
--- a/test/laplace/laplace.mini
+++ b/test/laplace/laplace.mini
@@ -7,5 +7,5 @@ elements = 4 4
 elementType = simplical
 printmatrix = true
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 0, 1 | expand num
diff --git a/test/laplace/laplace_dg.mini b/test/laplace/laplace_dg.mini
index 7485e186eb827cd25b60e5fff65202c7d024147d..f689d8e53cebd12ebbd6f776c7dea4e2c1a7fa70 100644
--- a/test/laplace/laplace_dg.mini
+++ b/test/laplace/laplace_dg.mini
@@ -7,5 +7,5 @@ elements = 2 2
 elementType = simplical
 printmatrix = true
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
diff --git a/test/navier-stokes/navierstokes_2d_dg_quadrilateral.mini b/test/navier-stokes/navierstokes_2d_dg_quadrilateral.mini
index 5056825841ebf1441852ec9b59095228a780362e..5700107d03d62655e87b50b129aabc5b534134d2 100644
--- a/test/navier-stokes/navierstokes_2d_dg_quadrilateral.mini
+++ b/test/navier-stokes/navierstokes_2d_dg_quadrilateral.mini
@@ -16,7 +16,7 @@ name = {__name}
 extension = vtu
 
 [formcompiler]
-numerical_jacobian = 0, 1 | expand num
+operators = mass, r
 compare_l2errorsquared = 5e-5
 # Only calculate error for the velocity part
 l2error_tree_path = 1, 1, 0
@@ -24,6 +24,12 @@ explicit_time_stepping = 0
 yaspgrid_offset = 1
 overlapping = 1
 
+[formcompiler.mass]
+numerical_jacobian = 0, 1 | expand num
+
+[formcompiler.r]
+numerical_jacobian = 0, 1 | expand num
+
 [instat]
 T = 1e-2
 dt = 1e-3
diff --git a/test/navier-stokes/navierstokes_2d_dg_quadrilateral.ufl b/test/navier-stokes/navierstokes_2d_dg_quadrilateral.ufl
index fc8a150570cc80f648f985b154dac8efc7a3f68b..c1aaf70a3a0def29377613974547b8df88f57d3d 100644
--- a/test/navier-stokes/navierstokes_2d_dg_quadrilateral.ufl
+++ b/test/navier-stokes/navierstokes_2d_dg_quadrilateral.ufl
@@ -43,6 +43,5 @@ r = mu * inner(grad(u), grad(v))*dx \
   - avg(p)*inner(jump(v), n)*dS \
   - avg(q)*inner(jump(u), n)*dS \
 
-forms = [mass,r]
 interpolate_expression = g_v, g_p
 exact_solution = g_v, g_p
diff --git a/test/navier-stokes/navierstokes_3d_dg_quadrilateral.mini b/test/navier-stokes/navierstokes_3d_dg_quadrilateral.mini
index 29ba4c0db5f0c5f9b39333ac7bcdc49ddfb10eba..1da79ba9b25bbefa71e0459bde51ad82b303c8f2 100644
--- a/test/navier-stokes/navierstokes_3d_dg_quadrilateral.mini
+++ b/test/navier-stokes/navierstokes_3d_dg_quadrilateral.mini
@@ -12,13 +12,18 @@ name = {__name}
 extension = vtu
 
 [formcompiler]
-numerical_jacobian = 0, 1 | expand num
 explicit_time_stepping = 0
 yaspgrid_offset = 1
 compare_l2errorsquared = 5e-4
 # Only calculate error for the velocity part
 l2error_tree_path = 1, 1, 1, 0
 
+[formcompiler.mass]
+numerical_jacobian = 0, 1 | expand num
+
+[formcompiler.r]
+numerical_jacobian = 0, 1 | expand num
+
 [instat]
 T = 1e-1
 dt = 5e-2
diff --git a/test/navier-stokes/navierstokes_3d_dg_quadrilateral.ufl b/test/navier-stokes/navierstokes_3d_dg_quadrilateral.ufl
index 876821975e53f660c7abd81766b2a7f0080d97da..f6e8752f841256413fdd9dc5c7604e3543d3023c 100644
--- a/test/navier-stokes/navierstokes_3d_dg_quadrilateral.ufl
+++ b/test/navier-stokes/navierstokes_3d_dg_quadrilateral.ufl
@@ -73,6 +73,5 @@ r = mu * inner(grad(u), grad(v))*dx \
 #   + p*inner(v, n)*ds \
 #   + q*inner(u-g_v, n)*ds
 
-forms = [mass,r]
 interpolate_expression = g_v, g_p
 exact_solution = g_v, g_p
\ No newline at end of file
diff --git a/test/nonlinear/diffusivewave.mini b/test/nonlinear/diffusivewave.mini
index 2f877983394b41d54bb1592276d71d052776ca7e..c82f8ed23330982d6caf40f21d71dbb5d96f0588 100644
--- a/test/nonlinear/diffusivewave.mini
+++ b/test/nonlinear/diffusivewave.mini
@@ -14,5 +14,12 @@ dt = 0.001
 T = 0.01
 
 [formcompiler]
+operators = mass, poisson
+
+[formcompiler.mass]
+sumfact = 0, 1 | expand sf
+fastdg = 0, 0 | expand sf
+
+[formcompiler.operator]
 sumfact = 0, 1 | expand sf
-fastdg = 0, 0 | expand sf
\ No newline at end of file
+fastdg = 0, 0 | expand sf
diff --git a/test/nonlinear/nonlinear_dg_matrix_free.mini b/test/nonlinear/nonlinear_dg_matrix_free.mini
index 7b53a3a4be6d383f2950d242bf38ded4497939fa..dfd4035d77c067a4678a4c834759fe63ef750f1f 100644
--- a/test/nonlinear/nonlinear_dg_matrix_free.mini
+++ b/test/nonlinear/nonlinear_dg_matrix_free.mini
@@ -13,7 +13,7 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 5e-3
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
 matrix_free = 1
 
diff --git a/test/nonlinear/nonlinear_matrix_free.mini b/test/nonlinear/nonlinear_matrix_free.mini
index fdef068b581db4f6d3f786cc5b77e01af7141804..0f28479de167747bebb646b4ad3c4852a417192a 100644
--- a/test/nonlinear/nonlinear_matrix_free.mini
+++ b/test/nonlinear/nonlinear_matrix_free.mini
@@ -13,6 +13,6 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 6e-4
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
 matrix_free = 1
diff --git a/test/poisson/poisson.mini b/test/poisson/poisson.mini
index a851012e8218b44aef8699f795f031acf5695350..6fac6a11ae0e1f70024452f5c61eb7850ce55450 100644
--- a/test/poisson/poisson.mini
+++ b/test/poisson/poisson.mini
@@ -14,5 +14,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-7
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
diff --git a/test/poisson/poisson_dg.mini b/test/poisson/poisson_dg.mini
index 5973973e0ac882c6c70d93cdc39990e1fd9001a2..bb806382e6b6fe110e1149bd58821bba2820a33e 100644
--- a/test/poisson/poisson_dg.mini
+++ b/test/poisson/poisson_dg.mini
@@ -14,5 +14,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 9e-8
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
\ No newline at end of file
diff --git a/test/poisson/poisson_dg_matrix_free.mini b/test/poisson/poisson_dg_matrix_free.mini
index ca1f11460caa0bdeedb63e8d74a0b43b3402b860..0d8d4cd6734673b944009f8377847588879d4a37 100644
--- a/test/poisson/poisson_dg_matrix_free.mini
+++ b/test/poisson/poisson_dg_matrix_free.mini
@@ -14,6 +14,6 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-6
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
 matrix_free = 1
\ No newline at end of file
diff --git a/test/poisson/poisson_dg_neumann.mini b/test/poisson/poisson_dg_neumann.mini
index f02d6c821cc5f0799768c6219d2d1465670579e5..7d930fb92e7813ff37c9c4ea49bdc7c2ae34d80b 100644
--- a/test/poisson/poisson_dg_neumann.mini
+++ b/test/poisson/poisson_dg_neumann.mini
@@ -14,5 +14,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 9e-8
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
diff --git a/test/poisson/poisson_dg_quadrilateral.mini b/test/poisson/poisson_dg_quadrilateral.mini
index 2a3cef7057e47d3a6c917bacffbf9a21c458362d..dde2e495ab819ed22be6b848518ed71d41cfe30f 100644
--- a/test/poisson/poisson_dg_quadrilateral.mini
+++ b/test/poisson/poisson_dg_quadrilateral.mini
@@ -12,5 +12,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 7e-7
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
diff --git a/test/poisson/poisson_dg_tensor.mini b/test/poisson/poisson_dg_tensor.mini
index 9db75ec7f7c519e2f315cb234f9099ef94c5d465..d696cebc5196bd711ef4e8e2e1371a977be3a31f 100644
--- a/test/poisson/poisson_dg_tensor.mini
+++ b/test/poisson/poisson_dg_tensor.mini
@@ -14,5 +14,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 4e-6
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
\ No newline at end of file
diff --git a/test/poisson/poisson_matrix_free.mini b/test/poisson/poisson_matrix_free.mini
index 8d0e9d1d7b318f83c1498ec358a9ac35cae227b7..3372c8ac453f91d001c3178110e1d6caacec6b48 100644
--- a/test/poisson/poisson_matrix_free.mini
+++ b/test/poisson/poisson_matrix_free.mini
@@ -13,5 +13,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-7
 
-[formcompiler.operator]
+[formcompiler.r]
 matrix_free = 1
\ No newline at end of file
diff --git a/test/poisson/poisson_neumann.mini b/test/poisson/poisson_neumann.mini
index bf836b6fe1cc1a358418e22b6b50524553f9c50e..76a1fa9e12af16426692c197b80a14599aaee74b 100644
--- a/test/poisson/poisson_neumann.mini
+++ b/test/poisson/poisson_neumann.mini
@@ -14,5 +14,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 8e-8
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
diff --git a/test/poisson/poisson_tensor.mini b/test/poisson/poisson_tensor.mini
index 11fe49af49ba71a41d2328feb8d92f923485c793..ec4d2c310bf6ba32e9d17aca53aeba00f6cbc4ee 100644
--- a/test/poisson/poisson_tensor.mini
+++ b/test/poisson/poisson_tensor.mini
@@ -14,5 +14,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-7
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
\ No newline at end of file
diff --git a/test/stokes/stokes.mini b/test/stokes/stokes.mini
index 61f68cf98fe3ac9e3dd6fdcadaeb00de79d795b6..b281b6bbe7755097c091007d1c9ed0b6840afad2 100644
--- a/test/stokes/stokes.mini
+++ b/test/stokes/stokes.mini
@@ -15,5 +15,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-11
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 0, 1 | expand num
diff --git a/test/stokes/stokes_3d_dg_quadrilateral.mini b/test/stokes/stokes_3d_dg_quadrilateral.mini
index a66a10cd617232e3bb4ac8e3fbbba52570dea53a..59396277ede15f6a563d04fb448c4d3b5a445b3b 100644
--- a/test/stokes/stokes_3d_dg_quadrilateral.mini
+++ b/test/stokes/stokes_3d_dg_quadrilateral.mini
@@ -12,5 +12,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 6e-8
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 0, 1 | expand num
diff --git a/test/stokes/stokes_3d_quadrilateral.mini b/test/stokes/stokes_3d_quadrilateral.mini
index fb12e781dfa2138ffa0c1a758c7bfe872cbeaf6c..17f3d9f510054ff9014830e258edd7840180248e 100644
--- a/test/stokes/stokes_3d_quadrilateral.mini
+++ b/test/stokes/stokes_3d_quadrilateral.mini
@@ -13,5 +13,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-10
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
diff --git a/test/stokes/stokes_dg.mini b/test/stokes/stokes_dg.mini
index e09fdb1ce0afa8b381f3e2b76bcc2c360b07d11f..2fa0e00a83866ef7d1e3fa5036181e91973a92fa 100644
--- a/test/stokes/stokes_dg.mini
+++ b/test/stokes/stokes_dg.mini
@@ -17,5 +17,5 @@ zeroThreshold.data_1 = 1e-6
 [formcompiler]
 compare_l2errorsquared = 1e-9
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 0, 1 | expand num
diff --git a/test/stokes/stokes_dg_quadrilateral.mini b/test/stokes/stokes_dg_quadrilateral.mini
index c89a5d3db4596801a454aac2479ff1f4d02fb35c..78954b12873569589c2874d15858c6121a242eb5 100644
--- a/test/stokes/stokes_dg_quadrilateral.mini
+++ b/test/stokes/stokes_dg_quadrilateral.mini
@@ -12,5 +12,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-8
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 0, 1 | expand num
diff --git a/test/stokes/stokes_quadrilateral.mini b/test/stokes/stokes_quadrilateral.mini
index bad65475c66d6994474d79d011dde5ce32e90f33..6ee36e8220463cbb75764a91b0ae1d2970f28eb3 100644
--- a/test/stokes/stokes_quadrilateral.mini
+++ b/test/stokes/stokes_quadrilateral.mini
@@ -13,5 +13,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-10
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
diff --git a/test/stokes/stokes_stress.mini b/test/stokes/stokes_stress.mini
index 1ac9b06b62e64db652d757673b1f1082978c3490..9663f5f1f9d329c02e568a169aeacb66ef4c2e63 100644
--- a/test/stokes/stokes_stress.mini
+++ b/test/stokes/stokes_stress.mini
@@ -17,5 +17,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-11
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1
diff --git a/test/stokes/stokes_stress_sym.mini b/test/stokes/stokes_stress_sym.mini
index ec5f2a0d9a45768b87e9157dafff1bed2c9c2e5a..9646ec0840f422c924e53ef289a87a6cebc6c3cb 100644
--- a/test/stokes/stokes_stress_sym.mini
+++ b/test/stokes/stokes_stress_sym.mini
@@ -15,5 +15,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-6
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1
diff --git a/test/stokes/stokes_sym.mini b/test/stokes/stokes_sym.mini
index 5755676adb0997f4ee61c5f98a282dfa4284fb13..89dcee74944f7445b78176aafc61a7105d4c5f99 100644
--- a/test/stokes/stokes_sym.mini
+++ b/test/stokes/stokes_sym.mini
@@ -15,5 +15,5 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-10
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 0, 1 | expand num
diff --git a/test/sumfact/mass/mass.mini b/test/sumfact/mass/mass.mini
index 8cb8cb8c83a52ecd42fb8cfa19cee5471b26624e..6b0e9db8144fe18f7cf5e89f016d228d74ae9173 100644
--- a/test/sumfact/mass/mass.mini
+++ b/test/sumfact/mass/mass.mini
@@ -12,7 +12,7 @@ printmatrix = 1
 name = {__name}
 extension = vtu
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
 vectorization_quadloop = 1, 0 | expand vec
 sumfact = 1
diff --git a/test/sumfact/mass/mass_3d.mini b/test/sumfact/mass/mass_3d.mini
index 1bde4e8cb0c981de2cdc89446f82df0a8e0c3d27..fff87d11bb272dc5d5bd57e8f12569581ddc2485 100644
--- a/test/sumfact/mass/mass_3d.mini
+++ b/test/sumfact/mass/mass_3d.mini
@@ -13,7 +13,7 @@ printmatrix = true
 name = {__name}
 extension = vtu
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
 vectorization_quadloop = 1, 0 | expand vec
 sumfact = 1
diff --git a/test/sumfact/mass/sliced.mini b/test/sumfact/mass/sliced.mini
index 542548d72ae2bcc2286340f4aeef71f2cbcfb648..17d331901a999c5d2d90a0453dfc524183f6e132 100644
--- a/test/sumfact/mass/sliced.mini
+++ b/test/sumfact/mass/sliced.mini
@@ -9,7 +9,7 @@ printmatrix = true
 name = {__name}
 extension = vtu
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1
 vectorization_strategy = explicit
 vectorization_horizontal = 1
diff --git a/test/sumfact/poisson/diagonal.mini b/test/sumfact/poisson/diagonal.mini
index 58abb8c603838a31668a8cc8332bb59f743cbeb8..298fadba9554771a7bdf4810b15ad7e925861cbf 100644
--- a/test/sumfact/poisson/diagonal.mini
+++ b/test/sumfact/poisson/diagonal.mini
@@ -10,7 +10,7 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-5
 
-[formcompiler.operator]
+[formcompiler.r]
 sumfact = 1
 vectorization_quadloop = 1
 vectorization_strategy = explicit
diff --git a/test/sumfact/poisson/opcount_poisson_2d_order2.mini b/test/sumfact/poisson/opcount_poisson_2d_order2.mini
index cc5de56f45a320ca43397be3078622aadd6f9c16..538189b2e5c14bd745c748fc43e3161c4013cc77 100644
--- a/test/sumfact/poisson/opcount_poisson_2d_order2.mini
+++ b/test/sumfact/poisson/opcount_poisson_2d_order2.mini
@@ -16,7 +16,7 @@ compare_l2errorsquared = 1e-8
 opcounter = 1
 instrumentation_level = 4
 
-[formcompiler.operator]
+[formcompiler.r]
 sumfact = 1
 
 [formcompiler.ufl_variants]
diff --git a/test/sumfact/poisson/opcount_sumfact_poisson_dg_2d_vec.mini b/test/sumfact/poisson/opcount_sumfact_poisson_dg_2d_vec.mini
index 02039a9fbbc9ff213c9d09073f07ba0004ffbde5..b657c1a2c731e0606093ab3c0e00044afaadd3ae 100644
--- a/test/sumfact/poisson/opcount_sumfact_poisson_dg_2d_vec.mini
+++ b/test/sumfact/poisson/opcount_sumfact_poisson_dg_2d_vec.mini
@@ -13,7 +13,7 @@ extension = vtu
 opcounter = 1
 instrumentation_level = 4
 
-[formcompiler.operator]
+[formcompiler.r]
 sumfact = 1
 
 [formcompiler.ufl_variants]
diff --git a/test/sumfact/poisson/poisson_2d.mini b/test/sumfact/poisson/poisson_2d.mini
index a079932bb92ad4812091e29be68acde9cacf1c3e..d9ce1773e575fab9ec9e05057207093c8ea8b747 100644
--- a/test/sumfact/poisson/poisson_2d.mini
+++ b/test/sumfact/poisson/poisson_2d.mini
@@ -16,7 +16,7 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 4e-5, 4e-9 | expand deg
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
 sumfact = 1
 vectorization_strategy = explicit, none | expand grad
diff --git a/test/sumfact/poisson/poisson_3d.mini b/test/sumfact/poisson/poisson_3d.mini
index 31f556f56fd550c252c369d0ea42b7a24e13fd34..e3e6da7d29475cedd70db44a2b667d6171ae5c80 100644
--- a/test/sumfact/poisson/poisson_3d.mini
+++ b/test/sumfact/poisson/poisson_3d.mini
@@ -17,7 +17,7 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-4, 1e-8 | expand deg
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
 sumfact = 1
 vectorization_quadloop = 1, 0 | expand quad
diff --git a/test/sumfact/poisson/poisson_dg_2d.mini b/test/sumfact/poisson/poisson_dg_2d.mini
index 3b4fd9a55c33e03417705e3fff0729031913dd30..d6799eac4600300f86303ea63853365698efdf1f 100644
--- a/test/sumfact/poisson/poisson_dg_2d.mini
+++ b/test/sumfact/poisson/poisson_dg_2d.mini
@@ -16,7 +16,7 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 5e-5, 5e-7 | expand deg
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
 sumfact = 1
 vectorization_quadloop = 1, 0 | expand quad
diff --git a/test/sumfact/poisson/poisson_dg_3d.mini b/test/sumfact/poisson/poisson_dg_3d.mini
index 58410c459b76841d6169edf63fc9cfacc61599b1..f0b4ef26f73509e9dea47a1cca366c83a51bfb93 100644
--- a/test/sumfact/poisson/poisson_dg_3d.mini
+++ b/test/sumfact/poisson/poisson_dg_3d.mini
@@ -16,7 +16,7 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-4, 5e-6 | expand deg
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
 sumfact = 1
 vectorization_quadloop = 1, 0 | expand quad
diff --git a/test/sumfact/poisson/poisson_dg_tensor.mini b/test/sumfact/poisson/poisson_dg_tensor.mini
index aa485d22e7351e5a2cc95bacbaee9984076ad6d0..f6884f965eac0a47416af97b26aa849a6be688ad 100644
--- a/test/sumfact/poisson/poisson_dg_tensor.mini
+++ b/test/sumfact/poisson/poisson_dg_tensor.mini
@@ -14,7 +14,7 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 3e-4
 
-[formcompiler.operator]
+[formcompiler.r]
 sumfact = 1
 vectorization_quadloop = 1, 0 | expand quad
 vectorization_strategy = explicit, none | expand grad
diff --git a/test/sumfact/poisson/poisson_fastdg_2d.mini b/test/sumfact/poisson/poisson_fastdg_2d.mini
index abd5b214f983243728cfc98f958278b65b1be5a1..53012e325a57387003dc42f2af4268f48cbdaa98 100644
--- a/test/sumfact/poisson/poisson_fastdg_2d.mini
+++ b/test/sumfact/poisson/poisson_fastdg_2d.mini
@@ -14,7 +14,7 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-4
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 0
 sumfact = 1
 vectorization_quadloop = 1, 0 | expand quadvec
diff --git a/test/sumfact/poisson/poisson_fastdg_3d.mini b/test/sumfact/poisson/poisson_fastdg_3d.mini
index e58d07852e57ddeb2d4ef4f0d5be1b02384030ee..46552ce9e960e8a53715016e3de0bd6e770b5425 100644
--- a/test/sumfact/poisson/poisson_fastdg_3d.mini
+++ b/test/sumfact/poisson/poisson_fastdg_3d.mini
@@ -14,7 +14,7 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-4
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 0
 sumfact = 1
 vectorization_quadloop = 1, 0 | expand quadvec
diff --git a/test/sumfact/poisson/sliced.mini b/test/sumfact/poisson/sliced.mini
index 26652161e2751ea54ed82e326e833f12ae57526d..55b6fcf7df3b0ee33f06bb97da0e8b555104c161 100644
--- a/test/sumfact/poisson/sliced.mini
+++ b/test/sumfact/poisson/sliced.mini
@@ -10,7 +10,7 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-5
 
-[formcompiler.operator]
+[formcompiler.r]
 sumfact = 1
 vectorization_quadloop = 1
 vectorization_strategy = explicit
diff --git a/test/sumfact/stokes/stokes.mini b/test/sumfact/stokes/stokes.mini
index 203e89e28eaea013e5a5868c9f576f489d98d09f..cfb89ec57d5504fca215ddc08d862e5e2484fc19 100644
--- a/test/sumfact/stokes/stokes.mini
+++ b/test/sumfact/stokes/stokes.mini
@@ -14,7 +14,7 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-12
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 1, 0 | expand num
 vectorization_quadloop = 1, 0 | expand quad
 sumfact = 1
diff --git a/test/sumfact/stokes/stokes_dg.mini b/test/sumfact/stokes/stokes_dg.mini
index 9b5202a1a39221aee536f20acd2819ec5d93f9e5..f34f23422ae888f7ea5d3085b41b87c2ac929346 100644
--- a/test/sumfact/stokes/stokes_dg.mini
+++ b/test/sumfact/stokes/stokes_dg.mini
@@ -15,9 +15,9 @@ extension = vtu
 [formcompiler]
 compare_l2errorsquared = 1e-8
 
-[formcompiler.operator]
+[formcompiler.r]
 numerical_jacobian = 0, 1 | expand num
 sumfact = 1
 fastdg = 1, 0 | expand fastdg
 
-{formcompiler.operator.fastdg} == 1 and {formcompiler.numerical_jacobian} == 1 | exclude
\ No newline at end of file
+{formcompiler.r.fastdg} == 1 and {formcompiler.r.numerical_jacobian} == 1 | exclude
\ No newline at end of file