diff --git a/MathLib/Vector3.h b/MathLib/Vector3.h
deleted file mode 100644
index 191b4df39443cb2bb37e1741b8a4a3ffa14c6072..0000000000000000000000000000000000000000
--- a/MathLib/Vector3.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/**
- * \file
- * \author Lars Bilke
- * \date   2009-10-27
- * \brief  Definition of the Vector3 class.
- *         From: http://www.strout.net
- *         with modifications to derive from TemplatePoint
- *
- * \copyright
- * Copyright (c) 2012-2020, OpenGeoSys Community (http://www.opengeosys.org)
- *            Distributed under a Modified BSD License.
- *              See accompanying file LICENSE.txt or
- *              http://www.opengeosys.org/project/license
- *
- */
-
-#pragma once
-
-#include <cmath>
-
-#include "MathTools.h"
-#include "TemplatePoint.h"
-
-namespace MathLib
-{
-/**
- * The Vector3 class defines a three-dimensional vector, with appropriate
- * operators.
- */
-template <class T>
-class TemplateVector3 : public MathLib::TemplatePoint<T>
-{
-public:
-    /**
-     * Default constructor. All coordinates are set to zero.
-     */
-    TemplateVector3() = default;
-
-    TemplateVector3(T x0, T x1, T x2)
-    {
-        this->_x[0] = x0;
-        this->_x[1] = x1;
-        this->_x[2] = x2;
-    }
-
-    /**
-     * Copy constructor.
-     */
-    TemplateVector3(TemplateVector3<T> const& /* v */) = default;
-    TemplateVector3<T>& operator=(TemplateVector3<T> const& /* v */) = default;
-
-    /**
-     * Construct Vector3 from TemplatePoint.
-     */
-    explicit TemplateVector3(TemplatePoint<T,3> const& p) :
-        TemplatePoint<T>(p)
-    {}
-
-    /** Constructs the vector \f$v=(b-a)\f$ from the given points,
-     * which starts in point \f$a\f$ and ends in point \f$b\f$
-     */
-    TemplateVector3(const MathLib::TemplatePoint<T> &a, const MathLib::TemplatePoint<T> &b) :
-        MathLib::TemplatePoint<T>()
-    {
-        this->_x[0] = b[0] - a[0];
-        this->_x[1] = b[1] - a[1];
-        this->_x[2] = b[2] - a[2];
-    }
-
-    // vector arithmetic
-    TemplateVector3 operator+(TemplateVector3 const& v) const
-    {
-        return TemplateVector3(this->_x[0]+v[0], this->_x[1]+v[1], this->_x[2]+v[2]);
-    }
-
-    TemplateVector3 operator-(TemplateVector3 const& v) const
-    {
-        return TemplateVector3(this->_x[0]-v[0], this->_x[1]-v[1], this->_x[2]-v[2]);
-    }
-
-    TemplateVector3& operator+=(TemplateVector3 const& v)
-    {
-        for (std::size_t i(0); i < 3; i++)
-        {
-            this->_x[i] += v[i];
-        }
-        return *this;
-    }
-
-    TemplateVector3& operator-=(const TemplateVector3 & pV)
-    {
-        for (std::size_t i(0); i < 3; i++)
-        {
-            this->_x[i] -= pV[i];
-        }
-        return *this;
-    }
-
-    TemplateVector3& operator*=(double s)
-    {
-        for (std::size_t i(0); i < 3; i++)
-        {
-            this->_x[i] *= s;
-        }
-        return *this;
-    }
-
-    /**
-     * After applying the normalize operator to the vector its length is 1.0.
-     */
-    void normalize()
-    {
-        const double s(1/getLength());
-        for (std::size_t i(0); i < 3; i++)
-        {
-            this->_x[i] *= s;
-        }
-    }
-
-    /// Returns a normalized version of this vector
-    TemplateVector3<double> getNormalizedVector() const
-    {
-        if (getSqrLength() == 0)
-        {
-            return TemplateVector3<double>(0, 0, 0);
-        }
-        TemplateVector3<double> norm_vec (this->_x[0], this->_x[1], this->_x[2]);
-        norm_vec.normalize();
-        return norm_vec;
-    }
-
-    /// Returns the squared length
-    double getSqrLength() const
-    {
-        return this->_x[0]*this->_x[0] + this->_x[1]*this->_x[1] + this->_x[2]*this->_x[2];
-    }
-
-    /// Returns the length
-    double getLength() const { return sqrt(getSqrLength()); }
-
-    /** scalarProduct, implementation of scalar product,
-     * sometimes called dot or inner product.
-     */
-    template <typename T1>
-    friend T1 scalarProduct(TemplateVector3<T1> const& v, TemplateVector3<T1> const& w);
-
-    /** crossProduct: implementation of cross product,
-     * sometimes called outer product.
-     */
-    template <typename T1>
-    friend TemplateVector3<T1> crossProduct(
-        TemplateVector3<T1> const& v,
-        TemplateVector3<T1> const& w);
-
-    /**  multiplication with a scalar s */
-    template <typename T1>
-    friend     TemplateVector3<T1> operator*(
-        TemplateVector3<T1> const& v,
-        double s);
-    template <typename T1>
-    friend     TemplateVector3<T1> operator*(
-        double s,
-        TemplateVector3<T1> const& v);
-};
-
-template <typename T>
-T scalarProduct(TemplateVector3<T> const& v, TemplateVector3<T> const& w)
-{
-    return v._x[0] * w._x[0] + v._x[1] * w._x[1] + v._x[2] * w._x[2];
-}
-
-template <typename T1>
-TemplateVector3<T1> crossProduct(
-        TemplateVector3<T1> const& v,
-        TemplateVector3<T1> const& w)
-{
-    return TemplateVector3<T1>(
-            v._x[1] * w._x[2] - v._x[2] * w._x[1],
-            v._x[2] * w._x[0] - v._x[0] * w._x[2],
-            v._x[0] * w._x[1] - v._x[1] * w._x[0]);
-}
-
-template <typename T1> TemplateVector3<T1> operator*(
-        TemplateVector3<T1> const& v,
-        double s)
-{
-    return TemplateVector3<T1>(v[0] * s, v[1] * s, v[2] * s);
-}
-
-template <typename T1> TemplateVector3<T1> operator*(
-        double s,
-        TemplateVector3<T1> const& v)
-{
-    return v * s;
-}
-
-using Vector3 = TemplateVector3<double>;
-}  // namespace MathLib
diff --git a/Tests/MathLib/TestVector3.cpp b/Tests/MathLib/TestVector3.cpp
deleted file mode 100644
index a8a0eaa1b7faa45e4eb82fa54a12216d41db1f6e..0000000000000000000000000000000000000000
--- a/Tests/MathLib/TestVector3.cpp
+++ /dev/null
@@ -1,164 +0,0 @@
-/**
- * @file TestVector3.cpp
- * @date Feb 28, 2014
- *
- * \copyright
- * Copyright (c) 2012-2020, OpenGeoSys Community (http://www.opengeosys.org)
- *            Distributed under a Modified BSD License.
- *              See accompanying file LICENSE.txt or
- *              http://www.opengeosys.org/project/license
- */
-
-#include <array>
-
-#include "gtest/gtest.h"
-
-#include "MathLib/Vector3.h"
-#include "GeoLib/Point.h"
-
-using namespace MathLib;
-
-TEST(MathLib, TestVector3Constructor)
-{
-    // *** test default constructor
-    Vector3 u;
-    // test coordinates of default constructed vec
-    ASSERT_NEAR(0.0, u[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(0.0, u[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(0.0, u[2], std::numeric_limits<double>::epsilon());
-
-    // *** test constructor taking 3 double values
-    Vector3 v(1.0, 3.0, 5.0);
-    ASSERT_NEAR(1.0, v[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(3.0, v[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(5.0, v[2], std::numeric_limits<double>::epsilon());
-
-    // *** test copy constructor
-    Vector3 v_copy(v);
-    // test equality of coordinates
-    ASSERT_NEAR(v[0], v_copy[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(v[1], v_copy[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(v[2], v_copy[2], std::numeric_limits<double>::epsilon());
-
-    // *** test constructor taking TemplatePoint
-    std::array<double,3> ap = {{0, 1, 2}};
-    TemplatePoint<double> p(ap);
-    Vector3 vp(p);
-    ASSERT_NEAR(0.0, vp[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(1.0, vp[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(2.0, vp[2], std::numeric_limits<double>::epsilon());
-
-    // *** test constructing Vector from two TemplatePoints
-    std::array<double,3> aa = {{1, 2, 3}}; // necessary for old compilers
-    std::array<double,3> ab = {{6, 5, 4}}; // necessary for old compilers
-    TemplatePoint<double,3> a(aa);
-    TemplatePoint<double,3> b(ab);
-    Vector3 w(a,b);
-    // test coordinates of constructed Vector3 w = (b-a)
-    ASSERT_NEAR(5.0, w[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(3.0, w[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(1.0, w[2], std::numeric_limits<double>::epsilon());
-}
-
-TEST(MathLib, TestVector3Operators)
-{
-    Vector3 v;
-    // access operator
-    v[0] = 1.0;
-    v[1] = 3.0;
-    v[2] = 5.0;
-    ASSERT_NEAR(1.0, v[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(3.0, v[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(5.0, v[2], std::numeric_limits<double>::epsilon());
-
-    Vector3 w(5.0, 3.0, 1.0);
-    // operator+
-    Vector3 res(v+w);
-    ASSERT_NEAR(6.0, res[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(6.0, res[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(6.0, res[2], std::numeric_limits<double>::epsilon());
-
-    // operator-
-    res = v-w;
-    ASSERT_NEAR(-4.0, res[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR( 0.0, res[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR( 4.0, res[2], std::numeric_limits<double>::epsilon());
-
-    // test operator*=
-    v *= 2.0;
-    ASSERT_NEAR(2.0, v[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(6.0, v[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(10.0, v[2], std::numeric_limits<double>::epsilon());
-
-    // test operator+=
-    v += w;
-    ASSERT_NEAR(7.0, v[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(9.0, v[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(11.0, v[2], std::numeric_limits<double>::epsilon());
-
-    // test operator-=
-    v -= w;
-    ASSERT_NEAR(2.0, v[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(6.0, v[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(10.0, v[2], std::numeric_limits<double>::epsilon());
-}
-
-TEST(MathLib, TestVector3Multiplications)
-{
-    // test scalar product
-    Vector3 v(1.0, 3.0, 5.0);
-    Vector3 w(3.0, -2.0, 1.0);
-
-    ASSERT_NEAR(2.0, scalarProduct(v,w), std::numeric_limits<double>::epsilon());
-
-    // test cross product
-    Vector3 e1(1.0, 0.0, 0.0);
-    Vector3 e2(0.0, 1.0, 0.0);
-    Vector3 e3(0.0, 0.0, 1.0);
-
-    Vector3 res_e1e2(crossProduct(e1, e2)); // should be e3
-    ASSERT_NEAR(e3[0], res_e1e2[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(e3[1], res_e1e2[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(e3[2], res_e1e2[2], std::numeric_limits<double>::epsilon());
-
-    Vector3 res_e2e3(crossProduct(e2, e3)); // should be e1
-    ASSERT_NEAR(e1[0], res_e2e3[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(e1[1], res_e2e3[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(e1[2], res_e2e3[2], std::numeric_limits<double>::epsilon());
-
-    Vector3 res_e3e1(crossProduct(e3, e1)); // should be e2
-    ASSERT_NEAR(e2[0], res_e3e1[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(e2[1], res_e3e1[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(e2[2], res_e3e1[2], std::numeric_limits<double>::epsilon());
-
-    Vector3 res_e2e1(crossProduct(e2, e1)); // should be -e3
-    ASSERT_NEAR(-e3[0], res_e2e1[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(-e3[1], res_e2e1[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(-e3[2], res_e2e1[2], std::numeric_limits<double>::epsilon());
-
-    Vector3 res_e3e2(crossProduct(e3, e2)); // should be -e1
-    ASSERT_NEAR(-e1[0], res_e3e2[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(-e1[1], res_e3e2[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(-e1[2], res_e3e2[2], std::numeric_limits<double>::epsilon());
-
-    Vector3 res_e1e3(crossProduct(e1, e3)); // should be -e2
-    ASSERT_NEAR(-e2[0], res_e1e3[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(-e2[1], res_e1e3[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(-e2[2], res_e1e3[2], std::numeric_limits<double>::epsilon());
-
-    // test multplication with scalar
-    v = -1.0 * v;
-    ASSERT_NEAR(-1.0, v[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(-3.0, v[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(-5.0, v[2], std::numeric_limits<double>::epsilon());
-    v = v * -1.0;
-    ASSERT_NEAR(1.0, v[0], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(3.0, v[1], std::numeric_limits<double>::epsilon());
-    ASSERT_NEAR(5.0, v[2], std::numeric_limits<double>::epsilon());
-
-    // test normalisation
-    v.normalize();
-    ASSERT_NEAR(1.0, v.getLength(), std::numeric_limits<double>::epsilon());
-
-}
-