diff --git a/python/dune/perftool/cgen/clazz.py b/python/dune/perftool/cgen/clazz.py
index 44847607fb3646d4d111615a1d7b8fdf6df4930f..03f4290f9a238eb9dfc7e8c4ae35fa8a05859afa 100644
--- a/python/dune/perftool/cgen/clazz.py
+++ b/python/dune/perftool/cgen/clazz.py
@@ -50,10 +50,11 @@ class Constructor(Generable):
     def generate(self):
         assert self.clsname
 
+        yield '\n'
         yield "{}:\n".format(access_modifier_string(self.access))
-        yield self.classname + "("
+        yield self.clsname + "("
         for ad in self.arg_decls:
-            for content in ad.generate():
+            for content in ad.generate(with_semicolon=False):
                 yield content
         yield ")"
 
@@ -72,7 +73,6 @@ class Class(Generable):
         self.tparam_decls = tparam_decls
         self.constructors = constructors
 
-        assert isinstance(name, str)
         for bc in base_classes:
             assert isinstance(bc, BaseClass)
         for mem in members:
@@ -99,7 +99,11 @@ class Class(Generable):
         yield '\n'
 
         # add base class inheritance
-        yield ",\n".join("    : {} {}\n".format(access_modifier_string(bc.inheritance), bc.name) for bc in self.base_classes)
+        for i, bc in enumerate(self.base_classes):
+            yield "    : {} {}".format(access_modifier_string(bc.inheritance), bc.name)
+            if i+1 != len(self.base_classes):
+                yield ','
+            yield '\n'
 
         # Now yield the entire block
         block = Block(contents=self.constructors + self.members)
diff --git a/python/dune/perftool/file.py b/python/dune/perftool/file.py
index 95b0bbe8d6679985c275a9f47b5eecc6febc1685..b031959a2ccbac0441ddb446372ee73249c30f7b 100644
--- a/python/dune/perftool/file.py
+++ b/python/dune/perftool/file.py
@@ -44,4 +44,4 @@ def generate_file(filename, tag, content, headerguard=True):
                 f.write(line)
 
         if headerguard:
-            f.write("\n\n#endif //{}".format(macro))
+            f.write("\n\n#endif //{}\n".format(macro))
diff --git a/python/dune/perftool/pdelab/localoperator.py b/python/dune/perftool/pdelab/localoperator.py
index ef22c80731e4a4f5eb21dd638f4e35a9d22c64b5..6c0240f1ca89fade988e384bebc99fea55e27157 100644
--- a/python/dune/perftool/pdelab/localoperator.py
+++ b/python/dune/perftool/pdelab/localoperator.py
@@ -14,12 +14,10 @@ from dune.perftool.cgen.clazz import BaseClass
 public_base_class = generator_factory(item_tags=("baseclass", "operator"), on_store=lambda n: BaseClass(n), counted=True, no_deco=True)
 initializer_list = generator_factory(item_tags=("pdelab", "initializer", "operator"), counted=True, no_deco=True)
 
-# TODO definition
-#private_member = generator_factory(item_tags=("pdelab", "member", "privatemember"))
-
-@generator_factory(item_tags=("pdelab", "constructor"), counted=True)
+@generator_factory(item_tags=("operator", "constructor_param"), counted=True)
 def constructor_parameter(_type, name):
-    return "{} {}".format(_type, name)
+    from cgen import Value
+    return Value(_type, name)
 
 @dune_symbol
 def name_initree_constructor():
@@ -27,6 +25,11 @@ def name_initree_constructor():
     constructor_parameter("const Dune::ParameterTree&", "iniParams")
     return "iniParams"
 
+@dune_symbol
+def localoperator_type():
+    #TODO use something from the form here to make it unique
+    return "LocalOperator"
+
 @memoize
 def measure_specific_details(measure):
     # The return dictionary that this memoized method will grant direct access to.
@@ -77,8 +80,6 @@ def measure_specific_details(measure):
 def generate_kernel(integrand=None, measure=None):
     assert integrand and measure
 
-    # Delete all non-include parts of the cache.
-    # TODO: add things such as base classes as cache items.
     from dune.perftool.generation import delete_cache
     delete_cache()
 
@@ -101,17 +102,19 @@ def generate_kernel(integrand=None, measure=None):
     domains = [i for i in retrieve_cache_items("domain")]
     instructions = [i for i in retrieve_cache_items("instruction")]
     temporaries = {i.name:i for i in retrieve_cache_items("temporary")}
-    preambles = [i for i in retrieve_cache_items("preamble")]
+    #preambles = [i for i in retrieve_cache_items("preamble")]
     arguments = [i for i in retrieve_cache_items("argument")]
 
     # Create the kernel
     from loopy import make_kernel, preprocess_kernel
-    kernel = make_kernel(domains, instructions, arguments, temporary_variables=temporaries, preambles=preambles, target=DuneTarget())
+    #kernel = make_kernel(domains, instructions, arguments, temporary_variables=temporaries, preambles=preambles, target=DuneTarget())
+    kernel = make_kernel(domains, instructions, arguments, temporary_variables=temporaries, target=DuneTarget())
     kernel = preprocess_kernel(kernel)
 
     # Return the actual code (might instead return kernels...)
     return kernel
 
+
 from dune.perftool.cgen.clazz import ClassMember
 class AssemblyMethod(ClassMember):
     def __init__(self, signature, kernel):
@@ -120,13 +123,18 @@ class AssemblyMethod(ClassMember):
         content = LiteralLines('\n'+'\n'.join(signature) + '\n' + generate_code(kernel)[0])
         ClassMember.__init__(self, content)
 
-def cgen_class_from_cache(name, tag, members=[]):
+
+def cgen_class_from_cache(tag, members=[]):
     from dune.perftool.generation import retrieve_cache_items
 
     base_classes = [bc for bc in retrieve_cache_items(tags=(tag, "baseclass"), union=False)]
+    constructor_params = [bc for bc in retrieve_cache_items(tags=(tag, "constructor_param"), union=False)]
+
+    from dune.perftool.cgen.clazz import Constructor
+    constructor = Constructor(arg_decls=constructor_params, clsname=localoperator_type())
 
     from dune.perftool.cgen import Class
-    return Class(name, base_classes=base_classes, members=members)
+    return Class(localoperator_type, base_classes=base_classes, members=members, constructors=[constructor])
 
 
 def generate_localoperator(form):
@@ -185,5 +193,5 @@ def generate_localoperator_file(kernels):
     from dune.perftool.file import generate_file
 
     # TODO take the name of this thing from the UFL file
-    lop = cgen_class_from_cache("LocalOperator", "operator", members=operator_methods)
+    lop = cgen_class_from_cache("operator", members=operator_methods)
     generate_file(get_option("operator_file"), "operator", [lop])