diff --git a/apps/app_chanspy.c b/apps/app_chanspy.c
index d97c546d360857a80cc2c08ada139ab1acede9f3..d42fc0c08d124f3e9259ef322cc1715432c02d9e 100644
--- a/apps/app_chanspy.c
+++ b/apps/app_chanspy.c
@@ -73,7 +73,7 @@ static const char *desc =
 "  Options:\n"
 "    b - Only spy on channels involved in a bridged call.\n"
 "    g(grp) - Match only channels where their ${SPYGROUP} variable is set to\n"
-"             'grp'.\n"
+"             contain 'grp' in an optional : delimited list.\n"
 "    q - Don't play a beep when beginning to spy on a channel.\n"
 "    r[(basename)] - Record the session to the monitor spool directory. An\n"
 "                    optional base for the filename may be specified. The\n"
@@ -414,7 +414,7 @@ static int chanspy_exec(struct ast_channel *chan, void *data)
 			spec = NULL;
 		}
 	}
-	
+
 	if (options) {
 		char *opts[OPT_ARG_ARRAY_SIZE];
 		ast_app_parse_options(chanspy_opts, &flags, opts, options);
@@ -471,18 +471,34 @@ static int chanspy_exec(struct ast_channel *chan, void *data)
 			if (peer != chan) {
 				const char *group = NULL;
 				int igrp = 1;
-
+				char *groups[25] = {0};
+				int num_groups = 0;
+				char *dup_group;
+				
 				if (peer == prev && !chosen) {
 					break;
 				}
 				chosen = 0;
-				group = pbx_builtin_getvar_helper(peer, "SPYGROUP");
+
 				if (mygroup) {
-					if (!group || strcmp(mygroup, group)) {
-						igrp = 0;
+					int x;
+
+					if ((group = pbx_builtin_getvar_helper(peer, "SPYGROUP"))) {
+						dup_group = ast_strdupa(group);
+						num_groups = ast_app_separate_args(dup_group, ':', groups, sizeof(groups) / sizeof(groups[0]));
 					}
+
+					igrp = 0;
+					if (num_groups) {
+						for (x = 0; x < num_groups; x++) {
+							if (!strcmp(mygroup, groups[x])) {
+								igrp = 1;
+								break;
+							}
+						}
+					} 
 				}
-				
+
 				if (igrp && (!spec || ((strlen(spec) <= strlen(peer->name) &&
 							!strncasecmp(peer->name, spec, strlen(spec)))))) {
 					if (peer && (!bronly || ast_bridged_channel(peer)) &&
diff --git a/doc/channelvariables.txt b/doc/channelvariables.txt
index d2befa33bc6cb50cf729d81dc7b33affc598829c..cff06d81e7555fab9ab36f82488db0a5dae82d9a 100644
--- a/doc/channelvariables.txt
+++ b/doc/channelvariables.txt
@@ -755,6 +755,11 @@ ${MACRO_CONTEXT}	* The calling context
 ${MACRO_PRIORITY}	* The calling priority
 ${MACRO_OFFSET}		Offset to add to priority at return from macro
 
+The ChanSpy() application uses the following variables:
+---------------------------------------------------------
+${SPYGROUP}		* A ':' (colon) separated list of group names.
+			  (To be set on spied on channel and matched against the g(grp) option)
+
 If you compile with OSP support, these variables are used:
 ---------------------------------------------------------
 ${OSPINHANDLE}		OSP handle of in_bound call