diff --git a/dune/tectonic/samplefunctional.hh b/dune/tectonic/ellipticenergy.hh
similarity index 97%
rename from dune/tectonic/samplefunctional.hh
rename to dune/tectonic/ellipticenergy.hh
index e88dd86356af09c0195f3f4c274d42a6f96c77bb..bb6f8749f95618be27156d70916d193e064b8372 100644
--- a/dune/tectonic/samplefunctional.hh
+++ b/dune/tectonic/ellipticenergy.hh
@@ -13,15 +13,15 @@
 #include "circularconvexfunction.hh"
 
 namespace Dune {
-template <int dim> class SampleFunctional {
+template <int dim> class EllipticEnergy {
 public:
   typedef FieldVector<double, dim> SmallVector;
   typedef FieldMatrix<double, dim, dim> SmallMatrix;
 
   typedef LocalNonlinearity<dim> NonlinearityType;
 
-  SampleFunctional(SmallMatrix const &A, SmallVector const &b,
-                   shared_ptr<NonlinearityType const> phi, int ignore = dim)
+  EllipticEnergy(SmallMatrix const &A, SmallVector const &b,
+                 shared_ptr<NonlinearityType const> phi, int ignore = dim)
       : A(A), b(b), phi(phi), ignore(ignore) {}
 
   double operator()(SmallVector const &v) const {
diff --git a/dune/tectonic/myblockproblem.hh b/dune/tectonic/myblockproblem.hh
index 0a0864b5ec8b352de3bee5d34171b513ed32f1f5..3228de8d2dd5020b31402d65ef34a58db32f6743 100644
--- a/dune/tectonic/myblockproblem.hh
+++ b/dune/tectonic/myblockproblem.hh
@@ -13,7 +13,7 @@
 #include "globalnonlinearity.hh"
 #include "localnonlinearity.hh"
 #include "mydirectionalconvexfunction.hh"
-#include "samplefunctional.hh"
+#include "ellipticenergy.hh"
 
 /* Just for debugging */
 template <int dim, class VectorType, class MatrixType>
@@ -320,8 +320,8 @@ class MyBlockProblem<MyConvexProblemTypeTEMPLATE>::IterateObject {
       assert(localA != nullptr);
 
       auto const phi = problem.phi.restriction(m);
-      Dune::SampleFunctional<block_size> localJ(*localA, localb, phi,
-                                                ignore_component);
+      Dune::EllipticEnergy<block_size> localJ(*localA, localb, phi,
+                                              ignore_component);
 
       LocalVectorType correction;
       Dune::minimise(localJ, ui, localsteps, bisection);
diff --git a/dune/tectonic/octave/duneoctave.hh b/dune/tectonic/octave/duneoctave.hh
index 7c4a8a1e6f3b5f3c31154cf6c205d150e4ac137b..1611f728d3c4f2d3b9808f2e9b35dca183bbe6e5 100644
--- a/dune/tectonic/octave/duneoctave.hh
+++ b/dune/tectonic/octave/duneoctave.hh
@@ -5,12 +5,12 @@
 
 #include <octave/oct.h>
 
-#include "../samplefunctional.hh"
+#include "../ellipticenergy.hh"
 
 namespace Dune {
 template <int dimension>
 void octaveToDune(Array<double> const &from,
-                  typename Dune::SampleFunctional<dimension>::SmallVector &to) {
+                  typename Dune::EllipticEnergy<dimension>::SmallVector &to) {
   assert(from.length() == dimension);
   for (size_t i = 0; i < dimension; ++i)
     to[i] = from(i);
@@ -18,7 +18,7 @@ void octaveToDune(Array<double> const &from,
 
 template <int dimension>
 void octaveToDune(Matrix const &from,
-                  typename Dune::SampleFunctional<dimension>::SmallMatrix &to) {
+                  typename Dune::EllipticEnergy<dimension>::SmallMatrix &to) {
   dim_vector dims = from.dims();
   assert(dims.length() == 2);
   assert(dims(0) == 2);
@@ -30,7 +30,7 @@ void octaveToDune(Matrix const &from,
 
 template <int dimension>
 void duneToOctave(
-    typename Dune::SampleFunctional<dimension>::SmallVector const &from,
+    typename Dune::EllipticEnergy<dimension>::SmallVector const &from,
     Array<double> &to) {
   assert(to.length() == dimension);
   for (size_t i = 0; i < dimension; ++i)
diff --git a/src/test-gradient-horrible-logarithmic.cc b/src/test-gradient-horrible-logarithmic.cc
index 5cbc16e1d402b78f919711504edd18a46a17271e..6991b3000e8491ee4c463707ccfe60c9ed0fb90a 100644
--- a/src/test-gradient-horrible-logarithmic.cc
+++ b/src/test-gradient-horrible-logarithmic.cc
@@ -8,14 +8,14 @@
 
 #include <dune/common/shared_ptr.hh>
 
-#include <dune/tectonic/samplefunctional.hh>
+#include <dune/tectonic/ellipticenergy.hh>
 
 #include "test-gradient-method-nicefunction.hh"
 #include "test-gradient-method-helper.hh"
 
 int main() {
   int const dim = 2;
-  typedef Dune::SampleFunctional<dim> Functional;
+  typedef Dune::EllipticEnergy<dim> Functional;
   typedef Functional::SmallMatrix SmallMatrix;
   typedef Functional::SmallVector SmallVector;
 
diff --git a/src/test-gradient-horrible.cc b/src/test-gradient-horrible.cc
index 2d3196878a3c94cef4e5c15adcc99a9368cc32e2..55dad1448c1ee2069624ae5da3c9f2e4c088ea54 100644
--- a/src/test-gradient-horrible.cc
+++ b/src/test-gradient-horrible.cc
@@ -8,14 +8,14 @@
 
 #include <dune/common/shared_ptr.hh>
 
-#include <dune/tectonic/samplefunctional.hh>
+#include <dune/tectonic/ellipticenergy.hh>
 
 #include "test-gradient-method-nicefunction.hh"
 #include "test-gradient-method-helper.hh"
 
 int main() {
   int const dim = 2;
-  typedef Dune::SampleFunctional<dim> Functional;
+  typedef Dune::EllipticEnergy<dim> Functional;
   typedef Functional::SmallMatrix SmallMatrix;
   typedef Functional::SmallVector SmallVector;
 
diff --git a/src/test-gradient-identity.cc b/src/test-gradient-identity.cc
index e0c372536b304ed46ee6ecec30729e58d134f653..fb5887a1cd74213e93bc33d985341153dc5b59b0 100644
--- a/src/test-gradient-identity.cc
+++ b/src/test-gradient-identity.cc
@@ -8,14 +8,14 @@
 
 #include <dune/common/shared_ptr.hh>
 
-#include <dune/tectonic/samplefunctional.hh>
+#include <dune/tectonic/ellipticenergy.hh>
 
 #include "test-gradient-method-nicefunction.hh"
 #include "test-gradient-method-helper.hh"
 
 int main() {
   int const dim = 2;
-  typedef Dune::SampleFunctional<dim> Functional;
+  typedef Dune::EllipticEnergy<dim> Functional;
   typedef Functional::SmallMatrix SmallMatrix;
   typedef Functional::SmallVector SmallVector;
 
diff --git a/src/test-gradient-method-helper.hh b/src/test-gradient-method-helper.hh
index 421d0d9a4a775899cc8821f955023fe8c126ed6e..f3016d5af553a39ffa0492342829d99f762d0446 100644
--- a/src/test-gradient-method-helper.hh
+++ b/src/test-gradient-method-helper.hh
@@ -5,11 +5,11 @@
 
 #include <dune/tnnmg/problem-classes/bisection.hh>
 
-#include <dune/tectonic/samplefunctional.hh>
+#include <dune/tectonic/ellipticenergy.hh>
 
 template <int dim>
-double functionTester(Dune::SampleFunctional<dim> J,
-                      typename Dune::SampleFunctional<dim>::SmallVector &start,
+double functionTester(Dune::EllipticEnergy<dim> J,
+                      typename Dune::EllipticEnergy<dim>::SmallVector &start,
                       size_t runs) {
   Bisection const bisection(
       0.0,   // acceptError: Stop if the search interval has
@@ -27,10 +27,9 @@ double functionTester(Dune::SampleFunctional<dim> J,
 }
 
 template <int dim>
-double two_distance(
-    typename Dune::SampleFunctional<dim>::SmallVector const &x,
-    typename Dune::SampleFunctional<dim>::SmallVector const &y) {
-  typename Dune::SampleFunctional<dim>::SmallVector tmp = x;
+double two_distance(typename Dune::EllipticEnergy<dim>::SmallVector const &x,
+                    typename Dune::EllipticEnergy<dim>::SmallVector const &y) {
+  typename Dune::EllipticEnergy<dim>::SmallVector tmp = x;
   tmp -= y;
   return tmp.two_norm();
 }
diff --git a/src/test-gradient-parabola.cc b/src/test-gradient-parabola.cc
index a2ee2ee9544ca12dcc73a2a5d64a227a09c9f4c9..52b089ce3038350910035b8a2ab7ccd01f81a13f 100644
--- a/src/test-gradient-parabola.cc
+++ b/src/test-gradient-parabola.cc
@@ -10,14 +10,14 @@
 
 #include <dune/common/shared_ptr.hh>
 
-#include <dune/tectonic/samplefunctional.hh>
+#include <dune/tectonic/ellipticenergy.hh>
 
 #include "test-gradient-method-helper.hh"
 #include "test-gradient-method-nicefunction.hh"
 
 int main() {
   int const dim = 2;
-  typedef Dune::SampleFunctional<dim> Functional;
+  typedef Dune::EllipticEnergy<dim> Functional;
   typedef Functional::SmallMatrix SmallMatrix;
   typedef Functional::SmallVector SmallVector;
 
diff --git a/src/test-gradient-sample-3d.cc b/src/test-gradient-sample-3d.cc
index a58ffc2ae52260350d3039a39a23ac16b8587ff2..a6e7578edda0b4bcf05949637ec90982d1e21ab0 100644
--- a/src/test-gradient-sample-3d.cc
+++ b/src/test-gradient-sample-3d.cc
@@ -8,14 +8,14 @@
 
 #include <dune/common/shared_ptr.hh>
 
-#include <dune/tectonic/samplefunctional.hh>
+#include <dune/tectonic/ellipticenergy.hh>
 
 #include "test-gradient-method-nicefunction.hh"
 #include "test-gradient-method-helper.hh"
 
 int main() {
   int const dim = 3;
-  typedef Dune::SampleFunctional<dim> Functional;
+  typedef Dune::EllipticEnergy<dim> Functional;
   typedef Functional::SmallMatrix SmallMatrix;
   typedef Functional::SmallVector SmallVector;
 
diff --git a/src/test-gradient-sample-nonsmooth.cc b/src/test-gradient-sample-nonsmooth.cc
index b9a474a18400d1d72513b4f2cb6c6be3a992a493..5b2375194c3c55dbd1a2651ba1337ff04a6a3ec0 100644
--- a/src/test-gradient-sample-nonsmooth.cc
+++ b/src/test-gradient-sample-nonsmooth.cc
@@ -9,14 +9,14 @@
 
 #include <dune/common/shared_ptr.hh>
 
-#include <dune/tectonic/samplefunctional.hh>
+#include <dune/tectonic/ellipticenergy.hh>
 
 #include "test-gradient-method-nicefunction.hh"
 #include "test-gradient-method-helper.hh"
 
 int main() {
   int const dim = 2;
-  typedef Dune::SampleFunctional<dim> Functional;
+  typedef Dune::EllipticEnergy<dim> Functional;
   typedef Functional::SmallMatrix SmallMatrix;
   typedef Functional::SmallVector SmallVector;
 
diff --git a/src/test-gradient-sample-steep.cc b/src/test-gradient-sample-steep.cc
index 7cca14ab09719a71111499cd9a16ed091efca5ef..f636de243d262bed21c81dc043e308a36d061de2 100644
--- a/src/test-gradient-sample-steep.cc
+++ b/src/test-gradient-sample-steep.cc
@@ -8,14 +8,14 @@
 
 #include <dune/common/shared_ptr.hh>
 
-#include <dune/tectonic/samplefunctional.hh>
+#include <dune/tectonic/ellipticenergy.hh>
 
 #include "test-gradient-method-nicefunction.hh"
 #include "test-gradient-method-helper.hh"
 
 int main() {
   int const dim = 2;
-  typedef Dune::SampleFunctional<dim> Functional;
+  typedef Dune::EllipticEnergy<dim> Functional;
   typedef Functional::SmallMatrix SmallMatrix;
   typedef Functional::SmallVector SmallVector;
 
diff --git a/src/test-gradient-sample-steep2.cc b/src/test-gradient-sample-steep2.cc
index d5a40ad4f01b00914b9e035d5f69812458f1d6f2..cd8a074e4faae32b0d9e32eb464efeb109b9fea0 100644
--- a/src/test-gradient-sample-steep2.cc
+++ b/src/test-gradient-sample-steep2.cc
@@ -8,14 +8,14 @@
 
 #include <dune/common/shared_ptr.hh>
 
-#include <dune/tectonic/samplefunctional.hh>
+#include <dune/tectonic/ellipticenergy.hh>
 
 #include "test-gradient-method-nicefunction.hh"
 #include "test-gradient-method-helper.hh"
 
 int main() {
   int const dim = 2;
-  typedef Dune::SampleFunctional<dim> Functional;
+  typedef Dune::EllipticEnergy<dim> Functional;
   typedef Functional::SmallMatrix SmallMatrix;
   typedef Functional::SmallVector SmallVector;
 
diff --git a/src/test-gradient-sample-verysteep.cc b/src/test-gradient-sample-verysteep.cc
index 0da5ad9f37165dd432669d0895458f9801e2fe6d..74d2bd3d38cf94e601f058a594276c366ba852c0 100644
--- a/src/test-gradient-sample-verysteep.cc
+++ b/src/test-gradient-sample-verysteep.cc
@@ -8,14 +8,14 @@
 
 #include <dune/common/shared_ptr.hh>
 
-#include <dune/tectonic/samplefunctional.hh>
+#include <dune/tectonic/ellipticenergy.hh>
 
 #include "test-gradient-method-nicefunction.hh"
 #include "test-gradient-method-helper.hh"
 
 int main() {
   int const dim = 2;
-  typedef Dune::SampleFunctional<dim> Functional;
+  typedef Dune::EllipticEnergy<dim> Functional;
   typedef Functional::SmallMatrix SmallMatrix;
   typedef Functional::SmallVector SmallVector;
 
diff --git a/src/test-gradient-sample.cc b/src/test-gradient-sample.cc
index 1bfd05c0fd72ea424050e495e361d883e084a4b5..3d09b7a71ff4df75cf464e37f1aefd5ace8c2bc4 100644
--- a/src/test-gradient-sample.cc
+++ b/src/test-gradient-sample.cc
@@ -10,14 +10,14 @@
 
 #include <dune/common/shared_ptr.hh>
 
-#include <dune/tectonic/samplefunctional.hh>
+#include <dune/tectonic/ellipticenergy.hh>
 
 #include "test-gradient-method-nicefunction.hh"
 #include "test-gradient-method-helper.hh"
 
 int main() {
   int const dim = 2;
-  typedef Dune::SampleFunctional<dim> Functional;
+  typedef Dune::EllipticEnergy<dim> Functional;
   typedef Functional::SmallMatrix SmallMatrix;
   typedef Functional::SmallVector SmallVector;
 
diff --git a/src/test-gradient-sample2.cc b/src/test-gradient-sample2.cc
index fd67e841e4bbb069c0e9bb35ef1966e4c42d8501..1392cad6fe29745969b88fd43c68d1744bbc654c 100644
--- a/src/test-gradient-sample2.cc
+++ b/src/test-gradient-sample2.cc
@@ -10,14 +10,14 @@
 
 #include <dune/common/shared_ptr.hh>
 
-#include <dune/tectonic/samplefunctional.hh>
+#include <dune/tectonic/ellipticenergy.hh>
 
 #include "test-gradient-method-nicefunction.hh"
 #include "test-gradient-method-helper.hh"
 
 int main() {
   int const dim = 2;
-  typedef Dune::SampleFunctional<dim> Functional;
+  typedef Dune::EllipticEnergy<dim> Functional;
   typedef Functional::SmallMatrix SmallMatrix;
   typedef Functional::SmallVector SmallVector;
 
diff --git a/src/test-gradient-trivial.cc b/src/test-gradient-trivial.cc
index c8b7f0f52ed07904f0bebd30edd95d5cc8ac0e96..1e4b4cc5c4bed4e18e534fbb10647bc1bb56c981 100644
--- a/src/test-gradient-trivial.cc
+++ b/src/test-gradient-trivial.cc
@@ -10,13 +10,13 @@
 
 #include <dune/common/shared_ptr.hh>
 
-#include <dune/tectonic/samplefunctional.hh>
+#include <dune/tectonic/ellipticenergy.hh>
 
 #include "test-gradient-method-helper.hh"
 
 int main() {
   int const dim = 2;
-  typedef Dune::SampleFunctional<dim> Functional;
+  typedef Dune::EllipticEnergy<dim> Functional;
   typedef Functional::SmallMatrix SmallMatrix;
   typedef Functional::SmallVector SmallVector;