diff --git a/python/dune/perftool/pdelab/driver/constraints.py b/python/dune/perftool/pdelab/driver/constraints.py
index e3a96df485dc382761587e0950764372102869a6..ddb880ee2d0d667547d3883a137dc886d244a823 100644
--- a/python/dune/perftool/pdelab/driver/constraints.py
+++ b/python/dune/perftool/pdelab/driver/constraints.py
@@ -13,6 +13,7 @@ from dune.perftool.pdelab.driver.gridfunctionspace import (name_gfs,
                                                            preprocess_leaf_data,
                                                            )
 
+from ufl.classes import Expr
 from ufl import FiniteElement, MixedElement, TensorElement, VectorElement, TensorProductElement
 
 
@@ -24,8 +25,11 @@ def name_assembled_constraints():
 
 
 def has_dirichlet_constraints(is_dirichlet):
-    if isinstance(is_dirichlet, (list, tuple)):
-        return any(bool(d) for d in is_dirichlet)
+    if isinstance(is_dirichlet, (tuple, list)):
+        return any(has_dirichlet_constraints(d) for d in is_dirichlet)
+
+    if isinstance(is_dirichlet, Expr):
+        return True
     else:
         return bool(is_dirichlet)
 
diff --git a/python/dune/perftool/pdelab/driver/gridfunctionspace.py b/python/dune/perftool/pdelab/driver/gridfunctionspace.py
index a4ae3604c06af34a774ba0494751085fcffc1a9e..eb8688e01dfeede43d13c166b838b357841599eb 100644
--- a/python/dune/perftool/pdelab/driver/gridfunctionspace.py
+++ b/python/dune/perftool/pdelab/driver/gridfunctionspace.py
@@ -324,7 +324,8 @@ def typedef_gfs(element, is_dirichlet, name, root):
     vb = type_vectorbackend(element, root)
     gv = type_leafview()
     fem = type_fem(element)
-    cass = type_constraintsassembler(bool(is_dirichlet[0]))
+    from dune.perftool.pdelab.driver.constraints import has_dirichlet_constraints
+    cass = type_constraintsassembler(has_dirichlet_constraints(is_dirichlet))
     return "using {} = Dune::PDELab::GridFunctionSpace<{}, {}, {}, {}>;".format(name, gv, fem, cass, vb)