diff --git a/main/taskprocessor.c b/main/taskprocessor.c
index cf82efff2d771f770a98af65efabb721d9adf097..91eb7d9930405d917e52fe955532bb246182f053 100644
--- a/main/taskprocessor.c
+++ b/main/taskprocessor.c
@@ -341,26 +341,27 @@ static void *tps_task_free(struct tps_task *task)
 static char *tps_taskprocessor_tab_complete(struct ast_cli_args *a)
 {
 	int tklen;
-	int wordnum = 0;
 	struct ast_taskprocessor *p;
-	char *name = NULL;
 	struct ao2_iterator i;
 
-	if (a->pos != 3)
+	if (a->pos != 3) {
 		return NULL;
+	}
 
 	tklen = strlen(a->word);
 	i = ao2_iterator_init(tps_singletons, 0);
 	while ((p = ao2_iterator_next(&i))) {
-		if (!strncasecmp(a->word, p->name, tklen) && ++wordnum > a->n) {
-			name = ast_strdup(p->name);
-			ast_taskprocessor_unreference(p);
-			break;
+		if (!strncasecmp(a->word, p->name, tklen)) {
+			if (ast_cli_completion_add(ast_strdup(p->name))) {
+				ast_taskprocessor_unreference(p);
+				break;
+			}
 		}
 		ast_taskprocessor_unreference(p);
 	}
 	ao2_iterator_destroy(&i);
-	return name;
+
+	return NULL;
 }
 
 /* ping task handling function */