diff --git a/dune/tectonic/circularconvexfunction.hh b/dune/tectonic/circularconvexfunction.hh
index ba4f4071ea70fafee2ed07cd9e93977d871ba786..ab72140568fa50da130ca7e206ed6185a8c3cf03 100644
--- a/dune/tectonic/circularconvexfunction.hh
+++ b/dune/tectonic/circularconvexfunction.hh
@@ -5,17 +5,12 @@
 #include <dune/fufem/interval.hh>
 
 namespace Dune {
-template <class NonlinearityType> class CircularConvexFunction {
-  typedef typename NonlinearityType::VectorType VectorType;
-  typedef typename NonlinearityType::MatrixType MatrixType;
-
+template <class MatrixType, class VectorType> class CircularConvexFunction {
 public:
   CircularConvexFunction(MatrixType const &A, VectorType const &b,
-                         NonlinearityType const &phi, VectorType const &x,
-                         VectorType const &dir)
+                         VectorType const &x, VectorType const &dir)
       : A(A),
         b(b),
-        phi(phi),
         x(x),
         dir(dir),
         xnorm(x.two_norm()),
@@ -31,14 +26,11 @@ template <class NonlinearityType> class CircularConvexFunction {
     VectorType t;
     tangent(m, t);
 
-    phi.directionalSubDiff(x, t, D);
-
     VectorType tmp;
     A.mv(x, tmp);                //  Ax
     tmp -= b;                    //  Ax - b
     double const dotp = tmp * t; // <Ax - b,t>
-    D[0] += dotp;
-    D[1] += dotp;
+    D[0] = D[1] = dotp;
   }
 
   void domain(Interval<double> &domain) const {
@@ -55,7 +47,6 @@ template <class NonlinearityType> class CircularConvexFunction {
 private:
   MatrixType const &A;
   VectorType const &b;
-  NonlinearityType const &phi;
   VectorType const &x;
   VectorType const &dir;
 
diff --git a/dune/tectonic/ellipticenergy.hh b/dune/tectonic/ellipticenergy.hh
index bb6f8749f95618be27156d70916d193e064b8372..f3edb15cb4d547d98e921a27583a6b5a98942014 100644
--- a/dune/tectonic/ellipticenergy.hh
+++ b/dune/tectonic/ellipticenergy.hh
@@ -196,11 +196,13 @@ void tangentialMinimisation(Functional const &J,
                             typename Functional::SmallVector &x,
                             typename Functional::SmallVector const &descDir,
                             Bisection const &bisection) {
-  typedef typename Functional::NonlinearityType LocalNonlinearityType;
+  typedef typename Functional::SmallMatrix SmallMatrix;
   typedef typename Functional::SmallVector SmallVector;
 
-  CircularConvexFunction<LocalNonlinearityType> const JRest(J.A, J.b, *J.phi, x,
-                                                            descDir);
+  // We completely ignore the nonlinearity here -- when restricted
+  // to a circle, it just enters as a constant!
+  CircularConvexFunction<SmallMatrix, SmallVector> const JRest(J.A, J.b, x,
+                                                               descDir);
 
   int count;
   double const stepsize = bisection.minimize(JRest, 0.0, 1.0, count);