diff --git a/source/simple/geom/algorithm.h b/source/simple/geom/algorithm.h
index a7a3d5a7c22a7fa576d1d0715a7066cb803865ca..93825b97209e2b8d0c5a50b8e88b1300d87f7f67 100644
--- a/source/simple/geom/algorithm.h
+++ b/source/simple/geom/algorithm.h
@@ -1,6 +1,7 @@
 #ifndef SIMPLE_GEOM_ALGORITHM_H
 #define SIMPLE_GEOM_ALGORITHM_H
 #include "vector.hpp"
+#include "simple/support/range.hpp"
 
 namespace simple::geom
 {
@@ -23,6 +24,23 @@ namespace simple::geom
 		Function&& callback
 	);
 
+	template <typename Coordinate, size_t Dimensions, typename Order, typename Function, size_t LoopDimesntions = Dimensions>
+	constexpr void loop_on
+	(
+		vector<Coordinate, Dimensions, Order>& index,
+		const support::range<vector<Coordinate, Dimensions, Order>>&,
+		const vector<Coordinate, Dimensions, Order>& step,
+		Function&& callback
+	);
+
+	template <typename Coordinate, size_t Dimensions, typename Order, typename Function>
+	constexpr void loop
+	(
+		const support::range<vector<Coordinate, Dimensions, Order>>&,
+		const vector<Coordinate, Dimensions, Order>& step,
+		Function&& callback
+	);
+
 	template <typename Coordinate,
 		size_t Rows, size_t Columns,
 		typename RowOrder, typename ColumnOrder
diff --git a/source/simple/geom/algorithm.hpp b/source/simple/geom/algorithm.hpp
index aedad9cac1bb5cb0bd9f6974f1eb7166ea558348..dea4d7e691d923dd303366b4cfd157d0118a7c3a 100644
--- a/source/simple/geom/algorithm.hpp
+++ b/source/simple/geom/algorithm.hpp
@@ -52,6 +52,32 @@ namespace simple::geom
 			 std::forward<Function>(callback));
 	}
 
+	template <typename Coordinate, size_t Dimensions, typename Order, typename Function, size_t LoopDimesntions = Dimensions>
+	constexpr void loop_on
+	(
+		vector<Coordinate, Dimensions, Order>& index,
+		const support::range<vector<Coordinate, Dimensions, Order>>& bounds,
+		const vector<Coordinate, Dimensions, Order>& step,
+		Function&& callback
+	)
+	{
+		loop_on(index, bounds.lower(), bounds.upper(), step,
+			 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,
+		const vector<Coordinate, Dimensions, Order>& step,
+		Function&& callback
+	)
+	{
+		vector<Coordinate, Dimensions, Order> index{};
+		loop_on(index, bounds, step,
+			 std::forward<Function>(callback));
+	}
+
 	template <typename Coordinate,
 		size_t Rows, size_t Columns,
 		typename RowOrder, typename ColumnOrder