diff --git a/CHANGES b/CHANGES
index 2f47a04d971025950f3df71162e264607444ba0c..4c2aaaf48e0997412a34dd4376b018a3ceb538e9 100644
--- a/CHANGES
+++ b/CHANGES
@@ -560,6 +560,7 @@ CLI Changes
    manager.conf. 
  * Added 'all' keyword to the CLI command "channel request hangup" so that you can send
    the channel hangup request to all channels.
+ * Added a "core reload" CLI command that executes a global reload of Asterisk.
 
 ------------------------------------------------------------------------------
 --- Functionality changes from Asterisk 1.6.1 to Asterisk 1.6.2  -------------
diff --git a/main/cli.c b/main/cli.c
index 3c14879c038a342f321ac658c403006df669fe50..77e52b8636677c2eefb35f501855a74c7776429e 100644
--- a/main/cli.c
+++ b/main/cli.c
@@ -303,6 +303,28 @@ static char *handle_reload(struct ast_cli_entry *e, int cmd, struct ast_cli_args
 	return CLI_SUCCESS;
 }
 
+static char *handle_core_reload(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+	switch (cmd) {
+	case CLI_INIT:
+		e->command = "core reload";
+		e->usage =
+			"Usage: core reload\n"
+			"       Execute a global reload.\n";
+		return NULL;
+
+	case CLI_GENERATE:
+		return NULL;
+	}
+
+	if (a->argc != e->args) {
+		return CLI_SHOWUSAGE;
+	}
+
+	ast_module_reload(NULL);
+
+	return CLI_SUCCESS;
+}
 /*! 
  * \brief Find the debug or verbose file setting 
  * \arg debug 1 for debug, 0 for verbose
@@ -1620,7 +1642,9 @@ static struct ast_cli_entry cli_cli[] = {
 
 	AST_CLI_DEFINE(handle_load, "Load a module by name"),
 
-	AST_CLI_DEFINE(handle_reload, "Reload configuration"),
+	AST_CLI_DEFINE(handle_reload, "Reload configuration for a module"),
+
+	AST_CLI_DEFINE(handle_core_reload, "Global reload"),
 
 	AST_CLI_DEFINE(handle_unload, "Unload a module by name"),