diff --git a/CHANGES b/CHANGES
index 720d2c098bee70a58e483d9e778e12955b6a78be..4286fcf64d0b964a4485aa2b5dab54cf6014a3a6 100644
--- a/CHANGES
+++ b/CHANGES
@@ -461,6 +461,8 @@ CLI Changes
    can optionally accept *module* names instead (with or without the .so extension),
    which applies the setting to the entire module specified, regardless of which source
    files it was built from.
+ * New 'manager show settings' command showing the current settings loaded from
+   manager.conf. 
 
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 1.6.1 to Asterisk 1.6.2  -------------
diff --git a/include/asterisk/cli.h b/include/asterisk/cli.h
index e3f30879ebb2c6fb525891191893b8f9d4bcb1f7..af0c684c2c3304a252bdace19659c6589b628c88 100644
--- a/include/asterisk/cli.h
+++ b/include/asterisk/cli.h
@@ -57,6 +57,13 @@ void ast_cli(int fd, const char *fmt, ...)
  */
 #define ESS(x) ((x) == 1 ? "" : "s")
 
+/*! \brief return Yes or No depending on the argument.
+ * This is used in many places in CLI command, having a function to generate
+ * this helps maintaining a consistent output (and possibly emitting the
+ * output in other languages, at some point).
+ */
+#define AST_CLI_YESNO(x) (x) ? "Yes" : "No"
+
 /*! \page CLI_command_API CLI command API
 
    CLI commands are described by a struct ast_cli_entry that contains
diff --git a/include/asterisk/manager.h b/include/asterisk/manager.h
index dd7c160f42c3866f201e80da053842e446689485..34595dee26183ec5794d7ba45932a9e1ba84b392 100644
--- a/include/asterisk/manager.h
+++ b/include/asterisk/manager.h
@@ -89,8 +89,7 @@
 #define AST_MAX_MANHEADERS 128
 
 /*! \brief Manager Helper Function */
-typedef int (*manager_hook_t)(int, const char *, char *); 
-
+typedef int (*manager_hook_t)(int, const char *, char *);
 
 struct manager_custom_hook {
 	/*! Identifier */
diff --git a/main/manager.c b/main/manager.c
index 376123fbfffb1708751f0360634d862cbbcc3f00..c96c41a046a38bb6aee7a1df07141f98b4c98edf 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -747,6 +747,7 @@ static int httptimeout = 60;
 static int broken_events_action = 0;
 static int manager_enabled = 0;
 static int webmanager_enabled = 0;
+static char *manager_channelvars;
 
 #define DEFAULT_REALM		"asterisk"
 static char global_realm[MAXHOSTNAMELEN];	/*!< Default realm */
@@ -1357,7 +1358,6 @@ static char *handle_showmanager(struct ast_cli_entry *e, int cmd, struct ast_cli
 	return CLI_SUCCESS;
 }
 
-
 static char *handle_showmanagers(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
 {
 	struct ast_manager_user *user = NULL;
@@ -1400,7 +1400,6 @@ static char *handle_showmanagers(struct ast_cli_entry *e, int cmd, struct ast_cl
 	return CLI_SUCCESS;
 }
 
-
 /*! \brief  CLI command  manager list commands */
 static char *handle_showmancmds(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
 {
@@ -1514,18 +1513,6 @@ static char *handle_manager_reload(struct ast_cli_entry *e, int cmd, struct ast_
 	return CLI_SUCCESS;
 }
 
-
-static struct ast_cli_entry cli_manager[] = {
-	AST_CLI_DEFINE(handle_showmancmd, "Show a manager interface command"),
-	AST_CLI_DEFINE(handle_showmancmds, "List manager interface commands"),
-	AST_CLI_DEFINE(handle_showmanconn, "List connected manager interface users"),
-	AST_CLI_DEFINE(handle_showmaneventq, "List manager interface queued events"),
-	AST_CLI_DEFINE(handle_showmanagers, "List configured manager users"),
-	AST_CLI_DEFINE(handle_showmanager, "Display information on a specific manager user"),
-	AST_CLI_DEFINE(handle_mandebug, "Show, enable, disable debugging of the manager code"),
-	AST_CLI_DEFINE(handle_manager_reload, "Reload manager configurations"),
-};
-
 static struct eventqent *unref_event(struct eventqent *e)
 {
 	ast_atomic_fetchadd_int(&e->usecount, -1);
@@ -3703,9 +3690,9 @@ static int action_coresettings(struct mansession *s, const struct message *m)
 			ast_config_AST_RUN_USER,
 			ast_config_AST_RUN_GROUP,
 			option_maxfiles,
-			ast_realtime_enabled() ? "Yes" : "No",
-			check_cdr_enabled() ? "Yes" : "No",
-			check_webmanager_enabled() ? "Yes" : "No"
+			AST_CLI_YESNO(ast_realtime_enabled()),
+			AST_CLI_YESNO(check_cdr_enabled()),
+			AST_CLI_YESNO(check_webmanager_enabled())
 			);
 	return 0;
 }
@@ -5559,6 +5546,61 @@ static struct ast_tcptls_session_args amis_desc = {
 	.worker_fn = session_do,	/* thread handling the session */
 };
 
+/*! \brief CLI command manager show settings */
+static char *handle_manager_show_settings(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+	switch (cmd) {
+	case CLI_INIT:
+		e->command = "manager show settings";
+		e->usage =
+			"Usage: manager show settings\n"
+			"       Provides detailed list of the configuration of the Manager.\n";
+		return NULL;
+	case CLI_GENERATE:
+		return NULL;
+	}
+#define FORMAT "  %-25.25s  %-15.15s\n"
+#define FORMAT2 "  %-25.25s  %-15d\n"
+	if (a->argc != 3) {
+		return CLI_SHOWUSAGE;
+	}
+	ast_cli(a->fd, "\nGlobal Settings:\n");
+	ast_cli(a->fd, "----------------\n");
+	ast_cli(a->fd, FORMAT, "Manager (AMI):", AST_CLI_YESNO(manager_enabled));
+	ast_cli(a->fd, FORMAT, "Web Manager (AMI/HTTP):", AST_CLI_YESNO(webmanager_enabled));
+	ast_cli(a->fd, FORMAT, "TCP Bindaddress:", ast_inet_ntoa(ami_desc.local_address.sin_addr));
+	ast_cli(a->fd, FORMAT2, "TCP Port:", ntohs(ami_desc.local_address.sin_port));
+	ast_cli(a->fd, FORMAT2, "HTTP Timeout (minutes):", httptimeout);
+	ast_cli(a->fd, FORMAT, "TLS Enable:", AST_CLI_YESNO(ami_tls_cfg.enabled));
+	ast_cli(a->fd, FORMAT, "TLS Bindaddress:", ast_inet_ntoa(amis_desc.local_address.sin_addr));
+	ast_cli(a->fd, FORMAT2, "TLS Port:", ntohs(amis_desc.local_address.sin_port));
+	ast_cli(a->fd, FORMAT, "TLS Certfile:", ami_tls_cfg.certfile);
+	ast_cli(a->fd, FORMAT, "TLS Privatekey:", ami_tls_cfg.pvtfile);
+	ast_cli(a->fd, FORMAT, "TLS Cipher:", ami_tls_cfg.cipher);
+	ast_cli(a->fd, FORMAT, "Allow multiple login:", AST_CLI_YESNO(allowmultiplelogin));
+	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, "Debug:", AST_CLI_YESNO(manager_debug));
+	ast_cli(a->fd, FORMAT, "Block sockets:", AST_CLI_YESNO(block_sockets));
+#undef FORMAT
+#undef FORMAT2
+
+	return CLI_SUCCESS;
+}
+
+static struct ast_cli_entry cli_manager[] = {
+	AST_CLI_DEFINE(handle_showmancmd, "Show a manager interface command"),
+	AST_CLI_DEFINE(handle_showmancmds, "List manager interface commands"),
+	AST_CLI_DEFINE(handle_showmanconn, "List connected manager interface users"),
+	AST_CLI_DEFINE(handle_showmaneventq, "List manager interface queued events"),
+	AST_CLI_DEFINE(handle_showmanagers, "List configured manager users"),
+	AST_CLI_DEFINE(handle_showmanager, "Display information on a specific manager user"),
+	AST_CLI_DEFINE(handle_mandebug, "Show, enable, disable debugging of the manager code"),
+	AST_CLI_DEFINE(handle_manager_reload, "Reload manager configurations"),
+	AST_CLI_DEFINE(handle_manager_show_settings, "Show manager global settings"),
+};
+
 static int __init_manager(int reload)
 {
 	struct ast_config *ucfg = NULL, *cfg = NULL;
@@ -5683,6 +5725,8 @@ static int __init_manager(int reload)
 		} else if (!strcasecmp(var->name, "channelvars")) {
 			struct manager_channel_variable *mcv;
 			char *remaining = ast_strdupa(val), *next;
+			ast_free(manager_channelvars);
+			manager_channelvars = ast_strdup(val);
 			AST_RWLIST_WRLOCK(&channelvars);
 			while ((next = strsep(&remaining, ",|"))) {
 				if (!(mcv = ast_calloc(1, sizeof(*mcv) + strlen(next) + 1))) {