diff --git a/test/adolctest.cc b/test/adolctest.cc
index 0ba246c0b7630c9903e97f5ab7ff10d20d775f4a..705abfd35a140d49113b19381a69894919f922e8 100644
--- a/test/adolctest.cc
+++ b/test/adolctest.cc
@@ -18,6 +18,8 @@
 #include <dune/common/parametertree.hh>
 #include <dune/common/parametertreeparser.hh>
 
+#include <dune/istl/io.hh>
+
 #include <dune/grid/yaspgrid.hh>
 #include <dune/geometry/quadraturerules.hh>
 
@@ -33,6 +35,26 @@
 
 using namespace Dune;
 
+template <int blocksize>
+void compareMatrices(const Matrix<FieldMatrix<double,blocksize,blocksize> >& fdMatrix,
+                     const Matrix<FieldMatrix<double,blocksize,blocksize> >& adolcMatrix)
+{
+  assert(fdMatrix.N() == adolcMatrix.N());
+  assert(fdMatrix.M() == adolcMatrix.M());
+
+  Matrix<FieldMatrix<double,blocksize,blocksize> > diff = fdMatrix;
+  diff -= adolcMatrix;
+
+  if ( (diff.frobenius_norm() / fdMatrix.frobenius_norm()) > 1e-4) {
+    std::cout << "Matrices differ:" << std::endl;
+    std::cout << "finite differences:" << std::endl;
+    printmatrix(std::cout, fdMatrix, "finite differences", "--");
+    std::cout << "ADOL-C:" << std::endl;
+    printmatrix(std::cout, adolcMatrix, "ADOL-C", "--");
+    assert(false);
+  }
+}
+
 
 int testHarmonicEnergy() {
 
@@ -80,9 +102,7 @@ int testHarmonicEnergy() {
 
   localGFEADOLCStiffness.assembleHessian(*grid.leafbegin<0>(),localFiniteElement, localSolution);
 
-  std::cout << "finite differences:\n" << harmonicEnergyLocalStiffness.A_[0][0] << std::endl;
-
-  std::cout << "ADOL-C:\n" << localGFEADOLCStiffness.A_[0][0] << std::endl;
+  compareMatrices(harmonicEnergyLocalStiffness.A_, localGFEADOLCStiffness.A_);
 
     return 0;
 }
@@ -147,9 +167,7 @@ int testCosseratEnergy() {
 
     localGFEADOLCStiffness.assembleHessian(*grid.leafbegin<0>(),localFiniteElement, localSolution);
 
-    std::cout << "finite differences:\n" << cosseratEnergyLocalStiffness.A_[0][0] << std::endl;
-
-    std::cout << "ADOL-C:\n" << localGFEADOLCStiffness.A_[0][0] << std::endl;
+    compareMatrices(cosseratEnergyLocalStiffness.A_, localGFEADOLCStiffness.A_);
 
     return 0;
 }