diff --git a/cosserat-continuum.cc b/cosserat-continuum.cc
index db6f18c1a5750fa19a72bf499888ad903659fd83..42510b2e499f50844481be436ef1b50b0de0bf49 100644
--- a/cosserat-continuum.cc
+++ b/cosserat-continuum.cc
@@ -22,6 +22,7 @@
 #include <dune/grid/io/file/gmshreader.hh>
 
 #include <dune/fufem/boundarypatch.hh>
+#include <dune/fufem/functiontools/boundarydofs.hh>
 #include <dune/fufem/functionspacebases/p1nodalbasis.hh>
 
 #include <dune/solvers/solvers/iterativesolver.hh>
@@ -212,12 +213,14 @@ int main (int argc, char *argv[]) try
     std::cout << "Neumann boundary has " << neumannBoundary.numFaces() << " faces\n";
 
 
+    BitSetVector<1> dirichletNodes(feBasis.size(), false);
+    constructBoundaryDofs(dirichletBoundary,feBasis,dirichletNodes);
 
-    BitSetVector<blocksize> dirichletNodes(feBasis.size(), false);
+    BitSetVector<blocksize> dirichletDofs(feBasis.size(), false);
     for (size_t i=0; i<feBasis.size(); i++)
-      if (dirichletVertices[i][0])
+      if (dirichletNodes[i][0])
         for (int j=0; j<5; j++)
-          dirichletNodes[i][j] = true;
+          dirichletDofs[i][j] = true;
 
     // //////////////////////////
     //   Initial iterate
@@ -285,7 +288,7 @@ int main (int argc, char *argv[]) try
     solver.setup(*grid,
                  &assembler,
                  x,
-                 dirichletNodes,
+                 dirichletDofs,
                  tolerance,
                  maxTrustRegionSteps,
                  initialTrustRegionRadius,
@@ -303,7 +306,7 @@ int main (int argc, char *argv[]) try
         for (vIt=gridView.begin<dim>(); vIt!=vEndIt; ++vIt) {
 
             int idx = indexSet.index(*vIt);
-            if (dirichletNodes[idx][0]) {
+            if (dirichletDofs[idx][0]) {
 
                 // Only the positions have Dirichlet values
                 dirichletValues(vIt->geometry().corner(0), x[idx].r,