diff --git a/dune/common/test/iteratortest.hh b/dune/common/test/iteratortest.hh
index e457c32f5f2a96cab4ef9a35481c71fba75429c7..c8cbe100fd50902bbd18d73bc199fe1af9277782 100644
--- a/dune/common/test/iteratortest.hh
+++ b/dune/common/test/iteratortest.hh
@@ -91,10 +91,21 @@ template<class Iter, class Opt>
 int testBidirectionalIterator(Iter begin, Iter end, Opt opt)
 {
   testForwardIterator(begin, end, opt);
-  for(Iter it = end; it != begin; )
+  for(Iter pre = end, post = end; pre != begin; )
   {
-    --it;
-    opt(*it);
+    if(pre != post--)
+    {
+      std::cerr << "Postdecrement did not return the old iterator"
+                << std::endl;
+      return 1;
+    }
+    if(--pre != post)
+    {
+      std::cerr << "Predecrement did not return the new iterator"
+                << std::endl;
+      return 1;
+    }
+    opt(*pre);
   }
 
   typename Iter::difference_type size = std::distance(begin, end);