diff --git a/python/dune/perftool/pdelab/__init__.py b/python/dune/perftool/pdelab/__init__.py
index 3d3f3f99cc0abbbabb12c5b766dbea19f3eed7ba..4afe9a97e1fe833af5df9edb204a4dc52bb75e28 100644
--- a/python/dune/perftool/pdelab/__init__.py
+++ b/python/dune/perftool/pdelab/__init__.py
@@ -92,8 +92,8 @@ class PDELabInterface(object):
     def pymbolic_list_tensor(self, o, visitor):
         return pymbolic_list_tensor(o, visitor)
 
-    def pymbolic_identity(self, o, visitor):
-        return pymbolic_identity(o, visitor)
+    def pymbolic_identity(self, o):
+        return pymbolic_identity(o)
 
     #
     # Geometry related generator functions
diff --git a/python/dune/perftool/pdelab/geometry.py b/python/dune/perftool/pdelab/geometry.py
index bb50344c1a553d9587757e58889b9c6fd979ee37..9da0f1ee86df3e836a8091cc55ddfe3d148e0ab0 100644
--- a/python/dune/perftool/pdelab/geometry.py
+++ b/python/dune/perftool/pdelab/geometry.py
@@ -320,11 +320,7 @@ def define_constant_jacobian_inveser_transposed(name, restriction):
 
     globalarg(name, dtype=np.float64, shape=(dim, dim), managed=False)
 
-    if get_option('turn_off_diagonal_jacobian'):
-        jit_type = 'Dune::FieldMatrix<double,{},{}>'.format(dim,dim)
-    else:
-        jit_type = 'auto'
-
+    jit_type = type_jacobian_inverse_transposed(restriction)
     return '{} {} = {}.jacobianInverseTransposed({});'.format(jit_type,
                                                               name,
                                                               geo,
diff --git a/python/dune/perftool/pdelab/tensors.py b/python/dune/perftool/pdelab/tensors.py
index 6c7e4fc5f88eaaa5d019c6c2c26371e6b672b550..aa154bdb1a41a8dfc54b8faf92043be5a4c0b78a 100644
--- a/python/dune/perftool/pdelab/tensors.py
+++ b/python/dune/perftool/pdelab/tensors.py
@@ -44,7 +44,7 @@ def identity_iname(name, bound):
     return name
 
 
-def define_identity(name, expr, visitor):
+def define_identity(name, expr):
     i = identity_iname("i", expr.ufl_shape[0])
     j = identity_iname("j", expr.ufl_shape[1])
     instruction(assignee=prim.Subscript(prim.Variable(name), (prim.Variable(i), prim.Variable(j))),
@@ -54,12 +54,12 @@ def define_identity(name, expr, visitor):
 
 
 @kernel_cached
-def pymbolic_identity(expr, visitor):
-    name = get_counted_variable("identity")
+def pymbolic_identity(expr):
+    name = "identity_{}_{}".format(expr.ufl_shape[0],expr.ufl_shape[1])
     temporary_variable(name,
                        shape=expr.ufl_shape,
                        shape_impl=('fm',),
                        dtype=np.float64,
                        )
-    define_identity(name, expr, visitor)
+    define_identity(name, expr)
     return prim.Variable(name)
diff --git a/python/dune/perftool/ufl/extract_accumulation_terms.py b/python/dune/perftool/ufl/extract_accumulation_terms.py
index d1615aca972ed0dc191fa17fbe1790fac5c86dfb..4dbebbb8233f06cbb42ac273a72d609dc8fb5059 100644
--- a/python/dune/perftool/ufl/extract_accumulation_terms.py
+++ b/python/dune/perftool/ufl/extract_accumulation_terms.py
@@ -136,7 +136,7 @@ def split_into_accumulation_terms(expr):
                 # - Replacing (\nabla v)_{k,l} by I_{k,l} after step 4.
                 if len(set(indexed_test_arg.index._indices)) < len(indexed_test_arg.index._indices):
                     if len(indexed_test_arg.index._indices)>2:
-                        raise NotImplementedError("Test argument with more than three indices and double occurence ist not implemted.")
+                        raise NotImplementedError("Test argument with more than three indices and double occurence ist not implemented.")
                     mod_index_map = {indexed_test_arg.index: MultiIndex((newi[0], newi[1]))}
                     mod_indexed_test_arg = replace_expression(indexed_test_arg.expr,
                                                               replacemap = mod_index_map)
diff --git a/python/dune/perftool/ufl/transformations/axiparallel.py b/python/dune/perftool/ufl/transformations/axiparallel.py
index cd187da20747eb913f45a532058046a65f3609af..6d7e53e4a2468c0198dabb349017fc885915ef04 100644
--- a/python/dune/perftool/ufl/transformations/axiparallel.py
+++ b/python/dune/perftool/ufl/transformations/axiparallel.py
@@ -43,7 +43,7 @@ class LocalDiagonalJITReplacer(MultiFunction):
         return MultiIndex(tuple(self.local_replacemap.get(i, i) for i in o))
 
     def indexed(self, o):
-        if self.local_replacemap!={}:
+        if self.local_replacemap:
             if isinstance(o.ufl_operands[1], MultiIndex):
                 return self.reuse_if_untouched(o, *tuple(self.call(op) for op in o.ufl_operands))
         else:
diff --git a/python/dune/perftool/ufl/visitor.py b/python/dune/perftool/ufl/visitor.py
index a5cf1a9d076d95ae484eb1693f6ff19b891ee0ba..711f92bf6b54a614ddcdd647409e55f310461c08 100644
--- a/python/dune/perftool/ufl/visitor.py
+++ b/python/dune/perftool/ufl/visitor.py
@@ -229,14 +229,14 @@ class UFL2LoopyVisitor(ModifiedTerminalTracker):
     def list_tensor(self, o):
         return self.interface.pymbolic_list_tensor(o, self)
 
+    def identity(self, o):
+        return self.interface.pymbolic_identity(o)
+
     #
     # Handlers for arithmetic operators and functions
     # Those handlers would be valid in any code going from UFL to pymbolic
     #
 
-    def identity(self, o):
-        return self.interface.pymbolic_identity(o, self)
-
     def product(self, o):
         return Product(tuple(self.call(op) for op in o.ufl_operands))