Index: src/orca/scripts/planner.py
===================================================================
--- src/orca/scripts/planner.py	(revision 2122)
+++ src/orca/scripts/planner.py	(working copy)
@@ -62,8 +62,8 @@
         self._debugGenerator("_getBrailleRegionsForRadioButton", obj)
 
         text = ""
-        text = util.appendString(text, self.getDisplayedLabel(obj))
-        text = util.appendString(text, self.getDisplayedText(obj))
+        text = self.appendString(text, self.getDisplayedLabel(obj))
+        text = self.appendString(text, self.getDisplayedText(obj))
 
         # First special toggle button is the one in the toolbar and
         # that it has no name Application should implement an
@@ -97,11 +97,11 @@
             text += allLabels[0].name
 
         if obj.state.count(atspi.Accessibility.STATE_CHECKED):
-            text = util.appendString(text, "&=y")
+            text = self.appendString(text, "&=y")
         else:
-            text = util.appendString(text, "& y")
+            text = self.appendString(text, "& y")
 
-        text = util.appendString(text, self._getTextForRole(obj))
+        text = self.appendString(text, self._getTextForRole(obj))
 
         regions = []
         componentRegion = braille.Component(obj, text)
Index: src/orca/util.py
===================================================================
--- src/orca/util.py	(revision 2124)
+++ src/orca/util.py	(working copy)
@@ -43,109 +43,3 @@
 
 from orca_i18n import _ # for gettext support
 
-# Unicode currency symbols (populated by the getUnicodeCurrencySymbols()
-# routine).
-#
-_unicodeCurrencySymbols = []
-
-def isSameObject(obj1, obj2):
-    if (obj1 == obj2):
-        return True
-    elif (not obj1) or (not obj2):
-        return False
-
-    try:
-        if obj1.name != obj2.name:
-            return False
-
-        # When we're looking at children of objects that manage
-        # their descendants, we will often get different objects
-        # that point to the same logical child.  We want to be able
-        # to determine if two objects are in fact pointing to the same child.
-        # If we cannot do so easily (i.e., object equivalence), we examine
-        # the hierarchy and the object index at each level.
-        #
-        parent1 = obj1
-        parent2 = obj2
-        while (parent1 and parent2 and \
-                parent1.state.count(atspi.Accessibility.STATE_TRANSIENT) and \
-                parent2.state.count(atspi.Accessibility.STATE_TRANSIENT)):
-            if parent1.index != parent2.index:
-                return False
-            parent1 = parent1.parent
-            parent2 = parent2.parent
-        if parent1 and parent2 and parent1 == parent2:
-            return True
-    except:
-        pass
-
-    # In java applications, TRANSIENT state is missing for tree items
-    # (fix for bug #352250)
-    #
-    try:
-        parent1 = obj1
-        parent2 = obj2
-        while parent1 and parent2 and \
-                parent1.role == rolenames.ROLE_LABEL and \
-                parent2.role == rolenames.ROLE_LABEL:
-            if parent1.index != parent2.index:
-                return False
-            parent1 = parent1.parent
-            parent2 = parent2.parent
-        if parent1 and parent2 and parent1 == parent2:
-            return True
-    except:
-        pass
-
-    return False
-
-def appendString(text, newText, delimiter=" "):
-    """Appends the newText to the given text with the delimiter in between
-    and returns the new string.  Edge cases, such as no initial text or
-    no newText, are handled gracefully."""
-
-    if (not newText) or (len(newText) == 0):
-        return text
-    elif text and len(text):
-        return text + delimiter + newText
-    else:
-        return newText
-
-def getUnicodeCurrencySymbols():
-    """Return a list of the unicode currency symbols, populating the list
-    if this is the first time that this routine has been called.
-
-    Returns a list of unicode currency symbols.
-    """
-
-    global _unicodeCurrencySymbols
-
-    if not _unicodeCurrencySymbols:
-        _unicodeCurrencySymbols = [ \
-            u'\u0024',     # dollar sign
-            u'\u00A2',     # cent sign
-            u'\u00A3',     # pound sign
-            u'\u00A4',     # currency sign
-            u'\u00A5',     # yen sign
-            u'\u0192',     # latin small letter f with hook
-            u'\u060B',     # afghani sign
-            u'\u09F2',     # bengali rupee mark
-            u'\u09F3',     # bengali rupee sign
-            u'\u0AF1',     # gujarati rupee sign
-            u'\u0BF9',     # tamil rupee sign
-            u'\u0E3F',     # thai currency symbol baht
-            u'\u17DB',     # khmer currency symbol riel
-            u'\u2133',     # script capital m
-            u'\u5143',     # cjk unified ideograph-5143
-            u'\u5186',     # cjk unified ideograph-5186
-            u'\u5706',     # cjk unified ideograph-5706
-            u'\u5713',     # cjk unified ideograph-5713
-            u'\uFDFC',     # rial sign
-        ]
-
-        # Add 20A0 (EURO-CURRENCY SIGN) to 20B5 (CEDI SIGN)
-        #
-        for ordChar in range(ord(u'\u20A0'), ord(u'\u20B5') + 1):
-            _unicodeCurrencySymbols.append(unichr(ordChar))
-
-    return _unicodeCurrencySymbols
Index: src/orca/default.py
===================================================================
--- src/orca/default.py	(revision 2124)
+++ src/orca/default.py	(working copy)
@@ -54,6 +54,7 @@
 import orca_state
 import phonnames
 import pronunciation_dict
+import punctuation_settings
 import rolenames
 import script
 import settings
@@ -96,6 +97,11 @@
         #
         self.EMBEDDED_OBJECT_CHARACTER = u'\ufffc'
 
+        # Unicode currency symbols (populated by the 
+        # getUnicodeCurrencySymbols() routine).
+        #
+        self._unicodeCurrencySymbols = []
+
         # Used by the drawOutline routine.
         #
         self._display = None
@@ -1587,7 +1593,7 @@
         # the objects really could be different even though they seem the
         # same.  Logged as bug 319675.]]]
         #
-        if util.isSameObject(oldLocusOfFocus, newLocusOfFocus):
+        if self.isSameObject(oldLocusOfFocus, newLocusOfFocus):
             return
 
         # Well...now that we got that behind us, let's do what we're supposed
@@ -3452,6 +3458,70 @@
 # here so that they can be customized in application scripts if so desired.
 # 
 
+    def isSameObject(self, obj1, obj2):
+        if (obj1 == obj2):
+            return True
+        elif (not obj1) or (not obj2):
+            return False
+
+        try:
+            if obj1.name != obj2.name:
+                return False
+
+            # When we're looking at children of objects that manage
+            # their descendants, we will often get different objects
+            # that point to the same logical child.  We want to be able
+            # to determine if two objects are in fact pointing to the 
+            # same child.
+            # If we cannot do so easily (i.e., object equivalence), we examine
+            # the hierarchy and the object index at each level.
+            #
+            parent1 = obj1
+            parent2 = obj2
+            while (parent1 and parent2 and \
+                    parent1.state.count(atspi.Accessibility.STATE_TRANSIENT) and \
+                    parent2.state.count(atspi.Accessibility.STATE_TRANSIENT)):
+                if parent1.index != parent2.index:
+                    return False
+                parent1 = parent1.parent
+                parent2 = parent2.parent
+            if parent1 and parent2 and parent1 == parent2:
+                return True
+        except:
+            pass
+
+        # In java applications, TRANSIENT state is missing for tree items
+        # (fix for bug #352250)
+        #
+        try:
+            parent1 = obj1
+            parent2 = obj2
+            while parent1 and parent2 and \
+                    parent1.role == rolenames.ROLE_LABEL and \
+                    parent2.role == rolenames.ROLE_LABEL:
+                if parent1.index != parent2.index:
+                    return False
+                parent1 = parent1.parent
+                parent2 = parent2.parent
+            if parent1 and parent2 and parent1 == parent2:
+                return True
+        except:
+            pass
+
+        return False
+
+    def appendString(self, text, newText, delimiter=" "):
+        """Appends the newText to the given text with the delimiter in between
+        and returns the new string.  Edge cases, such as no initial text or
+        no newText, are handled gracefully."""
+    
+        if (not newText) or (len(newText) == 0):
+            return text
+        elif text and len(text):
+            return text + delimiter + newText
+        else:
+            return newText
+
     def __hasLabelForRelation(self, label):
         """Check if label has a LABEL_FOR relation
 
@@ -3504,6 +3574,43 @@
 
         return False
 
+    def getUnicodeCurrencySymbols(self):
+        """Return a list of the unicode currency symbols, populating the list
+        if this is the first time that this routine has been called. 
+    
+        Returns a list of unicode currency symbols.
+        """
+    
+        if not self._unicodeCurrencySymbols:
+            self._unicodeCurrencySymbols = [ \
+                u'\u0024',     # dollar sign
+                u'\u00A2',     # cent sign
+                u'\u00A3',     # pound sign
+                u'\u00A4',     # currency sign
+                u'\u00A5',     # yen sign 
+                u'\u0192',     # latin small letter f with hook
+                u'\u060B',     # afghani sign
+                u'\u09F2',     # bengali rupee mark
+                u'\u09F3',     # bengali rupee sign
+                u'\u0AF1',     # gujarati rupee sign
+                u'\u0BF9',     # tamil rupee sign
+                u'\u0E3F',     # thai currency symbol baht
+                u'\u17DB',     # khmer currency symbol riel
+                u'\u2133',     # script capital m
+                u'\u5143',     # cjk unified ideograph-5143
+                u'\u5186',     # cjk unified ideograph-5186
+                u'\u5706',     # cjk unified ideograph-5706
+                u'\u5713',     # cjk unified ideograph-5713
+                u'\uFDFC',     # rial sign
+            ]
+
+            # Add 20A0 (EURO-CURRENCY SIGN) to 20B5 (CEDI SIGN)
+            #
+            for ordChar in range(ord(u'\u20A0'), ord(u'\u20B5') + 1):
+                self._unicodeCurrencySymbols.append(unichr(ordChar))
+
+        return self._unicodeCurrencySymbols
+
     def getDisplayedLabel(self, object):
         """If there is an object labelling the given object, return the
         text being displayed for the object labelling this object.
@@ -3539,7 +3646,7 @@
                                                        relation.getTarget(i))
                     if not target in allTargets:
                         allTargets.append(target)
-                        label = util.appendString(label, self.getDisplayedText(target))
+                        label = self.appendString(label, self.getDisplayedText(target))
 
         # [[[TODO: HACK - we've discovered oddness in hierarchies such as
         # the gedit Edit->Preferences dialog.  In this dialog, we have
@@ -3716,7 +3823,7 @@
                 if child.role == rolenames.ROLE_LABEL:
                     childText = self.getDisplayedText(child)
                     if childText and len(childText):
-                        displayedText = util.appendString(displayedText, childText)
+                        displayedText = self.appendString(displayedText, childText)
 
         return displayedText
 
Index: src/orca/Gecko.py
===================================================================
--- src/orca/Gecko.py	(revision 2122)
+++ src/orca/Gecko.py	(working copy)
@@ -170,8 +170,8 @@
         #
         text = ""
         if not self._script.inDocumentContent():
-            text = util.appendString(text, self.getDisplayedLabel(obj))
-            text = util.appendString(text, self.getDisplayedText(obj))
+            text = self.appendString(text, self.getDisplayedLabel(obj))
+            text = self.appendString(text, self.getDisplayedText(obj))
         else:
             isLabelled = False
             relations = obj.relations
@@ -182,14 +182,14 @@
                         isLabelled = True
                         break
             if not isLabelled and obj.name and len(obj.name):
-                text = util.appendString(text, obj.name)
+                text = self.appendString(text, obj.name)
 
         if obj.state.count(atspi.Accessibility.STATE_CHECKED):
-            text = util.appendString(text, "<x>")
+            text = self.appendString(text, "<x>")
         else:
-            text = util.appendString(text, "< >")
+            text = self.appendString(text, "< >")
 
-        text = util.appendString(text, self._getTextForRole(obj))
+        text = self.appendString(text, self._getTextForRole(obj))
 
         regions = []
         componentRegion = braille.Component(obj, text)
@@ -321,8 +321,8 @@
         regions = []
 
         text = ""
-        text = util.appendString(text, self.getDisplayedLabel(obj))
-        text = util.appendString(text, self.getDisplayedText(obj))
+        text = self.appendString(text, self.getDisplayedLabel(obj))
+        text = self.appendString(text, self.getDisplayedText(obj))
 
         # If there's no text for the link, expose part of the
         # link to the user if the image is in a link.
@@ -335,10 +335,10 @@
                 for region in linkRegions:
                     text += region.string
         elif link:
-            text = util.appendString(text, self._getTextForRole(link))
+            text = self.appendString(text, self._getTextForRole(link))
 
-        text = util.appendString(text, self._getTextForValue(obj))
-        text = util.appendString(text, self._getTextForRole(obj))
+        text = self.appendString(text, self._getTextForValue(obj))
+        text = self.appendString(text, self._getTextForRole(obj))
 
         regions = []
         componentRegion = braille.Component(obj, text)
@@ -362,8 +362,8 @@
         regions = []
 
         text = ""
-        text = util.appendString(text, self.getDisplayedLabel(obj))
-        text = util.appendString(text, self.getDisplayedText(obj))
+        text = self.appendString(text, self.getDisplayedLabel(obj))
+        text = self.appendString(text, self.getDisplayedText(obj))
 
         # If there's no text for the link, expose part of the
         # URI to the user.
@@ -373,8 +373,8 @@
             if basename:
                 text = basename
 
-        text = util.appendString(text, self._getTextForValue(obj))
-        text = util.appendString(text, self._getTextForRole(obj))
+        text = self.appendString(text, self._getTextForValue(obj))
+        text = self.appendString(text, self._getTextForRole(obj))
 
         regions = []
         componentRegion = braille.Component(obj, text)
Index: src/orca/J2SE-access-bridge.py
===================================================================
--- src/orca/J2SE-access-bridge.py	(revision 2121)
+++ src/orca/J2SE-access-bridge.py	(working copy)
@@ -238,7 +238,9 @@
                 # or if the item doesn't have SELECTED state, but SELECTABLE and
                 # it was selected.
                 #
-                if util.isSameObject (selectedItem, orca_state.locusOfFocus):
+                if orca_state.activeScript and \
+                   orca_state.activeScript.isSameObject(selectedItem,  \
+                                                    orca_state.locusOfFocus):
                     if (orca_state.locusOfFocus.state.count(Accessibility.STATE_SELECTED) != 0 \
                                 and not orca_state.locusOfFocus.was_selected)   \
                         or (orca_state.locusOfFocus.state.count(Accessibility.STATE_SELECTED) == 0 \
@@ -283,7 +285,7 @@
         # This case is for LISTs which contain labels as items
         # (see Open dialog lists).
         #
-        if util.isSameObject (obj, orca_state.locusOfFocus):
+        if orca_state.activeScript.isSameObject(obj, orca_state.locusOfFocus):
             if obj.role == rolenames.ROLE_LABEL:
                 self.updateBraille(orca_state.locusOfFocus)
                 speech.speakUtterances(self.speechGenerator.getSpeech(orca_state.locusOfFocus, True))
Index: src/orca/braille.py
===================================================================
--- src/orca/braille.py	(revision 2121)
+++ src/orca/braille.py	(working copy)
@@ -312,7 +312,8 @@
         """
 
         self.accessible = accessible
-        [string, self.caretOffset, self.lineOffset] = \
+        if orca_state.activeScript:
+            [string, self.caretOffset, self.lineOffset] = \
                  orca_state.activeScript.getTextLineAtCaret(self.accessible)
 
         # Sometimes, gnome-terminal will give us very odd values when
Index: src/orca/braillegenerator.py
===================================================================
--- src/orca/braillegenerator.py	(revision 2124)
+++ src/orca/braillegenerator.py	(working copy)
@@ -293,10 +293,10 @@
         regions = []
 
         text = ""
-        text = util.appendString(text, self._script.getDisplayedLabel(obj))
-        text = util.appendString(text, self._script.getDisplayedText(obj))
-        text = util.appendString(text, self._getTextForValue(obj))
-        text = util.appendString(text, self._getTextForRole(obj))
+        text = self._script.appendString(text, self._script.getDisplayedLabel(obj))
+        text = self._script.appendString(text, self._script.getDisplayedText(obj))
+        text = self._script.appendString(text, self._getTextForValue(obj))
+        text = self._script.appendString(text, self._getTextForRole(obj))
 
         regions = []
         componentRegion = braille.Component(obj, text)
@@ -332,10 +332,10 @@
         self._debugGenerator("_getBrailleRegionsForAnimation", obj)
 
         text = ""
-        text = util.appendString(text, self._script.getDisplayedLabel(obj))
-        text = util.appendString(text, self._script.getDisplayedText(obj))
-        text = util.appendString(text, self._getTextForRole(obj))
-        text = util.appendString(text, obj.description, ": ")
+        text = self._script.appendString(text, self._script.getDisplayedLabel(obj))
+        text = self._script.appendString(text, self._script.getDisplayedText(obj))
+        text = self._script.appendString(text, self._getTextForRole(obj))
+        text = self._script.appendString(text, obj.description, ": ")
 
         regions = []
         componentRegion = braille.Component(obj, text)
@@ -375,15 +375,15 @@
         self._debugGenerator("_getBrailleRegionsForCheckBox", obj)
 
         text = ""
-        text = util.appendString(text, self._script.getDisplayedLabel(obj))
-        text = util.appendString(text, self._script.getDisplayedText(obj))
+        text = self._script.appendString(text, self._script.getDisplayedLabel(obj))
+        text = self._script.appendString(text, self._script.getDisplayedText(obj))
 
         if obj.state.count(atspi.Accessibility.STATE_CHECKED):
-            text = util.appendString(text, "<x>")
+            text = self._script.appendString(text, "<x>")
         else:
-            text = util.appendString(text, "< >")
+            text = self._script.appendString(text, "< >")
 
-        text = util.appendString(text, self._getTextForRole(obj))
+        text = self._script.appendString(text, self._getTextForRole(obj))
 
         regions = []
         componentRegion = braille.Component(obj, text)
@@ -405,18 +405,18 @@
         self._debugGenerator("_getBrailleRegionsForCheckMenuItem", obj)
 
         text = ""
-        text = util.appendString(text, self._script.getDisplayedLabel(obj))
-        text = util.appendString(text, self._script.getDisplayedText(obj))
+        text = self._script.appendString(text, self._script.getDisplayedLabel(obj))
+        text = self._script.appendString(text, self._script.getDisplayedText(obj))
 
         if obj.state.count(atspi.Accessibility.STATE_CHECKED):
-            text = util.appendString(text, "<x>")
+            text = self._script.appendString(text, "<x>")
         else:
-            text = util.appendString(text, "< >")
+            text = self._script.appendString(text, "< >")
 
         if obj == orca_state.locusOfFocus:
-            text = util.appendString(text, self._getTextForRole(obj))
-            text = util.appendString(text, self._getTextForAvailability(obj))
-            text = util.appendString(text,
+            text = self._script.appendString(text, self._getTextForRole(obj))
+            text = self._script.appendString(text, self._getTextForAvailability(obj))
+            text = self._script.appendString(text,
                                       self._getTextForAccelerator(obj),
                                       "")
 
@@ -585,15 +585,15 @@
         self._debugGenerator("_getBrailleRegionsForIcon", obj)
 
         text = ""
-        text = util.appendString(text, self._script.getDisplayedLabel(obj))
-        text = util.appendString(text, self._script.getDisplayedText(obj))
+        text = self._script.appendString(text, self._script.getDisplayedLabel(obj))
+        text = self._script.appendString(text, self._script.getDisplayedText(obj))
 
         if obj.image:
             description = obj.image.imageDescription
             if len(description):
-                text = util.appendString(text, description)
+                text = self._script.appendString(text, description)
 
-        text = util.appendString(text, self._getTextForRole(obj))
+        text = self._script.appendString(text, self._getTextForRole(obj))
 
         regions = []
         componentRegion = braille.Component(obj, text)
@@ -660,13 +660,13 @@
         self._debugGenerator("_getBrailleRegionsForMenu", obj)
 
         text = ""
-        text = util.appendString(text, self._script.getDisplayedLabel(obj))
-        text = util.appendString(text, self._script.getDisplayedText(obj))
-        text = util.appendString(text, rolenames.getBrailleForRoleName(obj))
+        text = self._script.appendString(text, self._script.getDisplayedLabel(obj))
+        text = self._script.appendString(text, self._script.getDisplayedText(obj))
+        text = self._script.appendString(text, rolenames.getBrailleForRoleName(obj))
 
         if obj == orca_state.locusOfFocus:
-            text = util.appendString(text, self._getTextForAvailability(obj))
-            text = util.appendString(text,
+            text = self._script.appendString(text, self._getTextForAvailability(obj))
+            text = self._script.appendString(text,
                                       self._getTextForAccelerator(obj),
                                       "")
 
@@ -703,12 +703,12 @@
         self._debugGenerator("_getBrailleRegionsForMenuItem", obj)
 
         text = ""
-        text = util.appendString(text, self._script.getDisplayedLabel(obj))
-        text = util.appendString(text, self._script.getDisplayedText(obj))
+        text = self._script.appendString(text, self._script.getDisplayedLabel(obj))
+        text = self._script.appendString(text, self._script.getDisplayedText(obj))
 
         if obj == orca_state.locusOfFocus:
-            text = util.appendString(text, self._getTextForAvailability(obj))
-            text = util.appendString(text,
+            text = self._script.appendString(text, self._getTextForAvailability(obj))
+            text = self._script.appendString(text,
                                       self._getTextForAccelerator(obj),
                                       "")
 
@@ -769,12 +769,12 @@
         self._debugGenerator("_getBrailleRegionsForPageTab", obj)
 
         text = ""
-        text = util.appendString(text, self._script.getDisplayedLabel(obj))
-        text = util.appendString(text, self._script.getDisplayedText(obj))
+        text = self._script.appendString(text, self._script.getDisplayedLabel(obj))
+        text = self._script.appendString(text, self._script.getDisplayedText(obj))
 
         if obj == orca_state.locusOfFocus:
-            text = util.appendString(text, self._getTextForAvailability(obj))
-            text = util.appendString(text,
+            text = self._script.appendString(text, self._getTextForAvailability(obj))
+            text = self._script.appendString(text,
                                       self._getTextForAccelerator(obj),
                                       "")
 
@@ -828,17 +828,17 @@
         regions = []
 
         text = ""
-        text = util.appendString(text, self._script.getDisplayedLabel(obj))
-        text = util.appendString(text, self._script.getDisplayedText(obj))
+        text = self._script.appendString(text, self._script.getDisplayedLabel(obj))
+        text = self._script.appendString(text, self._script.getDisplayedText(obj))
 
         # In Java, some push buttons don't have label and text.
         # In this case, we'll add to presentation the object description,
         # if exists.
         #
         if (not text) and (obj.description):
-            text = util.appendString(text, obj.description)
+            text = self._script.appendString(text, obj.description)
 
-        text = util.appendString(text, self._getTextForRole(obj))
+        text = self._script.appendString(text, self._getTextForRole(obj))
 
         regions = []
         componentRegion = braille.Component(obj, text)
@@ -860,22 +860,22 @@
         self._debugGenerator("_getBrailleRegionsForRadioButton", obj)
 
         text = ""
-        text = util.appendString(text, self._script.getDisplayedLabel(obj))
-        text = util.appendString(text, self._script.getDisplayedText(obj))
+        text = self._script.appendString(text, self._script.getDisplayedLabel(obj))
+        text = self._script.appendString(text, self._script.getDisplayedText(obj))
 
         # In Java, some toggle buttons don't have label and text.
         # In this case, we'll add to presentation the object description,
         # if exists.
         #
         if (not text) and (obj.description):
-            text = util.appendString(text, obj.description)
+            text = self._script.appendString(text, obj.description)
 
         if obj.state.count(atspi.Accessibility.STATE_CHECKED):
-            text = util.appendString(text, "&=y")
+            text = self._script.appendString(text, "&=y")
         else:
-            text = util.appendString(text, "& y")
+            text = self._script.appendString(text, "& y")
 
-        text = util.appendString(text, self._getTextForRole(obj))
+        text = self._script.appendString(text, self._getTextForRole(obj))
 
         regions = []
         componentRegion = braille.Component(obj, text)
@@ -897,18 +897,18 @@
         self._debugGenerator("_getBrailleRegionsForRadioMenuItem", obj)
 
         text = ""
-        text = util.appendString(text, self._script.getDisplayedLabel(obj))
-        text = util.appendString(text, self._script.getDisplayedText(obj))
+        text = self._script.appendString(text, self._script.getDisplayedLabel(obj))
+        text = self._script.appendString(text, self._script.getDisplayedText(obj))
 
         if obj.state.count(atspi.Accessibility.STATE_CHECKED):
-            text = util.appendString(text, "&=y")
+            text = self._script.appendString(text, "&=y")
         else:
-            text = util.appendString(text, "& y")
+            text = self._script.appendString(text, "& y")
 
         if obj == orca_state.locusOfFocus:
-            text = util.appendString(text, self._getTextForRole(obj))
-            text = util.appendString(text, self._getTextForAvailability(obj))
-            text = util.appendString(text,
+            text = self._script.appendString(text, self._getTextForRole(obj))
+            text = self._script.appendString(text, self._getTextForAvailability(obj))
+            text = self._script.appendString(text,
                                       self._getTextForAccelerator(obj),
                                       "")
 
@@ -965,11 +965,11 @@
         regions = []
 
         text = ""
-        text = util.appendString(text, self._script.getDisplayedLabel(obj))
+        text = self._script.appendString(text, self._script.getDisplayedLabel(obj))
         # Ignore the text on the slider.
-        #text = util.appendString(text, self._script.getDisplayedText(obj))
-        text = util.appendString(text, self._getTextForValue(obj))
-        text = util.appendString(text, self._getTextForRole(obj))
+        #text = self._script.appendString(text, self._script.getDisplayedText(obj))
+        text = self._script.appendString(text, self._getTextForValue(obj))
+        text = self._script.appendString(text, self._getTextForRole(obj))
 
         regions = []
         componentRegion = braille.Component(obj, text)
@@ -1206,7 +1206,7 @@
             title = self._script.getDisplayedLabel(obj)
 
         text = title
-        text = util.appendString(text, rolenames.getBrailleForRoleName(obj))
+        text = self._script.appendString(text, rolenames.getBrailleForRoleName(obj))
 
         regions = []
         regions.append(braille.Region(text))
Index: src/orca/gnomespeechfactory.py
===================================================================
--- src/orca/gnomespeechfactory.py	(revision 2121)
+++ src/orca/gnomespeechfactory.py	(working copy)
@@ -699,7 +699,9 @@
                 # always speak it. See bug #392939.
                 #
                 prevCharMatches = nextCharMatches = False
-                currencySymbols = util.getUnicodeCurrencySymbols()
+                if orca_state.activeScript:
+                    currencySymbols = \
+                        orca_state.activeScript.getUnicodeCurrencySymbols()
                 if i > 0:
                     prevCharMatches = (oldText[i - 1] in string.whitespace)
                 if i < (len(oldText) - 1):
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 2124)
+++ ChangeLog	(working copy)
@@ -186,6 +186,20 @@
           Moved:
           def getRealActiveDescendant(obj):
 
+        * src/orca/scripts/planner.py:
+          src/orca/util.py:
+          src/orca/default.py:
+          src/orca/Gecko.py:
+          src/orca/J2SE-access-bridge.py:
+          src/orca/braillegenerator.py:
+          src/orca/gnomespeechfactory.py:
+          Another partial fix for bug #395548.
+
+          Moved:
+          def isSameObject(obj1, obj2):
+          def appendString(text, newText, delimiter=" "):
+          def getUnicodeCurrencySymbols():
+
 2007-03-05  Rich Burridge <rich.burridge@sun.com>
 
         * src/orca/debug.py:
