diff --git a/python/dune/perftool/blockstructured/basis.py b/python/dune/perftool/blockstructured/basis.py
index 9ca4eb08c0c2607b6ba9ecd263e532c80b7ac093..59d55174faa0f9fbc0133bcf6cbd523913477a4f 100644
--- a/python/dune/perftool/blockstructured/basis.py
+++ b/python/dune/perftool/blockstructured/basis.py
@@ -67,7 +67,7 @@ def name_localbasis(leaf_element):
 
 @kernel_cached
 def evaluate_basis(leaf_element, name, restriction):
-    temporary_variable(name, shape=(leaf_element.degree(),), decl_method=declare_cache_temporary(leaf_element, restriction, 'Function'))
+    temporary_variable(name, shape=(leaf_element.degree(), 1), decl_method=declare_cache_temporary(leaf_element, restriction, 'Function'))
     cache = name_localbasis_cache(leaf_element)
     qp = pymbolic_quadrature_position_in_cell(restriction)
     localbasis = name_localbasis(leaf_element)
@@ -85,7 +85,7 @@ def pymbolic_basis(leaf_element, restriction, number, context=''):
     evaluate_basis(leaf_element, name, restriction)
     iname = lfs_inames(leaf_element, restriction, number, context=context)[0]
 
-    return prim.Subscript(prim.Variable(name), (prim.Variable(iname), ))
+    return prim.Subscript(prim.Variable(name), (prim.Variable(iname), 0))
 
 
 @kernel_cached
diff --git a/python/dune/perftool/pdelab/driver/constraints.py b/python/dune/perftool/pdelab/driver/constraints.py
index c0890fd22eb03f54ba69e7497f60f11d6967d0a4..fbb20af4699aaaeb7af9199ff9590377d32a150f 100644
--- a/python/dune/perftool/pdelab/driver/constraints.py
+++ b/python/dune/perftool/pdelab/driver/constraints.py
@@ -38,19 +38,19 @@ def assemble_constraints(name):
 
 def name_bctype_function(element, is_dirichlet):
     if isinstance(element, (VectorElement, TensorElement)):
-        subel = element.sub_element()[0]
-        subgfs = name_bctype_function(subel, is_dirichlet[:subel.value_size()])
-        name = "{}_pow{}bctype".format(subgfs, element.num_sub_elements())
-        define_power_bctype_function(element, name, subgfs)
+        subel = element.sub_elements()[0]
+        child = name_bctype_function(subel, is_dirichlet[:subel.value_size()])
+        name = "{}_pow{}bctype".format(child, element.num_sub_elements())
+        define_power_bctype_function(element, name, child)
         return name
     if isinstance(element, MixedElement):
         k = 0
-        subgfs = []
+        childs = []
         for subel in element.sub_elements():
-            subgfs.append(name_gfs(subel, is_dirichlet[k:k + subel.value_size()]))
+            childs.append(name_bctype_function(subel, is_dirichlet[k:k + subel.value_size()]))
             k = k + subel.value_size()
-        name = "_".join(subgfs)
-        define_composite_bctype_function(element, is_dirichlet, name, tuple(subgfs))
+        name = "{}_bctype".format("_".join(childs))
+        define_composite_bctype_function(element, is_dirichlet, name, tuple(childs))
         return name
     else:
         assert isinstance(element, FiniteElement)
diff --git a/python/dune/perftool/pdelab/driver/interpolate.py b/python/dune/perftool/pdelab/driver/interpolate.py
index 3cbef4bdbfdeecc7fd149d4255a531b586b2c000..21998b9f45196ed815b97aab116de9de6715b6ec 100644
--- a/python/dune/perftool/pdelab/driver/interpolate.py
+++ b/python/dune/perftool/pdelab/driver/interpolate.py
@@ -52,7 +52,7 @@ def name_boundary_function(element, func):
             childs.append(name_boundary_function(subel, func[k:k + subel.value_size()]))
             k = k + subel.value_size()
         name = "_".join(childs)
-        define_composite_parameterfunction(name, tuple(childs))
+        define_compositegfs_parameterfunction(name, tuple(childs))
         return name
     else:
         assert isinstance(element, FiniteElement)