diff --git a/main/channel.c b/main/channel.c
index 2779aa8279b7d77351f8826f6ea3b840b751f634..304fae18ae4f0614d484a71fe6bad1fb916fb61d 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -304,25 +304,23 @@ static char *handle_cli_core_show_channeltypes(struct ast_cli_entry *e, int cmd,
 static char *complete_channeltypes(struct ast_cli_args *a)
 {
 	struct chanlist *cl;
-	int which = 0;
 	int wordlen;
-	char *ret = NULL;
 
-	if (a->pos != 3)
+	if (a->pos != 3) {
 		return NULL;
+	}
 
 	wordlen = strlen(a->word);
 
 	AST_RWLIST_RDLOCK(&backends);
 	AST_RWLIST_TRAVERSE(&backends, cl, list) {
-		if (!strncasecmp(a->word, cl->tech->type, wordlen) && ++which > a->n) {
-			ret = ast_strdup(cl->tech->type);
-			break;
+		if (!strncasecmp(a->word, cl->tech->type, wordlen)) {
+			ast_cli_completion_add(ast_strdup(cl->tech->type));
 		}
 	}
 	AST_RWLIST_UNLOCK(&backends);
 
-	return ret;
+	return NULL;
 }
 
 /*! \brief Show details about a channel driver - CLI command */