diff --git a/include/asterisk/vector.h b/include/asterisk/vector.h
index b4a8a2c113df55a6ca2a91d14b5f1ee602e69998..c74f0a89b5866c8a37a525c29801ae65ab28e9db 100644
--- a/include/asterisk/vector.h
+++ b/include/asterisk/vector.h
@@ -367,11 +367,13 @@
 	int count = 0;							\
 	size_t idx;							\
 	typeof(value) __value = (value);				\
-	for (idx = 0; idx < (vec)->current; ++idx) {			\
+	for (idx = 0; idx < (vec)->current; ) {				\
 		if (cmp((vec)->elems[idx], __value)) {			\
 			cleanup((vec)->elems[idx]);			\
 			AST_VECTOR_REMOVE_UNORDERED((vec), idx);	\
 			++count;					\
+		} else {						\
+			++idx;						\
 		}							\
 	}								\
 	count;								\
@@ -417,14 +419,16 @@
 	int count = 0;							\
 	size_t idx;							\
 	typeof(value) __value = (value);				\
-	for (idx = 0; idx < (vec)->current; ++idx) {			\
+	for (idx = 0; idx < (vec)->current; ) {				\
 		if (cmp((vec)->elems[idx], __value)) {			\
 			cleanup((vec)->elems[idx]);			\
-			AST_VECTOR_REMOVE_ORDERED((vec), idx);	\
+			AST_VECTOR_REMOVE_ORDERED((vec), idx);		\
 			++count;					\
+		} else {						\
+			++idx;						\
 		}							\
 	}								\
-	oount;								\
+	count;								\
 })
 
 /*!
@@ -445,7 +449,7 @@
 	for (idx = 0; idx < (vec)->current; ++idx) {			\
 		if (cmp((vec)->elems[idx], __value)) {			\
 			cleanup((vec)->elems[idx]);			\
-			AST_VECTOR_REMOVE_ORDERED((vec), idx);	\
+			AST_VECTOR_REMOVE_ORDERED((vec), idx);		\
 			res = 0;					\
 			break;						\
 		}							\