diff --git a/dune/common/test/parametertreetest.cc b/dune/common/test/parametertreetest.cc
index 48d2488320fce4c29c3c20773c185646091164c5..e3de860b592f0dcfa83bf6e57ad5e5098406a0b2 100644
--- a/dune/common/test/parametertreetest.cc
+++ b/dune/common/test/parametertreetest.cc
@@ -245,6 +245,35 @@ void testFS1523()
   check_assert(ptree.get<int>("setting") == -1);
 }
 
+void check_recursiveTreeCompare(const Dune::ParameterTree & p1,
+  const Dune::ParameterTree & p2)
+{
+  check_assert(p1.getValueKeys() == p2.getValueKeys());
+  check_assert(p1.getSubKeys() == p2.getSubKeys());
+  typedef Dune::ParameterTree::KeyVector::const_iterator Iterator;
+  for (Iterator it = p1.getValueKeys().begin();
+       it != p1.getValueKeys().end(); ++it)
+    check_assert(p1[*it] == p2[*it]);
+  for (Iterator it = p1.getSubKeys().begin();
+       it != p1.getSubKeys().end(); ++it)
+    check_recursiveTreeCompare(p1.sub(*it), p2.sub(*it));
+}
+
+// test report method and read back in
+void testReport()
+{
+  std::stringstream s;
+  s << "foo.i = 1 \n foo.bar.peng = hurz";
+  Dune::ParameterTree ptree;
+  Dune::ParameterTreeParser::readINITree(s, ptree);
+
+  std::stringstream s2;
+  ptree.report(s2);
+  Dune::ParameterTree ptree2;
+  Dune::ParameterTreeParser::readINITree(s2, ptree2);
+  check_recursiveTreeCompare(ptree, ptree2);
+}
+
 int main()
 {
   try {
@@ -275,6 +304,9 @@ int main()
     // check the command line parser
     testOptionsParser();
 
+    // check report
+    testReport();
+
     // check for specific bugs
     testFS1527();
     testFS1523();