diff --git a/dune/gfe/harmonicenergystiffness.hh b/dune/gfe/harmonicenergystiffness.hh
index 266ec1e2897fda8797726ca73eb3d3cf4b6b23c6..7030b5098d397081d4f6d0aa14a025e55a33b18e 100644
--- a/dune/gfe/harmonicenergystiffness.hh
+++ b/dune/gfe/harmonicenergystiffness.hh
@@ -38,11 +38,13 @@ public:
     // If the cpp macro is not set we overload it here.
     /** \brief Assemble the gradient of the energy functional on one element */
     virtual void assembleEmbeddedGradient(const Entity& element,
-                                  const Dune::array<TargetSpace,gridDim+1>& solution,
+                                          const LocalFiniteElement& localFiniteElement,
+                                          const std::vector<TargetSpace>& solution,
                                   std::vector<typename TargetSpace::EmbeddedTangentVector>& gradient) const;
                                     
     virtual void assembleGradient(const Entity& element,
-                                  const Dune::array<TargetSpace,gridDim+1>& localSolution,
+                                  const LocalFiniteElement& localFiniteElement,
+                                  const std::vector<TargetSpace>& localSolution,
                                   std::vector<typename TargetSpace::TangentVector>& localGradient) const;
 #endif
 };
@@ -96,18 +98,20 @@ energy(const Entity& element,
 }
 
 #ifndef HARMONIC_ENERGY_FD_GRADIENT
-template <class GridView, class TargetSpace>
-void HarmonicEnergyLocalStiffness<GridView, TargetSpace>::
+template <class GridView, class LocalFiniteElement, class TargetSpace>
+void HarmonicEnergyLocalStiffness<GridView, LocalFiniteElement, TargetSpace>::
 assembleEmbeddedGradient(const Entity& element,
-                 const Dune::array<TargetSpace,gridDim+1>& localSolution,
-                 std::vector<typename TargetSpace::EmbeddedTangentVector>& localGradient) const
+                         const LocalFiniteElement& localFiniteElement,
+                         const std::vector<TargetSpace>& localSolution,
+                         std::vector<typename TargetSpace::EmbeddedTangentVector>& localGradient) const
 {
     // initialize gradient
     localGradient.resize(localSolution.size());
     std::fill(localGradient.begin(), localGradient.end(), typename TargetSpace::EmbeddedTangentVector(0));
 
     // Set up local gfe function from the  local coefficients
-    LocalGeodesicFEFunction<gridDim, double, TargetSpace> localGeodesicFEFunction(localSolution);
+    LocalGeodesicFEFunction<gridDim, double, LocalFiniteElement, TargetSpace> localGeodesicFEFunction(localFiniteElement,
+                                                                                                      localSolution);
 
     // I am not sure about the correct quadrature order
     int quadOrder = 1;//gridDim;
@@ -170,20 +174,21 @@ assembleEmbeddedGradient(const Entity& element,
             
         }
 
-	}
+    }
 
 }
 
-template <class GridView, class TargetSpace>
-void HarmonicEnergyLocalStiffness<GridView, TargetSpace>::
+template <class GridView, class LocalFiniteElement, class TargetSpace>
+void HarmonicEnergyLocalStiffness<GridView, LocalFiniteElement, TargetSpace>::
 assembleGradient(const Entity& element,
-                 const Dune::array<TargetSpace,gridDim+1>& localSolution,
+                 const LocalFiniteElement& localFiniteElement,
+                 const std::vector<TargetSpace>& localSolution,
                  std::vector<typename TargetSpace::TangentVector>& localGradient) const
 {
     std::vector<typename TargetSpace::EmbeddedTangentVector> embeddedLocalGradient;
 
     // first compute the gradient in embedded coordinates
-    assembleEmbeddedGradient(element, localSolution, embeddedLocalGradient);
+    assembleEmbeddedGradient(element, localFiniteElement, localSolution, embeddedLocalGradient);
 
     // transform to coordinates on the tangent space
     localGradient.resize(embeddedLocalGradient.size());