diff --git a/dune/gfe/localgeodesicfefdstiffness.hh b/dune/gfe/localgeodesicfefdstiffness.hh
index 24b452ad4732abc4b9944b3d556c2a7c02afedfa..e3e636a1f1585801f238d6ea4244ec436d85587d 100644
--- a/dune/gfe/localgeodesicfefdstiffness.hh
+++ b/dune/gfe/localgeodesicfefdstiffness.hh
@@ -14,7 +14,6 @@ class LocalGeodesicFEFDStiffness
 {
     // grid types
     typedef typename Basis::GridView GridView;
-    typedef typename Basis::LocalView::Tree::FiniteElement LocalFiniteElement;
     typedef typename GridView::ctype DT;
     typedef typename TargetSpace::ctype RT;
     typedef typename GridView::template Codim<0>::Entity Entity;
@@ -37,18 +36,16 @@ public:
     {}
 
     /** \brief Compute the energy at the current configuration */
-    virtual RT energy (const Entity& element,
-               const LocalFiniteElement& localFiniteElement,
+    virtual RT energy (const typename Basis::LocalView& localView,
                const std::vector<TargetSpace>& localSolution) const
     {
-      return localEnergy_->energy(element,localFiniteElement,localSolution);
+      return localEnergy_->energy(localView,localSolution);
     }
 
     /** \brief Assemble the element gradient of the energy functional
 
        The default implementation in this class uses a finite difference approximation */
-    virtual void assembleGradient(const Entity& element,
-                                  const LocalFiniteElement& localFiniteElement,
+    virtual void assembleGradient(const typename Basis::LocalView& localView,
                                   const std::vector<TargetSpace>& solution,
                                   std::vector<typename TargetSpace::TangentVector>& gradient) const;
 
@@ -64,8 +61,7 @@ public:
       \f]
       We compute that using a finite difference approximation.
     */
-    virtual void assembleGradientAndHessian(const Entity& e,
-                                 const LocalFiniteElement& localFiniteElement,
+    virtual void assembleGradientAndHessian(const typename Basis::LocalView& localView,
                                  const std::vector<TargetSpace>& localSolution,
                                  std::vector<typename TargetSpace::TangentVector>& localGradient);
 
@@ -76,8 +72,7 @@ public:
 
 template <class Basis, class TargetSpace, class field_type>
 void LocalGeodesicFEFDStiffness<Basis, TargetSpace, field_type>::
-assembleGradient(const Entity& element,
-                 const LocalFiniteElement& localFiniteElement,
+assembleGradient(const typename Basis::LocalView& localView,
                  const std::vector<TargetSpace>& localSolution,
                  std::vector<typename TargetSpace::TangentVector>& localGradient) const
 {
@@ -118,7 +113,7 @@ assembleGradient(const Entity& element,
             forwardSolution[i]  = ATargetSpace::exp(localASolution[i], forwardCorrection);
             backwardSolution[i] = ATargetSpace::exp(localASolution[i], backwardCorrection);
 
-            field_type foo = (localEnergy_->energy(element,localFiniteElement,forwardSolution) - localEnergy_->energy(element,localFiniteElement, backwardSolution)) / (2*eps);
+            field_type foo = (localEnergy_->energy(localView,forwardSolution) - localEnergy_->energy(localView, backwardSolution)) / (2*eps);
 #ifdef MULTIPRECISION
             localGradient[i][j] = foo.template convert_to<double>();
 #else
@@ -142,8 +137,7 @@ assembleGradient(const Entity& element,
 /////////////////////////////////////////////////////////////////////////////////
 template <class Basis, class TargetSpace, class field_type>
 void LocalGeodesicFEFDStiffness<Basis, TargetSpace, field_type>::
-assembleGradientAndHessian(const Entity& element,
-                const LocalFiniteElement& localFiniteElement,
+assembleGradientAndHessian(const typename Basis::LocalView& localView,
                 const std::vector<TargetSpace>& localSolution,
                 std::vector<typename TargetSpace::TangentVector>& localGradient)
 {
@@ -176,7 +170,7 @@ assembleGradientAndHessian(const Entity& element,
 
     // Precompute negative energy at the current configuration
     // (negative because that is how we need it as part of the 2nd-order fd formula)
-    field_type centerValue   = -localEnergy_->energy(element, localFiniteElement, localASolution);
+    field_type centerValue   = -localEnergy_->energy(localView, localASolution);
 
     // Precompute energy infinitesimal corrections in the directions of the local basis vectors
     std::vector<Dune::array<field_type,blocksize> > forwardEnergy(nDofs);
@@ -196,8 +190,8 @@ assembleGradientAndHessian(const Entity& element,
             forwardSolution[i]  = ATargetSpace::exp(localASolution[i],epsXi);
             backwardSolution[i] = ATargetSpace::exp(localASolution[i],minusEpsXi);
 
-            forwardEnergy[i][i2]  = localEnergy_->energy(element, localFiniteElement, forwardSolution);
-            backwardEnergy[i][i2] = localEnergy_->energy(element, localFiniteElement, backwardSolution);
+            forwardEnergy[i][i2]  = localEnergy_->energy(localView, forwardSolution);
+            backwardEnergy[i][i2] = localEnergy_->energy(localView, backwardSolution);
 
         }
 
@@ -254,8 +248,8 @@ assembleGradientAndHessian(const Entity& element,
                         backwardSolutionXiEta[j] = ATargetSpace::exp(localASolution[j],minusEpsEta);
                     }
 
-                    field_type forwardValue  = localEnergy_->energy(element, localFiniteElement, forwardSolutionXiEta) - forwardEnergy[i][i2] - forwardEnergy[j][j2];
-                    field_type backwardValue = localEnergy_->energy(element, localFiniteElement, backwardSolutionXiEta) - backwardEnergy[i][i2] - backwardEnergy[j][j2];
+                    field_type forwardValue  = localEnergy_->energy(localView, forwardSolutionXiEta) - forwardEnergy[i][i2] - forwardEnergy[j][j2];
+                    field_type backwardValue = localEnergy_->energy(localView, backwardSolutionXiEta) - backwardEnergy[i][i2] - backwardEnergy[j][j2];
 
                     field_type foo = 0.5 * (forwardValue - 2*centerValue + backwardValue) / (eps*eps);
 #ifdef MULTIPRECISION