diff --git a/python/dune/perftool/sumfact/accumulation.py b/python/dune/perftool/sumfact/accumulation.py
index 1dd62bf231748bbf836a98060a6af313f1140e97..2baac3955129376b269fb5a9b9c10b17dcf3a8fa 100644
--- a/python/dune/perftool/sumfact/accumulation.py
+++ b/python/dune/perftool/sumfact/accumulation.py
@@ -41,7 +41,7 @@ import loopy as lp
 import numpy as np
 import pymbolic.primitives as prim
 import ufl.classes as uc
-from ufl import FiniteElement, TensorProductElement
+from ufl import FiniteElement, MixedElement, TensorProductElement
 
 
 @iname
@@ -201,7 +201,7 @@ def generate_accumulation_instruction(expr, visitor):
 
     # Number of basis functions per direction
     leaf_element = test_info.element
-    if leaf_element.num_sub_elements() > 0 and not isinstance(leaf_element, TensorProductElement):
+    if isinstance(leaf_element, MixedElement):
         leaf_element = leaf_element.extract_component(test_info.element_index)[1]
     degree = leaf_element._degree
     if isinstance(degree, int):
diff --git a/python/dune/perftool/sumfact/basis.py b/python/dune/perftool/sumfact/basis.py
index c73f9afef66918acd10ac6725bff055f43a821ba..4e1237c5d6c4e7b5d012de1d9328b06e6d350952 100644
--- a/python/dune/perftool/sumfact/basis.py
+++ b/python/dune/perftool/sumfact/basis.py
@@ -115,7 +115,7 @@ def _basis_functions_per_direction(element):
 def pymbolic_coefficient_gradient(element, restriction, index, coeff_func, visitor_indices):
     sub_element = element
     grad_index = visitor_indices[0]
-    if element.num_sub_elements() > 0 and not isinstance(element, TensorProductElement):
+    if isinstance(element, MixedElement):
         sub_element = element.extract_component(index)[1]
 
     from ufl import FiniteElement
diff --git a/python/dune/perftool/ufl/visitor.py b/python/dune/perftool/ufl/visitor.py
index 9b36e9cc4251d346cb354adb6ecc41ae5ec03494..70b95dbc30bae42848ebd8e7e30c494ef7a8c59b 100644
--- a/python/dune/perftool/ufl/visitor.py
+++ b/python/dune/perftool/ufl/visitor.py
@@ -99,7 +99,7 @@ class UFL2LoopyVisitor(ModifiedTerminalTracker):
         leaf_element = o.ufl_element()
 
         # Select the correct leaf element in the case of this being a mixed finite element
-        if o.ufl_element().num_sub_elements() > 0 and not isinstance(o.ufl_element(), TensorProductElement):
+        if isinstance(o.ufl_element(), MixedElement):
             index = self.indices[0]
             assert isinstance(index, int)
             self.indices = self.indices[1:]
@@ -128,7 +128,7 @@ class UFL2LoopyVisitor(ModifiedTerminalTracker):
             self.interface.initialize_function_spaces(o, self)
 
             index = None
-            if o.ufl_element().num_sub_elements() > 0 and not isinstance(o.ufl_element(), TensorProductElement):
+            if isinstance(o.ufl_element(), MixedElement):
                 index = self.indices[0]
                 assert isinstance(index, int)
                 self.indices = self.indices[1:]