diff --git a/python/dune/perftool/compile.py b/python/dune/perftool/compile.py
index a40a178227823c199c2a59a6f83baa8cb899d10b..8e8f9f4506cd2f4b0b308e334fc85cc63edf567b 100644
--- a/python/dune/perftool/compile.py
+++ b/python/dune/perftool/compile.py
@@ -90,9 +90,18 @@ def compile_form():
             with cache_context('driver', delete=True):
                 generate_driver(formdatas[0].preprocessed_form, get_option("driver_file"))
 
+    # In case of multiple forms: Genarate one file that includes all localoperator files
+    if len(formdatas) > 1:
+        from dune.perftool.pdelab.localoperator import generate_localoperator_basefile
+        generate_localoperator_basefile(formdatas, data)
+
     # Generate local operator files
-    for formdata in formdatas:
+    for index, formdata in enumerate(formdatas):
         with global_context(data=data, formdata=formdata):
+            # Make sure cache is empty
+            from dune.perftool.generation import delete_cache_items
+            delete_cache_items()
+
             if get_option("operator_file"):
                 from dune.perftool.pdelab.localoperator import generate_localoperator_kernels
                 kernels = generate_localoperator_kernels(formdata, data)
@@ -108,4 +117,3 @@ def compile_form():
 
                 from dune.perftool.pdelab.localoperator import generate_localoperator_file
                 generate_localoperator_file(kernels, filename)
-            break
diff --git a/python/dune/perftool/pdelab/driver.py b/python/dune/perftool/pdelab/driver.py
index 9a3ad1474c8667e1c2e2d1ea4f36d574097ce281..011c2dac4c49387d57387246a31078e4d78b9432 100644
--- a/python/dune/perftool/pdelab/driver.py
+++ b/python/dune/perftool/pdelab/driver.py
@@ -610,8 +610,7 @@ def typedef_localoperator(name):
     from dune.perftool.generation import get_global_context_value
     data = get_global_context_value("data")
     formdata = get_global_context_value("formdata")
-    from dune.perftool.pdelab.localoperator import name_localoperator_file
-    filename = name_localoperator_file(formdata, data)
+    filename = get_option("operator_file")
     include_file(filename, filetag="driver")
     from dune.perftool.pdelab.localoperator import localoperator_basename
     lopname = localoperator_basename(formdata, data)
diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py
index dde94934766335f1a85d340ca53073b7b14b6911..b4990c0f4328d8ccfa5008b3025f03e05e0d8cf2 100644
--- a/python/dune/perftool/pdelab/localoperator.py
+++ b/python/dune/perftool/pdelab/localoperator.py
@@ -34,10 +34,13 @@ def name_form(formdata, data):
 
 
 def name_localoperator_file(formdata, data):
-    suffix = '_' + name_form(formdata, data)
     from dune.perftool.options import get_option
-    basename, extension = splitext(get_option("operator_file"))
-    filename = basename + suffix + extension
+    if len(data.forms) == 1:
+        filename = get_option("operator_file")
+    else:
+        suffix = '_' + name_form(formdata, data)
+        basename, extension = splitext(get_option("operator_file"))
+        filename = basename + suffix + extension
     return filename
 
 
@@ -128,7 +131,7 @@ def name_initree_member():
 @class_basename("operator")
 def localoperator_basename(formdata, data):
     form_name = name_form(formdata, data)
-    return "LocalOperator"+form_name.capitalize()
+    return "LocalOperator" + form_name.capitalize()
 
 
 def class_type_from_cache(classtag):
@@ -447,3 +450,13 @@ def generate_localoperator_file(kernels, filename):
     # TODO take the name of this thing from the UFL file
     lop = cgen_class_from_cache("operator", members=operator_methods)
     generate_file(filename, "operatorfile", [param, lop])
+
+
+def generate_localoperator_basefile(formdatas, data):
+    filename = get_option("operator_file")
+    for formdata in formdatas:
+        lop_filename = name_localoperator_file(formdata, data)
+        include_file(lop_filename, filetag="operatorbasefile")
+
+    from dune.perftool.file import generate_file
+    generate_file(filename, "operatorbasefile", [])
diff --git a/test/heatequation/heatequation.ufl b/test/heatequation/heatequation.ufl
index 8392d99ecc3398757e401489b4a980d79b916fe8..d883d345c9ae65e6175b66a380385766a65af953 100644
--- a/test/heatequation/heatequation.ufl
+++ b/test/heatequation/heatequation.ufl
@@ -5,9 +5,7 @@ V = FiniteElement("CG", "triangle", 1, dirichlet_expression=g)
 u = TrialFunction(V)
 v = TestFunction(V)
 
-# mass = (u*v)*dx
-# poisson = (inner(grad(u), grad(v)) - f*v)*dx
+mass = (u*v)*dx
+poisson = (inner(grad(u), grad(v)) - f*v)*dx
 
-# forms = [poisson,mass]
-
-forms = [(u*v)*dx,(inner(grad(u), grad(v)) - f*v)*dx]
\ No newline at end of file
+forms = [poisson,mass]
\ No newline at end of file