diff --git a/src/assemblers.cc b/src/assemblers.cc
index 496c12a35e5b5c5fe296319a7b7e0421885a36aa..64a999043f1ffce5151bc87683a91889e7941b6d 100644
--- a/src/assemblers.cc
+++ b/src/assemblers.cc
@@ -95,9 +95,9 @@ void MyAssembler<GridView, dimension>::assembleNeumann(
     Dune::VirtualFunction<double, double> const &neumann, double relativeTime) {
   LocalVector localNeumann(0);
   neumann.evaluate(relativeTime, localNeumann[0]);
-  ConstantFunction<LocalVector, LocalVector> const fNeumann(localNeumann);
   NeumannBoundaryAssembler<Grid, LocalVector> neumannBoundaryAssembler(
-      fNeumann);
+      std::make_shared<ConstantFunction<LocalVector, LocalVector>>(
+          localNeumann));
   vertexAssembler.assembleBoundaryFunctional(neumannBoundaryAssembler, f,
                                              neumannBoundary);
 }
@@ -134,10 +134,10 @@ auto MyAssembler<GridView, dimension>::assembleFrictionNonlinearity(
   // Lump negative normal stress (kludge)
   ScalarVector weights;
   {
-    ConstantFunction<LocalVector, typename ScalarVector::block_type> const
-        constantOneFunction(1);
     NeumannBoundaryAssembler<Grid, typename ScalarVector::block_type>
-        frictionalBoundaryAssembler(constantOneFunction);
+        frictionalBoundaryAssembler(std::make_shared<
+            ConstantFunction<LocalVector, typename ScalarVector::block_type>>(
+            1));
     vertexAssembler.assembleBoundaryFunctional(frictionalBoundaryAssembler,
                                                weights, frictionalBoundary);
   }