diff --git a/dune/gfe/coupling/rodcontinuumsteklovpoincarestep.hh b/dune/gfe/coupling/rodcontinuumsteklovpoincarestep.hh
index 03afe5ba19101ec3b78751c714739ebe7e692cae..76e4ac742ec3fe54ca2636d2a377bbbf669f0168 100644
--- a/dune/gfe/coupling/rodcontinuumsteklovpoincarestep.hh
+++ b/dune/gfe/coupling/rodcontinuumsteklovpoincarestep.hh
@@ -94,7 +94,8 @@ private:
      * 
      * \return The Dirichlet value
      */
-    Dune::FieldVector<double,6> linearizedRodNeumannToDirichletMap(const RodConfigurationType& currentIterate,
+    std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector>
+                linearizedRodNeumannToDirichletMap(const RodConfigurationType& currentIterate,
                                                                    const RigidBodyMotion<3>::TangentVector& forceTorque,
                                                                    const Dune::FieldVector<double,3>& centerOfTorque) const;
     
@@ -104,7 +105,8 @@ private:
      * 
      * \return The infinitesimal movement of the interface
      */
-    Dune::FieldVector<double,6> linearizedContinuumNeumannToDirichletMap(const VectorType& currentIterate,
+    std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector>
+                linearizedContinuumNeumannToDirichletMap(const VectorType& currentIterate,
                                                                          const RigidBodyMotion<3>::TangentVector& forceTorque,
                                                                          const Dune::FieldVector<double,3>& centerOfTorque) const;
                                        
@@ -487,7 +489,7 @@ continuumDirichletToNeumannMap(const std::string& continuumName,
 * \return The Dirichlet value
 */
 template <class RodGridType, class ContinuumGridType>
-Dune::FieldVector<double,6> RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>::
+std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>::
 linearizedRodNeumannToDirichletMap(const RodConfigurationType& currentIterate,
                                    const RigidBodyMotion<3>::TangentVector& forceTorque,
                                    const Dune::FieldVector<double,3>& centerOfTorque) const
@@ -556,12 +558,15 @@ linearizedRodNeumannToDirichletMap(const RodConfigurationType& currentIterate,
 
     std::cout << "Linear rod interface correction: " << x[0] << std::endl;
         
-    return x[0];
+    std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> interfaceCorrection;
+    interfaceCorrection[interfaceName] = x[0];
+    
+    return interfaceCorrection;
 }
 
 
 template <class RodGridType, class ContinuumGridType>
-Dune::FieldVector<double,6> RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>::
+std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> RodContinuumSteklovPoincareStep<RodGridType,ContinuumGridType>::
 linearizedContinuumNeumannToDirichletMap(const VectorType& currentIterate,
                                          const RigidBodyMotion<3>::TangentVector& forceTorque,
                                          const Dune::FieldVector<double,3>& centerOfTorque) const
@@ -625,15 +630,15 @@ linearizedContinuumNeumannToDirichletMap(const VectorType& currentIterate,
     std::cout << "Average interface: " << averageInterface << std::endl;
         
     // Compute the linearization
-    Dune::FieldVector<double,6> interfaceCorrection;
-    interfaceCorrection[0] = averageInterface.r[0];
-    interfaceCorrection[1] = averageInterface.r[1];
-    interfaceCorrection[2] = averageInterface.r[2];
+    std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> interfaceCorrection;
+    interfaceCorrection[interfaceName][0] = averageInterface.r[0];
+    interfaceCorrection[interfaceName][1] = averageInterface.r[1];
+    interfaceCorrection[interfaceName][2] = averageInterface.r[2];
         
     Dune::FieldVector<double,3> infinitesimalRotation = Rotation<3,double>::expInv(averageInterface.q);
-    interfaceCorrection[3] = infinitesimalRotation[0];
-    interfaceCorrection[4] = infinitesimalRotation[1];
-    interfaceCorrection[5] = infinitesimalRotation[2];
+    interfaceCorrection[interfaceName][3] = infinitesimalRotation[0];
+    interfaceCorrection[interfaceName][4] = infinitesimalRotation[1];
+    interfaceCorrection[interfaceName][5] = infinitesimalRotation[2];
         
     return interfaceCorrection;
 }
@@ -726,7 +731,7 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd
         //  of the continuum.
         ////////////////////////////////////////////////////////////////////
                 
-        interfaceCorrection[interfaceName] = linearizedContinuumNeumannToDirichletMap(continuumSubdomainSolutions_["continuum"], 
+        interfaceCorrection = linearizedContinuumNeumannToDirichletMap(continuumSubdomainSolutions_["continuum"], 
                                                   residualForceTorque[interfaceName], 
                                                   lambda[interfaceName].r);
                 
@@ -737,7 +742,7 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd
         //  of the rod.
         ////////////////////////////////////////////////////////////////////
         
-        interfaceCorrection[interfaceName] = linearizedRodNeumannToDirichletMap(rodSubdomainSolutions_["rod"], 
+        interfaceCorrection = linearizedRodNeumannToDirichletMap(rodSubdomainSolutions_["rod"], 
                                                  residualForceTorque[interfaceName], 
                                                  lambda[interfaceName].r);
 
@@ -750,15 +755,15 @@ iterate(std::map<std::pair<std::string,std::string>, RigidBodyMotion<3> >& lambd
         //  Neumann-to-Dirichlet map of the rod.
         ////////////////////////////////////////////////////////////////////
 
-        Dune::FieldVector<double,6> continuumCorrection = linearizedContinuumNeumannToDirichletMap(continuumSubdomainSolutions_["continuum"], 
+        std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> continuumCorrection = linearizedContinuumNeumannToDirichletMap(continuumSubdomainSolutions_["continuum"], 
                                                                               residualForceTorque[interfaceName], 
                                                                               lambda[interfaceName].r);
-        Dune::FieldVector<double,6> rodCorrection       = linearizedRodNeumannToDirichletMap(rodSubdomainSolutions_["rod"],
+        std::map<std::pair<std::string,std::string>,RigidBodyMotion<3>::TangentVector> rodCorrection       = linearizedRodNeumannToDirichletMap(rodSubdomainSolutions_["rod"],
                                                                              residualForceTorque[interfaceName],
                                                                              lambda[interfaceName].r);
                 
         for (int j=0; j<6; j++)
-            interfaceCorrection[interfaceName][j] = (alpha_[0] * continuumCorrection[j] + alpha_[1] * rodCorrection[j])
+            interfaceCorrection[interfaceName][j] = (alpha_[0] * continuumCorrection[interfaceName][j] + alpha_[1] * rodCorrection[interfaceName][j])
                                         / alpha_[0] + alpha_[1];
                 
     } else if (preconditioner_=="RobinRobin") {