diff --git a/doc/appdocsxml.dtd b/doc/appdocsxml.dtd
index 8ac6ac587c99db3dbad7925ae6939ab3e789bbcc..ba0ef2726cda30c33787f88806a6382a762979a6 100644
--- a/doc/appdocsxml.dtd
+++ b/doc/appdocsxml.dtd
@@ -41,7 +41,7 @@
   <!ATTLIST option hasparams CDATA "">
 
   <!ELEMENT enumlist (enum+)>
-  <!ELEMENT enum (para|note|warning|parameter)*>
+  <!ELEMENT enum (para|note|warning|parameter|enumlist)*>
   <!ATTLIST enum name CDATA "">
 
   <!ELEMENT argument (para|note|warning|variablelist|argument)*>
diff --git a/main/xmldoc.c b/main/xmldoc.c
index 2ddb201796d3179ab61533210905980fbb936afe..29d951ac56c41b66ca1f73a9ca6b4141162c9549 100644
--- a/main/xmldoc.c
+++ b/main/xmldoc.c
@@ -60,6 +60,7 @@ struct documentation_tree {
 };
 
 static char *xmldoc_get_syntax_cmd(struct ast_xml_node *fixnode, const char *name, int printname);
+static int xmldoc_parse_enumlist(struct ast_xml_node *fixnode, const char *tabs, struct ast_str **buffer);
 
 /*!
  * \brief Container of documentation trees
@@ -1400,6 +1401,9 @@ static int xmldoc_parse_enum(struct ast_xml_node *fixnode, const char *tabs, str
 {
 	struct ast_xml_node *node = fixnode;
 	int ret = 0;
+	char *optiontabs;
+
+	ast_asprintf(&optiontabs, "%s    ", tabs);
 
 	for (node = ast_xml_node_get_children(node); node; node = ast_xml_node_get_next(node)) {
 		if ((xmldoc_parse_para(node, (ret ? tabs : " - "), "\n", buffer))) {
@@ -1407,7 +1411,12 @@ static int xmldoc_parse_enum(struct ast_xml_node *fixnode, const char *tabs, str
 		} else if ((xmldoc_parse_specialtags(node, (ret ? tabs : " - "), "\n", buffer))) {
 			ret = 1;
 		}
+
+		xmldoc_parse_enumlist(node, optiontabs, buffer);
 	}
+
+	ast_free(optiontabs);
+
 	return ret;
 }