diff --git a/library/Osmocom_VTY_Functions.ttcn b/library/Osmocom_VTY_Functions.ttcn
index 49f587d..e4a9182 100644
--- a/library/Osmocom_VTY_Functions.ttcn
+++ b/library/Osmocom_VTY_Functions.ttcn
@@ -14,6 +14,7 @@
 	import from Misc_Helpers all;
 	import from TELNETasp_PortType all;
 	import from Osmocom_Types all;
+	import from TCCConversion_Functions all;
 
 	modulepar {
 		charstring mp_prompt_prefix := "OpenBSC";
@@ -226,4 +227,67 @@
 	return "";
 }
 
+/* Return a count of how many times sub_str occurs in str. */
+function f_strstr_count(in charstring str, in charstring sub_str) return integer
+{
+	var integer count := 0;
+	var integer pos := 0;
+
+	while (true) {
+		var integer at := f_strstr(str, sub_str, pos);
+		if (at < 0) {
+			break;
+		}
+		count := count + 1;
+		pos := at + 1;
+	}
+	return count;
+}
+
+private type record of charstring StrList;
+
+/* Perform a 'show talloc-context' to get a count of the given object_strs that are still allocated.
+ * Retry 'attempts' times until the actual talloc object count matches 'expect_count'.
+ * Useful to ensure that no mem leaks remain after running a test. */
+function f_verify_talloc_count(TELNETasp_PT pt, StrList object_strs, integer expect_count := 0,
+			       integer attempts := 5, float wait_time := 3.0)
+{
+	var charstring show_cmd := "show talloc-context application full filter ";
+	for (var integer i := 0; i < lengthof(object_strs); i := i + 1) {
+		var charstring obj_str := object_strs[i];
+		/* spaces confuse the VTY command */
+		obj_str := f_replaceEveryOccurenceOfSubstring(obj_str, " ", ".");
+		/* In the regexp, expect word start and word end to bound the obj name */
+		obj_str := "\\<" & obj_str & "\\>";
+		if (i > 0) {
+			show_cmd := show_cmd & "\\|";
+		}
+		show_cmd := show_cmd & obj_str;
+	}
+
+	while (attempts > 0) {
+		attempts := attempts - 1;
+		var charstring ret := f_vty_transceive_ret(pt, show_cmd);
+
+		var boolean ok := true;
+		for (var integer i := 0; i < lengthof(object_strs); i := i + 1) {
+			var charstring object_str := object_strs[i];
+			var integer count := f_strstr_count(ret, object_str);
+			log("talloc reports ", object_str, " x ", count, ", expecting ", expect_count);
+			if (count != expect_count) {
+				ok := false;
+			}
+		}
+		if (ok) {
+			return;
+		}
+		if (attempts == 0) {
+			break;
+		}
+		log("count mismatch, retrying in ", wait_time);
+		f_sleep(wait_time);
+	}
+	setverdict(fail, "talloc count mismatch");
+}
+
 }
