diff --git a/main/pbx.c b/main/pbx.c
index 63385f91fbaf8e081ecf1fc3208859a8295d0c57..7cd420adb1bc00be0eba6b005cfac2e4d14201e4 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -5794,7 +5794,8 @@ static void manager_dpsendack(struct mansession *s, const struct message *m)
 static int manager_show_dialplan_helper(struct mansession *s, const struct message *m,
 					const char *actionidtext, const char *context,
 					const char *exten, struct dialplan_counters *dpc,
-					const struct ast_include *rinclude)
+					const struct ast_include *rinclude,
+					int includecount, const char *includes[])
 {
 	struct ast_context *c;
 	int res = 0, old_total_exten = dpc->total_exten;
@@ -5876,7 +5877,24 @@ static int manager_show_dialplan_helper(struct mansession *s, const struct messa
 
 			if (exten) {
 				/* Check all includes for the requested extension */
-				manager_show_dialplan_helper(s, m, actionidtext, ast_get_include_name(i), exten, dpc, i);
+				if (includecount >= AST_PBX_MAX_STACK) {
+					ast_log(LOG_WARNING, "Maximum include depth exceeded!\n");
+				} else {
+					int dupe = 0;
+					int x;
+					for (x = 0; x < includecount; x++) {
+						if (!strcasecmp(includes[x], ast_get_include_name(i))) {
+							dupe++;
+							break;
+						}
+					}
+					if (!dupe) {
+						includes[includecount] = ast_get_include_name(i);
+						manager_show_dialplan_helper(s, m, actionidtext, ast_get_include_name(i), exten, dpc, i, includecount + 1, includes);
+					} else {
+						ast_log(LOG_WARNING, "Avoiding circular include of %s within %s\n", ast_get_include_name(i), context);
+					}
+				}
 			} else {
 				if (!dpc->total_items++)
 					manager_dpsendack(s, m);
@@ -5932,6 +5950,7 @@ static int manager_show_dialplan(struct mansession *s, const struct message *m)
 {
 	const char *exten, *context;
 	const char *id = astman_get_header(m, "ActionID");
+	const char *incstack[AST_PBX_MAX_STACK];
 	char idtext[256];
 
 	/* Variables used for different counters */
@@ -5947,7 +5966,7 @@ static int manager_show_dialplan(struct mansession *s, const struct message *m)
 	exten = astman_get_header(m, "Extension");
 	context = astman_get_header(m, "Context");
 
-	manager_show_dialplan_helper(s, m, idtext, context, exten, &counters, NULL);
+	manager_show_dialplan_helper(s, m, idtext, context, exten, &counters, NULL, 0, incstack);
 
 	if (!ast_strlen_zero(context) && !counters.context_existence) {
 		char errorbuf[BUFSIZ];