diff --git a/src/finitescalarincreasingconvexfunction.hh b/src/finitescalarincreasingconvexfunction.hh
index a90cc0ac0334171e84e2a15e953b4cbe2904506a..9225c0f18d17eb61133fea55ed118e7f4e0fb849 100644
--- a/src/finitescalarincreasingconvexfunction.hh
+++ b/src/finitescalarincreasingconvexfunction.hh
@@ -3,17 +3,21 @@
 #ifndef FINITE_SCALAR_INCREASING_CONVEX_FUNCTION_HH
 #define FINITE_SCALAR_INCREASING_CONVEX_FUNCTION_HH
 
+#include <dune/common/function.hh>
+
 namespace Dune {
-class FiniteScalarIncreasingConvexFunction {
+class FiniteScalarIncreasingConvexFunction
+    : public VirtualFunction<double, double> {
 public:
-  virtual double operator()(const double s) const = 0;
   virtual double leftDifferential(const double s) const = 0;
   virtual double rightDifferential(const double s) const = 0;
 };
 
 class SampleFunction : public FiniteScalarIncreasingConvexFunction {
 public:
-  double operator()(const double s) const { return (s < 1) ? s : (2 * s - 1); }
+  void evaluate(const double& x, double& y) const {
+    y = (x < 1) ? x : (2 * x - 1);
+  }
 
   double leftDifferential(const double s) const { return (s <= 1) ? 1 : 2; }
 
@@ -22,7 +26,7 @@ class SampleFunction : public FiniteScalarIncreasingConvexFunction {
 
 class TrivialFunction : public FiniteScalarIncreasingConvexFunction {
 public:
-  double operator()(const double) const { return 0; }
+  void evaluate(const double& x, double& y) const { y = 0; }
 
   double leftDifferential(const double) const { return 0; }
 
diff --git a/src/mynonlinearity.hh b/src/mynonlinearity.hh
index b6002adfec376ebed1dc7c924c87916ec6290767..ec5cb9cb7253d085d4116711ff23d2306ca5d9a8 100644
--- a/src/mynonlinearity.hh
+++ b/src/mynonlinearity.hh
@@ -22,7 +22,11 @@ class MyNonlinearity {
   typedef SmallVector VectorType;
   typedef SmallMatrix MatrixType;
 
-  double operator()(VectorType const x) const { return func_(x.two_norm()); }
+  double operator()(VectorType const x) const {
+    double ret;
+    func_.evaluate(x.two_norm(), ret);
+    return ret;
+  }
 
   // directional subdifferential: at u on the line u + t*v
   // u and v are assumed to be non-zero