diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc
index 2da1c75d23c9d7ffada47660ffeb0b84b6f17ddc..d2c617778068e6cf919e6ff9f9ec835da739d9d5 100644
--- a/dune/gfe/riemanniantrsolver.cc
+++ b/dune/gfe/riemanniantrsolver.cc
@@ -342,8 +342,17 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve()
         // ////////////////////////////////////////////////////
         
         SolutionType newIterate = x_;
+#if 0   // out-commented until the Rotation class can distinguish skew-symmetric matrices from three-vectors
         for (int j=0; j<newIterate.size(); j++) 
             newIterate[j] = TargetSpace::exp(newIterate[j], corr[j]);
+#else
+        for (int j=0; j<newIterate.size(); j++) {
+            Dune::FieldMatrix<double,TargetSpace::TangentVector::size,TargetSpace::EmbeddedTangentVector::size> B = x_[j].orthonormalFrame();
+            Dune::FieldVector<double,TargetSpace::EmbeddedTangentVector::size> embeddedCorr(0);
+            B.mtv(corr[j], embeddedCorr);
+            newIterate[j] = TargetSpace::exp(newIterate[j], embeddedCorr);
+        }
+#endif
         
         double energy    = assembler_->computeEnergy(newIterate); 
         
diff --git a/dune/gfe/targetspacertrsolver.cc b/dune/gfe/targetspacertrsolver.cc
index 4cc9caa8eb3313f912bab2799282e98a013980ca..f80f4bcd6461a8db1f744538427cb6b1a58a07c0 100644
--- a/dune/gfe/targetspacertrsolver.cc
+++ b/dune/gfe/targetspacertrsolver.cc
@@ -107,7 +107,15 @@ void TargetSpaceRiemannianTRSolver<TargetSpace,N>::solve()
         // ////////////////////////////////////////////////////
         
         TargetSpace newIterate = x_;
+#if 0   // out-commented until the Rotation class can distinguish skew-symmetric matrices from three-vectors
         newIterate = TargetSpace::exp(newIterate, corr[0]);
+#else
+        Dune::FieldMatrix<double,TargetSpace::TangentVector::size,TargetSpace::EmbeddedTangentVector::size> B = x_.orthonormalFrame();
+        Dune::FieldVector<double,TargetSpace::EmbeddedTangentVector::size> embeddedCorr(0);
+        B.mtv(corr[0], embeddedCorr);
+   
+        newIterate = TargetSpace::exp(newIterate, embeddedCorr);
+#endif
         
         /** \todo Don't always recompute oldEnergy */
         double oldEnergy = assembler_->value(x_);