diff --git a/src/nicefunction.hh b/src/nicefunction.hh
index 449e2f63c95c24c29e7e594a74df3d8b5385e950..0304714434a98ff4b7da59b1bd647e6c3fdbf036 100644
--- a/src/nicefunction.hh
+++ b/src/nicefunction.hh
@@ -12,6 +12,15 @@ class NiceFunction : public VirtualFunction<double, double> {
   virtual double rightDifferential(const double s) const = 0;
 };
 
+class Identity : public NiceFunction {
+public:
+  void virtual evaluate(const double& x, double& y) const { y = x; }
+
+  double virtual leftDifferential(const double s) const { return 1; }
+
+  double virtual rightDifferential(const double s) const { return 1; }
+};
+
 class SampleFunction : public NiceFunction {
 public:
   void virtual evaluate(const double& x, double& y) const {
diff --git a/src/test-gradient-method.cc b/src/test-gradient-method.cc
index 1b93f391c4deed911c3dee9a95c8aec7c350e75e..141600ed24f8b214962aedf143366efa12b2fb3f 100644
--- a/src/test-gradient-method.cc
+++ b/src/test-gradient-method.cc
@@ -28,6 +28,41 @@ double functionTester(Dune::SampleFunctional<dim> J,
   return final;
 }
 
+void testIdentity() {
+  int const dim = 2;
+  typedef Dune::SampleFunctional<dim> Functional;
+
+  Functional::SmallMatrix A;
+  A[0][0] = 3;
+  A[0][1] = 1.5;
+  A[1][0] = 1.5;
+  A[1][1] = 4;
+  Functional::SmallVector b;
+  b[0] = 1;
+  b[1] = 2;
+
+  Dune::Identity f;
+  Functional J(A, b, Dune::MyNonlinearity<dim>(f));
+
+  Functional::SmallVector start = b;
+  start *= 17;
+
+  double const ret1 = functionTester(J, start, 6);
+
+  // Something random
+  start[0] = 279;
+  start[1] = -96;
+
+  double const ret2 = functionTester(J, start, 10);
+  assert(std::abs(ret1 - ret2) < 1e-5);
+
+  start[0] = 0;
+  start[1] = 0;
+
+  double const ret3 = functionTester(J, start, 3);
+  assert(std::abs(ret1 - ret3) < 1e-5);
+}
+
 void testSampleFunction() {
   int const dim = 2;
   typedef Dune::SampleFunctional<dim> Functional;
@@ -331,6 +366,8 @@ void testSampleFunction2() {
 
 int main() {
   try {
+    testIdentity();
+    std::cout << std::endl << std::endl << std::endl;
     testSampleFunction();
     std::cout << std::endl << std::endl << std::endl;
     testSampleFunctionNonsmooth();