Index: src/orca/default.py
===================================================================
--- src/orca/default.py	(revision 3728)
+++ src/orca/default.py	(working copy)
@@ -2316,7 +2316,7 @@
                     #
                     speech.speak(_("blank"), voice, False)
         else:
-            speech.speak(chnames.getCharacterName(character), voice, False)
+            speech.speakCharacter(character, voice)
 
         self.speakTextSelectionState(obj, startOffset, endOffset)
 
@@ -3296,12 +3296,16 @@
             voice = self.voices[settings.UPPERCASE_VOICE]
         else:
             voice = self.voices[settings.DEFAULT_VOICE]
-
-        # We won't interrupt what else might be being spoken
-        # right now because it is typically something else
-        # related to this event.
+        # make sure single characters are sent to speakCharacter() rather than to speak()
         #
-        speech.speak(character, voice, False)
+        if len(character) ==1:
+            speech.speakCharacter(character, voice)
+        else:
+            # We won't interrupt what else might be being spoken
+            # right now because it is typically something else
+            # related to this event.
+            #
+            speech.speak(character, voice, False)
 
     def onTextInserted(self, event):
         """Called whenever text is inserted into an object.
@@ -4442,10 +4446,10 @@
 
         for (charIndex, character) in enumerate(itemString.decode("UTF-8")):
             if character.isupper():
-                speech.speak(character.encode("UTF-8"),
+                speech.speakCharacter(character.encode("UTF-8"),
                              self.voices[settings.UPPERCASE_VOICE])
             else:
-                speech.speak(character.encode("UTF-8"))
+                speech.speakCharacter(character.encode("UTF-8"))
 
     def _reviewCurrentItem(self, inputEvent, targetCursorCell=0,
                            speechType=1):
@@ -6270,7 +6274,10 @@
             else:
                 voice =  settings.voices[settings.DEFAULT_VOICE]
             phoneticString = phonnames.getPhoneticName(character)
-            speech.speak(phoneticString, voice)
+            if len(phoneticString)==1:
+                speech.speakCharacter(phoneticString, voice)
+            else:
+                speech.speak(phoneticString, voice)
 
     def printAncestry(self, child):
         """Prints a hierarchical view of a child's ancestry."""
Index: src/orca/Gecko.py
===================================================================
--- src/orca/Gecko.py	(revision 3728)
+++ src/orca/Gecko.py	(working copy)
@@ -1,6 +1,6 @@
 # Orca
 #
-# Copyright 2005-2007 Sun Microsystems Inc.
+# Copyright 2005-2008 Sun Microsystems Inc.
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Library General Public
@@ -8207,7 +8207,7 @@
         character = self.getCharacterAtOffset(obj, characterOffset)
         if obj:
             if character and character != self.EMBEDDED_OBJECT_CHARACTER:
-                speech.speak(character, self.getACSS(obj, character), False)
+                speech.speakCharacter(character, self.getACSS(obj, character))
             elif obj.getRole() != pyatspi.ROLE_ENTRY:
                 # We won't have a character if we move to the end of an
                 # entry (in which case we're not on a character and therefore
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 3728)
+++ ChangeLog	(working copy)
@@ -27,6 +27,14 @@
 	  README:
           Prep for Orca v2.22.0.
 	
+2008-03-05  Tomas Cerha  <cerha@brailcom.org>
+
+		* src/orca/default.py (Script.sayCharacter): Use
+	`speech.speakCharacter()' instead of `speech.speak()'.
+
+* src/orca/Gecko.py (Script.speakCharacterAtOffset): Use
+	`speech.speakCharacter()' instead of `speech.speak()'.
+
 2008-03-03  Eitan Isaacson  <eitan@ascender.com>
 
 	* src/orca/Gecko.py:

