diff --git a/dune/common/test/fvectortest.cc b/dune/common/test/fvectortest.cc
index 81ac1913f5f6b386758204f7f43c566bfafdc03a..ce281416381b3f93870c61ddad05af11e1e237ff 100644
--- a/dune/common/test/fvectortest.cc
+++ b/dune/common/test/fvectortest.cc
@@ -17,6 +17,13 @@
 using Dune::FieldVector;
 using std::complex;
 
+
+template< class rt > struct Epsilon;
+
+template<> struct Epsilon< int > { static int value () { return 0; } };
+template<> struct Epsilon< float > { static float value () { return 1e-6f; } };
+template<> struct Epsilon< double > { static double value () { return 1e-12; } };
+
 template<class ft, class rt, int d>
 struct FieldVectorMainTest
 {
@@ -85,10 +92,10 @@ struct FieldVectorMainTest
 
     // test istream operator
     std::stringstream s;
-    for (int i=0; i<d; i++)
+    for( int i = 0; i < d; ++i )
     {
       s << i << " ";
-      v[i] = i;
+      v[i] = rt( i );
     }
     s >> w;
     assert(v == w);
@@ -209,7 +216,7 @@ struct DotProductTest
 {
   DotProductTest() {
     typedef std::complex<rt> ct;
-    const rt myEps(1e-6);
+    const rt myEps = Epsilon< rt >::value();
 
     dune_static_assert(
       ( Dune::is_same< typename Dune::FieldTraits<rt>::real_type, rt>::value ),