diff --git a/GeoLib/AABB.h b/GeoLib/AABB.h
index 35e13a548d24c139c0648304fd5899d317d5775b..3275c0f0965f9edc17b4865a6adb4ac46af0b000 100644
--- a/GeoLib/AABB.h
+++ b/GeoLib/AABB.h
@@ -42,10 +42,11 @@ public:
 	 * */
 	AABB(std::vector<PNT_TYPE*> const& pnts, std::vector<std::size_t> const& ids) :
 		_min_pnt(std::numeric_limits<double>::max(), std::numeric_limits<double>::max(), std::numeric_limits<double>::max()),
-		_max_pnt(std::numeric_limits<double>::min(), std::numeric_limits<double>::min(), std::numeric_limits<double>::min())
+		_max_pnt(std::numeric_limits<double>::lowest(), std::numeric_limits<double>::lowest(), std::numeric_limits<double>::lowest())
 	{
 		assert(! ids.empty());
-		for (unsigned i=0; i<ids.size(); ++i) {
+		init(pnts[ids[0]]);
+		for (std::size_t i=1; i<ids.size(); ++i) {
 			update(*(pnts[ids[i]]));
 		}
 	}
@@ -70,7 +71,7 @@ public:
 	template <typename InputIterator>
 	AABB(InputIterator first, InputIterator last) :
 		_min_pnt(std::numeric_limits<double>::max(), std::numeric_limits<double>::max(), std::numeric_limits<double>::max()),
-		_max_pnt(std::numeric_limits<double>::min(), std::numeric_limits<double>::min(), std::numeric_limits<double>::min())
+		_max_pnt(std::numeric_limits<double>::lowest(), std::numeric_limits<double>::lowest(), std::numeric_limits<double>::lowest())
 	{
 		if (! (std::distance(first,last) > 0)) {
 			throw std::invalid_argument("AABB::AABB(InputIterator first, InputIterator last): first == last");
diff --git a/Tests/GeoLib/TestAABB.cpp b/Tests/GeoLib/TestAABB.cpp
index aba72762250f58e0058514b4c7751b9b8e259c9d..f2aedd8268255860a54ee8bd7c1c9e717033c935 100644
--- a/Tests/GeoLib/TestAABB.cpp
+++ b/Tests/GeoLib/TestAABB.cpp
@@ -169,7 +169,7 @@ TEST(GeoLibAABB, RandomNumberOfPointsRandomBox)
 		 pnts.push_back(GeoLib::Point(rand() % box_size_x - half_box_size_x, rand() % box_size_y - half_box_size_y, rand() % box_size_z - half_box_size_z));
 	 }
 
-	 // construct from list points a axis algined bounding box
+	 // construct from list points a axis aligned bounding box
 	 GeoLib::AABB<GeoLib::Point> aabb(pnts.begin(), pnts.end());
 
 	 GeoLib::Point const& min_pnt(aabb.getMinPoint());
@@ -182,3 +182,39 @@ TEST(GeoLibAABB, RandomNumberOfPointsRandomBox)
 	 ASSERT_GE(half_box_size_y, max_pnt[1]) << "coordinate 1 of max_pnt is greater than " << half_box_size_y;
 	 ASSERT_GE(half_box_size_z, max_pnt[2]) << "coordinate 2 of max_pnt is greater than " << half_box_size_z;
 }
+
+TEST(GeoLib, AABBAllPointsWithNegativeCoordinatesI)
+{
+	std::vector<GeoLib::Point*> pnts;
+	pnts.push_back(new GeoLib::Point(-1, -1, -1));
+	pnts.push_back(new GeoLib::Point(-10, -10, -10));
+
+	std::vector<std::size_t> ids;
+	ids.push_back(0);
+	ids.push_back(1);
+	GeoLib::AABB<GeoLib::Point> aabb(pnts, ids);
+
+	GeoLib::Point const& max_pnt(aabb.getMaxPoint());
+
+	ASSERT_NEAR(-1.0, max_pnt[0], std::numeric_limits<double>::epsilon());
+	ASSERT_NEAR(-1.0, max_pnt[1], std::numeric_limits<double>::epsilon());
+	ASSERT_NEAR(-1.0, max_pnt[2], std::numeric_limits<double>::epsilon());
+}
+
+TEST(GeoLib, AABBAllPointsWithNegativeCoordinatesII)
+{
+	std::vector<GeoLib::Point> pnts;
+
+	pnts.push_back(GeoLib::Point(-1, -1, -1));
+	pnts.push_back(GeoLib::Point(-10, -10, -10));
+
+	// construct from points of the vector a axis aligned bounding box
+	GeoLib::AABB<GeoLib::Point> aabb(pnts.begin(), pnts.end());
+
+	GeoLib::Point const& max_pnt(aabb.getMaxPoint());
+
+	ASSERT_NEAR(-1.0, max_pnt[0], std::numeric_limits<double>::epsilon());
+	ASSERT_NEAR(-1.0, max_pnt[1], std::numeric_limits<double>::epsilon());
+	ASSERT_NEAR(-1.0, max_pnt[2], std::numeric_limits<double>::epsilon());
+}
+