diff --git a/src/finite-strain-elasticity.cc b/src/finite-strain-elasticity.cc
index c87b7c53668930a71f0b7c5d66dbfec6ea7898a3..6ef8eac9339a87e9248e84a40b994c05bcbf183c 100644
--- a/src/finite-strain-elasticity.cc
+++ b/src/finite-strain-elasticity.cc
@@ -193,11 +193,7 @@ int main (int argc, char *argv[]) try
   lambda = std::string("lambda x: (") + parameterSet.get<std::string>("initialDeformation") + std::string(")");
   PythonFunction<FieldVector<double,dim>, FieldVector<double,3> > pythonInitialDeformation(Python::evaluate(lambda));
 
-  std::vector<FieldVector<double,3> > v;
-  Functions::interpolate(feBasis, v, pythonInitialDeformation);
-
-  for (size_t i=0; i<x.size(); i++)
-    x[i] = v[i];
+  Functions::interpolate(feBasis, x, pythonInitialDeformation);
 
   ////////////////////////////////////////////////////////
   //   Main homotopy loop
@@ -206,7 +202,7 @@ int main (int argc, char *argv[]) try
   // Output initial iterate (of homotopy loop)
   VTKWriter<GridType::LeafGridView> vtkWriter(grid->leafGridView());
   BlockVector<FieldVector<double,3> > displacement(x.size());
-  for (auto it = grid->leafGridView().template begin<dim>(); it != grid->leafGridView().template end<dim>(); ++it)
+  for (auto it = grid->leafGridView().begin<dim>(); it != grid->leafGridView().end<dim>(); ++it)
   {
     size_t idx = grid->leafGridView().indexSet().index(*it);
     displacement[idx] = x[idx] - it->geometry().corner(0);
@@ -279,8 +275,10 @@ int main (int argc, char *argv[]) try
     //   Set Dirichlet values
     ////////////////////////////////////////////////////////
 
+    // The python class that implements the Dirichlet values
     Python::Reference dirichletValuesClass = Python::import(parameterSet.get<std::string>("problem") + "-dirichlet-values");
 
+    // The member method 'DirichletValues' of that class
     Python::Callable C = dirichletValuesClass.get("DirichletValues");
 
     // Call a constructor.
@@ -289,12 +287,7 @@ int main (int argc, char *argv[]) try
     // Extract object member functions as Dune functions
     PythonFunction<FieldVector<double,dim>, FieldVector<double,3> >   dirichletValues(dirichletValuesPythonObject.get("dirichletValues"));
 
-    std::vector<FieldVector<double,3> > ddV;
-    Functions::interpolate(feBasis, ddV, dirichletValues, dirichletDofs);
-
-    for (size_t j=0; j<x.size(); j++)
-      if (dirichletNodes[j][0])
-        x[j] = ddV[j];
+    Functions::interpolate(feBasis, x, dirichletValues, dirichletDofs);
 
     // /////////////////////////////////////////////////////
     //   Solve!
@@ -308,7 +301,7 @@ int main (int argc, char *argv[]) try
     // Output result of each homotopy step
     VTKWriter<GridType::LeafGridView> vtkWriter(grid->leafGridView());
     BlockVector<FieldVector<double,3> > displacement(x.size());
-    for (auto it = grid->leafGridView().template begin<dim>(); it != grid->leafGridView().template end<dim>(); ++it)
+    for (auto it = grid->leafGridView().begin<dim>(); it != grid->leafGridView().end<dim>(); ++it)
     {
       size_t idx = grid->leafGridView().indexSet().index(*it);
       displacement[idx] = x[idx] - it->geometry().corner(0);