diff --git a/main/astobj2_container.c b/main/astobj2_container.c
index ae647d2ddea569f7039eb6e8b4d188e6c67f0bc3..9bea58f74d9c15c207de127d1b31523e0f191c17 100644
--- a/main/astobj2_container.c
+++ b/main/astobj2_container.c
@@ -935,12 +935,15 @@ void ao2_container_unregister(const char *name)
 }
 
 #if defined(AO2_DEBUG)
-static int ao2_complete_reg_cb(void *obj, void *arg, void *data, int flags)
+static int ao2_complete_reg_cb(void *obj, void *arg, int flags)
 {
-	struct ao2_reg_match *which = data;
+	struct ao2_reg_container *reg = obj;
 
-	/* ao2_reg_sort_cb() has already filtered the search to matching keys */
-	return (which->find_nth < ++which->count) ? (CMP_MATCH | CMP_STOP) : 0;
+	if (ast_cli_completion_add(ast_strdup(reg->name))) {
+		return CMP_STOP;
+	}
+
+	return 0;
 }
 #endif	/* defined(AO2_DEBUG) */
 
@@ -948,9 +951,6 @@ static int ao2_complete_reg_cb(void *obj, void *arg, void *data, int flags)
 static char *complete_container_names(struct ast_cli_args *a)
 {
 	struct ao2_reg_partial_key partial_key;
-	struct ao2_reg_match which;
-	struct ao2_reg_container *reg;
-	char *name;
 
 	if (a->pos != 3) {
 		return NULL;
@@ -958,17 +958,10 @@ static char *complete_container_names(struct ast_cli_args *a)
 
 	partial_key.len = strlen(a->word);
 	partial_key.name = a->word;
-	which.find_nth = a->n;
-	which.count = 0;
-	reg = ao2_t_callback_data(reg_containers, partial_key.len ? OBJ_SEARCH_PARTIAL_KEY : 0,
-		ao2_complete_reg_cb, &partial_key, &which, "Find partial registered container");
-	if (reg) {
-		name = ast_strdup(reg->name);
-		ao2_t_ref(reg, -1, "Done with registered container object.");
-	} else {
-		name = NULL;
-	}
-	return name;
+	ao2_callback(reg_containers, partial_key.len ? OBJ_SEARCH_PARTIAL_KEY : 0,
+		ao2_complete_reg_cb, &partial_key);
+
+	return NULL;
 }
 #endif	/* defined(AO2_DEBUG) */