diff --git a/dune/stuff/test/common_math.cc b/dune/stuff/test/common_math.cc
index 63adba84c337abcbb4aa5b9f9ffd261eab101dd4..e8d387ca007aa827e14dfcffded831e325293a4c 100644
--- a/dune/stuff/test/common_math.cc
+++ b/dune/stuff/test/common_math.cc
@@ -4,98 +4,108 @@
 #include <dune/common/tupleutility.hh>
 
 using namespace Dune::Stuff::Common;
-
+typedef testing::Types<double, int> TestTypes;
 
 template <class T>
-struct MinMaxAvgTest
+struct VectorMath : public testing::Test
 {
-  static void run()
+  typedef Dune::FieldVector<double, 2> Vector;
+  typedef Dune::FieldMatrix<double, 2, 2> Matrix;
+  Vector a, b;
+  Matrix c, d, aa, ab;
+
+  VectorMath()
+    : a(0)
+    , b(0)
+    , c(0)
+    , d(0)
+    , aa(0)
+    , ab(0)
   {
-    using namespace Math;
-    MinMaxAvg<T> mma;
-    mma(-1);
-    mma(1);
-    MY_ASSERT(Dune::FloatCmp::eq(mma.min(), T(-1.0)));
-    MY_ASSERT(Dune::FloatCmp::eq(mma.max(), T(1.0)));
-    MY_ASSERT(Dune::FloatCmp::eq(mma.average(), T(0.0)));
-    mma(0);
-    MY_ASSERT(Dune::FloatCmp::eq(mma.min(), T(-1.0)));
-    MY_ASSERT(Dune::FloatCmp::eq(mma.max(), T(1.0)));
-    MY_ASSERT(Dune::FloatCmp::eq(mma.average(), T(0.0)));
-    mma(-4);
-    MY_ASSERT(Dune::FloatCmp::eq(mma.min(), T(-4.0)));
-    MY_ASSERT(Dune::FloatCmp::eq(mma.max(), T(1.0)));
-    MY_ASSERT(Dune::FloatCmp::eq(mma.average(), T(-1.0)));
+    a[0]     = 1;
+    b[1]     = 1;
+    aa[0][0] = 1;
+    ab[0][1] = 1;
+    c[0][0]  = 1;
+    c[1][1]  = 1;
+    d[1][0]  = 1;
+    d[0][1]  = 1;
   }
 };
 
+TYPED_TEST_CASE(VectorMath, TestTypes);
+TYPED_TEST(VectorMath, dyadicProduct)
+{
+  typedef typename VectorMath<TypeParam>::Matrix Matrix;
+  EXPECT_EQ(Math::dyadicProduct<Matrix>(this->a, this->a), this->aa);
+  EXPECT_EQ(Math::dyadicProduct<Matrix>(this->a, this->b), this->ab);
+}
+TYPED_TEST(VectorMath, colonProduct)
+{
+  EXPECT_TRUE(Dune::FloatCmp::eq(Math::colonProduct(this->c, this->d), 0.0));
+  EXPECT_TRUE(Dune::FloatCmp::eq(Math::colonProduct(this->c, this->c), 2.0));
+}
+
 template <class T>
-struct VectorMath
+struct ClampTest : public testing::Test
 {
-  static void run()
+  const T lower;
+  const T upper;
+  ClampTest()
+    : lower(T(-1))
+    , upper(T(1))
   {
-    typedef Dune::FieldVector<double, 2> Vector;
-    typedef Dune::FieldMatrix<double, 2, 2> Matrix;
-    {
-      Vector a(0);
-      a[0] = 1;
-      Vector b(0);
-      b[1] = 1;
-      Matrix aa(0);
-      aa[0][0] = 1;
-      MY_ASSERT(Math::dyadicProduct<Matrix>(a, a) == aa);
-      Matrix ab(0);
-      ab[0][1] = 1;
-      MY_ASSERT(Math::dyadicProduct<Matrix>(a, b) == ab);
-    }
-    {
-      Matrix a(0);
-      a[0][0] = 1;
-      a[1][1] = 1;
-      Matrix b(0);
-      b[1][0] = 1;
-      b[0][1] = 1;
-      MY_ASSERT(Dune::FloatCmp::eq(Math::colonProduct(a, b), 0.0));
-      MY_ASSERT(Dune::FloatCmp::eq(Math::colonProduct(a, a), 2.0));
-    }
   }
 };
 
+TYPED_TEST_CASE(ClampTest, TestTypes);
+TYPED_TEST(ClampTest, All)
+{
+  EXPECT_EQ(Math::clamp(TypeParam(-2), this->lower, this->upper), this->lower);
+  EXPECT_EQ(Math::clamp(TypeParam(2), this->lower, this->upper), this->upper);
+  EXPECT_EQ(Math::clamp(TypeParam(0), this->lower, this->upper), TypeParam(0));
+}
+
 template <class T>
-struct ClampTest
+struct EpsilonTest : public testing::Test
 {
-  static void run()
-  {
-    const T lower = T(-1);
-    const T upper = T(1);
-    MY_ASSERT(Math::clamp(T(-2), lower, upper) == lower);
-    MY_ASSERT(Math::clamp(T(2), lower, upper) == upper);
-    MY_ASSERT(Math::clamp(T(0), lower, upper) == T(0));
-  }
 };
 
+TYPED_TEST_CASE(EpsilonTest, TestTypes);
+TYPED_TEST(EpsilonTest, All)
+{
+  EXPECT_NE(Math::Epsilon<TypeParam>::value, TypeParam(0));
+}
+
 template <class T>
-struct EpsilonInstance
+struct MinMaxAvgTest : public testing::Test
 {
-  static void run()
-  {
-    MY_ASSERT(Math::Epsilon<T>::value != T(0));
-  }
 };
 
+TYPED_TEST_CASE(MinMaxAvgTest, TestTypes);
+TYPED_TEST(MinMaxAvgTest, All)
+{
+  using namespace Math;
+  MinMaxAvg<TypeParam> mma;
+  mma(-1);
+  mma(1);
+  EXPECT_TRUE(Dune::FloatCmp::eq(mma.min(), TypeParam(-1.0)));
+  EXPECT_TRUE(Dune::FloatCmp::eq(mma.max(), TypeParam(1.0)));
+  EXPECT_TRUE(Dune::FloatCmp::eq(mma.average(), TypeParam(0.0)));
+  mma(0);
+  EXPECT_TRUE(Dune::FloatCmp::eq(mma.min(), TypeParam(-1.0)));
+  EXPECT_TRUE(Dune::FloatCmp::eq(mma.max(), TypeParam(1.0)));
+  EXPECT_TRUE(Dune::FloatCmp::eq(mma.average(), TypeParam(0.0)));
+  mma(-4);
+  EXPECT_TRUE(Dune::FloatCmp::eq(mma.min(), TypeParam(-4.0)));
+  EXPECT_TRUE(Dune::FloatCmp::eq(mma.max(), TypeParam(1.0)));
+  EXPECT_TRUE(Dune::FloatCmp::eq(mma.average(), TypeParam(-1.0)));
+}
+
+
 int main(int argc, char** argv)
 {
-  try {
-    // mpi
-    typedef Dune::tuple<double, int> TestTypes;
-    Dune::MPIHelper::instance(argc, argv);
-    TestRunner<MinMaxAvgTest>::run<TestTypes>();
-    TestRunner<ClampTest>::run<TestTypes>();
-    TestRunner<VectorMath>::run<TestTypes>();
-    TestRunner<EpsilonInstance>::run<BasicTypes>();
-  } catch (Dune::Exception& e) {
-    std::cout << e.what() << std::endl;
-    return 1;
-  }
-  return 0;
+  testing::InitGoogleTest(&argc, argv);
+  Dune::MPIHelper::instance(argc, argv);
+  return RUN_ALL_TESTS();
 }