diff --git a/pbx.c b/pbx.c
index 66cbe1e5ac8c70393a211be2de21810d4b8ef31b..6ab28ba6dadeedd60ea3b3f3f41ddd5356178d81 100644
--- a/pbx.c
+++ b/pbx.c
@@ -3092,33 +3092,9 @@ static int handle_show_applications(int fd, int argc, char *argv[])
 
 static char *complete_show_applications(const char *line, const char *word, int pos, int state)
 {
-	int wordlen = strlen(word);
+	static char* choices[] = { "like", "describing", NULL };
 
-	if (pos == 2) {
-		if (ast_strlen_zero(word)) {
-			switch (state) {
-			case 0:
-				return strdup("like");
-			case 1:
-				return strdup("describing");
-			default:
-				return NULL;
-			}
-		} else if (! strncasecmp(word, "like", wordlen)) {
-			if (state == 0) {
-				return strdup("like");
-			} else {
-				return NULL;
-			}
-		} else if (! strncasecmp(word, "describing", wordlen)) {
-			if (state == 0) {
-				return strdup("describing");
-			} else {
-				return NULL;
-			}
-		}
-	}
-	return NULL;
+	return (pos != 2) ? NULL : ast_cli_complete(word, choices, state);
 }
 
 /*
@@ -3144,16 +3120,11 @@ static char *complete_show_dialplan_context(const char *line, const char *word,
 
 	wordlen = strlen(word);
 
-	/* ... walk through all contexts ... */
+	/* walk through all contexts and return the n-th match */
 	while ( (c = ast_walk_contexts(c)) ) {
-		/* ... word matches context name? yes? ... */
-		if (!strncasecmp(word, ast_get_context_name(c), wordlen)) {
-			/* ... for serve? ... */
-			if (++which > state) {
-				/* ... yes, serve this context name ... */
-				ret = strdup(ast_get_context_name(c));
-				break;
-			}
+		if (!strncasecmp(word, ast_get_context_name(c), wordlen) && ++which > state) {
+			ret = ast_strdup(ast_get_context_name(c));
+			break;
 		}
 	}