diff --git a/dirneucoupling.cc b/dirneucoupling.cc
index e4eb0ce21fe2f2ee78476be1b6c8f8ecb21d4796..bc535e9128cf6da4cf1ecb0ca1cc187cc2551d0e 100644
--- a/dirneucoupling.cc
+++ b/dirneucoupling.cc
@@ -153,7 +153,8 @@ int main (int argc, char *argv[]) try
     //   Initial solution
     // //////////////////////////
 
-    RodFactory<RodGridType::LeafGridView>::makeStraightRod(rodX, complex.rodGrids_["rod"]->size(1), rodRestEndPoint[0], rodRestEndPoint[1]);
+    RodFactory<RodGridType::LeafGridView> rodFactory(complex.rodGrids_["rod"]->leafView());
+    rodFactory.create(rodX, rodRestEndPoint[0], rodRestEndPoint[1]);
 
     // /////////////////////////////////////////
     //   Read Dirichlet values
diff --git a/dune/gfe/rodfactory.hh b/dune/gfe/rodfactory.hh
index bfec883640f08bd0b168ab1aa54aa51bf3a4e7de..8f450ad671a5431b2327c2c0a8213a8325aa6741 100644
--- a/dune/gfe/rodfactory.hh
+++ b/dune/gfe/rodfactory.hh
@@ -28,7 +28,7 @@ public:
 \param[in] n The number of vertices
 */
 template <int dim>
-    static void makeStraightRod(std::vector<RigidBodyMotion<dim> >& rod, int n,
+    void create(std::vector<RigidBodyMotion<dim> >& rod,
                      const Dune::FieldVector<double,3>& beginning, const Dune::FieldVector<double,3>& end)
 {
     // Compute the correct orientation
@@ -48,16 +48,8 @@ template <int dim>
     if (angle != 0)
         orientation = Rotation<3,double>(axis, angle);
 
-    // Set the values
-    rod.resize(n);
-    for (int i=0; i<n; i++) {
-
-        rod[i].r = beginning;
-        rod[i].r.axpy(double(i) / (n-1), end-beginning);
-        rod[i].q = orientation;
-
-    }
-
+        // Set the values
+        create(rod, RigidBodyMotion<dim>(beginning,orientation), RigidBodyMotion<dim>(end,orientation));
 }