Index: src/orca/scripts/apps/evolution/script.py
===================================================================
--- src/orca/scripts/apps/evolution/script.py	(revision 3893)
+++ src/orca/scripts/apps/evolution/script.py	(working copy)
@@ -38,7 +38,6 @@
 import orca.speech as speech
 import orca.speechserver as speechserver
 import orca.settings as settings
-import orca.chnames as chnames
 
 from orca.orca_i18n import _ # for gettext support
 
@@ -526,7 +525,7 @@
         line = self.adjustForRepeats(string)
 
         if self.speakNewLine(obj):
-            speech.speak(chnames.getCharacterName("\n"), None, False)
+            speech.speakCharacter("\n", None)
 
         if self.speakBlankLine(obj):
             # Translators: "blank" is a short word to mean the
@@ -631,7 +630,6 @@
             self.presentMessageLine(event.source, newLocusOfFocus)
             return
 
-
         # 2) Mail view: current message pane: "standard" mail header lines.
         #
         # Check if the focus is in the From:, To:, Subject: or Date: headers
@@ -1424,7 +1422,6 @@
         else:
             return False
 
-
     def onStateChanged(self, event):
         """Called whenever an object's state changes.  We are only
         interested in "object:state-changed:showing" events for any
Index: src/orca/scripts/apps/gnome-terminal.py
===================================================================
--- src/orca/scripts/apps/gnome-terminal.py	(revision 3893)
+++ src/orca/scripts/apps/gnome-terminal.py	(working copy)
@@ -156,9 +156,14 @@
         #
         character = event.any_data.decode("UTF-8")[0].encode("UTF-8")
         if character.isupper():
-            speech.speak(character, self.voices[settings.UPPERCASE_VOICE])
+            voice = self.voices[settings.UPPERCASE_VOICE]
         else:
-            speech.speak(character)
+            voice = self.voices[settings.DEFAULT_VOICE]
+
+        if len(character.decode('utf-8')) == 1:
+            speech.speakCharacter(character, voice)
+        else:
+            speech.speak(character, voice, False)
 
     def onTextInserted(self, event):
         """Called whenever text is inserted into an object.
Index: src/orca/scripts/apps/gcalctool/script.py
===================================================================
--- src/orca/scripts/apps/gcalctool/script.py	(revision 3893)
+++ src/orca/scripts/apps/gcalctool/script.py	(working copy)
@@ -35,6 +35,8 @@
 from speech_generator import SpeechGenerator
 from where_am_i import WhereAmI
 
+from orca.orca_i18n import _ # for gettext support
+
 ########################################################################
 #                                                                      #
 # The GCalcTool script class.                                          #
@@ -99,7 +101,11 @@
             # gcalctool display. Inform the user.
             #
             if len(d) == 0:
-                contents = "Unable to get calculator display"
+                # Translators: this is an indication that Orca is unable to
+                # obtain the display of the gcalctool calculator, which is
+                # the area where calculation results are presented.
+                #
+                contents = _("Unable to get calculator display")
                 speech.speak(contents)
                 braille.displayMessage(contents)
             else:
Index: src/orca/scripts/apps/acroread.py
===================================================================
--- src/orca/scripts/apps/acroread.py	(revision 3893)
+++ src/orca/scripts/apps/acroread.py	(working copy)
@@ -22,13 +22,12 @@
 __id__        = "$Id:$"
 __version__   = "$Revision:$"
 __date__      = "$Date:$"
-__copyright__ = "Copyright (c) 2007-2008 Sun Microsystems Inc. and Joanmarie Diggs"
+__copyright__ = "Copyright (c) 2007-2008 Sun Microsystems Inc. Joanmarie Diggs"
 __license__   = "LGPL"
 
 import pyatspi
 
 import orca.braille as braille
-import orca.chnames as chnames
 import orca.debug as debug
 import orca.default as default
 import orca.input_event as input_event
@@ -662,9 +661,7 @@
                     lastCharPW = penultimateWord[len(penultimateWord) - 1]
                     if lastCharPW == "\n":
                         voice = self.voices[settings.DEFAULT_VOICE]
-                        speech.speak(chnames.getCharacterName("\n"),
-                                     voice,
-                                     False)
+                        speech.speakCharacter("\n", voice)
                         if penultimateWord != lastWord:
                             word = lastWord
 
@@ -677,9 +674,7 @@
                     lastChar = word[len(word) - 1]
                     if lastChar == "\n" and lastWord != word:
                         voice = self.voices[settings.DEFAULT_VOICE]
-                        speech.speak(chnames.getCharacterName("\n"),
-                                     voice,
-                                     False)
+                        speech.speakCharacter("\n", voice)
                     if lastWord == word:
                         return
 
Index: src/orca/scripts/apps/soffice/script.py
===================================================================
--- src/orca/scripts/apps/soffice/script.py	(revision 3893)
+++ src/orca/scripts/apps/soffice/script.py	(working copy)
@@ -29,7 +29,6 @@
 import pyatspi
 
 import orca.debug as debug
-import orca.chnames as chnames
 import orca.default as default
 import orca.input_event as input_event
 import orca.braille as braille
@@ -636,7 +635,6 @@
                     return root_pane
         return parent
 
-
     def checkForTableBoundry(self, oldFocus, newFocus):
         """Check to see if we've entered or left a table.
         When entering a table, announce the table dimensions.
@@ -1482,7 +1480,6 @@
             #
             default.Script.onWindowActivated(self, event)
 
-
     # This method tries to detect and handle the following cases:
     # 1) Writer: spell checking dialog.
 
@@ -1536,7 +1533,6 @@
 
         default.Script.onNameChanged(self, event)
 
-
     def onFocus(self, event):
         """Called whenever an object gets focus.
 
@@ -1729,7 +1725,6 @@
 
         default.Script.onStateChanged(self, event)
 
-
     # This method tries to detect and handle the following cases:
     # 1) Calc: spread sheet Name Box line.
 
@@ -1928,7 +1923,7 @@
 
         # Speak a newline, if appropriate.
         if self.speakNewLine(event.source):
-            speech.speak(chnames.getCharacterName("\n"), None, False)
+            speech.speakCharacter("\n", None)
 
         # Speak a blank line, if appropriate.
         if self.speakBlankLine(event.source):
@@ -1939,7 +1934,6 @@
 
         default.Script.onCaretMoved(self, event)
 
-
     def speakNewLine(self, obj):
         """Returns True if a newline should be spoken.
            Otherwise, returns False.
@@ -1997,7 +1991,6 @@
 
         return False
 
-
     def speakBlankLine(self, obj):
         """Returns True if a blank line should be spoken.
         Otherwise, returns False.
Index: src/orca/scripts/toolkits/Gecko/script.py
===================================================================
--- src/orca/scripts/toolkits/Gecko/script.py	(revision 3893)
+++ src/orca/scripts/toolkits/Gecko/script.py	(working copy)
@@ -748,8 +748,6 @@
                 #
                 _("Speaks entire document."))
                 
-        
-
     def getListeners(self):
         """Sets up the AT-SPI event listeners for this script.
         """
@@ -1701,7 +1699,6 @@
                                                   startOffset, endOffset),
                        voice]
 
-
             obj = contents[-1][0]
             characterOffset = max(0, contents[-1][2] - 1)
 
@@ -6364,7 +6361,8 @@
         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
@@ -8809,8 +8807,6 @@
         speech.speak(string)
         braille.displayMessage(string)
         
-
-
     def speakWordUnderMouse(self, acc):
         """Determine if the speak-word-under-mouse capability applies to
         the given accessible.
Index: src/orca/default.py
===================================================================
--- src/orca/default.py	(revision 3893)
+++ src/orca/default.py	(working copy)
@@ -64,7 +64,6 @@
 import speechserver
 import mouse_review
 
-
 from orca_i18n import _         # for gettext support
 from orca_i18n import ngettext  # for ngettext support
 from orca_i18n import Q_        # to provide qualified translatable strings
@@ -1993,7 +1992,6 @@
         if text.getNSelections():
             text.setSelection(0, context.currentOffset, context.currentOffset)
 
-
     def sayAll(self, inputEvent):
         clickCount = self.getClickCount()
         doubleClick = clickCount == 2
@@ -2157,13 +2155,13 @@
             lastChar = lastWord[len(lastWord) - 1]
             if lastChar == "\n" and lastWord != word:
                 voice = self.voices[settings.DEFAULT_VOICE]
-                speech.speak(chnames.getCharacterName("\n"), voice, False)
+                speech.speakCharacter("\n", voice)
 
         if lastKey == "Left" and len(word) > 0:
             lastChar = word[len(word) - 1]
             if lastChar == "\n" and lastWord != word:
                 voice = self.voices[settings.DEFAULT_VOICE]
-                speech.speak(chnames.getCharacterName("\n"), voice, False)
+                speech.speakCharacter("\n", voice)
 
         if self.getLinkIndex(obj, offset) >= 0:
             voice = self.voices[settings.HYPERLINK_VOICE]
@@ -2343,14 +2341,14 @@
             if prevChar == "\n":
                 # The cursor is at the beginning of a line.
                 # Speak a newline.
-                speech.speak(chnames.getCharacterName("\n"), voice, False)
+                speech.speakCharacter("\n", voice)
 
         # Handle speaking newlines when the left-arrow key is pressed.
         elif orca_state.lastNonModifierKeyEvent.event_string == "Left":
             if character == "\n":
                 # The cursor is at the end of a line.
                 # Speak a newline.
-                speech.speak(chnames.getCharacterName("\n"), voice, False)
+                speech.speakCharacter("\n", voice)
 
         if character == "\n":
             if prevChar == "\n":
@@ -2362,8 +2360,7 @@
                     #
                     speech.speak(_("blank"), voice, False)
         else:
-            speech.speak(chnames.getCharacterName(character), voice, False)
-
+            speech.speakCharacter(character, voice)
 
     def presentTooltip(self, obj):
         """
@@ -3352,6 +3349,9 @@
         # right now because it is typically something else
         # related to this event.
         #
+        if len(character.decode('utf-8')) == 1:
+            speech.speakCharacter(character, voice)
+        else:
         speech.speak(character, voice, False)
 
     def onTextInserted(self, event):
@@ -6212,7 +6212,6 @@
         Arguments:
         - obj: the Accessible object
 
-      
         Returns: list containing strings: [mnemonic, accelerator, shortcut]
         """
 
@@ -7041,7 +7040,6 @@
         """Creates a Python dict from a typical attributes list returned from
         different AT-SPI methods.
 
-
         Arguments:
         - dict_string: A list of colon seperated key/value pairs seperated by
         semicolons.
Index: src/orca/orca.py
===================================================================
--- src/orca/orca.py	(revision 3893)
+++ src/orca/orca.py	(working copy)
@@ -934,7 +934,6 @@
         debug.println(debug.LEVEL_CONFIGURATION,
                       "Magnification module has NOT been initialized.")
 
-
     # I'm not sure where else this should go. But it doesn't really look
     # right here.
     try:
Index: src/orca/speech.py
===================================================================
--- src/orca/speech.py	(revision 3893)
+++ src/orca/speech.py	(working copy)
@@ -31,6 +31,7 @@
 
 import time
 
+import chnames
 import debug
 import keynames
 import orca
@@ -209,6 +210,7 @@
     if settings.silenceSpeech:
         return
 
+    character = chnames.getCharacterName(character)
     debug.println(debug.LEVEL_INFO, "SPEECH OUTPUT: '" + character + "'")
     log.info("SPEECH OUTPUT: '%s'" % character)
 
Index: src/orca/gnomespeechfactory.py
===================================================================
--- src/orca/gnomespeechfactory.py	(revision 3893)
+++ src/orca/gnomespeechfactory.py	(working copy)
@@ -652,7 +652,7 @@
                      used to augment/override the default
                      voice settings.
         """
-        self.speak(character, acss)
+        self.speak(chnames.getCharacterName(character), acss)
 
     def speakUtterances(self, utterances, acss=None, interrupt=True):
         """Speaks the given list of utterances immediately.
@@ -881,6 +881,13 @@
         if self.__sayAll:
             self.stop()
 
+        if not acss and text and text.isupper():
+            try:
+                acss = \
+                    orca_state.activeScript.voices[settings.UPPERCASE_VOICE]
+            except:
+                pass
+
         self.__speak(text, acss, interrupt)
 
     def isSpeaking(self):
