diff --git a/apps/app_queue.c b/apps/app_queue.c
index a2f2ae53cc4022d5bd4b8c7946f775ae96e5d200..542ede24635158ce97876d04eca239bfa17fa7eb 100755
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -208,6 +208,7 @@ struct ast_call_queue {
 	char sound_calls[80];           /* Sound file: "calls waiting to speak to a representative." (def. queue-callswaiting)*/
 	char sound_holdtime[80];        /* Sound file: "The current estimated total holdtime is" (def. queue-holdtime) */
 	char sound_minutes[80];         /* Sound file: "minutes." (def. queue-minutes) */
+	char sound_lessthan[80];        /* Sound file: "less-than" (def. queue-lessthan) */
 	char sound_seconds[80];         /* Sound file: "seconds." (def. queue-seconds) */
 	char sound_thanks[80];          /* Sound file: "Thank you for your patience." (def. queue-thankyou) */
 
@@ -434,7 +435,11 @@ static int say_position(struct queue_ent *qe)
 	if ((avgholdmins+avgholdsecs) > 0 && (qe->parent->announceholdtime) && (!(qe->parent->announceholdtime==1 && qe->last_pos)) ) {
 		res += play_file(qe->chan, qe->parent->sound_holdtime);
 		if(avgholdmins>0) {
-			res += ast_say_number(qe->chan, avgholdmins, AST_DIGIT_ANY, qe->chan->language, (char*) NULL);
+			if (avgholdmins < 2) {
+				res += play_file(qe->chan, qe->parent->sound_lessthan);
+				res += ast_say_number(qe->chan, 2, AST_DIGIT_ANY, qe->chan->language, (char *)NULL);
+			} else 
+				res += ast_say_number(qe->chan, avgholdmins, AST_DIGIT_ANY, qe->chan->language, (char*) NULL);
 			res += play_file(qe->chan, qe->parent->sound_minutes);
 		}
 		if(avgholdsecs>0) {
@@ -1776,6 +1781,7 @@ static void reload_queues(void)
 				strncpy(q->sound_minutes, "queue-minutes", sizeof(q->sound_minutes) - 1);
 				strncpy(q->sound_seconds, "queue-seconds", sizeof(q->sound_seconds) - 1);
 				strncpy(q->sound_thanks, "queue-thankyou", sizeof(q->sound_thanks) - 1);
+				strncpy(q->sound_lessthan, "queue-lessthan", sizeof(q->sound_lessthan) - 1);
 				prev = q->members;
 				if (prev) {
 					/* find the end of any dynamic members */
@@ -1836,6 +1842,8 @@ static void reload_queues(void)
 						strncpy(q->sound_minutes, var->value, sizeof(q->sound_minutes) - 1);
 					} else if (!strcasecmp(var->name, "queue-seconds")) {
 						strncpy(q->sound_seconds, var->value, sizeof(q->sound_seconds) - 1);
+					} else if (!strcasecmp(var->name, "queue-lessthan")) {
+						strncpy(q->sound_lessthan, var->value, sizeof(q->sound_lessthan) - 1);
 					} else if (!strcasecmp(var->name, "queue-thankyou")) {
 						strncpy(q->sound_thanks, var->value, sizeof(q->sound_thanks) - 1);
 					} else if (!strcasecmp(var->name, "announce-frequency")) {
diff --git a/res/res_agi.c b/res/res_agi.c
index 2a58a5bf525ecc861f363c783f435b23a47b3a1d..b504708172bda9c097cf180d9e69a801489bead4 100755
--- a/res/res_agi.c
+++ b/res/res_agi.c
@@ -38,6 +38,7 @@
 #include <asterisk/app.h>
 #include <asterisk/dsp.h>
 #include <asterisk/musiconhold.h>
+#include <asterisk/manager.h>
 #include <asterisk/utils.h>
 #include <asterisk/lock.h>
 #include <asterisk/agi.h>
@@ -48,7 +49,7 @@
 #define MAX_COMMANDS 128
 
 /* Recycle some stuff from the CLI interface */
-#define fdprintf ast_cli
+#define fdprintf agi_debug_cli
 
 static char *tdesc = "Asterisk Gateway Interface (AGI)";
 
@@ -74,6 +75,8 @@ static char *descrip =
 "on file descriptor 3\n\n"
 "Use the CLI command 'show agi' to list available agi commands\n";
 
+static int agidebug = 0;
+
 STANDARD_LOCAL_USER;
 
 LOCAL_USER_DECL;
@@ -86,6 +89,25 @@ LOCAL_USER_DECL;
 
 #define AGI_PORT 4573
 
+static void agi_debug_cli(int fd, char *fmt, ...)
+{
+	char *stuff;
+	int res = 0;
+
+	va_list ap;
+	va_start(ap, fmt);
+	res = vasprintf(&stuff, fmt, ap);
+	va_end(ap);
+	if (res == -1) {
+		ast_log(LOG_ERROR, "Out of memory\n");
+	} else {
+		if (agidebug)
+			ast_verbose("AGI Tx >> %s", stuff);
+		ast_carefulwrite(fd, stuff, strlen(stuff), 100);
+		free(stuff);
+	}
+}
+
 static int launch_netscript(char *agiurl, char *argv[], int *fds, int *efd, int *opid)
 {
 	int s;
@@ -961,6 +983,38 @@ static int handle_dbdeltree(struct ast_channel *chan, AGI *agi, int argc, char *
 	return RESULT_SUCCESS;
 }
 
+static char debug_usage[] = 
+"Usage: agi debug\n"
+"       Enables dumping of AGI transactions for debugging purposes\n";
+
+static char no_debug_usage[] = 
+"Usage: agi no debug\n"
+"       Disables dumping of AGI transactions for debugging purposes\n";
+
+static int agi_do_debug(int fd, int argc, char *argv[])
+{
+	if (argc != 2)
+		return RESULT_SHOWUSAGE;
+	agidebug = 1;
+	ast_cli(fd, "AGI Debugging Enabled\n");
+	return RESULT_SUCCESS;
+}
+
+static int agi_no_debug(int fd, int argc, char *argv[])
+{
+	if (argc != 3)
+		return RESULT_SHOWUSAGE;
+	agidebug = 0;
+	ast_cli(fd, "AGI Debugging Disabled\n");
+	return RESULT_SUCCESS;
+}
+
+static struct ast_cli_entry  cli_debug =
+	{ { "agi", "debug", NULL }, agi_do_debug, "Enable AGI debugging", debug_usage };
+
+static struct ast_cli_entry  cli_no_debug =
+	{ { "agi", "no", "debug", NULL }, agi_no_debug, "Disable AGI debugging", no_debug_usage };
+
 static int handle_noop(struct ast_channel *chan, AGI *agi, int arg, char *argv[])
 {
 	fdprintf(agi->fd, "200 result=0\n");
@@ -1469,7 +1523,8 @@ static int run_agi(struct ast_channel *chan, char *request, AGI *agi, int pid, i
 			  /* get rid of trailing newline, if any */
 			if (*buf && buf[strlen(buf) - 1] == '\n')
 				buf[strlen(buf) - 1] = 0;
-
+			if (agidebug)
+				ast_verbose("AGI Rx << %s\n", buf);
 			returnstatus |= agi_handle_command(chan, agi, buf);
 			/* If the handle_command returns -1, we need to stop */
 			if ((returnstatus < 0) || (returnstatus == AST_PBX_KEEPALIVE)) {
@@ -1672,6 +1727,8 @@ int unload_module(void)
 	STANDARD_HANGUP_LOCALUSERS;
 	ast_cli_unregister(&showagi);
 	ast_cli_unregister(&dumpagihtml);
+	ast_cli_unregister(&cli_debug);
+	ast_cli_unregister(&cli_no_debug);
 	ast_unregister_application(eapp);
 	ast_unregister_application(deadapp);
 	return ast_unregister_application(app);
@@ -1681,6 +1738,8 @@ int load_module(void)
 {
 	ast_cli_register(&showagi);
 	ast_cli_register(&dumpagihtml);
+	ast_cli_register(&cli_debug);
+	ast_cli_register(&cli_no_debug);
 	ast_register_application(deadapp, deadagi_exec, deadsynopsis, descrip);
 	ast_register_application(eapp, eagi_exec, esynopsis, descrip);
 	return ast_register_application(app, agi_exec, synopsis, descrip);
diff --git a/sounds.txt b/sounds.txt
index c988e1c846cfdfc6de09b28ff3a71f0105e318c2..5797920267bb7d66c0f65b17990d4e560e6281a5 100755
--- a/sounds.txt
+++ b/sounds.txt
@@ -636,3 +636,5 @@
 %conf-unlockednow.gsm%The conference is now unlocked
 
 %vm-leavemsg.gsm% Press 5 to send a voicemail message
+
+%queue-less-than.gsm%less than
diff --git a/sounds/queue-less-than.gsm b/sounds/queue-less-than.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..38875ed66121543f39122503bbfba635290a99c5
Binary files /dev/null and b/sounds/queue-less-than.gsm differ