diff --git a/configs/samples/manager.conf.sample b/configs/samples/manager.conf.sample
index 405e0d32c55044416c1aac5b88944a6796f4944d..342f290ea7c25fb9f5a57c15b8c5c41e28741d26 100644
--- a/configs/samples/manager.conf.sample
+++ b/configs/samples/manager.conf.sample
@@ -79,7 +79,18 @@ bindaddr = 0.0.0.0
 ;    on a action=waitevent request (actually its httptimeout-10)
 ; c) httptimeout is also the amount of time the webserver keeps
 ;    a http session alive after completing a successful action
+;
+; disabledevents specifies AMI events which should be completely globally disabled.
+; These events will not be available to any AMI listeners. Use this to disable
+; frequent events which are not desired for any listeners. Default
+; is no events are globally disabled. Event names are case-sensitive.
+; Events disabled in stasis.conf do not also need to be disabled here.
+; If you don't want to completely disable an AMI event, also consider the
+; filter option available on a per-manager user basis to block unwanted
+; events from being received in a stream (as opposed to this option which
+; would prevent specified events from being generated at all).
 
+;disabledevents = Newexten,Varset
 
 ;[mark]
 ;secret = mysecret
diff --git a/doc/CHANGES-staging/manager_disable.txt b/doc/CHANGES-staging/manager_disable.txt
new file mode 100644
index 0000000000000000000000000000000000000000..762ceca19e4602b8751f4cb164cbd63981301081
--- /dev/null
+++ b/doc/CHANGES-staging/manager_disable.txt
@@ -0,0 +1,4 @@
+Subject: ami
+
+AMI events can now be globally disabled using
+the disabledevents [general] setting.
diff --git a/main/manager.c b/main/manager.c
index 588f1446f6214edc3a33bbe41151617d5e652d40..76a6611a241fd2fb999e88cb86a72fb34d317c08 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -1479,6 +1479,7 @@ static int manager_debug = 0;	/*!< enable some debugging code in the manager */
 static int authtimeout;
 static int authlimit;
 static char *manager_channelvars;
+static char *manager_disabledevents;
 
 #define DEFAULT_REALM		"asterisk"
 static char global_realm[MAXHOSTNAMELEN];	/*!< Default realm */
@@ -7232,6 +7233,15 @@ int __ast_manager_event_multichan(int category, const char *event, int chancount
 	va_list ap;
 	int res;
 
+	if (!ast_strlen_zero(manager_disabledevents)) {
+		if (ast_in_delimited_string(event, manager_disabledevents, ',')) {
+			ast_debug(3, "AMI Event '%s' is globally disabled, skipping\n", event);
+			/* Event is globally disabled */
+			ao2_cleanup(sessions);
+			return 0;
+		}
+	}
+
 	if (!any_manager_listeners(sessions)) {
 		/* Nobody is listening */
 		ao2_cleanup(sessions);
@@ -8696,6 +8706,7 @@ static char *handle_manager_show_settings(struct ast_cli_entry *e, int cmd, stru
 	ast_cli(a->fd, FORMAT, "Display connects:", AST_CLI_YESNO(displayconnects));
 	ast_cli(a->fd, FORMAT, "Timestamp events:", AST_CLI_YESNO(timestampevents));
 	ast_cli(a->fd, FORMAT, "Channel vars:", S_OR(manager_channelvars, ""));
+	ast_cli(a->fd, FORMAT, "Disabled events:", S_OR(manager_disabledevents, ""));
 	ast_cli(a->fd, FORMAT, "Debug:", AST_CLI_YESNO(manager_debug));
 #undef FORMAT
 #undef FORMAT2
@@ -8916,10 +8927,10 @@ static struct ast_cli_entry cli_manager[] = {
  */
 static void load_channelvars(struct ast_variable *var)
 {
-        char *parse = NULL;
-        AST_DECLARE_APP_ARGS(args,
-                AST_APP_ARG(vars)[MAX_VARS];
-        );
+	char *parse = NULL;
+	AST_DECLARE_APP_ARGS(args,
+		AST_APP_ARG(vars)[MAX_VARS];
+	);
 
 	ast_free(manager_channelvars);
 	manager_channelvars = ast_strdup(var->value);
@@ -8931,6 +8942,18 @@ static void load_channelvars(struct ast_variable *var)
 	ast_channel_set_manager_vars(args.argc, args.vars);
 }
 
+/*!
+ * \internal
+ * \brief Load the config disabledevents variable.
+ *
+ * \param var Config variable to load.
+ */
+static void load_disabledevents(struct ast_variable *var)
+{
+	ast_free(manager_disabledevents);
+	manager_disabledevents = ast_strdup(var->value);
+}
+
 /*!
  * \internal
  * \brief Free a user record.  Should already be removed from the list
@@ -9045,6 +9068,7 @@ static void manager_shutdown(void)
 	acl_change_stasis_unsubscribe();
 
 	ast_free(manager_channelvars);
+	ast_free(manager_disabledevents);
 }
 
 
@@ -9339,6 +9363,8 @@ static int __init_manager(int reload, int by_external_config)
 			}
 		} else if (!strcasecmp(var->name, "channelvars")) {
 			load_channelvars(var);
+		} else if (!strcasecmp(var->name, "disabledevents")) {
+			load_disabledevents(var);
 		} else {
 			ast_log(LOG_NOTICE, "Invalid keyword <%s> = <%s> in manager.conf [general]\n",
 				var->name, val);