diff --git a/source/simple/geom/algorithm.hpp b/source/simple/geom/algorithm.hpp
index 68fc5788bdffbebdc719b7be01b9833528279f53..3821b5a06d6df8387104d4b16ccfc4e9b8c7d72c 100644
--- a/source/simple/geom/algorithm.hpp
+++ b/source/simple/geom/algorithm.hpp
@@ -4,7 +4,8 @@
 
 #include <functional>
 
-#include "simple/support/algorithm.hpp"
+#include "simple/support/function_utils.hpp"
+#include "simple/support/algorithm/utils.hpp"
 
 namespace simple::geom
 {
@@ -20,7 +21,7 @@ namespace simple::geom
 	)
 	{
 		if constexpr (LoopDimesntions == 0)
-			std::invoke(std::forward<Function>(callback),index);
+			support::invoke(std::forward<Function>(callback),index);
 		else
 		{
 			constexpr size_t I = LoopDimesntions-1;
@@ -33,7 +34,7 @@ namespace simple::geom
 			{
 				loop_on<Coordinate,Dimensions,Order,Function,I>
 					(index, lower, upper, step,
-					 std::forward<Function>(callback));
+					std::forward<Function>(callback));
 			}
 		}
 	};
@@ -49,7 +50,7 @@ namespace simple::geom
 	{
 		vector<Coordinate, Dimensions, Order> index{};
 		loop_on(index, lower, upper, step,
-			 std::forward<Function>(callback));
+			std::forward<Function>(callback));
 	}
 
 	template <typename Coordinate, size_t Dimensions, typename Order, typename Function>
@@ -62,7 +63,7 @@ namespace simple::geom
 		using vector = vector<Coordinate, Dimensions, Order>;
 		vector index{};
 		loop_on(index, vector::zero(),  upper, vector::one(),
-			 std::forward<Function>(callback));
+			std::forward<Function>(callback));
 	}
 
 	template <typename Coordinate, size_t Dimensions, typename Order, typename Function, size_t LoopDimesntions>
@@ -75,7 +76,7 @@ namespace simple::geom
 	)
 	{
 		loop_on(index, bounds.lower(), bounds.upper(), step,
-			 std::forward<Function>(callback));
+			std::forward<Function>(callback));
 	}
 
 	template <typename Coordinate, size_t Dimensions, typename Order, typename Function>
@@ -88,7 +89,20 @@ namespace simple::geom
 	{
 		vector<Coordinate, Dimensions, Order> index{};
 		loop_on(index, bounds, step,
-			 std::forward<Function>(callback));
+			std::forward<Function>(callback));
+	}
+
+	template <typename Coordinate, size_t Dimensions, typename Order, typename Function>
+	constexpr void loop
+	(
+		const support::range<vector<Coordinate, Dimensions, Order>>& bounds,
+		Function&& callback
+	)
+	{
+		using vector = vector<Coordinate, Dimensions, Order>;
+		vector index{};
+		loop_on(index, bounds, vector::one(),
+			std::forward<Function>(callback));
 	}
 
 	template <typename Coordinate,
@@ -128,10 +142,9 @@ namespace simple::geom
 		Result result{};
 		loop(Vector::meta::template dimensions<>, [&](auto i)
 		{
-			// std::invoke is not constexpr -_-
-			result[i] = std::apply(
+			result[i] = support::invoke(
 				std::forward<Transform>(transform),
-				std::forward_as_tuple(vector[i])
+				vector[i]
 			);
 		});
 		return result;
diff --git a/source/simple/geom/vector.hpp b/source/simple/geom/vector.hpp
index 16caefcf236f2caffda9180d2d0690963b8d297c..26517c0927bd110956fc0477cff73506e3696d5c 100644
--- a/source/simple/geom/vector.hpp
+++ b/source/simple/geom/vector.hpp
@@ -13,6 +13,7 @@
 #include "simple/support/array.hpp"
 #include "simple/support/array_utils.hpp"
 #include "simple/support/array_operators.hpp"
+#include "simple/support/function_utils.hpp"
 
 namespace simple::geom
 {
@@ -340,10 +341,9 @@ namespace simple::geom
 			vector<AnotherCoord, Dimensions> another{};
 			for(size_t i = 0; i < Dimensions; ++i)
 			{
-				// std::invoke is not constexpr -_-
-				another[i] = std::apply(
+				another[i] = support::invoke(
 					std::forward<Function>(transform),
-					std::forward_as_tuple((*this)[i])
+					(*this)[i]
 				);
 			}
 			return another;