diff --git a/UPGRADE.txt b/UPGRADE.txt
index 169969ae965b0887e7f6c8cc5529551314f661f9..c54709eb88cbbc3570e6a65a9a56477e66eae42f 100644
--- a/UPGRADE.txt
+++ b/UPGRADE.txt
@@ -31,3 +31,6 @@ Applications:
   to make them more distinguishable from 'maxmsgs', which sets folder
   size.  The old variables will continue to work in this version, albeit
   with a deprecation warning.
+* ChanIsAvail() now has a 't' option, which allows the specified device
+  to be queried for state without consulting the channel drivers. This
+  performs mostly a 'ChanExists' sort of function.
diff --git a/apps/app_chanisavail.c b/apps/app_chanisavail.c
index c6931d8dba7473e711fc82a4c4571fe5a92cfd58..885225557461674efab32522adf3635bad0c8ddd 100644
--- a/apps/app_chanisavail.c
+++ b/apps/app_chanisavail.c
@@ -61,12 +61,14 @@ static char *descrip =
 "  ${AVAILSTATUS}   - the status code for the available channel\n"
 "  Options:\n"
 "    s - Consider the channel unavailable if the channel is in use at all\n"
+"    t - Simply checks if specified channels exist in the channel list\n"
+"        (implies option s) \n"
 "    j - Support jumping to priority n+101 if no channel is available\n";
 
 
 static int chanavail_exec(struct ast_channel *chan, void *data)
 {
-	int res=-1, inuse=-1, option_state=0, priority_jump=0;
+	int res=-1, inuse=-1, option_state=0, priority_jump=0, string_compare=0;
 	int status;
 	struct ast_module_user *u;
 	char *info, tmp[512], trychan[512], *peers, *tech, *number, *rest, *cur;
@@ -90,6 +92,8 @@ static int chanavail_exec(struct ast_channel *chan, void *data)
 	if (args.options) {
 		if (strchr(args.options, 's'))
 			option_state = 1;
+		if (strchr(args.options, 't'))
+			string_compare = 1;
 		if (strchr(args.options, 'j'))
 			priority_jump = 1;
 	}
@@ -113,7 +117,13 @@ static int chanavail_exec(struct ast_channel *chan, void *data)
 			*number = '\0';
 			number++;
 			
-			if (option_state) {
+			if (string_compare) {
+				/* ast_parse_device_state checks for "SIP/1234" as a channel name. 
+				   ast_device_state will ask the SIP driver for the channel state. */
+
+				snprintf(trychan, sizeof(trychan), "%s/%s",cur,number);
+				status = inuse = ast_parse_device_state(trychan);
+			} else if (option_state) {
 				/* If the pbx says in use then don't bother trying further.
 				   This is to permit testing if someone's on a call, even if the 
 	 			   channel can permit more calls (ie callwaiting, sip calls, etc).  */