diff --git a/python/dune/codegen/blockstructured/accumulation.py b/python/dune/codegen/blockstructured/accumulation.py
index 89fee47c1dd5e14ffa4f1a276f73d9731144604c..a48096dcdbd37f9f7aea4b2ccc5df0e87e09d402 100644
--- a/python/dune/codegen/blockstructured/accumulation.py
+++ b/python/dune/codegen/blockstructured/accumulation.py
@@ -64,15 +64,19 @@ def blockstructured_boundary_predicated(measure, subdomain_id):
         def face_id_equals(id):
             return prim.Comparison(prim.Variable(face_id), "==", id)
 
+        def iname_equals(iname, i):
+            return prim.Comparison(prim.Variable(iname), "==", i)
+
         k = get_form_option("number_of_blocks")
 
-        if(world_dimension() == 2):
-            predicates.append(prim.If(face_id_equals(0), prim.Comparison(prim.Variable(subelem_inames[0]), "==", 0), True))
-            predicates.append(prim.If(face_id_equals(1), prim.Comparison(prim.Variable(subelem_inames[0]), "==", k - 1), True))
-            predicates.append(prim.If(face_id_equals(2), prim.Comparison(prim.Variable(subelem_inames[1]), "==", 0), True))
-            predicates.append(prim.If(face_id_equals(3), prim.Comparison(prim.Variable(subelem_inames[1]), "==", k - 1), True))
-        else:
-            raise NotImplementedError()
+        if world_dimension() >= 2:
+            predicates.append(prim.If(face_id_equals(0), iname_equals(subelem_inames[0], 0), True))
+            predicates.append(prim.If(face_id_equals(1), iname_equals(subelem_inames[0], k - 1), True))
+            predicates.append(prim.If(face_id_equals(2), iname_equals(subelem_inames[1], 0), True))
+            predicates.append(prim.If(face_id_equals(3), iname_equals(subelem_inames[1], k - 1), True))
+        if world_dimension() == 3:
+            predicates.append(prim.If(face_id_equals(4), iname_equals(subelem_inames[2], 0), True))
+            predicates.append(prim.If(face_id_equals(5), iname_equals(subelem_inames[2], k - 1), True))
     return frozenset(predicates)