diff --git a/src/assemblers.cc b/src/assemblers.cc
index cad3e273a7b870e069cc32c32340306269b624c7..c3e3c4149065b804a21775b41b52aef74efba047 100644
--- a/src/assemblers.cc
+++ b/src/assemblers.cc
@@ -58,7 +58,7 @@ assemble_nonlinearity(
     Dune::ParameterTree const &parset,
     Dune::BlockVector<Dune::FieldVector<double, 1>> const &nodalIntegrals,
     Dune::BlockVector<Dune::FieldVector<double, 1>> const &state,
-    double scalarNormalStress) {
+    Dune::BlockVector<Dune::FieldVector<double, 1>> const &normalStress) {
   auto const size = nodalIntegrals.size();
 
   typedef Dune::BlockVector<Dune::FieldVector<double, 1>> SingletonVectorType;
@@ -66,9 +66,6 @@ assemble_nonlinearity(
   SingletonVectorType mu(size);
   mu = parset.get<double>("mu");
 
-  SingletonVectorType normalStress(size);
-  normalStress = scalarNormalStress;
-
   switch (parset.get<Config::model>("model")) {
     case Config::Exponential: {
       SingletonVectorType a(size);
diff --git a/src/assemblers.hh b/src/assemblers.hh
index 12b49c1fde2b7daf5ed0efeadfb3a1e8350bf9e0..dd2a1cf25197ffd4cdc47b328de75a5ddc131103 100644
--- a/src/assemblers.hh
+++ b/src/assemblers.hh
@@ -28,6 +28,5 @@ assemble_nonlinearity(
     Dune::ParameterTree const &parset,
     Dune::BlockVector<Dune::FieldVector<double, 1>> const &nodalIntegrals,
     Dune::BlockVector<Dune::FieldVector<double, 1>> const &state,
-    double scalarNormalStress);
-
+    Dune::BlockVector<Dune::FieldVector<double, 1>> const &normalStress);
 #endif
diff --git a/src/assemblers_tmpl.cc b/src/assemblers_tmpl.cc
index f20d3a3bb461ab48544076d2c87504dbc8d1861f..9418d1ba30dbf0388f7c4766e78028bd9c7b1b85 100644
--- a/src/assemblers_tmpl.cc
+++ b/src/assemblers_tmpl.cc
@@ -35,4 +35,4 @@ assemble_nonlinearity<MatrixType, VectorType>(
     Dune::ParameterTree const &parset,
     Dune::BlockVector<Dune::FieldVector<double, 1>> const &nodalIntegrals,
     Dune::BlockVector<Dune::FieldVector<double, 1>> const &state,
-    double scalarNormalStress);
+    Dune::BlockVector<Dune::FieldVector<double, 1>> const &normalStress);
diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc
index b3d1420e53fb31d7ee8b9311df4611849f3923e2..d9148a1b54a79dcc86598ea890fa9022cdca8a00 100644
--- a/src/one-body-sample.cc
+++ b/src/one-body-sample.cc
@@ -256,6 +256,12 @@ int main(int argc, char *argv[]) {
     SingletonVectorType alpha(alpha_old);
 
     SingletonVectorType vonMisesStress;
+
+    SingletonVectorType surfaceNormalStress(finestSize);
+    surfaceNormalStress = 0.0;
+    for (size_t i = 0; i < frictionalNodes.size(); ++i)
+      if (frictionalNodes[i][0])
+        surfaceNormalStress[i] = normalStress;
     // }}}
 
     typedef MyConvexProblem<MatrixType, VectorType> MyConvexProblemType;
@@ -345,7 +351,7 @@ int main(int argc, char *argv[]) {
           auto myGlobalNonlinearity =
               assemble_nonlinearity<MatrixType, VectorType>(
                   parset.sub("boundary.friction"), *nodalIntegrals, alpha,
-                  normalStress);
+                  surfaceNormalStress);
 
           MyConvexProblemType const myConvexProblem(
               problem_A, *myGlobalNonlinearity, problem_rhs);