diff --git a/dune/gfe/rodlocalstiffness.hh b/dune/gfe/cosseratrodenergy.hh
similarity index 75%
rename from dune/gfe/rodlocalstiffness.hh
rename to dune/gfe/cosseratrodenergy.hh
index b95578d820cbe2de26a9383ef8ef8ee31bfe74d1..6e35b707e8ae1a711979ccb3d5349b0261e2c076 100644
--- a/dune/gfe/rodlocalstiffness.hh
+++ b/dune/gfe/cosseratrodenergy.hh
@@ -1,5 +1,5 @@
-#ifndef ROD_LOCAL_STIFFNESS_HH
-#define ROD_LOCAL_STIFFNESS_HH
+#ifndef DUNE_GFE_COSSERATRODENERGY_HH
+#define DUNE_GFE_COSSERATRODENERGY_HH
 
 #include <array>
 
@@ -18,14 +18,16 @@
 
 #include <dune/gfe/localenergy.hh>
 #include <dune/gfe/localgeodesicfefunction.hh>
-#include "rigidbodymotion.hh"
+#include <dune/gfe/rigidbodymotion.hh>
+
+namespace Dune::GFE {
 
 template<class GridView, class RT>
-class RodLocalStiffness
-: public Dune::GFE::LocalEnergy<Dune::Functions::LagrangeBasis<GridView,1>, RigidBodyMotion<RT,3> >
+class CosseratRodEnergy
+: public LocalEnergy<Functions::LagrangeBasis<GridView,1>, RigidBodyMotion<RT,3> >
 {
     typedef RigidBodyMotion<RT,3> TargetSpace;
-    typedef Dune::Functions::LagrangeBasis<GridView,1> Basis;
+    typedef Functions::LagrangeBasis<GridView,1> Basis;
 
     // grid types
     typedef typename GridView::Grid::ctype DT;
@@ -60,10 +62,6 @@ public:
     // to allocate the correct size of (dense) blocks with a FieldMatrix
     enum {m=blocksize};
 
-    // types for matrics, vectors and boundary conditions
-    typedef Dune::FieldMatrix<RT,m,m> MBlockType; // one entry in the stiffness matrix
-    typedef Dune::FieldVector<RT,m> VBlockType;   // one entry in the global vectors
-
     // /////////////////////////////////
     //   The material parameters
     // /////////////////////////////////
@@ -75,8 +73,8 @@ public:
     GridView gridView_;
 
     //! Constructor
-    RodLocalStiffness (const GridView& gridView,
-                       const std::array<double,3>& K, const std::array<double,3>& A)
+    CosseratRodEnergy(const GridView& gridView,
+                      const std::array<double,3>& K, const std::array<double,3>& A)
         : K_(K),
           A_(A),
           gridView_(gridView)
@@ -88,8 +86,8 @@ public:
         \param E Young's modulus
         \param nu Poisson number
     */
-    RodLocalStiffness (const GridView& gridView,
-                       double A, double J1, double J2, double E, double nu)
+    CosseratRodEnergy(const GridView& gridView,
+                      double A, double J1, double J2, double E, double nu)
         : gridView_(gridView)
     {
         // shear modulus
@@ -119,32 +117,32 @@ public:
      * \tparam Number This is a member template because the method has to work for double and adouble
      */
     template<class Number>
-    Dune::FieldVector<Number, 6> getStrain(const std::vector<RigidBodyMotion<Number,3> >& localSolution,
+    FieldVector<Number, 6> getStrain(const std::vector<RigidBodyMotion<Number,3> >& localSolution,
                                            const Entity& element,
-                                           const Dune::FieldVector<double,1>& pos) const;
+                                           const FieldVector<double,1>& pos) const;
 
     /** \brief Get the rod stress at one point in the rod
      *
      * \tparam Number This is a member template because the method has to work for double and adouble
      */
     template<class Number>
-    Dune::FieldVector<Number, 6> getStress(const std::vector<RigidBodyMotion<Number,3> >& localSolution,
+    FieldVector<Number, 6> getStress(const std::vector<RigidBodyMotion<Number,3> >& localSolution,
                                            const Entity& element,
-                                           const Dune::FieldVector<double,1>& pos) const;
+                                           const FieldVector<double,1>& pos) const;
 
     /** \brief Get average strain for each element */
     void getStrain(const std::vector<RigidBodyMotion<double,3> >& sol,
-                   Dune::BlockVector<Dune::FieldVector<double, blocksize> >& strain) const;
+                   BlockVector<FieldVector<double, blocksize> >& strain) const;
 
     /** \brief Get average stress for each element */
     void getStress(const std::vector<RigidBodyMotion<double,3> >& sol,
-                   Dune::BlockVector<Dune::FieldVector<double, blocksize> >& stress) const;
+                   BlockVector<FieldVector<double, blocksize> >& stress) const;
 
     /** \brief Return resultant force across boundary in canonical coordinates
 
      \note Linear run-time in the size of the grid */
     template <class PatchGridView>
-    Dune::FieldVector<double,6> getResultantForce(const BoundaryPatch<PatchGridView>& boundary,
+    FieldVector<double,6> getResultantForce(const BoundaryPatch<PatchGridView>& boundary,
                                                   const std::vector<RigidBodyMotion<double,3> >& sol) const;
 
 protected:
@@ -160,9 +158,9 @@ protected:
     }
 
       template <class T>
-    static Dune::FieldVector<T,3> darboux(const Rotation<T,3>& q, const Dune::FieldVector<T,4>& q_s)
+    static FieldVector<T,3> darboux(const Rotation<T,3>& q, const FieldVector<T,4>& q_s)
     {
-        Dune::FieldVector<T,3> u;  // The Darboux vector
+        FieldVector<T,3> u;  // The Darboux vector
 
         u[0] = 2 * (q.B(0) * q_s);
         u[1] = 2 * (q.B(1) * q_s);
@@ -174,7 +172,7 @@ protected:
 };
 
 template <class GridView, class RT>
-RT RodLocalStiffness<GridView, RT>::
+RT CosseratRodEnergy<GridView, RT>::
 energy(const typename Basis::LocalView& localView,
        const std::vector<RigidBodyMotion<RT,3> >& localSolution) const
 {
@@ -192,16 +190,17 @@ energy(const typename Basis::LocalView& localView,
     //   formula, even though it should be second order.  This prevents shear-locking.
     // ///////////////////////////////////////////////////////////////////////////////
 
-    const Dune::QuadratureRule<double, 1>& shearingQuad
-        = Dune::QuadratureRules<double, 1>::rule(element.type(), shearQuadOrder);
+    const QuadratureRule<double, 1>& shearingQuad
+        = QuadratureRules<double, 1>::rule(element.type(), shearQuadOrder);
 
     // hack: convert from std::array to std::vector
+    // TODO: REMOVE ME!
     std::vector<RigidBodyMotion<RT,3> > localSolutionVector(localSolution.begin(), localSolution.end());
 
     for (size_t pt=0; pt<shearingQuad.size(); pt++) {
 
         // Local position of the quadrature point
-        const Dune::FieldVector<double,1>& quadPos = shearingQuad[pt].position();
+        const FieldVector<double,1>& quadPos = shearingQuad[pt].position();
 
         const double integrationElement = element.geometry().integrationElement(quadPos);
 
@@ -218,13 +217,13 @@ energy(const typename Basis::LocalView& localView,
     }
 
     // Get quadrature rule
-    const Dune::QuadratureRule<double, 1>& bendingQuad
-        = Dune::QuadratureRules<double, 1>::rule(element.type(), bendingQuadOrder);
+    const QuadratureRule<double, 1>& bendingQuad
+        = QuadratureRules<double, 1>::rule(element.type(), bendingQuadOrder);
 
     for (size_t pt=0; pt<bendingQuad.size(); pt++) {
 
         // Local position of the quadrature point
-        const Dune::FieldVector<double,1>& quadPos = bendingQuad[pt].position();
+        const FieldVector<double,1>& quadPos = bendingQuad[pt].position();
 
         double weight = bendingQuad[pt].weight() * element.geometry().integrationElement(quadPos);
 
@@ -245,18 +244,18 @@ energy(const typename Basis::LocalView& localView,
 
 template <class GridView, class RT>
 template <class Number>
-Dune::FieldVector<Number, 6> RodLocalStiffness<GridView, RT>::
+FieldVector<Number, 6> CosseratRodEnergy<GridView, RT>::
 getStrain(const std::vector<RigidBodyMotion<Number,3> >& localSolution,
           const Entity& element,
-          const Dune::FieldVector<double,1>& pos) const
+          const FieldVector<double,1>& pos) const
 {
     if (!element.isLeaf())
-        DUNE_THROW(Dune::NotImplemented, "Only for leaf elements");
+        DUNE_THROW(NotImplemented, "Only for leaf elements");
 
     assert(localSolution.size() == 2);
 
     // Extract local solution on this element
-    Dune::P1LocalFiniteElement<double,double,1> localFiniteElement;
+    P1LocalFiniteElement<double,double,1> localFiniteElement;
 
     const auto jit = element.geometry().jacobianInverseTransposed(pos);
     using LocalInterpolationRule = LocalGeodesicFEFunction<1, typename GridView::ctype,
@@ -274,7 +273,7 @@ getStrain(const std::vector<RigidBodyMotion<Number,3> >& localSolution,
     derivative *= jit[0][0];
 #endif
 
-    Dune::FieldVector<Number,3> r_s = {derivative[0], derivative[1], derivative[2]};
+    FieldVector<Number,3> r_s = {derivative[0], derivative[1], derivative[2]};
 
     // Transformation from the reference element
     Quaternion<Number> q_s(derivative[3],
@@ -288,14 +287,14 @@ getStrain(const std::vector<RigidBodyMotion<Number,3> >& localSolution,
 
     // Strain defined on each element
     // Part I: the shearing and stretching strain
-    Dune::FieldVector<Number, 6> strain(0);
+    FieldVector<Number, 6> strain(0);
     strain[0] = r_s * value.q.director(0);    // shear strain
     strain[1] = r_s * value.q.director(1);    // shear strain
     strain[2] = r_s * value.q.director(2);    // stretching strain
 
     // Part II: the Darboux vector
 
-    Dune::FieldVector<Number,3> u = darboux(value.q, q_s);
+    FieldVector<Number,3> u = darboux(value.q, q_s);
     strain[3] = u[0];
     strain[4] = u[1];
     strain[5] = u[2];
@@ -305,10 +304,10 @@ getStrain(const std::vector<RigidBodyMotion<Number,3> >& localSolution,
 
 template <class GridView, class RT>
 template <class Number>
-Dune::FieldVector<Number, 6> RodLocalStiffness<GridView, RT>::
+FieldVector<Number, 6> CosseratRodEnergy<GridView, RT>::
 getStress(const std::vector<RigidBodyMotion<Number,3> >& localSolution,
               const Entity& element,
-                        const Dune::FieldVector<double, 1>& pos) const
+                        const FieldVector<double, 1>& pos) const
 {
     const auto& indexSet = gridView_.indexSet();
     std::vector<TargetSpace> localRefConf = {referenceConfiguration_[indexSet.subIndex(element, 0, 1)],
@@ -317,7 +316,7 @@ getStress(const std::vector<RigidBodyMotion<Number,3> >& localSolution,
     auto&& strain = getStrain(localSolution, element, pos);
     auto&& referenceStrain = getStrain(localRefConf, element, pos);
 
-    Dune::FieldVector<RT, 6> stress;
+    FieldVector<RT, 6> stress;
     for (int i=0; i < dim; i++)
         stress[i] = (strain[i] - referenceStrain[i]) * A_[i];
 
@@ -327,14 +326,14 @@ getStress(const std::vector<RigidBodyMotion<Number,3> >& localSolution,
 }
 
 template <class GridView, class RT>
-void RodLocalStiffness<GridView, RT>::
+void CosseratRodEnergy<GridView, RT>::
 getStrain(const std::vector<RigidBodyMotion<double,3> >& sol,
-          Dune::BlockVector<Dune::FieldVector<double, blocksize> >& strain) const
+          BlockVector<FieldVector<double, blocksize> >& strain) const
 {
     const typename GridView::Traits::IndexSet& indexSet = this->basis_.gridView().indexSet();
 
     if (sol.size()!=this->basis_.size())
-        DUNE_THROW(Dune::Exception, "Solution vector doesn't match the grid!");
+        DUNE_THROW(Exception, "Solution vector doesn't match the grid!");
 
     // Strain defined on each element
     strain.resize(indexSet.size(0));
@@ -346,7 +345,7 @@ getStrain(const std::vector<RigidBodyMotion<double,3> >& sol,
         int elementIdx = indexSet.index(element);
 
         // Extract local solution on this element
-        Dune::P1LocalFiniteElement<double,double,1> localFiniteElement;
+        P1LocalFiniteElement<double,double,1> localFiniteElement;
         int numOfBaseFct = localFiniteElement.localCoefficients().size();
 
         std::vector<RigidBodyMotion<double,3> > localSolution(2);
@@ -356,7 +355,7 @@ getStrain(const std::vector<RigidBodyMotion<double,3> >& sol,
 
         // Get quadrature rule
         const int polOrd = 2;
-        const auto& quad = Dune::QuadratureRules<double, 1>::rule(element.type(), polOrd);
+        const auto& quad = QuadratureRules<double, 1>::rule(element.type(), polOrd);
 
         for (std::size_t pt=0; pt<quad.size(); pt++)
         {
@@ -365,7 +364,7 @@ getStrain(const std::vector<RigidBodyMotion<double,3> >& sol,
 
             double weight = quad[pt].weight() * element.geometry().integrationElement(quadPos);
 
-            auto localStrain = std::dynamic_pointer_cast<RodLocalStiffness<GridView, double> >(this->localStiffness_)->getStrain(localSolution, element, quad[pt].position());
+            auto localStrain = std::dynamic_pointer_cast<CosseratRodEnergy<GridView, double> >(this->localStiffness_)->getStrain(localSolution, element, quad[pt].position());
 
             // Sum it all up
             strain[elementIdx].axpy(weight, localStrain);
@@ -376,47 +375,47 @@ getStrain(const std::vector<RigidBodyMotion<double,3> >& sol,
         //   the integral we just computed by the element volume.
         // /////////////////////////////////////////////////////////////////////////
         // we know the element is a line, therefore the integration element is the volume
-        Dune::FieldVector<double,1> dummyPos(0.5);
+        FieldVector<double,1> dummyPos(0.5);
         strain[elementIdx] /= element.geometry().integrationElement(dummyPos);
     }
 }
 
 template <class GridView, class RT>
-void RodLocalStiffness<GridView, RT>::
+void CosseratRodEnergy<GridView, RT>::
 getStress(const std::vector<RigidBodyMotion<double,3> >& sol,
-          Dune::BlockVector<Dune::FieldVector<double, blocksize> >& stress) const
+          BlockVector<FieldVector<double, blocksize> >& stress) const
 {
     // Get the strain
     getStrain(sol,stress);
 
     // Get reference strain
-    Dune::BlockVector<Dune::FieldVector<double, blocksize> > referenceStrain;
-    getStrain(dynamic_cast<RodLocalStiffness<GridView, double>* >(this->localStiffness_)->referenceConfiguration_, referenceStrain);
+    BlockVector<FieldVector<double, blocksize> > referenceStrain;
+    getStrain(dynamic_cast<CosseratRodEnergy<GridView, double>* >(this->localStiffness_)->referenceConfiguration_, referenceStrain);
 
     // Linear diagonal constitutive law
     for (size_t i=0; i<stress.size(); i++)
     {
         for (int j=0; j<3; j++)
         {
-            stress[i][j]   = (stress[i][j]   - referenceStrain[i][j])   * dynamic_cast<RodLocalStiffness<GridView, double>* >(this->localStiffness_)->A_[j];
-            stress[i][j+3] = (stress[i][j+3] - referenceStrain[i][j+3]) * dynamic_cast<RodLocalStiffness<GridView, double>* >(this->localStiffness_)->K_[j];
+            stress[i][j]   = (stress[i][j]   - referenceStrain[i][j])   * dynamic_cast<CosseratRodEnergy<GridView, double>* >(this->localStiffness_)->A_[j];
+            stress[i][j+3] = (stress[i][j+3] - referenceStrain[i][j+3]) * dynamic_cast<CosseratRodEnergy<GridView, double>* >(this->localStiffness_)->K_[j];
         }
     }
 }
 
 template <class GridView, class RT>
 template <class PatchGridView>
-Dune::FieldVector<double,6> RodLocalStiffness<GridView, RT>::
+FieldVector<double,6> CosseratRodEnergy<GridView, RT>::
 getResultantForce(const BoundaryPatch<PatchGridView>& boundary,
                   const std::vector<RigidBodyMotion<double,3> >& sol) const
 {
     const typename GridView::Traits::IndexSet& indexSet = this->basis_.gridView().indexSet();
 
     if (sol.size()!=indexSet.size(1))
-        DUNE_THROW(Dune::Exception, "Solution vector doesn't match the grid!");
+        DUNE_THROW(Exception, "Solution vector doesn't match the grid!");
 
-    Dune::FieldVector<double,3> canonicalStress(0);
-    Dune::FieldVector<double,3> canonicalTorque(0);
+    FieldVector<double,3> canonicalStress(0);
+    FieldVector<double,3> canonicalTorque(0);
 
     // Loop over the given boundary
     for (auto facet : boundary)
@@ -432,24 +431,24 @@ getResultantForce(const BoundaryPatch<PatchGridView>& boundary,
         localSolution[1] = sol[indexSet.subIndex(*facet.inside(),1,1)];
 
         std::vector<RigidBodyMotion<double,3> > localRefConf(2);
-        localRefConf[0] = dynamic_cast<RodLocalStiffness<GridView, double>* >(this->localStiffness_)->referenceConfiguration_[indexSet.subIndex(*facet.inside(),0,1)];
-        localRefConf[1] = dynamic_cast<RodLocalStiffness<GridView, double>* >(this->localStiffness_)->referenceConfiguration_[indexSet.subIndex(*facet.inside(),1,1)];
+        localRefConf[0] = dynamic_cast<CosseratRodEnergy<GridView, double>* >(this->localStiffness_)->referenceConfiguration_[indexSet.subIndex(*facet.inside(),0,1)];
+        localRefConf[1] = dynamic_cast<CosseratRodEnergy<GridView, double>* >(this->localStiffness_)->referenceConfiguration_[indexSet.subIndex(*facet.inside(),1,1)];
 
-        auto strain          = dynamic_cast<RodLocalStiffness<GridView, double>* >(this->localStiffness_)->getStrain(localSolution, *facet.inside(), pos);
-        auto referenceStrain = dynamic_cast<RodLocalStiffness<GridView, double>* >(this->localStiffness_)->getStrain(localRefConf, *facet.inside(), pos);
+        auto strain          = dynamic_cast<CosseratRodEnergy<GridView, double>* >(this->localStiffness_)->getStrain(localSolution, *facet.inside(), pos);
+        auto referenceStrain = dynamic_cast<CosseratRodEnergy<GridView, double>* >(this->localStiffness_)->getStrain(localRefConf, *facet.inside(), pos);
 
-        Dune::FieldVector<double,3> localStress;
+        FieldVector<double,3> localStress;
         for (int i=0; i<3; i++)
-            localStress[i] = (strain[i] - referenceStrain[i]) * dynamic_cast<RodLocalStiffness<GridView, double>* >(this->localStiffness_)->A_[i];
+            localStress[i] = (strain[i] - referenceStrain[i]) * dynamic_cast<CosseratRodEnergy<GridView, double>* >(this->localStiffness_)->A_[i];
 
-        Dune::FieldVector<double,3> localTorque;
+        FieldVector<double,3> localTorque;
         for (int i=0; i<3; i++)
-            localTorque[i] = (strain[i+3] - referenceStrain[i+3]) * dynamic_cast<RodLocalStiffness<GridView, double>* >(this->localStiffness_)->K_[i];
+            localTorque[i] = (strain[i+3] - referenceStrain[i+3]) * dynamic_cast<CosseratRodEnergy<GridView, double>* >(this->localStiffness_)->K_[i];
 
         // Transform stress given with respect to the basis given by the three directors to
         // the canonical basis of R^3
 
-        Dune::FieldMatrix<double,3,3> orientationMatrix;
+        FieldMatrix<double,3,3> orientationMatrix;
         sol[indexSet.subIndex(*facet.inside(),facet.indexInInside(),1)].q.matrix(orientationMatrix);
 
         orientationMatrix.umv(localStress, canonicalStress);
@@ -457,11 +456,11 @@ getResultantForce(const BoundaryPatch<PatchGridView>& boundary,
         orientationMatrix.umv(localTorque, canonicalTorque);
 
         // Multiply force times boundary normal to get the transmitted force
-        canonicalStress *= facet.unitOuterNormal(Dune::FieldVector<double,0>(0))[0];
-        canonicalTorque *= facet.unitOuterNormal(Dune::FieldVector<double,0>(0))[0];
+        canonicalStress *= facet.unitOuterNormal(FieldVector<double,0>(0))[0];
+        canonicalTorque *= facet.unitOuterNormal(FieldVector<double,0>(0))[0];
     }
 
-    Dune::FieldVector<double,6> result;
+    FieldVector<double,6> result;
     for (int i=0; i<3; i++)
     {
         result[i] = canonicalStress[i];
@@ -471,5 +470,7 @@ getResultantForce(const BoundaryPatch<PatchGridView>& boundary,
     return result;
 }
 
+}  // namespace Dune::GFE
+
 #endif
 
diff --git a/src/rod3d.cc b/src/rod3d.cc
index db741d432d39c721a450273cd47283b566b66c25..0efdaff801b9a121daf23403e4030671f3f0f589 100644
--- a/src/rod3d.cc
+++ b/src/rod3d.cc
@@ -29,10 +29,10 @@
 #include <dune/gfe/cosseratvtkwriter.hh>
 #endif
 
+#include <dune/gfe/cosseratrodenergy.hh>
 #include <dune/gfe/geodesicfeassembler.hh>
 #include <dune/gfe/localgeodesicfeadolcstiffness.hh>
 #include <dune/gfe/rigidbodymotion.hh>
-#include <dune/gfe/rodlocalstiffness.hh>
 #include <dune/gfe/rotation.hh>
 #include <dune/gfe/riemanniantrsolver.hh>
 
@@ -140,8 +140,8 @@ int main (int argc, char *argv[]) try
     //  Create the stress-free configuration
     //////////////////////////////////////////////
 
-    auto localRodEnergy = std::make_shared<RodLocalStiffness<GridView,adouble> >(gridView,
-                                                                                 A, J1, J2, E, nu);
+    auto localRodEnergy = std::make_shared<GFE::CosseratRodEnergy<GridView,adouble> >(gridView,
+                                                                                      A, J1, J2, E, nu);
 
     std::vector<RigidBodyMotion<double,3> > referenceConfiguration(gridView.size(1));
 
diff --git a/test/frameinvariancetest.cc b/test/frameinvariancetest.cc
index fe1c1cccc52990b61d3fa82d5798979ed207e03c..361d0cdd569e299b340734459b50e724f4f1ea78 100644
--- a/test/frameinvariancetest.cc
+++ b/test/frameinvariancetest.cc
@@ -4,9 +4,9 @@
 
 #include <dune/functions/functionspacebases/lagrangebasis.hh>
 
+#include <dune/gfe/cosseratrodenergy.hh>
 #include <dune/gfe/quaternion.hh>
 #include <dune/gfe/rigidbodymotion.hh>
-#include <dune/gfe/rodlocalstiffness.hh>
 
 
 using namespace Dune;
@@ -69,7 +69,7 @@ int main (int argc, char *argv[]) try
         rotatedX[i].q = rotation.mult(x[i].q);
     }
 
-    RodLocalStiffness<GridView,double> localRodEnergy(gridView,
+    GFE::CosseratRodEnergy<GridView,double> localRodEnergy(gridView,
                                                       1,1,1,1e6,0.3);
 
     std::vector<RigidBodyMotion<double,3> > referenceConfiguration(gridView.size(1));