diff --git a/dune/gfe/cosseratenergystiffness.hh b/dune/gfe/cosseratenergystiffness.hh
index d1274f81b49190a0133a5f2e6552e1091300a7b8..6e2fb19f32550a872a1c361c3ddba7fadfc063d3 100644
--- a/dune/gfe/cosseratenergystiffness.hh
+++ b/dune/gfe/cosseratenergystiffness.hh
@@ -82,8 +82,6 @@ public:  // for testing
         // This second derivative is almost given by the method getFirstDerivativesOfDirectors.
         // However, since the directors of a given unit quaternion are the _columns_ of the
         // corresponding orthogonal matrix, we need to invert the i and j indices
-        //
-        // So, if I am not mistaken, DR[i][j][k] contains \partial M_ij / \partial k
         Tensor3<double,3 , 3, 4> dd_dq;
         value.q.getFirstDerivativesOfDirectors(dd_dq);
         
@@ -138,8 +136,7 @@ public:
 
     RT curvatureEnergy(const Tensor3<double,3,3,3>& DR) const
     {
-        //return mu_ * std::pow(L_c_ * curl(DR).frobenius_norm(),q_);
-        return mu_ * std::pow(L_c_ * DR.frobenius_norm(),q_);
+        return mu_ * std::pow(L_c_ * curl(DR).frobenius_norm(),q_);
     }
 
     RT bendingEnergy(const Dune::FieldMatrix<double,dim,dim>& R, const Tensor3<double,3,3,3>& DR) const
@@ -183,7 +180,7 @@ public:
     /** \brief Curvature exponent */
     double q_;
     
-    const BoundaryPatch<GridView>* neumannBoundary_;
+    
 };
 
 template <class GridView, class LocalFiniteElement, int dim>
@@ -198,7 +195,7 @@ energy(const Entity& element,
     LocalGeodesicFEFunction<gridDim, double, LocalFiniteElement, TargetSpace> localGeodesicFEFunction(localFiniteElement,
                                                                                                       localSolution);
 
-    int quadOrder = 2*gridDim;
+    int quadOrder = 1;//gridDim;
 
     const Dune::QuadratureRule<double, gridDim>& quad 
         = Dune::QuadratureRules<double, gridDim>::rule(element.type(), quadOrder);
@@ -279,37 +276,7 @@ energy(const Entity& element,
             DUNE_THROW(Dune::NotImplemented, "CosseratEnergyStiffness for 1d grids");
 
     }
-    
-    
-    //////////////////////////////////////////////////////////////////////////////
-    //   Assemble boundary contributions
-    //////////////////////////////////////////////////////////////////////////////
-
-    for (typename Entity::LeafIntersectionIterator it = element.ileafbegin(); it != element.ileafend(); ++it) {
-        
-        if (not neumannBoundary_ or not neumannBoundary_->contains(*it))
-            continue;
-        
-        const Dune::QuadratureRule<double, gridDim-1>& quad 
-            = Dune::QuadratureRules<double, gridDim-1>::rule(it->type(), quadOrder);
-    
-        for (size_t pt=0; pt<quad.size(); pt++) {
-        
-            // Local position of the quadrature point
-            const Dune::FieldVector<double,gridDim>& quadPos = it->geometryInInside().global(quad[pt].position());
-        
-            const double integrationElement = it->geometry().integrationElement(quad[pt].position());
 
-            // The value of the local function
-            RigidBodyMotion<dim> value = localGeodesicFEFunction.evaluate(quadPos);
-
-            // Constant Neumann force in z-direction
-            energy += thickness_ * 40 * value.r[2] * quad[pt].weight() * integrationElement;
-            
-        }
-        
-    }
-    
     return energy;
 }
 
diff --git a/dune/gfe/riemanniantrsolver.cc b/dune/gfe/riemanniantrsolver.cc
index 95be5a8693671c54acf130294b7b6e31105b08f9..e3f02bf43dd26360d29b0cfe1c2d8c44fde21a05 100644
--- a/dune/gfe/riemanniantrsolver.cc
+++ b/dune/gfe/riemanniantrsolver.cc
@@ -62,9 +62,7 @@ setup(const GridType& grid,
     //   Create a multigrid solver
     // ////////////////////////////////
 
-#if 0
     // First create a Gauss-seidel base solver
-    
     TrustRegionGSStep<MatrixType, CorrectionType>* baseSolverStep = new TrustRegionGSStep<MatrixType, CorrectionType>;
 
     EnergyNorm<MatrixType, CorrectionType>* baseEnergyNorm = new EnergyNorm<MatrixType, CorrectionType>(*baseSolverStep);
@@ -74,11 +72,6 @@ setup(const GridType& grid,
                                                                             baseTolerance,
                                                                             baseEnergyNorm,
                                                                             Solver::QUIET);
-#else
-    QuadraticIPOptSolver<MatrixType,CorrectionType>* baseSolver = new QuadraticIPOptSolver<MatrixType,CorrectionType>();
-    baseSolver->tolerance_ = baseTolerance;
-    baseSolver->verbosity_ = Solver::QUIET;
-#endif
 
     // Make pre and postsmoothers
     TrustRegionGSStep<MatrixType, CorrectionType>* presmoother  = new TrustRegionGSStep<MatrixType, CorrectionType>;
@@ -112,21 +105,12 @@ setup(const GridType& grid,
 
     h1SemiNorm_ = new H1SemiNorm<CorrectionType>(*A);
 
-#if 0
     innerSolver_ = std::shared_ptr<LoopSolver<CorrectionType> >(new ::LoopSolver<CorrectionType>(mmgStep,
                                                                                                    innerIterations_,
                                                                                                    innerTolerance_,
                                                                                                    h1SemiNorm_,
                                                                                                  Solver::FULL));
 
-#else
-    QuadraticIPOptSolver<MatrixType,CorrectionType>* solver = new QuadraticIPOptSolver<MatrixType,CorrectionType>();
-    solver->tolerance_ = innerTolerance_;
-    solver->verbosity_ = Solver::REDUCED;
-    innerSolver_ = std::shared_ptr<QuadraticIPOptSolver<MatrixType,CorrectionType> >(solver);
-#endif
-
-    
     // Write all intermediate solutions, if requested
     if (instrumented_
         && dynamic_cast<IterativeSolver<CorrectionType>*>(innerSolver_.get()))
@@ -206,7 +190,7 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve()
 
     std::vector<std::vector<BoxConstraint<field_type,blocksize> > > trustRegionObstacles((mgStep) 
                                                                                          ? mgStep->numLevels_
-                                                                                         : 1);
+                                                                                         : 0);
 
    // /////////////////////////////////////////////////////
     //   Set up the log file, if requested
@@ -258,6 +242,8 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve()
         // The right hand side is the _negative_ gradient
         rhs *= -1;
 
+/*        std::cout << "rhs:\n" << rhs << std::endl;
+        std::cout << "matrix[0][0]:\n" << (*hessianMatrix_)[0][0] << std::endl;*/
         
         // //////////////////////////////////////////////////////////////////////
         //   Modify matrix and right-hand side to account for Dirichlet values
@@ -291,17 +277,10 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve()
 
         }
 
-        //std::cout << "rhs:\n" << rhs << std::endl;
-        //std::cout << "matrix[0][0]:\n" << (*hessianMatrix_)[0][0] << std::endl;
-        //printmatrix(std::cout, (*hessianMatrix_), "hessian", "--");
-        //writeMatrixToMatlab(*hessianMatrix_, "cosserat_hessian");
-        
-        //mgStep->setProblem(*hessianMatrix_, corr, rhs, grid_->maxLevel()+1);
-        std::dynamic_pointer_cast<QuadraticIPOptSolver<MatrixType,CorrectionType> >(innerSolver_)->setProblem(*hessianMatrix_, corr, rhs);
+        mgStep->setProblem(*hessianMatrix_, corr, rhs, grid_->maxLevel()+1);
         
         trustRegionObstacles.back() = trustRegion.obstacles();
-        //mgStep->obstacles_ = &trustRegionObstacles;
-        std::dynamic_pointer_cast<QuadraticIPOptSolver<MatrixType,CorrectionType> >(innerSolver_)->obstacles_ = &trustRegionObstacles.back();
+        mgStep->obstacles_ = &trustRegionObstacles;
 
         innerSolver_->preprocess();
         
@@ -441,7 +420,7 @@ void RiemannianTrustRegionSolver<GridType,TargetSpace>::solve()
         }
 
         if (energy >= oldEnergy &&
-            (std::abs((oldEnergy-energy)/energy) < 1e-9 || std::abs(modelDecrease/energy) < 1e-9)) {
+            (std::abs(oldEnergy-energy)/energy < 1e-9 || modelDecrease/energy < 1e-9)) {
             if (this->verbosity_ == NumProc::FULL)
                 std::cout << "Suspecting rounding problems" << std::endl;