diff --git a/dune/stuff/common/float_cmp.hh b/dune/stuff/common/float_cmp.hh
index b6b1b8b98dec662473b68d218208a5c18b204592..8deaaeccb17d582e843bdd29dd21615d49abb7dd 100644
--- a/dune/stuff/common/float_cmp.hh
+++ b/dune/stuff/common/float_cmp.hh
@@ -11,33 +11,56 @@
 #include <dune/stuff/la/container/eigen.hh>
 #endif
 
+#include <type_traits>
+
 namespace Dune {
 namespace Stuff {
 namespace Common {
 namespace FloatCmp {
 
+template <class T, Dune::FloatCmp::CmpStyle style = Dune::FloatCmp::defaultCmpStyle>
+typename std::enable_if<std::is_arithmetic<T>::value, bool>::type
+ne(const T& first, const T& second,
+   typename Dune::FloatCmp::EpsilonType<T>::Type epsilon = Dune::FloatCmp::DefaultEpsilon<T, style>::value())
+{
+  return Dune::FloatCmp::ne<T, style>(first, second, epsilon);
+}
+
+template <class T, Dune::FloatCmp::CmpStyle style = Dune::FloatCmp::defaultCmpStyle>
+typename std::enable_if<std::is_arithmetic<T>::value, bool>::type
+eq(const T& first, const T& second,
+   typename Dune::FloatCmp::EpsilonType<T>::Type epsilon = Dune::FloatCmp::DefaultEpsilon<T, style>::value())
+{
+  return Dune::FloatCmp::eq<T, style>(first, second, epsilon);
+}
+
+template <class T, template <class> class FirstVectorType, template <class> class SecondVectorType = FirstVectorType,
+          Dune::FloatCmp::CmpStyle style = Dune::FloatCmp::defaultCmpStyle>
+bool ne(const FirstVectorType<T>& first, const SecondVectorType<T>& second,
+        typename Dune::FloatCmp::EpsilonType<T>::Type epsilon = Dune::FloatCmp::DefaultEpsilon<T, style>::value())
+{
+  return !eq(first, second, epsilon);
+}
 
 template <class T, Dune::FloatCmp::CmpStyle style = Dune::FloatCmp::defaultCmpStyle>
 bool eq(const Dune::DynamicVector<T>& first, const Dune::DynamicVector<T>& second,
         typename Dune::FloatCmp::EpsilonType<T>::Type epsilon = Dune::FloatCmp::DefaultEpsilon<T, style>::value())
 {
   assert(first.size() == second.size());
-  bool result = true;
   for (size_t ii = 0; ii < first.size(); ++ii)
-    if (!Dune::FloatCmp::eq<T, style>(first[ii], second[ii], epsilon))
-      result = false;
-  return result;
+    if (Dune::FloatCmp::ne<T, style>(first[ii], second[ii], epsilon))
+      return false;
+  return true;
 } // ... eq(...)
 
 template <class T, int size, Dune::FloatCmp::CmpStyle style = Dune::FloatCmp::defaultCmpStyle>
 bool eq(const Dune::FieldVector<T, size>& first, const Dune::FieldVector<T, size>& second,
         typename Dune::FloatCmp::EpsilonType<T>::Type epsilon = Dune::FloatCmp::DefaultEpsilon<T, style>::value())
 {
-  bool result = true;
   for (size_t ii = 0; ii < size; ++ii)
-    if (!Dune::FloatCmp::eq<T, style>(first[ii], second[ii], epsilon))
-      result = false;
-  return result;
+    if (Dune::FloatCmp::ne<T, style>(first[ii], second[ii], epsilon))
+      return false;
+  return true;
 } // ... eq(...)
 
 #if HAVE_EIGEN
@@ -46,11 +69,10 @@ bool eq(const Dune::Stuff::LA::EigenDenseVector<T>& first, const Dune::Stuff::LA
         typename Dune::FloatCmp::EpsilonType<T>::Type epsilon = Dune::FloatCmp::DefaultEpsilon<T, style>::value())
 {
   assert(first.size() == second.size());
-  bool result = true;
   for (size_t ii = 0; ii < first.size(); ++ii)
     if (!Dune::FloatCmp::eq<T, style>(first.backend()[ii], second.backend()[ii], epsilon))
-      result = false;
-  return result;
+      return false;
+  return true;
 } // ... eq(...)
 
 template <class T, Dune::FloatCmp::CmpStyle style = Dune::FloatCmp::defaultCmpStyle>
@@ -58,11 +80,10 @@ bool eq(const Dune::DynamicVector<T>& first, const Dune::Stuff::LA::EigenDenseVe
         typename Dune::FloatCmp::EpsilonType<T>::Type epsilon = Dune::FloatCmp::DefaultEpsilon<T, style>::value())
 {
   assert(first.size() == second.size());
-  bool result = true;
   for (size_t ii = 0; ii < first.size(); ++ii)
     if (!Dune::FloatCmp::eq<T, style>(first[ii], second.backend()[ii], epsilon))
-      result = false;
-  return result;
+      return false;
+  return true;
 } // ... eq(...)
 #endif // HAVE_EIGEN