diff --git a/ChangeLog b/ChangeLog
index a7bced1e7dd8cfdf969ff8cc0d0573c8be97560b..9696353074a69f74cb97466bac2258764ab9a4d9 100755
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2005-11-07  Kevin P. Fleming  <kpfleming@digium.com>
 
+	* manager.c (action_setvar): add support for setting global variables (issue #5571)
+
 	* Makefile: correct cross-compilation issue introduced in Cygwin patches (issue #5572)
 
 	* apps/app_voicemail.c: upgrade to new arg/option API and implement priority jumping control (issue #5649)
diff --git a/manager.c b/manager.c
index 1f38db260e9c2f0cd16d3977e93646636a5561c9..c4bfcec3560d0b2be669492d29e1b014445381e2 100755
--- a/manager.c
+++ b/manager.c
@@ -664,9 +664,9 @@ static int action_hangup(struct mansession *s, struct message *m)
 }
 
 static char mandescr_setvar[] = 
-"Description: Set a local channel variable.\n"
+"Description: Set a global or local channel variable.\n"
 "Variables: (Names marked with * are required)\n"
-"	*Channel: Channel to set variable for\n"
+"	Channel: Channel to set variable for\n"
 "	*Variable: Variable name\n"
 "	*Value: Value\n";
 
@@ -677,25 +677,24 @@ static int action_setvar(struct mansession *s, struct message *m)
         char *varname = astman_get_header(m, "Variable");
         char *varval = astman_get_header(m, "Value");
 	
-	if (!strlen(name)) {
-		astman_send_error(s, m, "No channel specified");
-		return 0;
-	}
-	if (!strlen(varname)) {
+	if (ast_strlen_zero(varname)) {
 		astman_send_error(s, m, "No variable specified");
 		return 0;
 	}
 
-	c = ast_get_channel_by_name_locked(name);
-	if (!c) {
-		astman_send_error(s, m, "No such channel");
-		return 0;
+	if (!ast_strlen_zero(name)) {
+		c = ast_get_channel_by_name_locked(name);
+		if (!c) {
+			astman_send_error(s, m, "No such channel");
+			return 0;
+		}
 	}
 	
 	pbx_builtin_setvar_helper(c,varname,varval);
 	  
 	ast_mutex_unlock(&c->lock);
 	astman_send_ack(s, m, "Variable Set");
+
 	return 0;
 }