diff --git a/Nasal/std/algorithm.nas b/Nasal/std/algorithm.nas
index 990a1b092..4c6dbc5d7 100644
--- a/Nasal/std/algorithm.nas
+++ b/Nasal/std/algorithm.nas
@@ -7,14 +7,22 @@ var all = func(obj, key=nil) {
 		return 0;
 	}
 	var res = 1;
-	foreach (var o; obj) {
-		if (key) {
-			res &= key(o);
-		} else {
-			res &= o;
+	if (key) {
+		if (!isfunc(key)) {
+			die("std.all got a non-callable 'key' argument");
 		}
-		if (res == 0) {
-			break;
+		foreach (var o; obj) {
+			res &= key(o);
+			if (res == 0) {
+				break;
+			}
+		}
+	} else {
+		foreach(var o; obj) {
+			res &= o;
+			if (res == 0) {
+				break;
+			}
 		}
 	}
 	return res;
@@ -22,37 +30,55 @@ var all = func(obj, key=nil) {
 
 var any = func(obj, key=nil) {
 	var res = 0;
-	foreach (var o; obj) {
-		if (key) {
+	if (key) {
+		if (!isfunc(key)) {
+			die("std.any got a non-callable 'key' argument");
+		}
+		foreach (var o; obj) {
 			res |= key(o);
-		} else {
+			if (res == 1) {
+				break;
+			}
+		}
+	} else {
+		foreach(var o; obj) {
 			res |= o;
-		}
-		if (res == 1) {
-			break;
+			if (res == 1) {
+				break;
+			}
 		}
 	}
 	return res;
 };
 
-var map = func(f, obj) {
+var map = func(function, obj) {
+	if (!isfunc(function)) {
+		die("std.map got a non-callable 'function' argument");
+	}
 	var res = [];
 	foreach (var o; obj) {
-		append(res, f(o));
+		append(res, function(o));
 	}
 	return res;
 };
 
-var filter = func(f, obj) {
+var filter = func(function, obj) {
 	var res = [];
-	foreach (var o; obj) {
-		if (f) {
-			if (f(o)) {
+	if (function) {
+		if (!isfunc(function)) {
+			die("std.filter got a non-callable 'function' argument");
+		}
+		foreach (var o; obj) {
+			if (function(o)) {
+				append(res, o);
+			}
+		}
+	} elsif (o) {
+		foreach (var o; obj) {
+			if (o) {
 				append(res, o);
 			}
-		} elsif (o) {
-			append(res, o);
 		}
 	}
 	return res;
-};
\ No newline at end of file
+};