diff --git a/GeoLib/BoundingSphere.cpp b/GeoLib/BoundingSphere.cpp
index 9f68ecd41739c585071e36c015a25ff36d255b2b..3818624019235b0de755c7f05738f73e22387a27 100644
--- a/GeoLib/BoundingSphere.cpp
+++ b/GeoLib/BoundingSphere.cpp
@@ -137,14 +137,14 @@ BoundingSphere::BoundingSphere(const std::vector<GeoLib::Point*> &points)
 	for(unsigned int i = 0; i < n_points; i++)
 		sphere_points[i] = points[i];
 
-	const BoundingSphere bounding_sphere = recurseCalculation(sphere_points, n_points, 0);
+	const BoundingSphere bounding_sphere = recurseCalculation(points, 0, points.size(), 0);
 	delete[] sphere_points;
 	
 	this->_center = bounding_sphere.getCenter();
 	this->_radius = bounding_sphere.getRadius();
 }
 
-BoundingSphere BoundingSphere::recurseCalculation(GeoLib::Point* sphere_points[], std::size_t n_points, std::size_t n_boundary_points)
+BoundingSphere BoundingSphere::recurseCalculation(std::vector<GeoLib::Point*> sphere_points, std::size_t current_index, std::size_t n_points, std::size_t n_boundary_points)
 {
 	BoundingSphere sphere;
 	switch(n_boundary_points)
@@ -153,30 +153,29 @@ BoundingSphere BoundingSphere::recurseCalculation(GeoLib::Point* sphere_points[]
 		sphere = BoundingSphere();
 		break;
 	case 1:
-		sphere = BoundingSphere(*sphere_points[-1]);
+		sphere = BoundingSphere(*sphere_points[current_index-1]);
 		break;
 	case 2:
-		sphere = BoundingSphere(*sphere_points[-1], *sphere_points[-2]);
+		sphere = BoundingSphere(*sphere_points[current_index-1], *sphere_points[current_index-2]);
 		break;
 	case 3:
-		sphere = BoundingSphere(*sphere_points[-1], *sphere_points[-2], *sphere_points[-3]);
+		sphere = BoundingSphere(*sphere_points[current_index-1], *sphere_points[current_index-2], *sphere_points[current_index-3]);
 		break;
 	case 4:
-		sphere = BoundingSphere(*sphere_points[-1], *sphere_points[-2], *sphere_points[-3], *sphere_points[-4]);
+		sphere = BoundingSphere(*sphere_points[current_index-1], *sphere_points[current_index-2], *sphere_points[current_index-3], *sphere_points[current_index-4]);
 		return sphere;
 	}
 
-	for(std::size_t i=0; i<n_points; ++i)
+	for(std::size_t i=current_index; i<n_points; ++i)
 	{
+        // current point is located outside of sphere
 		if(sphere.sqrPointDist(*sphere_points[i]) > 0)
 		{
-			for(unsigned int j = i; j > 0; --j)
-			{
-				GeoLib::Point* tmp = sphere_points[j];
-				sphere_points[j] = sphere_points[j - 1];
-				sphere_points[j - 1] = tmp;
-			}        
-    		sphere = recurseCalculation(sphere_points+1, i, n_boundary_points+1);
+			GeoLib::Point* tmp = sphere_points[i];
+            std::copy(sphere_points.begin(), sphere_points.begin() + i, sphere_points.begin() + 1);
+            sphere_points[0] = tmp;
+
+    		sphere = recurseCalculation(sphere_points, current_index+1, i, n_boundary_points+1);
 		}
 	}
 	return sphere;
diff --git a/GeoLib/BoundingSphere.h b/GeoLib/BoundingSphere.h
index 7fdb500c905aad473bbd56ef200156952ed4ed5d..711986b8a205e46dbb55220064fdd1b8faaf32fe 100644
--- a/GeoLib/BoundingSphere.h
+++ b/GeoLib/BoundingSphere.h
@@ -63,7 +63,7 @@ private:
 	 * Algorithm based on Bernd Gärtner: Fast and Robust Smallest Enclosing Balls. ESA99, pages 325-338, 1999.
 	 * Code based on "Smallest Enclosing Spheres" implementation by Nicolas Capens on flipcode's Developer Toolbox (www.flipcode.com)
 	 */
-	static BoundingSphere recurseCalculation(GeoLib::Point* sphere_points[], std::size_t n_points, std::size_t n_boundary_points);
+	static BoundingSphere recurseCalculation(std::vector<GeoLib::Point*> sphere_points, std::size_t current_index, std::size_t n_points, std::size_t n_boundary_points);
 
 	double _radius;
 	MathLib::Vector3 _center;