diff --git a/common/test/tuplestest.cc b/common/test/tuplestest.cc
index 0257db14994c8bde19595eaca39156540f098ae3..facd830d52457971bffe10a10303ed4afc28ddaa 100644
--- a/common/test/tuplestest.cc
+++ b/common/test/tuplestest.cc
@@ -39,6 +39,8 @@ int iteratorTupleTest()
 
 
   Tuple tuple(v.begin(), v.begin(), v.end());
+
+  assert(Size<Tuple>::value==3);
   int ret=0;
 
   if(Element<0>::get(tuple)!= v.begin()) {
diff --git a/common/tuples.hh b/common/tuples.hh
index 076b79bdcd176e7e12e8ca0893332028382264f3..355a1f06a869e46149ccadea9cad57535ec96a86 100644
--- a/common/tuples.hh
+++ b/common/tuples.hh
@@ -469,6 +469,33 @@ namespace Dune
     }
   };
 
+  /**
+   * @brief Template meta_programm to query the size of a tuple
+   *
+   */
+  template<typename T>
+  struct Size
+  {
+    enum {
+      /** @brief The value of the size of the tuple */
+      value = -100000
+    };
+  };
+
+  template<typename T1, typename T2>
+  struct Size<Pair<T1,T2> >
+  {
+    enum { value=1+Size<T2>::value};
+  };
+
+
+  template<typename T1>
+  struct Size<Pair<T1,Nil> >
+  {
+    enum { value=1};
+  };
+
+
   /**
    * @brief Equality comparison operator for tuples.
    * @param tuple1 The first tuple.