diff --git a/MathLib/Point3d.cpp b/MathLib/Point3d.cpp
index 71277056070fca816fcf2f6649c14cef30e43271..ad1b56ea7e0c1526e5a26ac58655b933b1c0f4c7 100644
--- a/MathLib/Point3d.cpp
+++ b/MathLib/Point3d.cpp
@@ -18,36 +18,6 @@
 namespace MathLib
 {
 
-bool operator< (const MathLib::Point3d& p0, const MathLib::Point3d& p1)
-{
-	if (p0[0] > p1[0]) {
-		return false;
-	} else {
-		if (p0[0] < p1[0]) {
-			return true;
-		}
-	}
-	// => p0[0] == p1[0]
-
-	if (p0[1] > p1[1]) {
-		return false;
-	} else {
-		if (p0[1] < p1[1]) {
-			return true;
-		}
-	}
-	// => p0[1] == p1[1]
-
-	if (p0[2] > p1[2]) {
-		return false;
-	} else {
-		if (p0[2] < p1[2]) {
-			return true;
-		}
-		return false; // p0 == p1
-	}
-}
-
 bool lessEq(const MathLib::Point3d& p0, const MathLib::Point3d& p1, double tol)
 {
 	// test a relative and an absolute criterion
diff --git a/MathLib/Point3d.h b/MathLib/Point3d.h
index 0c8c985e58b6850e83bc6bf7b28fd9927bdb964a..85ed4b4ca4cf11b908a7b94ddbb4057e9d43d49a 100644
--- a/MathLib/Point3d.h
+++ b/MathLib/Point3d.h
@@ -23,8 +23,6 @@ namespace MathLib
 {
 typedef MathLib::TemplatePoint<double,3> Point3d;
 
-bool operator< (MathLib::Point3d const & p0, MathLib::Point3d const & p1);
-
 /**
  * lexicographical comparison of points taking an epsilon into account
  * @param p0 first input Point3d
diff --git a/MathLib/TemplatePoint.h b/MathLib/TemplatePoint.h
index b8be4e918afb2b39c97970f995843a7f1271fbb3..d6429bf2fe9cc6bd47dfa9d7b6b4525112916f43 100644
--- a/MathLib/TemplatePoint.h
+++ b/MathLib/TemplatePoint.h
@@ -111,6 +111,25 @@ bool operator==(TemplatePoint<T,DIM> const& a, TemplatePoint<T,DIM> const& b)
 	return (sqr_dist < eps*eps);
 }
 
+template <typename T, std::size_t DIM>
+bool operator< (TemplatePoint<T,DIM> const& a, TemplatePoint<T,DIM> const& b)
+{
+	for (std::size_t i = 0; i < DIM; ++i)
+	{
+		if (a[i] > b[i]) {
+			return false;
+		} else {
+			if (a[i] < b[i]) {
+				return true;
+			}
+		}
+		// continue with next dimension, because a[0] == b[0]
+	}
+
+	// The values in all dimenisions are equal.
+	return false;
+}
+
 /** Distance between points p0 and p1 in the maximum norm. */
 template <typename T>
 T maxNormDist(const MathLib::TemplatePoint<T>* p0, const MathLib::TemplatePoint<T>* p1)