diff --git a/dumux/geometry/distance.hh b/dumux/geometry/distance.hh
index 20530e45997e6ab242c1735723ffa4a97030c4cf..a9f110bf8a4c8cc8be3c3115f621c061e5e2c389 100644
--- a/dumux/geometry/distance.hh
+++ b/dumux/geometry/distance.hh
@@ -303,7 +303,7 @@ namespace Detail {
 template<class Geo1, class Geo2,
          int dimWorld = Geo1::coorddimension,
          int dim1 = Geo1::mydimension, int dim2 = Geo2::mydimension>
-struct GeometryDistance
+struct GeometrySquaredDistance
 {
     static_assert(Geo1::coorddimension == Geo2::coorddimension, "Geometries have to have the same coordinate dimensions");
     static auto distance(const Geo1& geo1, const Geo2& geo2)
@@ -315,58 +315,66 @@ struct GeometryDistance
 
 // distance point-point
 template<class Geo1, class Geo2, int dimWorld>
-struct GeometryDistance<Geo1, Geo2, dimWorld, 0, 0>
+struct GeometrySquaredDistance<Geo1, Geo2, dimWorld, 0, 0>
 {
     static_assert(Geo1::coorddimension == Geo2::coorddimension, "Geometries have to have the same coordinate dimensions");
     static auto distance(const Geo1& geo1, const Geo2& geo2)
-    { return Dumux::distance(geo1.corner(0), geo2.corner(0)); }
+    { return Dumux::squaredDistance(geo1.corner(0), geo2.corner(0)); }
 };
 
 // distance segment-point
 template<class Geo1, class Geo2, int dimWorld>
-struct GeometryDistance<Geo1, Geo2, dimWorld, 1, 0>
+struct GeometrySquaredDistance<Geo1, Geo2, dimWorld, 1, 0>
 {
     static_assert(Geo1::coorddimension == Geo2::coorddimension, "Geometries have to have the same coordinate dimensions");
     static auto distance(const Geo1& geo1, const Geo2& geo2)
-    { return distancePointSegment(geo2.corner(0), geo1); }
+    { return squaredDistancePointSegment(geo2.corner(0), geo1); }
 };
 
 // distance point-segment
 template<class Geo1, class Geo2, int dimWorld>
-struct GeometryDistance<Geo1, Geo2, dimWorld, 0, 1>
+struct GeometrySquaredDistance<Geo1, Geo2, dimWorld, 0, 1>
 {
     static_assert(Geo1::coorddimension == Geo2::coorddimension, "Geometries have to have the same coordinate dimensions");
     static auto distance(const Geo1& geo1, const Geo2& geo2)
-    { return distancePointSegment(geo1.corner(0), geo2); }
+    { return squaredDistancePointSegment(geo1.corner(0), geo2); }
 };
 
 // distance point-polygon
 template<class Geo1, class Geo2, int dimWorld>
-struct GeometryDistance<Geo1, Geo2, dimWorld, 0, 2>
+struct GeometrySquaredDistance<Geo1, Geo2, dimWorld, 0, 2>
 {
     static_assert(Geo1::coorddimension == Geo2::coorddimension, "Geometries have to have the same coordinate dimensions");
     static inline auto distance(const Geo1& geo1, const Geo2& geo2)
-    { return distancePointPolygon(geo1.corner(0), geo2); }
+    { return squaredDistancePointPolygon(geo1.corner(0), geo2); }
 };
 
 // distance polygon-point
 template<class Geo1, class Geo2, int dimWorld>
-struct GeometryDistance<Geo1, Geo2, dimWorld, 2, 0>
+struct GeometrySquaredDistance<Geo1, Geo2, dimWorld, 2, 0>
 {
     static_assert(Geo1::coorddimension == Geo2::coorddimension, "Geometries have to have the same coordinate dimensions");
     static inline auto distance(const Geo1& geo1, const Geo2& geo2)
-    { return distancePointPolygon(geo2.corner(0), geo1); }
+    { return squaredDistancePointPolygon(geo2.corner(0), geo1); }
 };
 
 } // end namespace Detail
 
+/*!
+ * \ingroup Geometry
+ * \brief Compute the shortest distance between two geometries
+ */
+template<class Geo1, class Geo2>
+static inline auto squaredDistance(const Geo1& geo1, const Geo2& geo2)
+{ return Detail::GeometrySquaredDistance<Geo1, Geo2>::distance(geo1, geo2); }
+
 /*!
  * \ingroup Geometry
  * \brief Compute the shortest distance between two geometries
  */
 template<class Geo1, class Geo2>
 static inline auto distance(const Geo1& geo1, const Geo2& geo2)
-{ return Detail::GeometryDistance<Geo1, Geo2>::distance(geo1, geo2); }
+{ using std::sqrt; return sqrt(squaredDistance(geo1, geo2)); }
 
 } // end namespace Dumux