diff --git a/dune/tectonic/globalruinanonlinearity.hh b/dune/tectonic/globalruinanonlinearity.hh
index 7269676ad8956dedb0d70c1089733ef75fa6bba8..101fd0396d4bbe05aa8bcc8ebec4d6ded94548e4 100644
--- a/dune/tectonic/globalruinanonlinearity.hh
+++ b/dune/tectonic/globalruinanonlinearity.hh
@@ -26,55 +26,30 @@ class GlobalRuinaNonlinearity
   GlobalRuinaNonlinearity(dataptr nodalIntegrals, dataptr a, dataptr mu,
                           dataptr eta, dataptr normalStress, dataptr b,
                           dataptr state, dataptr L, double h)
-      : nodalIntegrals(nodalIntegrals),
-        a(a),
-        mu(mu),
-        eta(eta),
-        normalStress(normalStress),
-        b(b),
-        state(state),
-        L(L),
-        h(h),
-        trivialNonlinearity(
-            new LocalNonlinearity<dim>(make_shared<TrivialFunction const>())),
-        restrictions(nodalIntegrals->size()) // TODO: can we get the size from
-                                             // another place?
-  {
-    for (auto &x : restrictions)
-      x = shared_ptr<LocalNonlinearity<dim> const>();
+      // TODO: can we get the size from another place?
+      : restrictions(nodalIntegrals->size()) {
+    auto trivialNonlinearity = make_shared<LocalNonlinearity<dim> const>(
+        make_shared<TrivialFunction const>());
+    for (size_t i = 0; i < restrictions.size(); ++i) {
+      restrictions[i] =
+          (*nodalIntegrals)[i] == 0
+              ? trivialNonlinearity
+              : make_shared<LocalNonlinearity<dim> const>(
+                    make_shared<RuinaFunction const>(
+                        (*nodalIntegrals)[i], (*a)[i], (*mu)[i], (*eta)[i],
+                        (*normalStress)[i], (*b)[i], (*state)[i], (*L)[i], h));
+    }
   }
 
   /*
     Return a restriction of the outer function to the i'th node.
   */
   virtual shared_ptr<LocalNonlinearity<dim> const> restriction(int i) const {
-    if ((*nodalIntegrals)[i] == 0)
-      return trivialNonlinearity;
-
-    if (restrictions[i] != nullptr)
-      return restrictions[i];
-
-    auto const func = make_shared<RuinaFunction const>(
-        (*nodalIntegrals)[i], (*a)[i], (*mu)[i], (*eta)[i], (*normalStress)[i],
-        (*b)[i], (*state)[i], (*L)[i], h);
-    restrictions[i] = make_shared<LocalNonlinearity<dim> const>(func);
     return restrictions[i];
   }
 
 private:
-  dataptr nodalIntegrals;
-  dataptr a;
-  dataptr mu;
-  dataptr eta;
-  dataptr normalStress;
-  dataptr b;
-  dataptr state;
-  dataptr L;
-  double const h;
-
-  shared_ptr<LocalNonlinearity<dim> const> const trivialNonlinearity;
-
-  std::vector<shared_ptr<LocalNonlinearity<dim> const>> mutable restrictions;
+  std::vector<shared_ptr<LocalNonlinearity<dim> const>> restrictions;
 };
 }
 #endif