diff --git a/dune/tectonic/globalfriction.hh b/dune/tectonic/globalfriction.hh
index 579134e1073d5ca68369c2c2a72c97365ca7ad7d..3aff30217892e26b551c2abade26ecabcbd1b89b 100644
--- a/dune/tectonic/globalfriction.hh
+++ b/dune/tectonic/globalfriction.hh
@@ -82,6 +82,12 @@ template <class Matrix, class Vector> class GlobalFriction {
     return res->regularity(x);
   }
 
+  void coefficientOfFriction(Vector const &x, ScalarVector &coefficient) {
+    coefficient.resize(x.size());
+    for (size_t i = 0; i < x.size(); ++i)
+      coefficient[i] = restriction(i)->coefficientOfFriction(x[i]);
+  }
+
   void virtual updateAlpha(ScalarVector const &alpha) = 0;
 };
 #endif
diff --git a/dune/tectonic/globalratestatefriction.hh b/dune/tectonic/globalratestatefriction.hh
index 0e30a7ba195ddb540e28e36a05ea084ed11e46e7..ddc2af2debf3e1893fc815346fdbc211c1bf7f15 100644
--- a/dune/tectonic/globalratestatefriction.hh
+++ b/dune/tectonic/globalratestatefriction.hh
@@ -56,13 +56,6 @@ class GlobalRateStateFriction : public GlobalFriction<Matrix, Vector> {
       restrictions[i]->updateAlpha(alpha[i]);
   }
 
-  void coefficientOfFriction(Vector const &x, ScalarVector &coefficient) {
-    assert(x.size() == restrictions.size());
-    coefficient.resize(restrictions.size());
-    for (size_t i = 0; i < restrictions.size(); ++i)
-      coefficient[i] = restrictions[i]->coefficientOfFriction(x[i]);
-  }
-
   /*
     Return a restriction of the outer function to the i'th node.
   */
diff --git a/src/assemblers.cc b/src/assemblers.cc
index 1cd1d02fadb0b278d880da4048381926a450dc2e..b42bb3017d3a95cc85b354eb95f0a60483a6ec3d 100644
--- a/src/assemblers.cc
+++ b/src/assemblers.cc
@@ -17,6 +17,8 @@
 #include <dune/fufem/functions/constantfunction.hh>
 #include <dune/fufem/quadraturerules/quadraturerulecache.hh>
 
+#include <dune/tectonic/globalratestatefriction.hh>
+
 #include "assemblers.hh"
 
 template <class GridView, int dimension>
@@ -122,7 +124,7 @@ auto MyAssembler<GridView, dimension>::assembleFrictionNonlinearity(
     BoundaryPatch<GridView> const &frictionalBoundary,
     GlobalFrictionData<dimension> const &frictionInfo,
     ScalarVector const &normalStress)
-    -> std::shared_ptr<GlobalRateStateFriction<Matrix, Vector, GridView>> {
+    -> std::shared_ptr<GlobalFriction<Matrix, Vector>> {
   // Lump negative normal stress (kludge)
   ScalarVector weights;
   {
diff --git a/src/assemblers.hh b/src/assemblers.hh
index 2f944c71e4977b399db0b91438b6f203ab1a85cf..7b0c26c92a079f237c343b0dfc86e9f4e03d59fc 100644
--- a/src/assemblers.hh
+++ b/src/assemblers.hh
@@ -13,8 +13,8 @@
 #pragma clang diagnostic pop
 #include <dune/fufem/functionspacebases/p1nodalbasis.hh>
 
+#include <dune/tectonic/globalfriction.hh>
 #include <dune/tectonic/globalfrictiondata.hh>
-#include <dune/tectonic/globalratestatefriction.hh>
 
 template <class GridView, int dimension> class MyAssembler {
 public:
@@ -75,8 +75,7 @@ template <class GridView, int dimension> class MyAssembler {
                             ScalarVector &normalStress, double youngModulus,
                             double poissonRatio, Vector const &displacement);
 
-  std::shared_ptr<GlobalRateStateFriction<Matrix, Vector, GridView>>
-  assembleFrictionNonlinearity(
+  std::shared_ptr<GlobalFriction<Matrix, Vector>> assembleFrictionNonlinearity(
       BoundaryPatch<GridView> const &frictionalBoundary,
       GlobalFrictionData<dimension> const &frictionInfo,
       ScalarVector const &normalStress);