diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua
index 0b608126e52e4f4df332d26b3ecfb019285796d2..e1dc289657c4d589173e858d147e2593fec11612 100644
--- a/builtin/common/misc_helpers.lua
+++ b/builtin/common/misc_helpers.lua
@@ -212,6 +212,17 @@ function math.hypot(x, y)
 	return x * math.sqrt(1 + t * t)
 end
 
+--------------------------------------------------------------------------------
+function math.sign(x, tolerance)
+	tolerance = tolerance or 0
+	if x > tolerance then
+		return 1
+	elseif x < -tolerance then
+		return -1
+	end
+	return 0
+end
+
 --------------------------------------------------------------------------------
 function get_last_folder(text,count)
 	local parts = text:split(DIR_DELIM)
diff --git a/builtin/common/vector.lua b/builtin/common/vector.lua
index 88ccfe6da4fead4c298ba22acd392c8e46796a1c..e9ed3aab3daf3c33391fde12bb1397ded6c7f066 100644
--- a/builtin/common/vector.lua
+++ b/builtin/common/vector.lua
@@ -39,6 +39,14 @@ function vector.round(v)
 	}
 end
 
+function vector.apply(v, func)
+	return {
+		x = func(v.x),
+		y = func(v.y),
+		z = func(v.z)
+	}
+end
+
 function vector.distance(a, b)
 	local x = a.x - b.x
 	local y = a.y - b.y
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index e2ef3faab9cdfd6727537b3ca05522c0b043dd04..6c33d92d4677aa25f51657bf1e8b97c3b58b2cbb 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -1280,6 +1280,7 @@ vector.distance(p1, p2) -> number
 vector.length(v) -> number
 vector.normalize(v) -> vector
 vector.round(v) -> vector
+vector.apply(v, func) -> vector
 vector.equals(v1, v2) -> bool
 For the following functions x can be either a vector or a number.
 vector.add(v, x) -> vector
@@ -1296,6 +1297,9 @@ dump(obj, dumped={})
 math.hypot(x, y)
 ^ Get the hypotenuse of a triangle with legs x and y.
   Useful for distance calculation.
+math.sign(x, tolerance)
+^ Get the sign of a number
+  Optional: Also returns 0 when the absolute value is within the tolerance (default 0)
 string:split(separator)
 ^ e.g. string:split("a,b", ",") == {"a","b"}
 string:trim()