diff --git a/main/manager.c b/main/manager.c
index 011ae103ef4a7cac3333aa627bc8854dbb26f60a..ba5beb42e8dd8bb7116bc09d0a4e3b421d03a491 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -7149,7 +7149,7 @@ static char *handle_manager_show_events(struct ast_cli_entry *e, int cmd, struct
 
 static char *handle_manager_show_event(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
 {
-	struct ao2_container *events;
+	RAII_VAR(struct ao2_container *, events, NULL, ao2_cleanup);
 	struct ao2_iterator it_events;
 	struct ast_xml_doc_item *item, *temp;
 	int length;
@@ -7184,7 +7184,6 @@ static char *handle_manager_show_event(struct ast_cli_entry *e, int cmd, struct
 			ao2_ref(item, -1);
 		}
 		ao2_iterator_destroy(&it_events);
-		ao2_ref(events, -1);
 		return match;
 	}
 
@@ -7194,7 +7193,6 @@ static char *handle_manager_show_event(struct ast_cli_entry *e, int cmd, struct
 
 	if (!(item = ao2_find(events, a->argv[3], OBJ_KEY))) {
 		ast_cli(a->fd, "Could not find event '%s'\n", a->argv[3]);
-		ao2_ref(events, -1);
 		return CLI_SUCCESS;
 	}
 
@@ -7234,7 +7232,6 @@ static char *handle_manager_show_event(struct ast_cli_entry *e, int cmd, struct
 	}
 
 	ao2_ref(item, -1);
-	ao2_ref(events, -1);
 	return CLI_SUCCESS;
 }
 
diff --git a/main/named_acl.c b/main/named_acl.c
index a70ca87a4879c7ab3aca900566baec11de1ae3ac..074f4c57f276000830926e477cdfc43033ece6fc 100644
--- a/main/named_acl.c
+++ b/main/named_acl.c
@@ -177,7 +177,7 @@ static void destroy_named_acl(void *obj)
  * \retval NULL failure
  *\retval non-NULL successfully allocated named ACL
  */
-void *named_acl_alloc(const char *cat)
+static void *named_acl_alloc(const char *cat)
 {
 	struct named_acl *named_acl;
 
@@ -198,7 +198,7 @@ void *named_acl_alloc(const char *cat)
  * \param cat name of the ACL wanted to be found
  * \retval pointer to the named ACL if available. Null if not found.
  */
-void *named_acl_find(struct ao2_container *container, const char *cat)
+static void *named_acl_find(struct ao2_container *container, const char *cat)
 {
 	struct named_acl tmp;
 	ast_copy_string(tmp.name, cat, sizeof(tmp.name));
@@ -309,7 +309,8 @@ static struct named_acl *named_acl_find_realtime(const char *name)
 	return acl;
 }
 
-struct ast_ha *ast_named_acl_find(const char *name, int *is_realtime, int *is_undefined) {
+struct ast_ha *ast_named_acl_find(const char *name, int *is_realtime, int *is_undefined)
+{
 	struct ast_ha *ha = NULL;
 
 	RAII_VAR(struct named_acl_config *, cfg, ao2_global_obj_ref(globals), ao2_cleanup);
@@ -503,6 +504,13 @@ static void cli_display_named_acl_list(int fd)
 /* \brief ACL command show <name> */
 static char *handle_show_named_acl_cmd(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
 {
+	RAII_VAR(struct named_acl_config *, cfg, ao2_global_obj_ref(globals), ao2_cleanup);
+	int length;
+	int which;
+	struct ao2_iterator i;
+	struct named_acl *named_acl;
+	char *match = NULL;
+
 	switch (cmd) {
 	case CLI_INIT:
 		e->command = "acl show";
@@ -511,7 +519,23 @@ static char *handle_show_named_acl_cmd(struct ast_cli_entry *e, int cmd, struct
 			"   Shows a list of named ACLs or lists all entries in a given named ACL.\n";
 		return NULL;
 	case CLI_GENERATE:
-		return NULL;
+		if (!cfg) {
+			return NULL;
+		}
+		length = strlen(a->word);
+		which = 0;
+		i = ao2_iterator_init(cfg->named_acl_list, 0);
+		while ((named_acl = ao2_iterator_next(&i))) {
+			if (!strncasecmp(a->word, named_acl->name, length) && ++which > a->n) {
+				match = ast_strdup(named_acl->name);
+				ao2_ref(named_acl, -1);
+				break;
+			}
+			ao2_ref(named_acl, -1);
+		}
+		ao2_iterator_destroy(&i);
+		return match;
+
 	}
 
 	if (a->argc == 2) {