diff --git a/dune/gfe/mixedriemanniantrsolver.cc b/dune/gfe/mixedriemanniantrsolver.cc
index 0fd01f8543485233fc5effc6d262f778bc8a33b1..1fe323d2cd28e5497a456c301da95246aaf5ce60 100644
--- a/dune/gfe/mixedriemanniantrsolver.cc
+++ b/dune/gfe/mixedriemanniantrsolver.cc
@@ -445,6 +445,7 @@ void MixedRiemannianTrustRegionSolver<GridType,Basis0,TargetSpace0,Basis1,Target
 
 
             std::cout << "Solve quadratic problem..." << std::endl;
+            double oldEnergy = 0;
             Dune::Timer solutionTimer;
             for (int ii=0; ii<200; ii++)
             {
@@ -459,6 +460,24 @@ void MixedRiemannianTrustRegionSolver<GridType,Basis0,TargetSpace0,Basis1,Target
               mmgStep1->setRhs(residual1);
               mmgStep1->iterate();
 
+              // Compute energy
+              CorrectionType0 tmp0(corr_global0);
+              stiffnessMatrix00.mv(corr_global0,tmp0);
+              stiffnessMatrix01.umv(corr_global1,tmp0);
+
+              CorrectionType1 tmp1(corr_global1);
+              stiffnessMatrix10.mv(corr_global0,tmp1);
+              stiffnessMatrix11.umv(corr_global1,tmp1);
+
+              double energy = 0.5 * (tmp0*corr_global0 + tmp1*corr_global1) - (rhs_global0*corr_global0 + rhs_global1*corr_global1);
+
+
+              std::cout << "Energy: " << energy << std::endl;
+
+              if (energy >= oldEnergy)
+                DUNE_THROW(Dune::Exception, "energy increase!");
+
+              oldEnergy = energy;
             }
 
             std::cout << "Solving the quadratic problem took " << solutionTimer.elapsed() << " seconds." << std::endl;