diff --git a/Makefile b/Makefile
index d5003c27eb958255eef049c99e9a75c8755b5341..ba3c1c35560fe4b13b708c6668c4e500392671cd 100755
--- a/Makefile
+++ b/Makefile
@@ -273,6 +273,24 @@ datafiles: all
 			exit 1; \
 		fi; \
 	done
+	mkdir -p $(DESTDIR)$(ASTVARLIBDIR)/sounds/letters
+	for x in sounds/letters/*.gsm; do \
+		if grep -q "^%`basename $$x`%" sounds.txt; then \
+			install -m 644 $$x $(DESTDIR)$(ASTVARLIBDIR)/sounds/letters ; \
+		else \
+			echo "No description for $$x"; \
+			exit 1; \
+		fi; \
+	done
+	mkdir -p $(DESTDIR)$(ASTVARLIBDIR)/sounds/phonetic
+	for x in sounds/phonetic/*.gsm; do \
+		if grep -q "^%`basename $$x`%" sounds.txt; then \
+			install -m 644 $$x $(DESTDIR)$(ASTVARLIBDIR)/sounds/phonetic ; \
+		else \
+			echo "No description for $$x"; \
+			exit 1; \
+		fi; \
+	done
 	for x in sounds/vm-* sounds/transfer* sounds/pbx-* sounds/ss-* sounds/beep* sounds/dir-* sounds/conf-* sounds/agent-* sounds/invalid* sounds/tt-* sounds/auth-* sounds/privacy-* sounds/queue-*; do \
 		if grep -q "^%`basename $$x`%" sounds.txt; then \
 			install -m 644 $$x $(DESTDIR)$(ASTVARLIBDIR)/sounds ; \
diff --git a/apps/app_agi.c b/apps/app_agi.c
index 98021fecfe3240587e9a6505a4823634e1af1d2c..14fa27e49fee9ed5d522f7da85ec0e65fb2f43d9 100755
--- a/apps/app_agi.c
+++ b/apps/app_agi.c
@@ -385,10 +385,12 @@ static int handle_saydigits(struct ast_channel *chan, AGI *agi, int argc, char *
 {
 	int res;
 	int num;
+
 	if (argc != 4)
 		return RESULT_SHOWUSAGE;
 	if (sscanf(argv[2], "%i", &num) != 1)
 		return RESULT_SHOWUSAGE;
+
 	res = ast_say_digit_str_full(chan, argv[2], argv[3], chan->language, agi->audio, agi->ctrl);
 	if (res == 1) /* New command */
 		return RESULT_SUCCESS;
@@ -417,6 +419,23 @@ static int handle_saytime(struct ast_channel *chan, AGI *agi, int argc, char *ar
 		return RESULT_FAILURE;
 }
 
+static int handle_sayphonetic(struct ast_channel *chan, AGI *agi, int argc, char *argv[])
+{
+	int res;
+
+	if (argc != 4)
+		return RESULT_SHOWUSAGE;
+
+	res = ast_say_phonetic_str_full(chan, argv[2], argv[3], chan->language, agi->audio, agi->ctrl);
+	if (res == 1) /* New command */
+		return RESULT_SUCCESS;
+	fdprintf(agi->fd, "200 result=%d\n", res);
+	if (res >= 0)
+		return RESULT_SUCCESS;
+	else
+		return RESULT_FAILURE;
+}
+
 static int handle_getdata(struct ast_channel *chan, AGI *agi, int argc, char *argv[])
 {
 	int res;
@@ -1031,6 +1050,13 @@ static char usage_saytime[] =
 " completes without a digit being pressed, or the ASCII numerical value of the\n"
 " digit if one was pressed or -1 on error/hangup.\n";
 
+static char usage_sayphonetic[] =
+" Usage: SAY PHONETIC <string> <escape digits>\n"
+"        Say a given character string with phonetics, returning early if any of the given DTMF digits\n"
+" are received on the channel.  Returns 0 if playback completes without a digit\n"
+" being pressed, or the ASCII numerical value of the digit if one was pressed or\n"
+" -1 on error/hangup.\n";
+
 static char usage_getdata[] =
 " Usage: GET DATA <file to be streamed> [timeout] [max digits]\n"
 "	 Stream the given file, and recieve DTMF data. Returns the digits recieved\n"
@@ -1080,6 +1106,7 @@ static agi_command commands[] = {
 	{ { "send", "image", NULL }, handle_sendimage, "Sends images to channels supporting it", usage_sendimage },
 	{ { "say", "digits", NULL }, handle_saydigits, "Says a given digit string", usage_saydigits },
 	{ { "say", "number", NULL }, handle_saynumber, "Says a given number", usage_saynumber },
+        { { "say", "phonetic", NULL }, handle_sayphonetic, "Says a given character string with phonetics", usage_sayphonetic },
 	{ { "say", "time", NULL }, handle_saytime, "Says a given time", usage_saytime },
 	{ { "get", "data", NULL }, handle_getdata, "Gets data on a channel", usage_getdata },
 	{ { "set", "context", NULL }, handle_setcontext, "Sets channel context", usage_setcontext },
diff --git a/asterisk.c b/asterisk.c
index f7abea0700448ac310f56ee1ceaea489be807de9..d1b0dad3cc6b481df062d4a18d138d0171b0a30f 100755
--- a/asterisk.c
+++ b/asterisk.c
@@ -896,7 +896,6 @@ static char *cli_prompt(EditLine *el)
 				int i;
 				struct timeval tv;
 				struct tm tm;
-				time_t curtime;
 				FILE *LOADAVG;
 				int fgcolor = COLOR_WHITE, bgcolor = COLOR_BLACK;
 
diff --git a/configs/logger.conf.sample b/configs/logger.conf.sample
index dd3a5bd9e34b8e4735a16d2c7269bbf9144e2b96..66f0613ac49c142cf5638b0a523abd28778c65d0 100755
--- a/configs/logger.conf.sample
+++ b/configs/logger.conf.sample
@@ -29,6 +29,11 @@ console => notice,warning,error
 ;console => notice,warning,error,debug
 messages => notice,warning,error
 ;full => notice,warning,error,debug,verbose
+;
+; Uncomment the following line (with *no* events) if you want the
+; queue log to automatically rotate.
+;
+;queue_log =>
 
 ;syslog keyword : This special keyword logs to syslog facility 
 ;
diff --git a/include/asterisk/say.h b/include/asterisk/say.h
index 019d7cc76a38cb19580e966eb2bd4151757001a5..cc691bd5eb58954a8b6acb9e07754a0cf1afb642 100755
--- a/include/asterisk/say.h
+++ b/include/asterisk/say.h
@@ -61,6 +61,10 @@ int ast_say_digits_full(struct ast_channel *chan, int num, char *ints, char *lan
  */
 int ast_say_digit_str(struct ast_channel *chan, char *num, char *ints, char *lang);
 int ast_say_digit_str_full(struct ast_channel *chan, char *num, char *ints, char *lang, int audiofd, int ctrlfd);
+int ast_say_character_str(struct ast_channel *chan, char *num, char *ints, char *lang);
+int ast_say_character_str_full(struct ast_channel *chan, char *num, char *ints, char *lang, int audiofd, int ctrlfd);
+int ast_say_phonetic_str(struct ast_channel *chan, char *num, char *ints, char *lang);
+int ast_say_phonetic_str_full(struct ast_channel *chan, char *num, char *ints, char *lang, int audiofd, int ctrlfd);
 
 int ast_say_datetime(struct ast_channel *chan, time_t t, char *ints, char *lang);
 
diff --git a/pbx.c b/pbx.c
index 85e5e0103f0eb74b4e9a758faa11421f51ac584c..4a5fd82d6bb2dae6fa8bb11673e2d4d2496d25c5 100755
--- a/pbx.c
+++ b/pbx.c
@@ -169,6 +169,8 @@ static int pbx_builtin_gotoif(struct ast_channel *, void *);
 static int pbx_builtin_gotoiftime(struct ast_channel *, void *);
 static int pbx_builtin_saynumber(struct ast_channel *, void *);
 static int pbx_builtin_saydigits(struct ast_channel *, void *);
+static int pbx_builtin_saycharacters(struct ast_channel *, void *);
+static int pbx_builtin_sayphonetic(struct ast_channel *, void *);
 int pbx_builtin_setvar(struct ast_channel *, void *);
 void pbx_builtin_setvar_helper(struct ast_channel *chan, char *name, char *value);
 char *pbx_builtin_getvar_helper(struct ast_channel *chan, char *name);
@@ -293,6 +295,14 @@ static struct pbx_builtin {
 "Say Digits",
 "  SayDigits(digits): Says the passed digits\n" },
 
+	{ "SayAlpha", pbx_builtin_saycharacters,
+"Say Alpha",
+"  SayAlpha(string): Spells the passed string\n" },
+
+	{ "SayPhonetic", pbx_builtin_sayphonetic,
+"Say Phonetic",
+"  SayPhonetic(string): Spells the passed string with phonetic alphabet\n" },
+
 	{ "SetAccount", pbx_builtin_setaccount,
 "Sets account code",
 "  SetAccount([account]):  Set  the  channel account code for billing\n"
@@ -4601,6 +4611,22 @@ static int pbx_builtin_saydigits(struct ast_channel *chan, void *data)
 	return res;
 }
 	
+static int pbx_builtin_saycharacters(struct ast_channel *chan, void *data)
+{
+	int res = 0;
+	if (data)
+		res = ast_say_character_str(chan, (char *)data, "", chan->language);
+	return res;
+}
+	
+static int pbx_builtin_sayphonetic(struct ast_channel *chan, void *data)
+{
+	int res = 0;
+	if (data)
+		res = ast_say_phonetic_str(chan, (char *)data, "", chan->language);
+	return res;
+}
+	
 int load_pbx(void)
 {
 	int x;
diff --git a/say.c b/say.c
index 0107346278e6f1ee38b645edb26894ce8831d19a..5a318e8c014b1c124d4aa666116cb1a0bd6aac10 100755
--- a/say.c
+++ b/say.c
@@ -16,6 +16,7 @@
 #include <stdlib.h>
 #include <netinet/in.h>
 #include <time.h>
+#include <ctype.h>
 #include <asterisk/file.h>
 #include <asterisk/channel.h>
 #include <asterisk/logger.h>
@@ -45,13 +46,13 @@ int ast_say_digit_str(struct ast_channel *chan, char *fn2, char *ints, char *lan
 				snprintf(fn, sizeof(fn), "digits/pound");
 				break;
 			default:
-				if((fn2[num] >= '0') && (fn2[num] <= '9')){ /* Must be in {0-9} */	 
+				if((fn2[num] >= '0') && (fn2[num] <= '9')){ /* Must be in {0-9} */
 					snprintf(fn, sizeof(fn), "digits/%c", fn2[num]);
 				}
-			}
+		}
 		if(strlen(fn)){ /* if length == 0, then skip this digit as it is invalid */
 			res = ast_streamfile(chan, fn, lang);
-			if (!res) 
+			if (!res)
 				res = ast_waitstream(chan, ints);
 			ast_stopstream(chan);
 		}
@@ -60,6 +61,178 @@ int ast_say_digit_str(struct ast_channel *chan, char *fn2, char *ints, char *lan
 	return res;
 }
 
+int ast_say_character_str(struct ast_channel *chan, char *fn2, char *ints, char *lang)
+{
+	/* XXX Merge with full version? XXX */
+	char fn[256] = "";
+	char ltr;
+	int num = 0;
+	int res = 0;
+	while(fn2[num] && !res) {
+		fn[0] = '\0';
+		switch (fn2[num]) {
+			case ('*'):
+				snprintf(fn, sizeof(fn), "digits/star");
+				break;
+			case ('#'):
+				snprintf(fn, sizeof(fn), "digits/pound");
+				break;
+ 			case ('0'):
+ 			case ('1'):
+ 			case ('2'):
+ 			case ('3'):
+ 			case ('4'):
+ 			case ('5'):
+ 			case ('6'):
+ 			case ('7'):
+ 			case ('8'):
+ 			case ('9'):
+  				snprintf(fn, sizeof(fn), "digits/%c", fn2[num]);
+ 				break;
+			case ('!'):
+				strncpy(fn, "letters/exclaimation-point", sizeof(fn));
+				break;    	
+ 			case ('@'):
+ 				strncpy(fn, "letters/at", sizeof(fn));
+ 				break;
+ 			case ('$'):
+ 				strncpy(fn, "letters/dollar", sizeof(fn));
+ 				break;
+ 			case ('-'):
+ 				strncpy(fn, "letters/dash", sizeof(fn));
+ 				break;
+ 			case ('.'):
+ 				strncpy(fn, "letters/dot", sizeof(fn));
+ 				break;
+ 			case ('='):
+ 				strncpy(fn, "letters/equals", sizeof(fn));
+ 				break;
+ 			case ('+'):
+ 				strncpy(fn, "letters/plus", sizeof(fn));
+ 				break;
+ 			case ('/'):
+ 				strncpy(fn, "letters/slash", sizeof(fn));
+ 				break;
+ 			case (' '):
+ 				strncpy(fn, "letters/space", sizeof(fn));
+ 				break;
+ 			default:
+ 				ltr = fn2[num];
+ 				if ('A' <= ltr && ltr <= 'Z') ltr += 'a' - 'A';		/* file names are all lower-case */
+ 				snprintf(fn, sizeof(fn), "letters/%c", ltr);
+  		}
+		if(strlen(fn)){ /* if length == 0, then skip this digit as it is invalid */
+			res = ast_streamfile(chan, fn, lang);
+			if (!res) 
+				res = ast_waitstream(chan, ints);
+		}	ast_stopstream(chan);
+		num++;
+	}
+	return res;
+}
+
+int ast_say_phonetic_str(struct ast_channel *chan, char *fn2, char *ints, char *lang)
+{
+	/* XXX Merge with full version? XXX */
+	char fn[256] = "";
+	char ltr;
+	int num = 0;
+	int res = 0;
+	int temp;
+	int play;
+	char hex[3];
+/*	while(fn2[num] && !res) { */
+	while(fn2[num]) {
+		play=1;
+		switch (fn2[num]) {
+			case ('*'):
+				snprintf(fn, sizeof(fn), "digits/star");
+				break;
+			case ('#'):
+				snprintf(fn, sizeof(fn), "digits/pound");
+				break;
+			case ('0'):
+			case ('1'):
+			case ('2'):
+			case ('3'):
+			case ('4'):
+			case ('5'):
+			case ('6'):
+			case ('7'):
+			case ('8'):
+				snprintf(fn, sizeof(fn), "digits/%c", fn2[num]);
+				break;
+			case ('!'):
+				strncpy(fn, "exclaimation-point", sizeof(fn));
+				break;    	
+			case ('@'):
+				strncpy(fn, "at", sizeof(fn));
+				break;
+			case ('$'):
+				strncpy(fn, "dollar", sizeof(fn));
+				break;	
+			case ('-'):
+				strncpy(fn, "dash", sizeof(fn));
+				break;
+			case ('.'):
+				strncpy(fn, "dot", sizeof(fn));
+				break;
+			case ('='):
+				strncpy(fn, "equals", sizeof(fn));
+				break;
+			case ('+'):
+				strncpy(fn, "plus", sizeof(fn));
+				break;
+			case ('/'):
+				strncpy(fn, "slash", sizeof(fn));
+				break;
+			case (' '):
+				strncpy(fn, "space", sizeof(fn));
+				break;
+			case ('%'):
+				play=0;
+				/* check if we have 2 chars after the % */
+				if (strlen(fn2)>num+2)
+				{
+				    hex[0]=fn2[num+1];
+				    hex[1]=fn2[num+2];
+				    hex[2]='\0';
+				    if (sscanf(hex,"%x", &temp))
+				    { /* Hex to char convertion successfull */
+				        fn2[num+2]=temp;
+				        num++;
+				        if (temp==37)
+				        { /* If it is a percent, play it now */
+				    	    strncpy(fn, "percent", sizeof(fn));
+					    	num++;
+					    	play=1;
+						}
+						/* check for invalid characters */
+						if ((temp<32) || (temp>126))
+						{
+						    num++;
+						}
+				    }
+				}
+				else
+				    num++;
+				break;
+			default:	/* '9' falls through to here, too */
+				ltr = tolower(fn2[num]);
+				snprintf(fn, sizeof(fn), "phonetic/%c_p", ltr);
+		}
+		if (play)
+		{
+		    res = ast_streamfile(chan, fn, lang);
+		    if (!res) 
+			res = ast_waitstream(chan, ints);
+		    ast_stopstream(chan);
+		}
+		num++;
+	}
+	return res;
+}
+
 int ast_say_digit_str_full(struct ast_channel *chan, char *fn2, char *ints, char *lang, int audiofd, int ctrlfd)
 {
 	char fn[256] = "";
@@ -76,6 +249,141 @@ int ast_say_digit_str_full(struct ast_channel *chan, char *fn2, char *ints, char
 	return res;
 }
 
+int ast_say_character_str_full(struct ast_channel *chan, char *fn2, char *ints, char *lang, int audiofd, int ctrlfd)
+{
+	char fn[256] = "";
+	char ltr;
+	int num = 0;
+	int res = 0;
+	while(fn2[num] && !res) {
+		switch (fn2[num]) {
+			case ('*'):
+				snprintf(fn, sizeof(fn), "digits/star");
+				break;
+			case ('#'):
+				snprintf(fn, sizeof(fn), "digits/pound");
+				break;
+			case ('0'):
+			case ('1'):
+			case ('2'):
+			case ('3'):
+			case ('4'):
+			case ('5'):
+			case ('6'):
+			case ('7'):
+			case ('8'):
+			case ('9'):
+				snprintf(fn, sizeof(fn), "digits/%c", fn2[num]);
+				break;
+			case ('!'):
+				strncpy(fn, "exclaimation-point", sizeof(fn));
+				break;    	
+			case ('@'):
+				strncpy(fn, "at", sizeof(fn));
+				break;
+			case ('$'):
+				strncpy(fn, "dollar", sizeof(fn));
+				break;
+			case ('-'):
+				strncpy(fn, "dash", sizeof(fn));
+				break;
+			case ('.'):
+				strncpy(fn, "dot", sizeof(fn));
+				break;
+			case ('='):
+				strncpy(fn, "equals", sizeof(fn));
+				break;
+			case ('+'):
+				strncpy(fn, "plus", sizeof(fn));
+				break;
+			case ('/'):
+				strncpy(fn, "slash", sizeof(fn));
+				break;
+			case (' '):
+				strncpy(fn, "space", sizeof(fn));
+				break;
+			default:
+				ltr = fn2[num];
+				if ('A' <= ltr && ltr <= 'Z') ltr += 'a' - 'A';		/* file names are all lower-case */
+				snprintf(fn, sizeof(fn), "letters/%c", ltr);
+		}
+		/* snprintf(fn, sizeof(fn), "digits/%c", fn2[num]); */
+		res = ast_streamfile(chan, fn, lang);
+		if (!res) 
+			res = ast_waitstream_full(chan, ints, audiofd, ctrlfd);
+		ast_stopstream(chan);
+		num++;
+	}
+	return res;
+}
+
+int ast_say_phonetic_str_full(struct ast_channel *chan, char *fn2, char *ints, char *lang, int audiofd, int ctrlfd)
+{
+	char fn[256] = "";
+	char ltr;
+	int num = 0;
+	int res = 0;
+	while(fn2[num] && !res) {
+		switch (fn2[num]) {
+			case ('*'):
+				snprintf(fn, sizeof(fn), "digits/star");
+				break;
+			case ('#'):
+				snprintf(fn, sizeof(fn), "digits/pound");
+				break;
+			case ('0'):
+			case ('1'):
+			case ('2'):
+			case ('3'):
+			case ('4'):
+			case ('5'):
+			case ('6'):
+			case ('7'):
+			case ('8'):
+				snprintf(fn, sizeof(fn), "digits/%c", fn2[num]);
+				break;
+			case ('!'):
+				strncpy(fn, "exclaimation-point", sizeof(fn));
+				break;    	
+			case ('@'):
+				strncpy(fn, "at", sizeof(fn));
+				break;
+			case ('$'):
+				strncpy(fn, "dollar", sizeof(fn));
+				break;
+			case ('-'):
+				strncpy(fn, "dash", sizeof(fn));
+				break;
+			case ('.'):
+				strncpy(fn, "dot", sizeof(fn));
+				break;
+			case ('='):
+				strncpy(fn, "equals", sizeof(fn));
+				break;
+			case ('+'):
+				strncpy(fn, "plus", sizeof(fn));
+				break;
+			case ('/'):
+				strncpy(fn, "slash", sizeof(fn));
+				break;
+			case (' '):
+				strncpy(fn, "space", sizeof(fn));
+				break;
+			default:	/* '9' falls here... */
+				ltr = fn2[num];
+				if ('A' <= ltr && ltr <= 'Z') ltr += 'a' - 'A';		/* file names are all lower-case */
+				snprintf(fn, sizeof(fn), "phonetic/%c", ltr);
+			}
+		/* snprintf(fn, sizeof(fn), "digits/%c", fn2[num]); */
+		res = ast_streamfile(chan, fn, lang);
+		if (!res) 
+			res = ast_waitstream_full(chan, ints, audiofd, ctrlfd);
+		ast_stopstream(chan);
+		num++;
+	}
+	return res;
+}
+
 int ast_say_digits(struct ast_channel *chan, int num, char *ints, char *lang)
 {
 	/* XXX Should I be merged with say_digits_full XXX */
diff --git a/sounds.txt b/sounds.txt
index cd7b0f7bcf9985fce46598704aaa05afa712d926..419497c71a6bb08271f9352682c70b66e1b9cf13 100755
--- a/sounds.txt
+++ b/sounds.txt
@@ -478,3 +478,137 @@
 %vm-reachoper.gsm%press 0 to reach an operator
 
 %vm-tooshort.gsm%your message is too short 
+
+%9_p.gsm%niner
+
+%a.gsm%a
+
+%b.gsm%b
+
+%c.gsm%c
+
+%d.gsm%d
+
+%e.gsm%e
+
+%f.gsm%f
+
+%g.gsm%g
+
+%h.gsm%h
+
+%i.gsm%i
+
+%j.gsm%j
+
+%k.gsm%k
+
+%l.gsm%l
+
+%m.gsm%m
+
+%n.gsm%n
+
+%o.gsm%o
+
+%p.gsm%p
+
+%q.gsm%q
+
+%r.gsm%r
+
+%s.gsm%s
+
+%t.gsm%t
+
+%u.gsm%u
+
+%v.gsm%v
+
+%w.gsm%w
+
+%x.gsm%x
+
+%y.gsm%y
+
+%z.gsm%z
+
+%zed.gsm%zed
+
+%a_p.gsm%alpha
+
+%b_p.gsm%bravo
+
+%c_p.gsm%charlie
+
+%d_p.gsm%delta
+
+%e_p.gsm%echo
+
+%f_p.gsm%foxtrot
+
+%g_p.gsm%golf
+
+%h_p.gsm%hotel
+
+%i_p.gsm%india
+
+%j_p.gsm%juliet
+
+%k_p.gsm%kilo
+
+%l_p.gsm%lima
+
+%m_p.gsm%mike
+
+%n_p.gsm%november
+
+%o_p.gsm%oscar
+
+%p_p.gsm%papa
+
+%q_p.gsm%quebec
+
+%r_p.gsm%romeo
+
+%s_p.gsm%sierra
+
+%t_p.gsm%tango
+
+%u_p.gsm%uniform
+
+%v_p.gsm%victor
+
+%w_p.gsm%wiskey
+
+%x_p.gsm%xray
+
+%y_p.gsm%yankee
+
+%z_p.gsm%zulu
+
+%niner.gsm%niner
+
+; Misc 
+
+%percent.gsm%percent [%]
+
+%plus.gsm%plus [+]
+
+%exclaimation-point.gsm%exclaimation-point [!]
+
+%at.gsm%at [@]
+
+%dollar.gsm%dollar [$]
+
+%dash.gsm%dash [-]
+
+%dot.gsm%dot [.]
+
+%slash.gsm%slash [/]
+
+%space.gsm%space [ ]
+
+%plus.gsm%plus [+]
+
+%equals.gsm%equals [=]
diff --git a/sounds/letters/a.gsm b/sounds/letters/a.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..88171a2d8fd2fe32f45956d352e3f6181e1b6b95
Binary files /dev/null and b/sounds/letters/a.gsm differ
diff --git a/sounds/letters/at.gsm b/sounds/letters/at.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..76227229be471340b25fb5a6e0c10809155ae190
Binary files /dev/null and b/sounds/letters/at.gsm differ
diff --git a/sounds/letters/b.gsm b/sounds/letters/b.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..d97f14fd7c6aec3007664e72d9c05c558dfe57dd
Binary files /dev/null and b/sounds/letters/b.gsm differ
diff --git a/sounds/letters/c.gsm b/sounds/letters/c.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..e631c3e8c713d6b50e0a3d97dd705863f8c21527
Binary files /dev/null and b/sounds/letters/c.gsm differ
diff --git a/sounds/letters/d.gsm b/sounds/letters/d.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..9d26a00ee5ee507eb3653b4aaad41129e53a9569
Binary files /dev/null and b/sounds/letters/d.gsm differ
diff --git a/sounds/letters/dash.gsm b/sounds/letters/dash.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..b3649e38dd7f317844e94ef1a8f21eff96635c1a
Binary files /dev/null and b/sounds/letters/dash.gsm differ
diff --git a/sounds/letters/dollar.gsm b/sounds/letters/dollar.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..1d515d16683a664d3babf69d024fdd1c639dffcb
Binary files /dev/null and b/sounds/letters/dollar.gsm differ
diff --git a/sounds/letters/dot.gsm b/sounds/letters/dot.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..0fca6d9cb479c2d9860867e0c75ae5d3e8245268
Binary files /dev/null and b/sounds/letters/dot.gsm differ
diff --git a/sounds/letters/e.gsm b/sounds/letters/e.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..bedfb456e9126f0fd565c84ba4420a157445cd8a
Binary files /dev/null and b/sounds/letters/e.gsm differ
diff --git a/sounds/letters/equals.gsm b/sounds/letters/equals.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..4822469cef1eb3e6c2b41ec8096c631f5c378bd8
Binary files /dev/null and b/sounds/letters/equals.gsm differ
diff --git a/sounds/letters/exclaimation-point.gsm b/sounds/letters/exclaimation-point.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..87e49f2edc7117a5b976c00e5c4ee1a175097852
Binary files /dev/null and b/sounds/letters/exclaimation-point.gsm differ
diff --git a/sounds/letters/f.gsm b/sounds/letters/f.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..27fba45077d895b9998e119dc85dde760f05c22d
Binary files /dev/null and b/sounds/letters/f.gsm differ
diff --git a/sounds/letters/g.gsm b/sounds/letters/g.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..42b9e60b98b05ba3bc577f7b0c0422ecdd2f0d26
Binary files /dev/null and b/sounds/letters/g.gsm differ
diff --git a/sounds/letters/h.gsm b/sounds/letters/h.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..c64b2f9c958a21f3a615c7f44d047273973c7c62
Binary files /dev/null and b/sounds/letters/h.gsm differ
diff --git a/sounds/letters/i.gsm b/sounds/letters/i.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..7f80d8ca7c5758f9c6aaeaf73901bac2690446f7
Binary files /dev/null and b/sounds/letters/i.gsm differ
diff --git a/sounds/letters/j.gsm b/sounds/letters/j.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..45057ea96a696d6889374731d345c3e9d62926a4
Binary files /dev/null and b/sounds/letters/j.gsm differ
diff --git a/sounds/letters/k.gsm b/sounds/letters/k.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..104dae10ea4cbe29c9ddda9fcda725ba2db58bc7
Binary files /dev/null and b/sounds/letters/k.gsm differ
diff --git a/sounds/letters/l.gsm b/sounds/letters/l.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..df4957f1662a6cd24bf50eef5ea5b508a43ea0cc
Binary files /dev/null and b/sounds/letters/l.gsm differ
diff --git a/sounds/letters/m.gsm b/sounds/letters/m.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..97643d131ba116dfd9aa24345f5b5b8fe4813d1d
Binary files /dev/null and b/sounds/letters/m.gsm differ
diff --git a/sounds/letters/n.gsm b/sounds/letters/n.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..92d853406f8f576be42f397a340621dde54965f5
Binary files /dev/null and b/sounds/letters/n.gsm differ
diff --git a/sounds/letters/o.gsm b/sounds/letters/o.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..4d1235051dbbbed8cb72c195c7c0c25e420c5cc6
Binary files /dev/null and b/sounds/letters/o.gsm differ
diff --git a/sounds/letters/p.gsm b/sounds/letters/p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..d0851e768c372ac7f7dae4b78be953d2c3734077
Binary files /dev/null and b/sounds/letters/p.gsm differ
diff --git a/sounds/letters/plus.gsm b/sounds/letters/plus.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..f4d72d637af48807d48f57298a541813e816d638
Binary files /dev/null and b/sounds/letters/plus.gsm differ
diff --git a/sounds/letters/q.gsm b/sounds/letters/q.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..a86ed189cd571e3c7c5db9657fedfa6f6e2bb605
Binary files /dev/null and b/sounds/letters/q.gsm differ
diff --git a/sounds/letters/r.gsm b/sounds/letters/r.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..6ac4db989798845d71bbe1afbd02c392e6408ecb
Binary files /dev/null and b/sounds/letters/r.gsm differ
diff --git a/sounds/letters/s.gsm b/sounds/letters/s.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..6f9cdc367a9f95db3a29a04f7d2914dd4145a5a3
Binary files /dev/null and b/sounds/letters/s.gsm differ
diff --git a/sounds/letters/slash.gsm b/sounds/letters/slash.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..51138a4a6f584db1481601797020c4b8eb726909
Binary files /dev/null and b/sounds/letters/slash.gsm differ
diff --git a/sounds/letters/space.gsm b/sounds/letters/space.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..46b281d9164bb0941884cba768a8a092fe4fdc76
Binary files /dev/null and b/sounds/letters/space.gsm differ
diff --git a/sounds/letters/t.gsm b/sounds/letters/t.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..3f8904d28c24e3857e9b6f772a3404ed86f48570
Binary files /dev/null and b/sounds/letters/t.gsm differ
diff --git a/sounds/letters/u.gsm b/sounds/letters/u.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..9fdc9a851eab0a2dd69b9452aeea6d63cd53e0bf
Binary files /dev/null and b/sounds/letters/u.gsm differ
diff --git a/sounds/letters/v.gsm b/sounds/letters/v.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..e7ded5bd09e9eed61596cb0d371be1b257738875
Binary files /dev/null and b/sounds/letters/v.gsm differ
diff --git a/sounds/letters/w.gsm b/sounds/letters/w.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..6b0df91697b51ad88ad94af56810283b4060c9df
Binary files /dev/null and b/sounds/letters/w.gsm differ
diff --git a/sounds/letters/x.gsm b/sounds/letters/x.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..70c47e521305de7de424c361f12b458fd0335e60
Binary files /dev/null and b/sounds/letters/x.gsm differ
diff --git a/sounds/letters/y.gsm b/sounds/letters/y.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..19ffa007e36ce3a74829706568e752af602e0a32
Binary files /dev/null and b/sounds/letters/y.gsm differ
diff --git a/sounds/letters/z.gsm b/sounds/letters/z.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..91938233761c4145ead593db6a17322da77c2181
Binary files /dev/null and b/sounds/letters/z.gsm differ
diff --git a/sounds/letters/zed.gsm b/sounds/letters/zed.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..39782f73415c3a1c9be69a57e137fbf454f6a7be
Binary files /dev/null and b/sounds/letters/zed.gsm differ
diff --git a/sounds/phonetic/9_p.gsm b/sounds/phonetic/9_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..d42bec688411e958ae53d70ab90baf2f79ee7338
Binary files /dev/null and b/sounds/phonetic/9_p.gsm differ
diff --git a/sounds/phonetic/a_p.gsm b/sounds/phonetic/a_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..fa6edfe8f5b3c81116c6d93ef84610ed3aad7b41
Binary files /dev/null and b/sounds/phonetic/a_p.gsm differ
diff --git a/sounds/phonetic/b_p.gsm b/sounds/phonetic/b_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..187f0dd1bb4f20b48300786bb9eeba1df1a57c88
Binary files /dev/null and b/sounds/phonetic/b_p.gsm differ
diff --git a/sounds/phonetic/c_p.gsm b/sounds/phonetic/c_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..2c168ec5586f25c5fab1b019b01f9b4dbe82a2e1
Binary files /dev/null and b/sounds/phonetic/c_p.gsm differ
diff --git a/sounds/phonetic/d_p.gsm b/sounds/phonetic/d_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..5550bfc1be347c291f76d2b9a898502623667431
Binary files /dev/null and b/sounds/phonetic/d_p.gsm differ
diff --git a/sounds/phonetic/e_p.gsm b/sounds/phonetic/e_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..46ae8b6f5882b5d3cea3e8bd3f316069c167df38
Binary files /dev/null and b/sounds/phonetic/e_p.gsm differ
diff --git a/sounds/phonetic/f_p.gsm b/sounds/phonetic/f_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..6b4f30dca99e2444fb3913037907d9babc28d313
Binary files /dev/null and b/sounds/phonetic/f_p.gsm differ
diff --git a/sounds/phonetic/g_p.gsm b/sounds/phonetic/g_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..38aae4fdb9213dcb77931be4103a2d33ec150c11
Binary files /dev/null and b/sounds/phonetic/g_p.gsm differ
diff --git a/sounds/phonetic/h_p.gsm b/sounds/phonetic/h_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..fea0828b41a801c13d8424bcec06b79075d471e4
Binary files /dev/null and b/sounds/phonetic/h_p.gsm differ
diff --git a/sounds/phonetic/i_p.gsm b/sounds/phonetic/i_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..24abc33f9b559ccf31cc4f7e1e5c73e0f1597115
Binary files /dev/null and b/sounds/phonetic/i_p.gsm differ
diff --git a/sounds/phonetic/j_p.gsm b/sounds/phonetic/j_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..32c1311eebe0c23e2f3e76d154ff43b3b387e701
Binary files /dev/null and b/sounds/phonetic/j_p.gsm differ
diff --git a/sounds/phonetic/k_p.gsm b/sounds/phonetic/k_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..c26d966856eb411dc5a9f557a4854e42dc8084cc
Binary files /dev/null and b/sounds/phonetic/k_p.gsm differ
diff --git a/sounds/phonetic/l_p.gsm b/sounds/phonetic/l_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..0775e96e33b69770c8efcb71bdfaad3cf91cd68c
Binary files /dev/null and b/sounds/phonetic/l_p.gsm differ
diff --git a/sounds/phonetic/m_p.gsm b/sounds/phonetic/m_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..7d3c66f03881d129b08bd8fd97cff690ee412e7d
Binary files /dev/null and b/sounds/phonetic/m_p.gsm differ
diff --git a/sounds/phonetic/n_p.gsm b/sounds/phonetic/n_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..f399f3702b41cbd0cfbe9104a07bad786fa7a21e
Binary files /dev/null and b/sounds/phonetic/n_p.gsm differ
diff --git a/sounds/phonetic/o_p.gsm b/sounds/phonetic/o_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..d9de39c730fe576e85989d1fa6f8cf0b0cf4f76e
--- /dev/null
+++ b/sounds/phonetic/o_p.gsm
@@ -0,0 +1,2 @@
+Ô÷ƒs’P VìµéeUñÉ$dyeVѹ[#[#P²JäBÉ#Ôx\zIâ®ØãØܘÌFÐËVëäŠTçÖóç	6rÕÛÔ·j©ÐçI"³v.Õ›*¤{u¬£›ÆL3:I“j1]–ÙÔ7Z¥IŸ¦dÛkˆÓQF‡¤¶ºÕñEÖz—ñ:ï»#Ô¶<,ƒ¡§H1Š˜êQ=ÎÜ¡#!]iñ²Ý^[TÓóCá
+ñC€ìò¼¡£fÏ‘ÇQD‚ùîZ£¡À-=ÊÛÓ±KeCñd‚±îY#£D”¹ÒL«QæÊ3YISD0;¾K%Ó­RiÂSe¦5’¬ÚSÂ2„«²pSd˜ÓÙ\¥f¶Ð¹æäÓ*j^™U(8¢]JÞSFÇ©[¦ÅÔ¨
ó¬Væt›&OÓæjÖ™¨ÇKŒ¥ÜXÅÕ±QW^äNufF)ºÃ»Öµdâ×ç‹I½öڏ»'S馄V‡.Dë¬Âqy©S0Øê¥	ÛÖB‰Sáœâ"sµ¾ÐàÂèãî÷»n³zîÙ¯¤ÕJªâ(M“N³Z´i>*‘dƒÂIŠS`qD Ø1é]ØîÅ™‹h㎣V[}®Æ/͹q&_iG24bÆ×qJ¼×²Í’a‹e6"Âã>1’¤“°A£	2š˜A¹6²ÝþÖëa…ÚÜo·ºÙ,ì@|=.“lÚ@²êm²âä@HéfBÛÕ¢QÐÙ¸ J܉ÀbÆàZãQÉ%„ I3–<å¸@7cn&ÜسÖÕÛåÈãm·qèÆ’}4¥h†IrÆ#¸$𤌢š×©b†îE'ÍæBµ£r.d¯Âçy£kzÄ´·þËÔ ]—ÒYj"Ö)$PÈ6×2·»¨§ÆÛHŸ[E!	hþsÔ¢UY·Ixc-Ÿd]¥dmB×]'¸ßqTŠ¹.’9+ÔäEa¿(¥8uêžcHFLÐôùÇ&
…)¹Ôƨ¹[éÂœÔçE È‡õb•NÓgz­º£ÎǦ™oÉmh)"¶úÕ(Ké©kdFµSÄàkÅ„lÒG"o'¸âMf»mÄúo2òÕª:eêl£½âþLmG5×2I›ÛDpcs\¥ÚĮ۩4PÔç4¥aÜÆxëqÇ"Ý#Åhr¸œàƒÙcm*5bÂÈnSåÖ,àèåD¼±¹+yCXÒJÖwB6©vÒxå3z±HäÖk:¥àvÃØ’M
íñc©TÒQñ$D:ñ®­vä¤Î¯Ö«B!©šÂªÛ¾ñCk”óz‚È(4´ƒb­w¢‹×2NÚðÄ&¼’-xáÖ؈Yð	k¯Çð¢6œ£·×q3M©€ÂFÓ‰Dü~Á¥“T›|¡%º«ðá7Ùm4ž×´KiîÀ©'^£È؁5%rWœnÁ(ÂQ:¤Ø ZÔ¸BR×µsPêÎ@ÊÞrÉ#ð`ePl·
Ð@$ã+v@'¢¶Û
\ No newline at end of file
diff --git a/sounds/phonetic/p_p.gsm b/sounds/phonetic/p_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..bb5ce86312a2e8fd41af786b03f00f6093d31a2f
Binary files /dev/null and b/sounds/phonetic/p_p.gsm differ
diff --git a/sounds/phonetic/q_p.gsm b/sounds/phonetic/q_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..8dfdb5e051436cebfbd7c34e1d2720355d4ca103
Binary files /dev/null and b/sounds/phonetic/q_p.gsm differ
diff --git a/sounds/phonetic/r_p.gsm b/sounds/phonetic/r_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..47d554651da63ff21f9938fe22ce8052826ffcc2
Binary files /dev/null and b/sounds/phonetic/r_p.gsm differ
diff --git a/sounds/phonetic/s_p.gsm b/sounds/phonetic/s_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..8a85860a5169da5737e2cf48cb39cd9968df3453
Binary files /dev/null and b/sounds/phonetic/s_p.gsm differ
diff --git a/sounds/phonetic/t_p.gsm b/sounds/phonetic/t_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..3701e08c6d4ced3828b4bccaa6c62604fcfd8e84
Binary files /dev/null and b/sounds/phonetic/t_p.gsm differ
diff --git a/sounds/phonetic/u_p.gsm b/sounds/phonetic/u_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..39b388834861b2766376f51b2627b8fae2bf7d89
Binary files /dev/null and b/sounds/phonetic/u_p.gsm differ
diff --git a/sounds/phonetic/v_p.gsm b/sounds/phonetic/v_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..ad907350152e9500938bdf6e332c83a224417218
Binary files /dev/null and b/sounds/phonetic/v_p.gsm differ
diff --git a/sounds/phonetic/w_p.gsm b/sounds/phonetic/w_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..9d2199c102046072eb47dd6c4c525eafe5deb1ae
Binary files /dev/null and b/sounds/phonetic/w_p.gsm differ
diff --git a/sounds/phonetic/x_p.gsm b/sounds/phonetic/x_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..86269a9be821f9eb449926cbdd162ae36f1142df
Binary files /dev/null and b/sounds/phonetic/x_p.gsm differ
diff --git a/sounds/phonetic/y_p.gsm b/sounds/phonetic/y_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..ce70b060956c71b5d4edb0bf1a4c43d603162155
Binary files /dev/null and b/sounds/phonetic/y_p.gsm differ
diff --git a/sounds/phonetic/z_p.gsm b/sounds/phonetic/z_p.gsm
new file mode 100755
index 0000000000000000000000000000000000000000..e7165c1e992148f5dc0277dbd4fe2d6f99b4d3f1
Binary files /dev/null and b/sounds/phonetic/z_p.gsm differ