[orca/gnome-3-14] Use speech generators to generate speech for Gecko content



commit 02e0464c9961efd38a8c253e26d564f6184d0b96
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Thu Sep 11 18:40:48 2014 -0400

    Use speech generators to generate speech for Gecko content

 src/orca/formatting.py                             |    5 +
 src/orca/generator.py                              |    3 +-
 src/orca/scripts/toolkits/Gecko/script.py          |  196 +++++------------
 .../scripts/toolkits/Gecko/speech_generator.py     |  125 ++++++++++--
 src/orca/speech_generator.py                       |    9 +-
 test/html/lists.html                               |    6 +-
 test/keystrokes/firefox/aria_alert.py              |    2 +-
 test/keystrokes/firefox/aria_alert_uiuc.py         |    5 +-
 test/keystrokes/firefox/aria_button.py             |    6 +-
 test/keystrokes/firefox/aria_button_dojo.py        |   80 +++++---
 test/keystrokes/firefox/aria_button_uiuc.py        |   12 +-
 test/keystrokes/firefox/aria_checkbox.py           |   12 +-
 test/keystrokes/firefox/aria_checkbox_dojo.py      |   21 ++-
 test/keystrokes/firefox/aria_combobox_dojo.py      |   16 +-
 test/keystrokes/firefox/aria_dialog_dojo.py        |    3 +-
 test/keystrokes/firefox/aria_grid_uiuc.py          |    6 +-
 test/keystrokes/firefox/aria_landmarks.py          |   20 +-
 test/keystrokes/firefox/aria_menu.py               |   20 ++-
 test/keystrokes/firefox/aria_radio_button_uiuc.py  |   21 +-
 test/keystrokes/firefox/aria_slider_dojo.py        |   14 +-
 test/keystrokes/firefox/aria_spinner_dojo.py       |    3 +-
 test/keystrokes/firefox/aria_tabcontainer_dojo.py  |   16 +-
 test/keystrokes/firefox/aria_tabpanel.py           |   18 +-
 test/keystrokes/firefox/aria_tabpanel_text_dojo.py |   12 +-
 test/keystrokes/firefox/aria_tabpanel_uiuc.py      |   18 +-
 test/keystrokes/firefox/aria_toolbar_dojo.py       |   13 +-
 test/keystrokes/firefox/aria_tree_dojo.py          |   30 ++-
 test/keystrokes/firefox/aria_tree_uiuc.py          |   35 ++-
 test/keystrokes/firefox/find_wiki.py               |    9 +-
 test/keystrokes/firefox/focus_tracking_imagemap.py |    9 +-
 test/keystrokes/firefox/focus_tracking_links.py    |    6 +-
 test/keystrokes/firefox/html_role_combo_box.py     |   17 +-
 test/keystrokes/firefox/html_role_links.py         |    8 +-
 .../firefox/html_struct_nav_blockquote.py          |   12 +-
 .../firefox/html_struct_nav_bug_554616.py          |   15 +-
 .../firefox/html_struct_nav_bug_567984.py          |    4 +-
 .../html_struct_nav_heading_in_div_with_text.py    |   18 +-
 .../firefox/html_struct_nav_large_obj.py           |   10 +-
 .../firefox/html_struct_nav_list_item.py           |   56 ++++--
 test/keystrokes/firefox/html_struct_nav_lists.py   |   34 ++--
 .../firefox/label_inference_bug_546815.py          |   43 +++--
 .../firefox/label_inference_bugzilla_search.py     |  135 ++++++++----
 test/keystrokes/firefox/label_inference_entries.py |  112 +++++++---
 test/keystrokes/firefox/label_inference_mailman.py |   39 +++-
 test/keystrokes/firefox/line_nav_bug_546815.py     |  150 +++++--------
 test/keystrokes/firefox/line_nav_bug_549128.py     |   45 ++---
 test/keystrokes/firefox/line_nav_bug_552887a.py    |   51 ++---
 test/keystrokes/firefox/line_nav_bug_554616.py     |   18 +-
 test/keystrokes/firefox/line_nav_bug_555055.py     |    4 +-
 test/keystrokes/firefox/line_nav_bug_570757.py     |    8 +-
 test/keystrokes/firefox/line_nav_bug_577239.py     |   36 ++--
 test/keystrokes/firefox/line_nav_bug_592383.py     |    8 +-
 .../firefox/line_nav_bugzilla_search_down.py       |  166 +++++---------
 .../firefox/line_nav_bugzilla_search_up.py         |  160 +++++---------
 test/keystrokes/firefox/line_nav_clickables.py     |   17 +-
 test/keystrokes/firefox/line_nav_empty_anchor.py   |   26 +--
 test/keystrokes/firefox/line_nav_empty_textarea.py |    6 +-
 test/keystrokes/firefox/line_nav_enter_bug.py      |   88 ++++----
 test/keystrokes/firefox/line_nav_entries.py        |   57 ++---
 test/keystrokes/firefox/line_nav_focused_link.py   |    2 +-
 .../firefox/line_nav_follow_same_page_link.py      |    6 +-
 .../firefox/line_nav_follow_same_page_link_2.py    |    2 +-
 .../firefox/line_nav_follow_same_page_link_3.py    |    2 +-
 test/keystrokes/firefox/line_nav_hidden_float.py   |    4 +-
 test/keystrokes/firefox/line_nav_hidden_label.py   |    6 +-
 test/keystrokes/firefox/line_nav_image_in_link.py  |   16 +-
 test/keystrokes/firefox/line_nav_imagemap.py       |   56 +-----
 .../keystrokes/firefox/line_nav_images_in_links.py |  146 +++++--------
 test/keystrokes/firefox/line_nav_lists.py          |   12 +-
 .../keystrokes/firefox/line_nav_multi_line_text.py |   48 ++---
 test/keystrokes/firefox/line_nav_nested_tables.py  |   22 +-
 test/keystrokes/firefox/line_nav_pre_lines.py      |   24 +--
 test/keystrokes/firefox/line_nav_pre_links.py      |   10 +-
 test/keystrokes/firefox/line_nav_simple_form.py    |   83 +++-----
 test/keystrokes/firefox/line_nav_slash_test.py     |   24 +--
 test/keystrokes/firefox/line_nav_sun_java.py       |   60 +++---
 .../firefox/line_nav_table_cell_links.py           |    6 +-
 test/keystrokes/firefox/line_nav_twitter_bug.py    |    6 +-
 test/keystrokes/firefox/line_nav_wiki_down.py      |  201 +++++++++---------
 test/keystrokes/firefox/line_nav_wiki_up.py        |  201 +++++++++---------
 test/keystrokes/firefox/longdesc_13.py             |    3 +-
 .../firefox/mouseover_javascript_alert.py          |    6 +-
 test/keystrokes/firefox/say_all_bug_511389.py      |    3 +-
 test/keystrokes/firefox/say_all_bug_591351_1.py    |   16 +-
 test/keystrokes/firefox/say_all_bugzilla_search.py |  215 ++++++++++++------
 test/keystrokes/firefox/say_all_empty_anchor.py    |    8 +-
 test/keystrokes/firefox/say_all_enter_bug.py       |   63 ++++--
 test/keystrokes/firefox/say_all_entries.py         |   77 +++++--
 test/keystrokes/firefox/say_all_heading_section.py |    9 +-
 test/keystrokes/firefox/say_all_imagemap.py        |   82 +++++---
 test/keystrokes/firefox/say_all_multi_line_text.py |   28 ++-
 test/keystrokes/firefox/say_all_nested_tables.py   |   10 +-
 test/keystrokes/firefox/say_all_role_combo_box.py  |   18 +-
 test/keystrokes/firefox/say_all_role_lists.py      |   31 +++-
 test/keystrokes/firefox/say_all_simple_form.py     |   52 ++++-
 .../keystrokes/firefox/say_all_table_cell_links.py |    4 +-
 test/keystrokes/firefox/say_all_wiki.py            |  233 +++++++++++++++-----
 test/keystrokes/firefox/spelling_errors.py         |    4 +-
 test/keystrokes/firefox/ui_doc_tabs.py             |   21 +-
 test/keystrokes/firefox/ui_role_accel_label.py     |    6 +-
 test/keystrokes/firefox/ui_role_check_box.py       |    9 +-
 test/keystrokes/firefox/ui_role_check_menu_item.py |    3 +-
 test/keystrokes/firefox/ui_role_combo_box.py       |    9 +-
 test/keystrokes/firefox/ui_role_entry.py           |   10 +-
 test/keystrokes/firefox/ui_role_menu_bar.py        |   12 +-
 test/keystrokes/firefox/ui_role_page_tab.py        |    9 +-
 test/keystrokes/firefox/ui_role_push_button.py     |    3 +-
 test/keystrokes/firefox/ui_role_radio_button.py    |    6 +-
 test/keystrokes/firefox/ui_role_radio_menu_item.py |    9 +-
 test/keystrokes/firefox/ui_role_tree.py            |   24 ++-
 test/keystrokes/firefox/ui_role_tree_table.py      |    6 +-
 test/keystrokes/firefox/word_nav_links.py          |   20 +-
 test/keystrokes/firefox/word_nav_list_items.py     |   14 +-
 113 files changed, 2183 insertions(+), 1871 deletions(-)
---
diff --git a/src/orca/formatting.py b/src/orca/formatting.py
index 013043d..49217d0 100644
--- a/src/orca/formatting.py
+++ b/src/orca/formatting.py
@@ -162,6 +162,10 @@ formatting = {
             'basicWhereAmI': 'labelOrName + placeholderText + readOnly + textRole + textContent + 
anyTextSelection + ' + MNEMONIC,
             'detailedWhereAmI': 'labelOrName + placeholderText + readOnly + textRole + 
textContentWithAttributes + anyTextSelection + ' + MNEMONIC + ' + ' + TUTORIAL
             },
+        pyatspi.ROLE_FORM: {
+            'focused': 'labelOrName + readOnly + textRole + currentLineText + allTextSelection',
+            'unfocused': 'labelOrName + readOnly + textRole + currentLineText + allTextSelection + ' + 
MNEMONIC,
+            },
         pyatspi.ROLE_FRAME: {
             'focused': 'labelOrName + roleName',
             'unfocused': 'labelOrName + allTextSelection + roleName + unfocusedDialogCount + availability'
@@ -232,6 +236,7 @@ formatting = {
             },
         pyatspi.ROLE_PANEL: {
             'focused': 'labelAndName + roleName',
+            'unfocused': '(substring and currentLineText) or (labelAndName + roleName)'
             },
         pyatspi.ROLE_PARAGRAPH: {
             'focused': 'labelOrName + readOnly + textRole + currentLineText + allTextSelection',
diff --git a/src/orca/generator.py b/src/orca/generator.py
index d82aedc..b2a1018 100644
--- a/src/orca/generator.py
+++ b/src/orca/generator.py
@@ -955,7 +955,8 @@ class Generator:
             return []
 
         substring = self._script.utilities.substring(obj, start, end)
-        if substring and substring.strip() != obj.name:
+        if substring and substring.strip() != obj.name \
+           and substring.find(self._script.EMBEDDED_OBJECT_CHARACTER) == -1:
             return [substring]
 
         return []
diff --git a/src/orca/scripts/toolkits/Gecko/script.py b/src/orca/scripts/toolkits/Gecko/script.py
index a4acde8..4fc97d3 100644
--- a/src/orca/scripts/toolkits/Gecko/script.py
+++ b/src/orca/scripts/toolkits/Gecko/script.py
@@ -741,23 +741,26 @@ class Script(default.Script):
                 contents = self.getObjectContentsAtOffset(obj, characterOffset)
             else:
                 contents = self.getLineContentsAtOffset(obj, characterOffset)
-            utterances = self.getUtterancesFromContents(contents)
-            clumped = self.clumpUtterances(utterances)
-            for i in range(len(clumped)):
-                [obj, startOffset, endOffset, text] = \
-                                             contents[min(i, len(contents)-1)]
-                [element, voice] = clumped[i]
-                if isinstance(element, str):
-                    element = self.utilities.adjustForRepeats(element)
-                if isinstance(element, (Pause, ACSS)):
-                    # At the moment, SayAllContext is expecting a string; not
-                    # a Pause. For now, being conservative and catching that
-                    # here. See bug #591351.
-                    #
+            for content in contents:
+                obj, startOffset, endOffset, text = content
+                if self.isLabellingContents(obj, contents):
                     continue
-                yield [speechserver.SayAllContext(obj, element,
-                                                  startOffset, endOffset),
-                       voice]
+
+                utterances = self.getUtterancesFromContents([content], True)
+
+                # TODO - JD: This is sad, but it's better than the old, broken
+                # clumpUtterances(). We really need to fix the speechservers'
+                # SayAll support. In the meantime, the generators should be
+                # providing one ACSS per string.
+                elements = list(filter(lambda x: isinstance(x, str), utterances[0]))
+                voices = list(filter(lambda x: isinstance(x, ACSS), utterances[0]))
+                if len(elements) != len(voices):
+                    continue
+
+                for i, element in enumerate(elements):
+                    yield [speechserver.SayAllContext(obj, element,
+                                                      startOffset, endOffset),
+                           voices[i]]
 
             obj = contents[-1][0]
             characterOffset = contents[-1][2]
@@ -832,6 +835,14 @@ class Script(default.Script):
 
         return True
 
+    def __sayAllProgressCallback(self, context, progressType):
+        if not self.inDocumentContent():
+            default.Script.__sayAllProgressCallback(self, context, progressType)
+            return
+
+        orca.setLocusOfFocus(None, context.obj, notifyScript=False)
+        self.setCaretContext(context.obj, context.currentOffset)
+
     def onCaretMoved(self, event):
         """Callback for object:text-caret-moved accessibility events."""
 
@@ -1476,25 +1487,16 @@ class Script(default.Script):
         # EMBEDDED_OBJECT_CHARACTER model of Gecko.  For all other
         # things, however, we can defer to the default scripts.
         #
-        if not self.inDocumentContent():
+        if not self.inDocumentContent() or self.utilities.isEntry(obj):
             default.Script.sayWord(self, obj)
             return
 
         [obj, characterOffset] = self.getCaretContext()
-
-        # Ideally in an entry we would just let default.sayWord() handle
-        # things.  That fails to work when navigating backwords by word.
-        # Because getUtterancesFromContents() now uses the speech_generator
-        # with entries, we need to handle word navigation in entries here.
-        #
         wordContents = self.utilities.getWordContentsAtOffset(obj, characterOffset)
+
         [textObj, startOffset, endOffset, word] = wordContents[0]
         self.speakMisspelledIndicator(textObj, startOffset)
-        if not self.utilities.isEntry(textObj):
-            self.speakContents(wordContents)
-        else:
-            word = self.utilities.substring(textObj, startOffset, endOffset)
-            speech.speak([word], self.getACSS(textObj, word))
+        self.speakContents(wordContents)
 
     def sayLine(self, obj):
         """Speaks the line at the current caret position."""
@@ -2479,141 +2481,51 @@ class Script(default.Script):
     #                                                                  #
     ####################################################################
 
-    # [[[TODO: WDW - this needs to be moved to the speech generator.]]]
-    #
-    def getACSS(self, obj, string):
-        """Returns the ACSS to speak anything for the given obj."""
-
-        if obj.getRole() == pyatspi.ROLE_LINK:
-            acss = self.voices[settings.HYPERLINK_VOICE]
-        elif string and isinstance(string, str) \
-            and string.isupper() \
-            and string.strip().isalpha():
-            acss = self.voices[settings.UPPERCASE_VOICE]
-        else:
-            acss = self.voices[settings.DEFAULT_VOICE]
-
-        return acss
-
-    def getUtterancesFromContents(self, contents, speakRole=True):
+    def getUtterancesFromContents(self, contents, eliminatePauses=False):
         """Returns a list of [text, acss] tuples based upon the list
         of [obj, startOffset, endOffset, string] tuples passed in.
 
         Arguments:
         -contents: a list of [obj, startOffset, endOffset, string] tuples
-        -speakRole: if True, speak the roles of objects
         """
 
         if not len(contents):
             return []
 
-        # Even if we want to speakRole, we don't want to do that for the
-        # document frame.  And we're going to special-case headings so that
-        # that we don't overspeak heading role info, which we're in danger
-        # of doing if a heading includes links or images.
-        #
-        doNotSpeakRoles = [pyatspi.ROLE_DOCUMENT_FRAME,
-                           pyatspi.ROLE_HEADING,
-                           pyatspi.ROLE_LIST_ITEM,
-                           pyatspi.ROLE_TEXT,
-                           pyatspi.ROLE_ALERT]
-
         utterances = []
-        prevObj = None
         contents = self.utilities.filterContentsForPresentation(contents)
+        lastObj = None
         for content in contents:
             [obj, startOffset, endOffset, string] = content
-            string = self.utilities.adjustForRepeats(string)
-            role = obj.getRole()
-
-            # If we don't have a string, then use the speech generator.
-            # Otherwise, we'll want to speak the string and possibly the
-            # role.
-            #
-            if not len(string) \
-               or self.utilities.isEntry(obj) \
-               or self.utilities.isPasswordText(obj) \
-               or self.utilities.isClickableElement(obj) \
-               or role in [pyatspi.ROLE_PUSH_BUTTON, pyatspi.ROLE_IMAGE,
-                           pyatspi.ROLE_CHECK_BOX, pyatspi.ROLE_RADIO_BUTTON,
-                           pyatspi.ROLE_TOGGLE_BUTTON, pyatspi.ROLE_COMBO_BOX]:
-                rv = self.speechGenerator.generateSpeech(obj)
-                # Crazy crap to make clump and friends happy until we can
-                # kill them. (They don't deal well with what the speech
-                # generator provides.)
-                for item in rv:
-                    if isinstance(item, str):
-                        utterances.append([item, self.getACSS(obj, item)])
-            else:
-                utterances.append([string, self.getACSS(obj, string)])
-                if speakRole and not role in doNotSpeakRoles:
-                    utterance = self.speechGenerator.getRoleName(obj)
-                    if utterance:
-                        utterances.append(utterance)
-  
-            # If the object is a heading, or is contained within a heading,
-            # speak that role information at the end of the object.
-            #
-            isLastObject = (contents.index(content) == (len(contents) - 1))
-            isHeading = (role == pyatspi.ROLE_HEADING)
-            if speakRole and (isLastObject or isHeading):
-                if isHeading:
-                    heading = obj
-                else:
-                    heading = self.utilities.ancestorWithRole(
-                        obj,
-                        [pyatspi.ROLE_HEADING],
-                        [pyatspi.ROLE_DOCUMENT_FRAME])
-
-                if heading:
-                    utterance = self.speechGenerator.getRoleName(heading)
-                    if utterance:
-                        utterances.append(utterance)
+            utterance = self.speechGenerator.generateSpeech(
+                obj, startOffset=startOffset, endOffset=endOffset)
+            if eliminatePauses:
+                utterance = list(filter(lambda x: not isinstance(x, Pause), utterance))
+            if utterance and utterance[0]:
+                utterances.append(utterance)
+            lastObj = obj
 
-            prevObj = obj
+        # TODO - JD: This belongs in the generator.
+        if lastObj and lastObj.getRole() != pyatspi.ROLE_HEADING:
+            heading = self.utilities.ancestorWithRole(
+                lastObj, [pyatspi.ROLE_HEADING], [pyatspi.ROLE_DOCUMENT_FRAME])
+            if heading:
+                utterance = self.speechGenerator.getRoleName(heading)
+                utterances.append(utterance)
 
         if not utterances:
-            utterances = [messages.BLANK, self.voices[settings.DEFAULT_VOICE]]
-
-        return utterances
-
-    def clumpUtterances(self, utterances):
-        """Returns a list of utterances clumped together by acss.
-
-        Arguments:
-        -utterances: unclumped utterances
-        -speakRole: if True, speak the roles of objects
-        """
-
-        clumped = []
-
-        for utterance in utterances:
-            try:
-                [element, acss] = utterance
-            except:
-                continue
-            if len(clumped) == 0:
-                clumped = [[element, acss]]
-            elif acss == clumped[-1][1] \
-                 and isinstance(element, str) \
-                 and isinstance(clumped[-1][0], str):
-                clumped[-1][0] = clumped[-1][0].rstrip(" ")
-                clumped[-1][0] += " " + element
+            if eliminatePauses:
+                string = ""
             else:
-                clumped.append([element, acss])
-
-        if (len(clumped) == 1) and (clumped[0][0] == "\n"):
-            if _settingsManager.getSetting('speakBlankLines'):
-                return [[messages.BLANK, self.voices[settings.SYSTEM_VOICE]]]
+                string = messages.BLANK
+            utterances = [string, self.voices[settings.DEFAULT_VOICE]]
 
-        if len(clumped) and isinstance(clumped[-1][0], str):
-            clumped[-1][0] = clumped[-1][0].rstrip(" ")
-
-        return clumped
+        return utterances
 
-    def speakContents(self, contents, speakRole=True):
+    def speakContents(self, contents):
         """Speaks each string in contents using the associated voice/acss"""
-        utterances = self.getUtterancesFromContents(contents, speakRole)
+
+        utterances = self.getUtterancesFromContents(contents)
         for utterance in utterances:
             speech.speak(utterance, interrupt=False)
 
diff --git a/src/orca/scripts/toolkits/Gecko/speech_generator.py 
b/src/orca/scripts/toolkits/Gecko/speech_generator.py
index bdae4e9..66530f0 100644
--- a/src/orca/scripts/toolkits/Gecko/speech_generator.py
+++ b/src/orca/scripts/toolkits/Gecko/speech_generator.py
@@ -34,6 +34,7 @@ import pyatspi
 
 import orca.messages as messages
 import orca.object_properties as object_properties
+import orca.orca_state as orca_state
 import orca.settings_manager as settings_manager
 import orca.speech_generator as speech_generator
 
@@ -54,6 +55,18 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
     def __init__(self, script):
         speech_generator.SpeechGenerator.__init__(self, script)
 
+    def _getACSS(self, obj, string):
+        if obj.getRole() == pyatspi.ROLE_LINK:
+            acss = self.voice(speech_generator.HYPERLINK)
+        elif isinstance(string, str) \
+            and string.isupper() \
+            and string.strip().isalpha():
+            acss = self.voice(speech_generator.UPPERCASE)
+        else:
+            acss = self.voice(speech_generator.DEFAULT)
+
+        return acss
+
     def _generateName(self, obj, **args):
         result = []
         acss = self.voice(speech_generator.DEFAULT)
@@ -123,6 +136,11 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
         if that description is different from that of the name and
         label.
         """
+        start = args.get('startOffset')
+        end = args.get('endOffset')
+        if start != None and end != None:
+            return []
+
         formatType = args.get('formatType')
         role = args.get('role', obj.getRole())
         if role == pyatspi.ROLE_TEXT and formatType != 'basicWhereAmI':
@@ -152,6 +170,13 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
                         pyatspi.ROLE_TEXT] \
            and self._script.inDocumentContent():
 
+            # TODO: JD - isLabellingContents() needs smarts to identify labels
+            # we'll later infer. For now, this keeps us from double-presenting.
+            start = args.get('startOffset')
+            end = args.get('endOffset')
+            if start != None and end != None:
+                return []
+
             # We're having to hack around yet another Mozilla bug:
             # https://bugzilla.mozilla.org/show_bug.cgi?id=960241
             focusedOnly = role not in [pyatspi.ROLE_LIST, pyatspi.ROLE_LIST_BOX]
@@ -174,21 +199,11 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
         return result
 
     def _generateLabelOrName(self, obj, **args):
-        role = args.get('role', obj.getRole())
-        if role == pyatspi.ROLE_TEXT:
+        if self._script.utilities.isTextBlockElement(obj):
             return []
 
-        result = []
-        if obj.parent.getRole() == pyatspi.ROLE_AUTOCOMPLETE:
-            # This is the main difference between this class and the default
-            # class - we'll give this thing a name here, and we'll make it
-            # be the name of the autocomplete.
-            #
-            result.extend(self._generateLabelOrName(obj.parent, **args))
-        else:
-            result.extend(speech_generator.SpeechGenerator._generateLabelOrName(
-                self, obj, **args))
-        return result
+        return speech_generator.SpeechGenerator._generateLabelOrName(
+            self, obj, **args)
 
     def _generateRoleName(self, obj, **args):
         """Prevents some roles from being spoken."""
@@ -226,6 +241,9 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
             if args.get('formatType', 'unfocused') != 'basicWhereAmI':
                 doNotSpeak.append(pyatspi.ROLE_LIST_ITEM)
                 doNotSpeak.append(pyatspi.ROLE_LIST)
+            if args.get('startOffset') != None and args.get('endOffset') != None:
+                doNotSpeak.append(pyatspi.ROLE_DOCUMENT_FRAME)
+                doNotSpeak.append(pyatspi.ROLE_ALERT)
 
         if not (role in doNotSpeak):
             if role == pyatspi.ROLE_IMAGE:
@@ -267,7 +285,10 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
     def _generateExpandedEOCs(self, obj, **args):
         """Returns the expanded embedded object characters for an object."""
         result = []
-        text = self._script.utilities.expandEOCs(obj)
+
+        startOffset = args.get('startOffset', 0)
+        endOffset = args.get('endOffset', -1)
+        text = self._script.utilities.expandEOCs(obj, startOffset, endOffset)
         if text:
             result.append(text)
         return result
@@ -288,6 +309,17 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
                     self, obj, **args))
         return result
 
+    def _generateNewAncestors(self, obj, **args):
+        # TODO - JD: This is not the right way to do this, but we can fix
+        # that as part of the removal of formatting strings.
+        start = args.get('startOffset')
+        end = args.get('endOffset')
+        if start != None or end != None:
+            return []
+
+        return speech_generator.SpeechGenerator._generateNewAncestors(
+            self, obj, **args)
+
     def _generateAncestors(self, obj, **args):
         role = args.get('role', obj.getRole())
         if role == pyatspi.ROLE_LINK:
@@ -366,6 +398,11 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
             result.extend(speech_generator.SpeechGenerator.\
                                            generateSpeech(self, obj, **args))
             self._restoreRole(oldRole, args)
+        elif self._script.utilities.isLink(obj):
+            oldRole = self._overrideRole(pyatspi.ROLE_LINK, args)
+            result.extend(speech_generator.SpeechGenerator.\
+                                           generateSpeech(self, obj, **args))
+            self._restoreRole(oldRole, args)
         else:
             result.extend(speech_generator.SpeechGenerator.\
                                            generateSpeech(self, obj, **args))
@@ -408,3 +445,63 @@ class SpeechGenerator(speech_generator.SpeechGenerator):
         # is all kinds of broken. Until that can be sorted out, try to filter
         # out some of the noise....
         return []
+
+    def _generateAnyTextSelection(self, obj, **args):
+        if not obj == orca_state.locusOfFocus:
+            return []
+
+        return speech_generator.SpeechGenerator._generateAnyTextSelection(
+            self, obj, **args)
+
+    def _generateAllTextSelection(self, obj, **args):
+        if not obj == orca_state.locusOfFocus:
+            return []
+
+        return speech_generator.SpeechGenerator._generateAllTextSelection(
+            self, obj, **args)
+
+    def _generateSubstring(self, obj, **args):
+        start = args.get('startOffset')
+        end = args.get('endOffset')
+        if start == None or end == None:
+            return []
+
+        string = self._script.utilities.substring(obj, start, end)
+        string = self._script.utilities.adjustForRepeats(string)
+        if not string:
+            return []
+
+        if not self._script.utilities.isEntry(obj) \
+           and not self._script.utilities.isPasswordText(obj):
+            string = string.strip()
+
+        result = [string]
+        result.extend(self._getACSS(obj, string))
+        return result
+
+    # TODO - JD: While working on the Gecko rewrite, I found a metric crapton
+    # of text generation methods (including, but not limited to, these below).
+    # Are these really all needed? Seriously??
+    def _generateCurrentLineText(self, obj, **args):
+        result = self._generateSubstring(obj, **args)
+        if result:
+            return result
+
+        return speech_generator.SpeechGenerator._generateCurrentLineText(
+            self, obj, **args)
+
+    def _generateDisplayedText(self, obj, **args):
+        result = self._generateSubstring(obj, **args)
+        if result:
+            return result
+
+        return speech_generator.SpeechGenerator._generateDisplayedText(
+            self, obj, **args)
+
+    def _generateTextContent(self, obj, **args):
+        result = self._generateSubstring(obj, **args)
+        if result:
+            return result
+
+        return speech_generator.SpeechGenerator._generateTextContent(
+            self, obj, **args)
diff --git a/src/orca/speech_generator.py b/src/orca/speech_generator.py
index 3f02a8d..cb7a760 100644
--- a/src/orca/speech_generator.py
+++ b/src/orca/speech_generator.py
@@ -37,6 +37,7 @@ from . import settings
 from . import settings_manager
 from . import sound
 from . import text_attribute_names
+from . import acss
 
 class Pause:
     """A dummy class to indicate we want to insert a pause into an
@@ -960,9 +961,9 @@ class SpeechGenerator(generator.Generator):
         """
         acss = self.voice(DEFAULT)
         result = generator.Generator._generateCurrentLineText(self, obj, **args)
-        if result and result[0]:
-            if result[0] == "\n":
-                result[0] = messages.BLANK
+        if result:
+            if result == ["\n"]:
+                result = [messages.BLANK]
             result.extend(acss)
         return result
 
@@ -1916,4 +1917,4 @@ class SpeechGenerator(generator.Generator):
         if rv and rv.get('established') == False:
             rv.pop('established')
 
-        return [rv]
+        return [acss.ACSS(rv)]
diff --git a/test/html/lists.html b/test/html/lists.html
index 8cab938..42427fb 100644
--- a/test/html/lists.html
+++ b/test/html/lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
-<html><head>
+<html>
   <head><title>Lists Test Page</title></head>
   <body>
 
@@ -35,7 +35,7 @@
           <li>each sublevel</li>
           <li>they should all be different, except here.</li>
         </ul>
-        <li><font size="-0">second sublevel</li>
+        <li><font size="-0">second sublevel</font></li>
       </ul>
       <li type="square">or you can specify a square</li>
       <ul>
@@ -55,4 +55,4 @@
     <li type="disc">whine, whine, whine</li>
   </ul>
 
-</body></html>
\ No newline at end of file
+</body></html>
diff --git a/test/keystrokes/firefox/aria_alert.py b/test/keystrokes/firefox/aria_alert.py
index bb9a601..4cbd50f 100644
--- a/test/keystrokes/firefox/aria_alert.py
+++ b/test/keystrokes/firefox/aria_alert.py
@@ -28,7 +28,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'close', cursor=1",
      "SPEECH OUTPUT: 'This popup is created as a div in the HTML content, rather than being created in the 
DOM at the time of use. The display style is changed from \"none\" to \"block\" to hide and show it. close'",
      "SPEECH OUTPUT: 'close'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/aria_alert_uiuc.py b/test/keystrokes/firefox/aria_alert_uiuc.py
index 36a7ac0..962d377 100644
--- a/test/keystrokes/firefox/aria_alert_uiuc.py
+++ b/test/keystrokes/firefox/aria_alert_uiuc.py
@@ -48,7 +48,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Focus mode', cursor=0",
      "BRAILLE LINE:  'Guess a number between 1 and 10 12 $l'",
      "     VISIBLE:  'ss a number between 1 and 10 12 ', cursor=32",
-     "SPEECH OUTPUT: 'Guess a number between 1 and 10 entry 12 selected'",
+     "SPEECH OUTPUT: 'Guess a number between 1 and 10'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: '12'",
+     "SPEECH OUTPUT: 'selected'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.AssertionSummaryAction())
diff --git a/test/keystrokes/firefox/aria_button.py b/test/keystrokes/firefox/aria_button.py
index 80933d9..2390f38 100644
--- a/test/keystrokes/firefox/aria_button.py
+++ b/test/keystrokes/firefox/aria_button.py
@@ -15,7 +15,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Tracking number  $l', cursor=0",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: 'Tracking number entry'",
+     "SPEECH OUTPUT: 'Tracking number'",
+     "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -30,7 +31,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Browse mode', cursor=0",
      "BRAILLE LINE:  'Check Now push button Check to see if your order has been'",
      "     VISIBLE:  'Check Now push button Check to s', cursor=1",
-     "SPEECH OUTPUT: 'Check Now push button Check to see if your order has been shipped.'",
+     "SPEECH OUTPUT: 'Check Now'",
+     "SPEECH OUTPUT: 'push button Check to see if your order has been shipped.'",
      "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/aria_button_dojo.py b/test/keystrokes/firefox/aria_button_dojo.py
index 572c70a..863b33a 100644
--- a/test/keystrokes/firefox/aria_button_dojo.py
+++ b/test/keystrokes/firefox/aria_button_dojo.py
@@ -11,7 +11,8 @@ sequence.append(utils.AssertPresentationAction(
     "1. Tab to the <button> button",
     ["BRAILLE LINE:  '<button> push button <input type='button'> push button Create View Create save options 
push button Edit! Color'",
      "     VISIBLE:  '<button> push button <input type', cursor=0",
-     "SPEECH OUTPUT: '<button> push button'"]))
+     "SPEECH OUTPUT: '<button>'",
+     "SPEECH OUTPUT: 'push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -28,7 +29,8 @@ sequence.append(utils.AssertPresentationAction(
     "3. Tab to <input type='button'>",
     ["BRAILLE LINE:  '<button> push button <input type='button'> push button Create View Create save options 
push button Edit! Color'",
      "     VISIBLE:  '<button> push button <input type', cursor=0",
-     "SPEECH OUTPUT: '<input type='button'> push button'"]))
+     "SPEECH OUTPUT: '<input type='button'>'",
+     "SPEECH OUTPUT: 'push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -45,7 +47,8 @@ sequence.append(utils.AssertPresentationAction(
     "5. Tab to first Create button",
     ["BRAILLE LINE:  '<button> push button <input type='button'> push button Create push button View Create 
save options push button Edit! Color'",
      "     VISIBLE:  'Create push button View Create s', cursor=1",
-     "SPEECH OUTPUT: 'Create push button'"]))
+     "SPEECH OUTPUT: 'Create'",
+     "SPEECH OUTPUT: 'push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -62,7 +65,8 @@ sequence.append(utils.AssertPresentationAction(
     "7. Tab to View push button",
     ["BRAILLE LINE:  '<button> push button <input type='button'> push button Create View push button Create 
save options push button Edit! Color'",
      "     VISIBLE:  'View push button Create save opt', cursor=1",
-     "SPEECH OUTPUT: 'View push button view title'"]))
+     "SPEECH OUTPUT: 'View'",
+     "SPEECH OUTPUT: 'push button view title'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -70,7 +74,8 @@ sequence.append(utils.AssertPresentationAction(
     "8. Tab to second Create button",
     ["BRAILLE LINE:  '<button> push button <input type='button'> push button Create View Create push button 
save options push button Edit! Color'",
      "     VISIBLE:  'Create push button save options ', cursor=1",
-     "SPEECH OUTPUT: 'Create push button creative title'"]))
+     "SPEECH OUTPUT: 'Create'",
+     "SPEECH OUTPUT: 'push button creative title'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -78,7 +83,8 @@ sequence.append(utils.AssertPresentationAction(
     "9. Tab to drop down menu on Create -- whose tooltip and accessible name is 'save options'",
     ["BRAILLE LINE:  '<button> push button <input type='button'> push button Create View Create save options 
push button Edit! Color'",
      "     VISIBLE:  '<button> push button <input type', cursor=0",
-     "SPEECH OUTPUT: 'save options push button'"]))
+     "SPEECH OUTPUT: 'save options'",
+     "SPEECH OUTPUT: 'push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
@@ -92,7 +98,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Focus mode', cursor=0",
      "BRAILLE LINE:  'Create blank'",
      "     VISIBLE:  'Create blank', cursor=1",
-     "SPEECH OUTPUT: 'createMenu panel'",
+     "SPEECH OUTPUT: 'createMenu'",
+     "SPEECH OUTPUT: 'panel'",
      "SPEECH OUTPUT: 'Create blank'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
@@ -112,7 +119,8 @@ sequence.append(utils.AssertPresentationAction(
     "12. Close Create drop down menu",
     ["BRAILLE LINE:  'save options collapsed push button'",
      "     VISIBLE:  'save options collapsed push butt', cursor=1",
-     "SPEECH OUTPUT: 'save options collapsed push button'"]))
+     "SPEECH OUTPUT: 'save options'",
+     "SPEECH OUTPUT: 'collapsed push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -122,7 +130,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Edit! push button', cursor=1",
      "BRAILLE LINE:  'Browse mode'",
      "     VISIBLE:  'Browse mode', cursor=0",
-     "SPEECH OUTPUT: 'Edit! push button edit title'",
+     "SPEECH OUTPUT: 'Edit!'",
+     "SPEECH OUTPUT: 'push button edit title'",
      "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -139,8 +148,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Focus mode', cursor=0",
      "BRAILLE LINE:  'Cut'",
      "     VISIBLE:  'Cut', cursor=1",
-     "SPEECH OUTPUT: 'Edit! edit title panel'",
-     "SPEECH OUTPUT: 'Edit! menu'",
+     "SPEECH OUTPUT: 'Edit! edit title'",
+     "SPEECH OUTPUT: 'panel'",
+     "SPEECH OUTPUT: 'Edit!'",
+     "SPEECH OUTPUT: 'menu'",
      "SPEECH OUTPUT: 'Cut'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
@@ -172,7 +183,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Submenu menu', cursor=1",
      "BRAILLE LINE:  'Submenu menu'",
      "     VISIBLE:  'Submenu menu', cursor=1",
-     "SPEECH OUTPUT: 'Submenu menu'"]))
+     "SPEECH OUTPUT: 'Submenu'",
+     "SPEECH OUTPUT: 'menu'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("space"))
@@ -182,8 +194,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Submenu Item One', cursor=1",
      "BRAILLE LINE:  'Submenu Item One'",
      "     VISIBLE:  'Submenu Item One', cursor=1",
-     "SPEECH OUTPUT: 'Submenu panel'",
-     "SPEECH OUTPUT: 'Submenu menu'",
+     "SPEECH OUTPUT: 'Submenu'",
+     "SPEECH OUTPUT: 'panel'",
+     "SPEECH OUTPUT: 'Submenu'",
+     "SPEECH OUTPUT: 'menu'",
      "SPEECH OUTPUT: 'Submenu Item One'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -204,7 +218,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Deeper Submenu menu', cursor=1",
      "BRAILLE LINE:  'Deeper Submenu menu'",
      "     VISIBLE:  'Deeper Submenu menu', cursor=1",
-     "SPEECH OUTPUT: 'Deeper Submenu menu'"]))
+     "SPEECH OUTPUT: 'Deeper Submenu'",
+     "SPEECH OUTPUT: 'menu'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Escape"))
@@ -213,9 +228,12 @@ sequence.append(utils.AssertPresentationAction(
     ["KNOWN ISSUE: Too much speech context",
      "BRAILLE LINE:  'Submenu menu'",
      "     VISIBLE:  'Submenu menu', cursor=1",
-     "SPEECH OUTPUT: 'Edit! edit title panel'",
-     "SPEECH OUTPUT: 'Edit! menu'",
-     "SPEECH OUTPUT: 'Submenu menu'"]))
+     "SPEECH OUTPUT: 'Edit! edit title'",
+     "SPEECH OUTPUT: 'panel'",
+     "SPEECH OUTPUT: 'Edit!'",
+     "SPEECH OUTPUT: 'menu'",
+     "SPEECH OUTPUT: 'Submenu'",
+     "SPEECH OUTPUT: 'menu'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Escape"))
@@ -223,7 +241,8 @@ sequence.append(utils.AssertPresentationAction(
     "22. Close the Edit! menu",
     ["BRAILLE LINE:  'Edit! collapsed push button'",
      "     VISIBLE:  'Edit! collapsed push button', cursor=1",
-     "SPEECH OUTPUT: 'Edit! collapsed push button edit title'"]))
+     "SPEECH OUTPUT: 'Edit!'",
+     "SPEECH OUTPUT: 'collapsed push button edit title'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -233,7 +252,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Color push button', cursor=1",
      "BRAILLE LINE:  'Browse mode'",
      "     VISIBLE:  'Browse mode', cursor=0",
-     "SPEECH OUTPUT: 'Color push button'",
+     "SPEECH OUTPUT: 'Color'",
+     "SPEECH OUTPUT: 'push button'",
      "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -244,11 +264,12 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Color push button', cursor=1",
      "BRAILLE LINE:  '<button> push button save options collapsed push button Edit! Color push button'",
      "     VISIBLE:  'Color push button', cursor=1",
-     "BRAILLE LINE:  'white lime green blue'",
-     "     VISIBLE:  'white lime green blue', cursor=7",
+     "BRAILLE LINE:  'white table cell lime green blue'",
+     "     VISIBLE:  'white table cell lime green blue', cursor=1",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: 'Color panel'",
+     "SPEECH OUTPUT: 'Color'",
+     "SPEECH OUTPUT: 'panel'",
      "SPEECH OUTPUT: 'white'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
@@ -256,8 +277,8 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
     "25. Go to lime",
-    ["BRAILLE LINE:  'white lime green blue'",
-     "     VISIBLE:  'white lime green blue', cursor=7",
+    ["BRAILLE LINE:  'white table cell lime green blue'",
+     "     VISIBLE:  'white table cell lime green blue', cursor=1",
      "BRAILLE LINE:  'lime table cell'",
      "     VISIBLE:  'lime table cell', cursor=1",
      "SPEECH OUTPUT: 'lime'"]))
@@ -268,7 +289,8 @@ sequence.append(utils.AssertPresentationAction(
     "26. Close the Color menu",
     ["BRAILLE LINE:  'Color collapsed push button'",
      "     VISIBLE:  'Color collapsed push button', cursor=1",
-     "SPEECH OUTPUT: 'Color collapsed push button'"]))
+     "SPEECH OUTPUT: 'Color'",
+     "SPEECH OUTPUT: 'collapsed push button'"]))
 
 for i in range(18):
     sequence.append(KeyComboAction("Tab"))
@@ -279,7 +301,8 @@ sequence.append(utils.AssertPresentationAction(
     "27. Tab to the toggle me off button",
     ["BRAILLE LINE:  '&=y Toggle me off toggle button Toggle me'",
      "     VISIBLE:  '&=y Toggle me off toggle button ', cursor=1",
-     "SPEECH OUTPUT: 'Toggle me off toggle button pressed'"]))
+     "SPEECH OUTPUT: 'Toggle me off'",
+     "SPEECH OUTPUT: 'toggle button pressed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("space"))
@@ -312,7 +335,8 @@ sequence.append(utils.AssertPresentationAction(
     "30. Tab to the toggle me button",
     ["BRAILLE LINE:  'toggle me off Toggle me push button'",
      "     VISIBLE:  'Toggle me push button', cursor=1",
-     "SPEECH OUTPUT: 'Toggle me push button'"]))
+     "SPEECH OUTPUT: 'Toggle me'",
+     "SPEECH OUTPUT: 'push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("space"))
diff --git a/test/keystrokes/firefox/aria_button_uiuc.py b/test/keystrokes/firefox/aria_button_uiuc.py
index 907bca6..04286c4 100644
--- a/test/keystrokes/firefox/aria_button_uiuc.py
+++ b/test/keystrokes/firefox/aria_button_uiuc.py
@@ -19,7 +19,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '& y Font Larger toggle button & ', cursor=1",
      "BRAILLE LINE:  '& y Font Larger toggle button & y Font Smaller toggle button &=y Italic toggle button 
& y Bold toggle button'",
      "     VISIBLE:  '& y Font Larger toggle button & ', cursor=1",
-     "SPEECH OUTPUT: 'Font Larger toggle button not pressed'"]))
+     "SPEECH OUTPUT: 'Font Larger'",
+     "SPEECH OUTPUT: 'toggle button not pressed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -38,7 +39,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '& y Font Smaller toggle button &', cursor=1",
      "BRAILLE LINE:  '& y Font Larger toggle button & y Font Smaller toggle button &=y Italic toggle button 
& y Bold toggle button'",
      "     VISIBLE:  '& y Font Smaller toggle button &', cursor=1",
-     "SPEECH OUTPUT: 'Font Smaller toggle button not pressed'"]))
+     "SPEECH OUTPUT: 'Font Smaller'",
+     "SPEECH OUTPUT: 'toggle button not pressed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
@@ -55,7 +57,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '&=y Italic toggle button & y Bol', cursor=1",
      "BRAILLE LINE:  '& y Font Larger toggle button & y Font Smaller toggle button &=y Italic toggle button 
& y Bold toggle button'",
      "     VISIBLE:  '&=y Italic toggle button & y Bol', cursor=1",
-     "SPEECH OUTPUT: 'Italic toggle button pressed'"]))
+     "SPEECH OUTPUT: 'Italic'",
+     "SPEECH OUTPUT: 'toggle button pressed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
@@ -73,7 +76,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '& y Bold toggle button', cursor=1",
      "BRAILLE LINE:  '& y Font Larger toggle button & y Font Smaller toggle button & y Italic toggle button 
& y Bold toggle button'",
      "     VISIBLE:  '& y Bold toggle button', cursor=1",
-     "SPEECH OUTPUT: 'Bold toggle button not pressed'"]))
+     "SPEECH OUTPUT: 'Bold'",
+     "SPEECH OUTPUT: 'toggle button not pressed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
diff --git a/test/keystrokes/firefox/aria_checkbox.py b/test/keystrokes/firefox/aria_checkbox.py
index 2656ead..04c4e9f 100644
--- a/test/keystrokes/firefox/aria_checkbox.py
+++ b/test/keystrokes/firefox/aria_checkbox.py
@@ -15,7 +15,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '<x> Include decorative fruit bas', cursor=1",
      "BRAILLE LINE:  '<x> Include decorative fruit basket check box'",
      "     VISIBLE:  '<x> Include decorative fruit bas', cursor=1",
-     "SPEECH OUTPUT: 'Include decorative fruit basket check box checked'"]))
+     "SPEECH OUTPUT: 'Include decorative fruit basket'",
+     "SPEECH OUTPUT: 'check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
@@ -33,7 +34,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '<x> Invalid checkbox check box', cursor=1",
      "BRAILLE LINE:  '<x> Invalid checkbox check box'",
      "     VISIBLE:  '<x> Invalid checkbox check box', cursor=1",
-     "SPEECH OUTPUT: 'Invalid checkbox check box checked'"]))
+     "SPEECH OUTPUT: 'Invalid checkbox'",
+     "SPEECH OUTPUT: 'check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
@@ -51,7 +53,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '<x> Required checkbox check box', cursor=1",
      "BRAILLE LINE:  '<x> Required checkbox check box'",
      "     VISIBLE:  '<x> Required checkbox check box', cursor=1",
-     "SPEECH OUTPUT: 'Required checkbox check box checked required'"]))
+     "SPEECH OUTPUT: 'Required checkbox'",
+     "SPEECH OUTPUT: 'check box checked required'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
@@ -86,7 +89,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '<x> Tri-state checkbox check box', cursor=1",
      "BRAILLE LINE:  '<x> Tri-state checkbox check box'",
      "     VISIBLE:  '<x> Tri-state checkbox check box', cursor=1",
-     "SPEECH OUTPUT: 'Tri-state checkbox check box checked required'"]))
+     "SPEECH OUTPUT: 'Tri-state checkbox'",
+     "SPEECH OUTPUT: 'check box checked required'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
diff --git a/test/keystrokes/firefox/aria_checkbox_dojo.py b/test/keystrokes/firefox/aria_checkbox_dojo.py
index 85d0426..898e1f4 100644
--- a/test/keystrokes/firefox/aria_checkbox_dojo.py
+++ b/test/keystrokes/firefox/aria_checkbox_dojo.py
@@ -13,7 +13,8 @@ sequence.append(utils.AssertPresentationAction(
     "1. Tab to the cb0 checkbox",
     ["BRAILLE LINE:  '<x> cb0: Vanilla (non-dojo) checkbox (for comparison purposes) check box'",
      "     VISIBLE:  '<x> cb0: Vanilla (non-dojo) chec', cursor=0",
-     "SPEECH OUTPUT: 'cb0: Vanilla (non-dojo) checkbox (for comparison purposes) check box checked'"]))
+     "SPEECH OUTPUT: 'cb0: Vanilla (non-dojo) checkbox (for comparison purposes)'",
+     "SPEECH OUTPUT: 'check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
@@ -29,7 +30,8 @@ sequence.append(utils.AssertPresentationAction(
     "3. Tab to the cb1 checkbox",
     ["BRAILLE LINE:  '< > cb1: normal checkbox, with value=foo, clicking generates console log messages 
check box get('value') push button'",
      "     VISIBLE:  '< > cb1: normal checkbox, with v', cursor=0",
-     "SPEECH OUTPUT: 'cb1: normal checkbox, with value=foo, clicking generates console log messages check 
box not checked'"]))
+     "SPEECH OUTPUT: 'cb1: normal checkbox, with value=foo, clicking generates console log messages'",
+     "SPEECH OUTPUT: 'check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
@@ -46,7 +48,8 @@ sequence.append(utils.AssertPresentationAction(
     "5. Tab to the cb2 checkbox",
     ["BRAILLE LINE:  '<x> cb2: normal checkbox, with default value, initially turned on. check box 
\"onChange\" handler updates: [] get('value') push button'",
      "     VISIBLE:  '<x> cb2: normal checkbox, with d', cursor=0",
-     "SPEECH OUTPUT: 'cb2: normal checkbox, with default value, initially turned on. check box checked'"]))
+     "SPEECH OUTPUT: 'cb2: normal checkbox, with default value, initially turned on.'",
+     "SPEECH OUTPUT: 'check box checked'"]))
 
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.StartRecordingAction())
@@ -55,7 +58,8 @@ sequence.append(utils.AssertPresentationAction(
     "6. Tab to the cb4 checkbox",
     ["BRAILLE LINE:  '<x> cb4: readOnly checkbox, turned on check box'",
      "     VISIBLE:  '<x> cb4: readOnly checkbox, turn', cursor=0",
-     "SPEECH OUTPUT: 'cb4: readOnly checkbox, turned on check box checked'"]))
+     "SPEECH OUTPUT: 'cb4: readOnly checkbox, turned on'",
+     "SPEECH OUTPUT: 'check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -63,7 +67,8 @@ sequence.append(utils.AssertPresentationAction(
     "7. Tab to the cb5 checkbox",
     ["BRAILLE LINE:  '< > cb5: normal checkbox, with specified value=\"\", clicking generates console log 
messages check box get('value') push button'",
      "     VISIBLE:  '< > cb5: normal checkbox, with s', cursor=0",
-     "SPEECH OUTPUT: 'cb5: normal checkbox, with specified value=\"\", clicking generates console log 
messages check box not checked'"]))
+     "SPEECH OUTPUT: 'cb5: normal checkbox, with specified value=\"\", clicking generates console log 
messages'",
+     "SPEECH OUTPUT: 'check box not checked'"]))
 
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.StartRecordingAction())
@@ -72,7 +77,8 @@ sequence.append(utils.AssertPresentationAction(
     "8. Tab to the cb6 checkbox",
     ["BRAILLE LINE:  '<x> cb6: instantiated from script check box'",
      "     VISIBLE:  '<x> cb6: instantiated from scrip', cursor=0",
-     "SPEECH OUTPUT: 'cb6: instantiated from script check box checked'"]))
+     "SPEECH OUTPUT: 'cb6: instantiated from script'",
+     "SPEECH OUTPUT: 'check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -80,7 +86,8 @@ sequence.append(utils.AssertPresentationAction(
     "9. Tab to the cb7 checkbox",
     ["BRAILLE LINE:  '< > cb7: normal checkbox. check box disable push button enable push button set value 
to \"fish\" push button Reset value+checked push button \"onChange\" handler updates: []'",
      "     VISIBLE:  '< > cb7: normal checkbox. check ', cursor=0",
-     "SPEECH OUTPUT: 'cb7: normal checkbox. check box not checked'"]))
+     "SPEECH OUTPUT: 'cb7: normal checkbox.'",
+     "SPEECH OUTPUT: 'check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
diff --git a/test/keystrokes/firefox/aria_combobox_dojo.py b/test/keystrokes/firefox/aria_combobox_dojo.py
index bd69a54..d39ebba 100644
--- a/test/keystrokes/firefox/aria_combobox_dojo.py
+++ b/test/keystrokes/firefox/aria_combobox_dojo.py
@@ -21,7 +21,10 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'US State test 1 (200% Courier font): California $l'",
      "     VISIBLE:  '(200% Courier font): California ', cursor=32",
      "SPEECH OUTPUT: 'collapsed'",
-     "SPEECH OUTPUT: 'US State test 1 (200% Courier font): entry California selected'",
+     "SPEECH OUTPUT: 'US State test 1 (200% Courier font):'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: 'California'",
+     "SPEECH OUTPUT: 'selected'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -48,8 +51,10 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'US State test 1 (200% Courier font): California $l'",
      "     VISIBLE:  'ate test 1 (200% Courier font): ', cursor=32",
      "SPEECH OUTPUT: 'California'",
-     "SPEECH OUTPUT: 'California panel'",
-     "SPEECH OUTPUT: 'California List with 3 items'",
+     "SPEECH OUTPUT: 'California'",
+     "SPEECH OUTPUT: 'panel'",
+     "SPEECH OUTPUT: 'California'",
+     "SPEECH OUTPUT: 'List with 3 items'",
      "SPEECH OUTPUT: 'California (CA)'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -129,7 +134,10 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'US State test 1 (200% Courier font): California $l'",
      "     VISIBLE:  '(200% Courier font): California ', cursor=32",
      "SPEECH OUTPUT: 'collapsed'",
-     "SPEECH OUTPUT: 'US State test 1 (200% Courier font): entry California selected'"]))
+     "SPEECH OUTPUT: 'US State test 1 (200% Courier font):'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: 'California'",
+     "SPEECH OUTPUT: 'selected'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/aria_dialog_dojo.py b/test/keystrokes/firefox/aria_dialog_dojo.py
index e31d516..cf80d59 100644
--- a/test/keystrokes/firefox/aria_dialog_dojo.py
+++ b/test/keystrokes/firefox/aria_dialog_dojo.py
@@ -25,7 +25,8 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'First tab page tab'",
      "     VISIBLE:  'First tab page tab', cursor=1",
      "SPEECH OUTPUT: 'TabContainer Dialog First tab Second tab This is the first tab. Lorem ipsum dolor sit 
amet, consectetuer adipiscing elit. Aenean semper sagittis velit. Cras in mi. Duis porta mauris ut ligula. 
Proin porta rutrum lacus. Etiam consequat scelerisque quam. Nulla facilisi. Maecenas luctus venenatis nulla. 
In sit amet dui non mi semper iaculis. Sed molestie tortor at ipsum. Morbi dictum rutrum magna. Sed vitae 
risus. '",
-     "SPEECH OUTPUT: 'First tab page tab'",
+     "SPEECH OUTPUT: 'First tab'",
+     "SPEECH OUTPUT: 'page tab'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/aria_grid_uiuc.py b/test/keystrokes/firefox/aria_grid_uiuc.py
index 1a0e110..c305cc8 100644
--- a/test/keystrokes/firefox/aria_grid_uiuc.py
+++ b/test/keystrokes/firefox/aria_grid_uiuc.py
@@ -17,7 +17,8 @@ sequence.append(utils.AssertPresentationAction(
     "1. Tab to grid",
     ["BRAILLE LINE:  'Selected Sort Sel column push button Msg '",
      "     VISIBLE:  'Selected Sort Sel column push bu', cursor=1",
-     "SPEECH OUTPUT: 'Selected Sort Sel column push button'"]))
+     "SPEECH OUTPUT: 'Selected Sort Sel column'",
+     "SPEECH OUTPUT: 'push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -72,8 +73,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Status Sort Status column push b', cursor=1",
      "SPEECH OUTPUT: 'Status Sort Status column'",
      "SPEECH OUTPUT: 'push button'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'clickable'"]))
+     "SPEECH OUTPUT: 'image clickable'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/aria_landmarks.py b/test/keystrokes/firefox/aria_landmarks.py
index adfc3b1..e020c5c 100644
--- a/test/keystrokes/firefox/aria_landmarks.py
+++ b/test/keystrokes/firefox/aria_landmarks.py
@@ -21,11 +21,11 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("m"))
 sequence.append(utils.AssertPresentationAction(
     "2. m to next landmark",
-    ["BRAILLE LINE:  'navigation main'",
+    ["KNOWN ISSUE: We're reporting the browser name",
+     "BRAILLE LINE:  'navigation main'",
      "     VISIBLE:  'navigation main', cursor=12",
-     "SPEECH OUTPUT: 'main '",
-     "SPEECH OUTPUT: 'application'",
-     "SPEECH OUTPUT: 'embedded'"]))
+     "SPEECH OUTPUT: 'main'",
+     "SPEECH OUTPUT: 'Firefox'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("m"))
@@ -33,8 +33,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. m to next landmark",
     ["BRAILLE LINE:  'application'",
      "     VISIBLE:  'application', cursor=1",
-     "SPEECH OUTPUT: 'application'",
-     "SPEECH OUTPUT: 'embedded'"]))
+     "SPEECH OUTPUT: 'Firefox'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("m"))
@@ -42,8 +41,8 @@ sequence.append(utils.AssertPresentationAction(
     "4. m to next landmark",
     ["BRAILLE LINE:  'complementary'",
      "     VISIBLE:  'complementary', cursor=1",
-     "SPEECH OUTPUT: 'complementary '",
-     "SPEECH OUTPUT: 'form '",
+     "SPEECH OUTPUT: 'complementary'",
+     "SPEECH OUTPUT: 'form'",
      "SPEECH OUTPUT: 'search'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -96,11 +95,10 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>m"))
 sequence.append(utils.AssertPresentationAction(
     "10. Shift+m to previous landmark",
-    ["KNOWN ISSUE: We are skipping over complementary on the way back",
+    ["KNOWN ISSUE: We are skipping over complementary on the way back and speaking 'Firefox'",
      "BRAILLE LINE:  'application'",
      "     VISIBLE:  'application', cursor=1",
-     "SPEECH OUTPUT: 'application'",
-     "SPEECH OUTPUT: 'embedded'"]))
+     "SPEECH OUTPUT: 'Firefox'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>m"))
diff --git a/test/keystrokes/firefox/aria_menu.py b/test/keystrokes/firefox/aria_menu.py
index 6d545c2..65a3b6c 100644
--- a/test/keystrokes/firefox/aria_menu.py
+++ b/test/keystrokes/firefox/aria_menu.py
@@ -7,6 +7,8 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
+
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Alt>m"))
 sequence.append(utils.AssertPresentationAction(
@@ -15,7 +17,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Edit menu', cursor=1",
      "BRAILLE LINE:  'Edit menu'",
      "     VISIBLE:  'Edit menu', cursor=1",
-     "SPEECH OUTPUT: 'Edit menu'"]))
+     "SPEECH OUTPUT: 'Edit'",
+     "SPEECH OUTPUT: 'menu'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -35,7 +38,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'View menu', cursor=1",
      "BRAILLE LINE:  'View menu'",
      "     VISIBLE:  'View menu', cursor=1",
-     "SPEECH OUTPUT: 'View menu'"]))
+     "SPEECH OUTPUT: 'View'",
+     "SPEECH OUTPUT: 'menu'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -45,7 +49,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Themes          > menu', cursor=1",
      "BRAILLE LINE:  'Themes          > menu'",
      "     VISIBLE:  'Themes          > menu', cursor=1",
-     "SPEECH OUTPUT: 'Themes          > menu'"]))
+     "SPEECH OUTPUT: 'Themes          >'",
+     "SPEECH OUTPUT: 'menu'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
@@ -85,7 +90,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'In the Pink grayed', cursor=1",
      "BRAILLE LINE:  'In the Pink grayed'",
      "     VISIBLE:  'In the Pink grayed', cursor=1",
-     "SPEECH OUTPUT: 'In the Pink grayed'"]))
+     "SPEECH OUTPUT: 'In the Pink'",
+     "SPEECH OUTPUT: 'grayed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -105,7 +111,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Themes          > menu', cursor=1",
      "BRAILLE LINE:  'Themes          > menu'",
      "     VISIBLE:  'Themes          > menu', cursor=1",
-     "SPEECH OUTPUT: 'Themes          > menu'"]))
+     "SPEECH OUTPUT: 'Themes          >'",
+     "SPEECH OUTPUT: 'menu'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -135,7 +142,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'More                > menu', cursor=1",
      "BRAILLE LINE:  'More                > menu'",
      "     VISIBLE:  'More                > menu', cursor=1",
-     "SPEECH OUTPUT: 'More                > menu'"]))
+     "SPEECH OUTPUT: 'More                >'",
+     "SPEECH OUTPUT: 'menu'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
diff --git a/test/keystrokes/firefox/aria_radio_button_uiuc.py 
b/test/keystrokes/firefox/aria_radio_button_uiuc.py
index 2c7e9ba..10f2b3e 100644
--- a/test/keystrokes/firefox/aria_radio_button_uiuc.py
+++ b/test/keystrokes/firefox/aria_radio_button_uiuc.py
@@ -20,8 +20,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '&=y Radio Maria radio button', cursor=1",
      "BRAILLE LINE:  '&=y Radio Maria radio button'",
      "     VISIBLE:  '&=y Radio Maria radio button', cursor=1",
-     "SPEECH OUTPUT: 'Lunch Options panel'",
-     "SPEECH OUTPUT: 'Radio Maria selected radio button'"]))
+     "SPEECH OUTPUT: 'Lunch Options'",
+     "SPEECH OUTPUT: 'panel'",
+     "SPEECH OUTPUT: 'Radio Maria'",
+     "SPEECH OUTPUT: 'selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -40,8 +42,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  '& y Rainbow Gardens radio button'",
      "     VISIBLE:  '& y Rainbow Gardens radio button', cursor=1",
      "SPEECH OUTPUT: 'Rainbow Gardens'",
-     "SPEECH OUTPUT: 'not selected'",
-     "SPEECH OUTPUT: 'radio button'"]))
+     "SPEECH OUTPUT: 'not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -69,8 +70,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '&=y Water radio button', cursor=1",
      "BRAILLE LINE:  '&=y Water radio button'",
      "     VISIBLE:  '&=y Water radio button', cursor=1",
-     "SPEECH OUTPUT: 'Drink Options panel'",
-     "SPEECH OUTPUT: 'Water selected radio button'"]))
+     "SPEECH OUTPUT: 'Drink Options'",
+     "SPEECH OUTPUT: 'panel'",
+     "SPEECH OUTPUT: 'Water'",
+     "SPEECH OUTPUT: 'selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -80,8 +83,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  '& y Tea radio button'",
      "     VISIBLE:  '& y Tea radio button', cursor=1",
      "SPEECH OUTPUT: 'Tea'",
-     "SPEECH OUTPUT: 'not selected'",
-     "SPEECH OUTPUT: 'radio button'"]))
+     "SPEECH OUTPUT: 'not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -91,8 +93,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  '& y Water radio button'",
      "     VISIBLE:  '& y Water radio button', cursor=1",
      "SPEECH OUTPUT: 'Water'",
-     "SPEECH OUTPUT: 'not selected'",
-     "SPEECH OUTPUT: 'radio button'"]))
+     "SPEECH OUTPUT: 'not selected radio button'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/aria_slider_dojo.py b/test/keystrokes/firefox/aria_slider_dojo.py
index f2a82d3..f80aaab 100644
--- a/test/keystrokes/firefox/aria_slider_dojo.py
+++ b/test/keystrokes/firefox/aria_slider_dojo.py
@@ -16,7 +16,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'slider 1 10 slider', cursor=0",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: 'slider 1 slider 10'",
+     "SPEECH OUTPUT: 'slider 1'",
+     "SPEECH OUTPUT: 'slider 10'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -62,7 +63,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Slider1 Value: 10.0% $l rdonly', cursor=21",
      "BRAILLE LINE:  'Slider1 Value: 10.0% $l rdonly'",
      "     VISIBLE:  'Slider1 Value: 10.0% $l rdonly', cursor=21",
-     "SPEECH OUTPUT: 'Slider1 Value: read only entry 10.0% selected'"]))
+     "SPEECH OUTPUT: 'Slider1 Value:",
+     "SPEECH OUTPUT: 'read only entry'",
+     "SPEECH OUTPUT: '10.0%'",
+     "SPEECH OUTPUT: 'selected'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -72,7 +76,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Disable previous slider push but', cursor=1",
      "BRAILLE LINE:  'Browse mode'",
      "     VISIBLE:  'Browse mode', cursor=0",
-     "SPEECH OUTPUT: 'Disable previous slider push button'",
+     "SPEECH OUTPUT: 'Disable previous slider'",
+     "SPEECH OUTPUT: 'push button'",
      "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -85,7 +90,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'slider 2 10 slider', cursor=0",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: 'slider 2 slider 10'",
+     "SPEECH OUTPUT: 'slider 2'",
+     "SPEECH OUTPUT: 'slider 10'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/aria_spinner_dojo.py b/test/keystrokes/firefox/aria_spinner_dojo.py
index 39f8034..6ec4116 100644
--- a/test/keystrokes/firefox/aria_spinner_dojo.py
+++ b/test/keystrokes/firefox/aria_spinner_dojo.py
@@ -19,7 +19,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Focus mode', cursor=0",
      "BRAILLE LINE:  'Spinbox #1:  900 $l'",
      "     VISIBLE:  'Spinbox #1:  900 $l', cursor=17",
-     "SPEECH OUTPUT: 'Spinbox #1:  900 selected spin button'",
+     "SPEECH OUTPUT: 'Spinbox #1:  900'",
+     "SPEECH OUTPUT: 'selected spin button'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/aria_tabcontainer_dojo.py 
b/test/keystrokes/firefox/aria_tabcontainer_dojo.py
index 2ea36a7..fe6a104 100644
--- a/test/keystrokes/firefox/aria_tabcontainer_dojo.py
+++ b/test/keystrokes/firefox/aria_tabcontainer_dojo.py
@@ -14,13 +14,14 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
     "1. Tab to tab list",
-    ["BRAILLE LINE:  '  push button  push button  Tab 1 page tab  Tab 2 page tab  Tab 3 page tab  Inlined 
Sub TabContainer page tab  Sub TabContainer from href page tab  SplitContainer from href page tab  Embedded 
layout widgets page tab'",
-     "     VISIBLE:  'Tab 2 page tab  Tab 3 page tab  ', cursor=1",
+    ["BRAILLE LINE:  '  push button  push button Tab 1 page tab Tab 2 page tab Tab 3 page tab Inlined Sub 
TabContainer page tab Sub TabContainer from href page tab SplitContainer from href page tab Embedded layout 
widgets page tab'",
+     "     VISIBLE:  'Tab 2 page tab Tab 3 page tab In', cursor=1",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
      "BRAILLE LINE:  'Tab 2 page tab'",
      "     VISIBLE:  'Tab 2 page tab', cursor=1",
-     "SPEECH OUTPUT: 'Tab 2 page tab'",
+     "SPEECH OUTPUT: 'Tab 2'",
+     "SPEECH OUTPUT: 'page tab'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -31,7 +32,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Tab 3 page tab', cursor=1",
      "BRAILLE LINE:  'Tab 3 page tab'",
      "     VISIBLE:  'Tab 3 page tab', cursor=1",
-     "SPEECH OUTPUT: 'Tab 3 page tab'"]))
+     "SPEECH OUTPUT: 'Tab 3'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
@@ -41,7 +43,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Inlined Sub TabContainer page ta', cursor=1",
      "BRAILLE LINE:  'Inlined Sub TabContainer page tab'",
      "     VISIBLE:  'Inlined Sub TabContainer page ta', cursor=1",
-     "SPEECH OUTPUT: 'Inlined Sub TabContainer page tab'"]))
+     "SPEECH OUTPUT: 'Inlined Sub TabContainer'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -51,7 +54,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'SubTab 2 page tab', cursor=1",
      "BRAILLE LINE:  'SubTab 2 page tab'",
      "     VISIBLE:  'SubTab 2 page tab', cursor=1",
-     "SPEECH OUTPUT: 'SubTab 2 page tab'"]))
+     "SPEECH OUTPUT: 'SubTab 2'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/aria_tabpanel.py b/test/keystrokes/firefox/aria_tabpanel.py
index 272f2cb..9962e60 100644
--- a/test/keystrokes/firefox/aria_tabpanel.py
+++ b/test/keystrokes/firefox/aria_tabpanel.py
@@ -25,7 +25,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Tab One page tab', cursor=1",
      "BRAILLE LINE:  'Tab One page tab'",
      "     VISIBLE:  'Tab One page tab', cursor=1",
-     "SPEECH OUTPUT: 'Tab One page tab'"]))
+     "SPEECH OUTPUT: 'Tab One'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
@@ -35,7 +36,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Tab Two page tab', cursor=1",
      "BRAILLE LINE:  'Tab Two page tab'",
      "     VISIBLE:  'Tab Two page tab', cursor=1",
-     "SPEECH OUTPUT: 'Tab Two page tab'"]))
+     "SPEECH OUTPUT: 'Tab Two'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -45,7 +47,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '&=y Internal Portal Bookmark rad', cursor=1",
      "BRAILLE LINE:  'Browse mode'",
      "     VISIBLE:  'Browse mode', cursor=0",
-     "SPEECH OUTPUT: 'Internal Portal Bookmark selected radio button'",
+     "SPEECH OUTPUT: 'Internal Portal Bookmark'",
+     "SPEECH OUTPUT: 'selected radio button'",
      "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -60,7 +63,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Focus mode', cursor=0",
      "BRAILLE LINE:  'Tab Two page tab'",
      "     VISIBLE:  'Tab Two page tab', cursor=1",
-     "SPEECH OUTPUT: 'Tab Two page tab'",
+     "SPEECH OUTPUT: 'Tab Two'",
+     "SPEECH OUTPUT: 'page tab'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -71,7 +75,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Tab Three page tab', cursor=1",
      "BRAILLE LINE:  'Tab Three page tab'",
      "     VISIBLE:  'Tab Three page tab', cursor=1",
-     "SPEECH OUTPUT: 'Tab Three page tab'"]))
+     "SPEECH OUTPUT: 'Tab Three'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
@@ -81,7 +86,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Tab Four page tab', cursor=1",
      "BRAILLE LINE:  'Tab Four page tab'",
      "     VISIBLE:  'Tab Four page tab', cursor=1",
-     "SPEECH OUTPUT: 'Tab Four page tab'"]))
+     "SPEECH OUTPUT: 'Tab Four'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/aria_tabpanel_text_dojo.py 
b/test/keystrokes/firefox/aria_tabpanel_text_dojo.py
index 6f36e19..6aa606e 100644
--- a/test/keystrokes/firefox/aria_tabpanel_text_dojo.py
+++ b/test/keystrokes/firefox/aria_tabpanel_text_dojo.py
@@ -25,7 +25,8 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'First tab page tab'",
      "     VISIBLE:  'First tab page tab', cursor=1",
      "SPEECH OUTPUT: 'TabContainer Dialog First tab Second tab This is the first tab. Lorem ipsum dolor sit 
amet, consectetuer adipiscing elit. Aenean semper sagittis velit. Cras in mi. Duis porta mauris ut ligula. 
Proin porta rutrum lacus. Etiam consequat scelerisque quam. Nulla facilisi. Maecenas luctus venenatis nulla. 
In sit amet dui non mi semper iaculis. Sed molestie tortor at ipsum. Morbi dictum rutrum magna. Sed vitae 
risus. '",
-     "SPEECH OUTPUT: 'First tab page tab'",
+     "SPEECH OUTPUT: 'First tab'",
+     "SPEECH OUTPUT: 'page tab'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -36,7 +37,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Second tab page tab', cursor=1",
      "BRAILLE LINE:  'Second tab page tab'",
      "     VISIBLE:  'Second tab page tab', cursor=1",
-     "SPEECH OUTPUT: 'Second tab page tab'"]))
+     "SPEECH OUTPUT: 'Second tab'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -49,7 +51,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'Make it overflow. ipsum dolor sit amet, consectetuer adipiscing elit. Aenean'",
      "     VISIBLE:  'ipsum dolor sit amet, consectetu', cursor=1",
      "SPEECH OUTPUT: 'ipsum dolor sit amet'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -58,7 +60,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Down Arrow in Browse Mode",
     ["BRAILLE LINE:  'semper sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin porta rutrum'",
      "     VISIBLE:  'semper sagittis velit. Cras in m', cursor=1",
-     "SPEECH OUTPUT: 'semper sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin porta rutrum 
'"]))
+     "SPEECH OUTPUT: 'semper sagittis velit. Cras in mi. Duis porta mauris ut ligula. Proin porta rutrum'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -66,7 +68,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Down Arrow in Browse Mode",
     ["BRAILLE LINE:  'lacus. Etiam consequat scelerisque quam. Nulla facilisi. Maecenas luctus'",
      "     VISIBLE:  'lacus. Etiam consequat scelerisq', cursor=1",
-     "SPEECH OUTPUT: 'lacus. Etiam consequat scelerisque quam. Nulla facilisi. Maecenas luctus '"]))
+     "SPEECH OUTPUT: 'lacus. Etiam consequat scelerisque quam. Nulla facilisi. Maecenas luctus'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/aria_tabpanel_uiuc.py b/test/keystrokes/firefox/aria_tabpanel_uiuc.py
index cad48ff..05d51b7 100644
--- a/test/keystrokes/firefox/aria_tabpanel_uiuc.py
+++ b/test/keystrokes/firefox/aria_tabpanel_uiuc.py
@@ -17,7 +17,8 @@ sequence.append(utils.AssertPresentationAction(
     "1. Give focus to a widget in the first Tab",
     ["BRAILLE LINE:  '&=y Thick and cheesy radio button'",
      "     VISIBLE:  '&=y Thick and cheesy radio butto', cursor=0",
-     "SPEECH OUTPUT: 'Thick and cheesy selected radio button'"]))
+     "SPEECH OUTPUT: 'Thick and cheesy'",
+     "SPEECH OUTPUT: 'selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Page_Down"))
@@ -29,7 +30,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Focus mode', cursor=0",
      "BRAILLE LINE:  'Veggies page tab'",
      "     VISIBLE:  'Veggies page tab', cursor=1",
-     "SPEECH OUTPUT: 'Veggies page tab'",
+     "SPEECH OUTPUT: 'Veggies'",
+     "SPEECH OUTPUT: 'page tab'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -40,7 +42,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Carnivore page tab', cursor=1",
      "BRAILLE LINE:  'Carnivore page tab'",
      "     VISIBLE:  'Carnivore page tab', cursor=1",
-     "SPEECH OUTPUT: 'Carnivore page tab'"]))
+     "SPEECH OUTPUT: 'Carnivore'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -60,7 +63,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Delivery page tab', cursor=1",
      "BRAILLE LINE:  'Delivery page tab'",
      "     VISIBLE:  'Delivery page tab', cursor=1",
-     "SPEECH OUTPUT: 'Delivery page tab'"]))
+     "SPEECH OUTPUT: 'Delivery'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
@@ -70,7 +74,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Carnivore page tab', cursor=1",
      "BRAILLE LINE:  'Carnivore page tab'",
      "     VISIBLE:  'Carnivore page tab', cursor=1",
-     "SPEECH OUTPUT: 'Carnivore page tab'"]))
+     "SPEECH OUTPUT: 'Carnivore'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -80,7 +85,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '< > Pepperoni check box', cursor=1",
      "BRAILLE LINE:  'Browse mode'",
      "     VISIBLE:  'Browse mode', cursor=0",
-     "SPEECH OUTPUT: 'Pepperoni check box not checked'",
+     "SPEECH OUTPUT: 'Pepperoni'",
+     "SPEECH OUTPUT: 'check box not checked'",
      "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/aria_toolbar_dojo.py b/test/keystrokes/firefox/aria_toolbar_dojo.py
index 1946f5c..8795b4a 100644
--- a/test/keystrokes/firefox/aria_toolbar_dojo.py
+++ b/test/keystrokes/firefox/aria_toolbar_dojo.py
@@ -33,18 +33,17 @@ sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "3. Down Arrow",
     ["KNOWN ISSUE: Whether or not this is the ideal presentation is questionable. But it is more correct 
that what we were doing.",
-     "BRAILLE LINE:  'Buttons: Copy Toggles: Italic  tool bar Dropdowns: TooltipDialog ColorPalette Combos: 
Menu save options push button Menu2 push button save options2 push button '",
-     "     VISIBLE:  'Buttons: Copy Toggles: Italic  t', cursor=1",
-     "SPEECH OUTPUT: 'Buttons: '",
+     "BRAILLE LINE:  'Buttons: Copy Toggles: Italic tool bar Dropdowns: TooltipDialog ColorPalette Combos: 
Menu save options push button Menu2 push button save options2 push button '",
+     "     VISIBLE:  'Buttons: Copy Toggles: Italic to', cursor=1",
+     "SPEECH OUTPUT: 'Buttons:'",
      "SPEECH OUTPUT: 'Copy'",
-     "SPEECH OUTPUT: ' Toggles: '",
+     "SPEECH OUTPUT: 'Toggles:'",
      "SPEECH OUTPUT: 'Italic'",
-     "SPEECH OUTPUT: ' '",
      "SPEECH OUTPUT: 'tool bar'",
-     "SPEECH OUTPUT: 'Dropdowns: '",
+     "SPEECH OUTPUT: 'Dropdowns:'",
      "SPEECH OUTPUT: 'TooltipDialog'",
      "SPEECH OUTPUT: 'ColorPalette'",
-     "SPEECH OUTPUT: ' Combos: '",
+     "SPEECH OUTPUT: 'Combos:'",
      "SPEECH OUTPUT: 'Menu'",
      "SPEECH OUTPUT: 'save options'",
      "SPEECH OUTPUT: 'push button'",
diff --git a/test/keystrokes/firefox/aria_tree_dojo.py b/test/keystrokes/firefox/aria_tree_dojo.py
index 48de9af..5f30c23 100644
--- a/test/keystrokes/firefox/aria_tree_dojo.py
+++ b/test/keystrokes/firefox/aria_tree_dojo.py
@@ -19,7 +19,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Continents expanded list item', cursor=1",
      "BRAILLE LINE:  'Continents expanded list item'",
      "     VISIBLE:  'Continents expanded list item', cursor=1",
-     "SPEECH OUTPUT: 'Continents expanded tree level 1'"]))
+     "SPEECH OUTPUT: 'Continents'",
+     "SPEECH OUTPUT: 'expanded tree level 1'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -30,8 +31,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Africa collapsed list item', cursor=1",
      "BRAILLE LINE:  'Africa collapsed list item'",
      "     VISIBLE:  'Africa collapsed list item', cursor=1",
-     "SPEECH OUTPUT: 'Continents panel'",
-     "SPEECH OUTPUT: 'Africa collapsed tree level 2'"]))
+     "SPEECH OUTPUT: 'Continents'",
+     "SPEECH OUTPUT: 'panel'",
+     "SPEECH OUTPUT: 'Africa'",
+     "SPEECH OUTPUT: 'collapsed tree level 2'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -60,8 +63,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Egypt list item', cursor=1",
      "BRAILLE LINE:  'Egypt list item'",
      "     VISIBLE:  'Egypt list item', cursor=1",
-     "SPEECH OUTPUT: 'Africa panel'",
-     "SPEECH OUTPUT: 'Egypt tree level 3'"]))
+     "SPEECH OUTPUT: 'Africa'",
+     "SPEECH OUTPUT: 'panel'",
+     "SPEECH OUTPUT: 'Egypt'",
+     "SPEECH OUTPUT: 'tree level 3'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -71,7 +76,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Kenya collapsed list item', cursor=1",
      "BRAILLE LINE:  'Kenya collapsed list item'",
      "     VISIBLE:  'Kenya collapsed list item', cursor=1",
-     "SPEECH OUTPUT: 'Kenya collapsed'"]))
+     "SPEECH OUTPUT: 'Kenya'",
+     "SPEECH OUTPUT: 'collapsed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
@@ -97,7 +103,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Sudan collapsed list item', cursor=1",
      "BRAILLE LINE:  'Sudan collapsed list item'",
      "     VISIBLE:  'Sudan collapsed list item', cursor=1",
-     "SPEECH OUTPUT: 'Sudan collapsed'"]))
+     "SPEECH OUTPUT: 'Sudan'",
+     "SPEECH OUTPUT: 'collapsed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -107,7 +114,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Asia collapsed list item', cursor=1",
      "BRAILLE LINE:  'Asia collapsed list item'",
      "     VISIBLE:  'Asia collapsed list item', cursor=1",
-     "SPEECH OUTPUT: 'Asia collapsed tree level 2'"]))
+     "SPEECH OUTPUT: 'Asia'",
+     "SPEECH OUTPUT: 'collapsed tree level 2'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
@@ -126,8 +134,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'China list item', cursor=1",
      "BRAILLE LINE:  'China list item'",
      "     VISIBLE:  'China list item', cursor=1",
-     "SPEECH OUTPUT: 'Asia panel'",
-     "SPEECH OUTPUT: 'China tree level 3'"]))
+     "SPEECH OUTPUT: 'Asia'",
+     "SPEECH OUTPUT: 'panel'",
+     "SPEECH OUTPUT: 'China'",
+     "SPEECH OUTPUT: 'tree level 3'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
diff --git a/test/keystrokes/firefox/aria_tree_uiuc.py b/test/keystrokes/firefox/aria_tree_uiuc.py
index 3eb007a..86d8d12 100644
--- a/test/keystrokes/firefox/aria_tree_uiuc.py
+++ b/test/keystrokes/firefox/aria_tree_uiuc.py
@@ -15,19 +15,20 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
     "1. Tab to tree",
-    ["BRAILLE LINE:  'Fruits'",
-     "     VISIBLE:  'Fruits', cursor=8",
+    ["BRAILLE LINE:  'Fruits expanded list item'",
+     "     VISIBLE:  'Fruits expanded list item', cursor=1",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: 'Fruits expanded tree level 1'",
+     "SPEECH OUTPUT: 'Fruits'",
+     "SPEECH OUTPUT: 'expanded tree level 1'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
     "2. Basic whereAmI",
-    ["BRAILLE LINE:  'Fruits'",
-     "     VISIBLE:  'Fruits', cursor=8",
+    ["BRAILLE LINE:  'Fruits expanded list item'",
+     "     VISIBLE:  'Fruits expanded list item', cursor=1",
      "BRAILLE LINE:  'Fruits expanded list item'",
      "     VISIBLE:  'Fruits expanded list item', cursor=1",
      "SPEECH OUTPUT: 'list item'",
@@ -42,7 +43,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Oranges list item', cursor=1",
      "BRAILLE LINE:  'Oranges list item'",
      "     VISIBLE:  'Oranges list item', cursor=1",
-     "SPEECH OUTPUT: 'Oranges tree level 2'"]))
+     "SPEECH OUTPUT: 'Oranges'",
+     "SPEECH OUTPUT: 'tree level 2'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -60,7 +62,8 @@ sequence.append(utils.AssertPresentationAction(
     "5. Down arrow to apples",
     ["BRAILLE LINE:  'Apples collapsed list item'",
      "     VISIBLE:  'Apples collapsed list item', cursor=1",
-     "SPEECH OUTPUT: 'Apples collapsed'"]))
+     "SPEECH OUTPUT: 'Apples'",
+     "SPEECH OUTPUT: 'collapsed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
@@ -80,7 +83,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Macintosh list item', cursor=1",
      "BRAILLE LINE:  'Macintosh list item'",
      "     VISIBLE:  'Macintosh list item', cursor=1",
-     "SPEECH OUTPUT: 'Macintosh tree level 3'"]))
+     "SPEECH OUTPUT: 'Macintosh'",
+     "SPEECH OUTPUT: 'tree level 3'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -88,7 +92,8 @@ sequence.append(utils.AssertPresentationAction(
     "8. Down arrow to granny smith",
     ["BRAILLE LINE:  'Granny Smith collapsed list item'",
      "     VISIBLE:  'Granny Smith collapsed list item', cursor=1",
-     "SPEECH OUTPUT: 'Granny Smith collapsed'"]))
+     "SPEECH OUTPUT: 'Granny Smith'",
+     "SPEECH OUTPUT: 'collapsed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
@@ -108,7 +113,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Washington State list item', cursor=1",
      "BRAILLE LINE:  'Washington State list item'",
      "     VISIBLE:  'Washington State list item', cursor=1",
-     "SPEECH OUTPUT: 'Washington State tree level 4'"]))
+     "SPEECH OUTPUT: 'Washington State'",
+     "SPEECH OUTPUT: 'tree level 4'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -138,7 +144,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Fuji list item', cursor=1",
      "BRAILLE LINE:  'Fuji list item'",
      "     VISIBLE:  'Fuji list item', cursor=1",
-     "SPEECH OUTPUT: 'Fuji tree level 3'"]))
+     "SPEECH OUTPUT: 'Fuji'",
+     "SPEECH OUTPUT: 'tree level 3'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -148,7 +155,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Bananas list item', cursor=1",
      "BRAILLE LINE:  'Bananas list item'",
      "     VISIBLE:  'Bananas list item', cursor=1",
-     "SPEECH OUTPUT: 'Bananas tree level 2'"]))
+     "SPEECH OUTPUT: 'Bananas'",
+     "SPEECH OUTPUT: 'tree level 2'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -166,7 +174,8 @@ sequence.append(utils.AssertPresentationAction(
     "16. Down arrow to vegetables",
     ["BRAILLE LINE:  'Vegetables expanded list item'",
      "     VISIBLE:  'Vegetables expanded list item', cursor=1",
-     "SPEECH OUTPUT: 'Vegetables expanded tree level 1'"]))
+     "SPEECH OUTPUT: 'Vegetables'",
+     "SPEECH OUTPUT: 'expanded tree level 1'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
diff --git a/test/keystrokes/firefox/find_wiki.py b/test/keystrokes/firefox/find_wiki.py
index 9175b0a..1043604 100644
--- a/test/keystrokes/firefox/find_wiki.py
+++ b/test/keystrokes/firefox/find_wiki.py
@@ -37,7 +37,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. Return to next result",
     ["BRAILLE LINE:  'Orca is a free, open source, flexible, extensible, and  $l'",
      "     VISIBLE:  'Orca is a free, open source, fle', cursor=1",
-     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, extensible, and '"]))
+     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, extensible, and'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
@@ -45,7 +45,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Return to next result",
     ["BRAILLE LINE:  'Orca is a free, open source, flexible, extensible, and  $l'",
      "     VISIBLE:  'rce, flexible, extensible, and  ', cursor=32",
-     "SPEECH OUTPUT: 'synthesis, braille, and magnification, Orca helps provide '"]))
+     "SPEECH OUTPUT: 'synthesis, braille, and magnification, Orca helps provide'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Escape"))
@@ -53,7 +53,8 @@ sequence.append(utils.AssertPresentationAction(
     "5. Escape to return to page content",
     ["BRAILLE LINE:  'synthesis, braille, and magnification, Orca helps provide'",
      "     VISIBLE:  'raille, and magnification, Orca ', cursor=32",
-     "SPEECH OUTPUT: 'synthesis, braille, and magnification, Orca helps provide  selected'"]))
+     "SPEECH OUTPUT: 'synthesis, braille, and magnification, Orca helps provide '",
+     "SPEECH OUTPUT: 'selected'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -61,7 +62,7 @@ sequence.append(utils.AssertPresentationAction(
     "6. Down arrow to be sure we've updated our position",
     ["BRAILLE LINE:  'access to applications and toolkits that support the AT-SPI'",
      "     VISIBLE:  'access to applications and toolk', cursor=1",
-     "SPEECH OUTPUT: 'access to applications and toolkits that support the AT-SPI '"]))
+     "SPEECH OUTPUT: 'access to applications and toolkits that support the AT-SPI'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/focus_tracking_imagemap.py 
b/test/keystrokes/firefox/focus_tracking_imagemap.py
index 61fae4c..7fa0d8d 100644
--- a/test/keystrokes/firefox/focus_tracking_imagemap.py
+++ b/test/keystrokes/firefox/focus_tracking_imagemap.py
@@ -14,7 +14,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Test: z y x w v u t s r q p o n m l k j i h g f e d c b a'",
      "     VISIBLE:  'Test: z y x w v u t s r q p o n ', cursor=0",
      "SPEECH OUTPUT: 'z'",
-     "SPEECH OUTPUT: 'image map link rect' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'image map link rect'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -23,7 +23,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Test: z y x w v u t s r q p o n m l k j i h g f e d c b a'",
      "     VISIBLE:  'Test: z y x w v u t s r q p o n ', cursor=0",
      "SPEECH OUTPUT: 'y'",
-     "SPEECH OUTPUT: 'image map link rect' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'image map link rect'"]))
 
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Tab"))
@@ -57,7 +57,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'Test: z y x w v u t s r q p o n m l k j i h g f e d c b a'",
      "     VISIBLE:  'Test: z y x w v u t s r q p o n ', cursor=0",
      "SPEECH OUTPUT: 'a'",
-     "SPEECH OUTPUT: 'image map link rect' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'image map link rect'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -65,7 +65,8 @@ sequence.append(utils.AssertPresentationAction(
     "4. Tab",
     ["BRAILLE LINE:  'wk09_frozenmovie'",
      "     VISIBLE:  'wk09_frozenmovie', cursor=1",
-     "SPEECH OUTPUT: 'wk09_frozenmovie link image' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'wk09_frozenmovie' voice=hyperlink",
+     "SPEECH OUTPUT: 'link image'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/focus_tracking_links.py b/test/keystrokes/firefox/focus_tracking_links.py
index 89f015c..b48d411 100644
--- a/test/keystrokes/firefox/focus_tracking_links.py
+++ b/test/keystrokes/firefox/focus_tracking_links.py
@@ -17,7 +17,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Hello world, this is a test.', cursor=1",
      "SPEECH OUTPUT: 'Hello world'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ', this is a test. '"]))
+     "SPEECH OUTPUT: ', this is a test.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -37,7 +37,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'Bar'",
      "     VISIBLE:  'Bar', cursor=1",
      "SPEECH OUTPUT: 'Bar'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Tab"))
@@ -48,7 +48,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'Foo'",
      "     VISIBLE:  'Foo', cursor=1",
      "SPEECH OUTPUT: 'Foo'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/html_role_combo_box.py b/test/keystrokes/firefox/html_role_combo_box.py
index 151547f..cf454de 100644
--- a/test/keystrokes/firefox/html_role_combo_box.py
+++ b/test/keystrokes/firefox/html_role_combo_box.py
@@ -17,7 +17,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Severity: Severity normal combo ', cursor=0",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: 'Severity normal combo box'",
+     "SPEECH OUTPUT: 'Severity normal'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -43,7 +44,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'Priority: Normal combo box'",
      "     VISIBLE:  'Priority: Normal combo box', cursor=1",
      "SPEECH OUTPUT: 'Priority'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -54,7 +55,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Priority: Normal combo box', cursor=0",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: 'Priority: Normal combo box'",
+     "SPEECH OUTPUT: 'Priority: Normal'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -65,7 +67,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Priority: Normal combo box', cursor=0",
      "BRAILLE LINE:  'FIXED combo box'",
      "     VISIBLE:  'FIXED combo box', cursor=1",
-     "SPEECH OUTPUT: 'Resolution: FIXED combo box'"]))
+     "SPEECH OUTPUT: 'Resolution: FIXED'",
+     "SPEECH OUTPUT: 'combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -106,7 +109,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'WONTFIX combo box', cursor=1",
      "BRAILLE LINE:  'WONTFIX combo box'",
      "     VISIBLE:  'WONTFIX combo box', cursor=1",
-     "SPEECH OUTPUT: 'Resolution: WONTFIX combo box'",
+     "SPEECH OUTPUT: 'Resolution: WONTFIX'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'collapsed'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -115,7 +119,8 @@ sequence.append(utils.AssertPresentationAction(
     "11. Tab to Version combo box",
     ["BRAILLE LINE:  '2.16 combo box'",
      "     VISIBLE:  '2.16 combo box', cursor=1",
-     "SPEECH OUTPUT: 'Version 2.16 combo box'"]))
+     "SPEECH OUTPUT: 'Version 2.16'",
+     "SPEECH OUTPUT: 'combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
diff --git a/test/keystrokes/firefox/html_role_links.py b/test/keystrokes/firefox/html_role_links.py
index f542fab..a4b97ae 100644
--- a/test/keystrokes/firefox/html_role_links.py
+++ b/test/keystrokes/firefox/html_role_links.py
@@ -24,7 +24,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  '•anchors.html'",
      "     VISIBLE:  '•anchors.html', cursor=2",
      "SPEECH OUTPUT: 'anchors.html'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -35,7 +35,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  '•blockquotes.html'",
      "     VISIBLE:  '•blockquotes.html', cursor=2",
      "SPEECH OUTPUT: 'blockquotes.html'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -46,7 +46,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  '•bugzilla_top.html'",
      "     VISIBLE:  '•bugzilla_top.html', cursor=2",
      "SPEECH OUTPUT: 'bugzilla_top.html'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Tab"))
@@ -57,7 +57,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  '•blockquotes.html'",
      "     VISIBLE:  '•blockquotes.html', cursor=2",
      "SPEECH OUTPUT: 'blockquotes.html'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
diff --git a/test/keystrokes/firefox/html_struct_nav_blockquote.py 
b/test/keystrokes/firefox/html_struct_nav_blockquote.py
index 4da4d23..d0af995 100644
--- a/test/keystrokes/firefox/html_struct_nav_blockquote.py
+++ b/test/keystrokes/firefox/html_struct_nav_blockquote.py
@@ -15,7 +15,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. q to first quote", 
     ["BRAILLE LINE:  'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and'",
      "     VISIBLE:  'NOBODY expects the Spanish Inqui', cursor=1",
-     "SPEECH OUTPUT: 'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and '"]))
+     "SPEECH OUTPUT: 'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("q"))
@@ -23,7 +23,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. q to second quote", 
     ["BRAILLE LINE:  'Now old lady, you have one last chance. Confess the heinous sin of heresy, reject the 
works of the'",
      "     VISIBLE:  'Now old lady, you have one last ', cursor=1",
-     "SPEECH OUTPUT: 'Now old lady, you have one last chance. Confess the heinous sin of heresy, reject the 
works of the '"]))
+     "SPEECH OUTPUT: 'Now old lady, you have one last chance. Confess the heinous sin of heresy, reject the 
works of the'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("q"))
@@ -31,7 +31,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. q to third quote", 
     ["BRAILLE LINE:  'Hm! She is made of harder stuff! Cardinal Fang! Fetch the COMFY CHAIR!'",
      "     VISIBLE:  'Hm! She is made of harder stuff!', cursor=1",
-     "SPEECH OUTPUT: 'Hm! She is made of harder stuff! Cardinal Fang! Fetch the COMFY CHAIR! '"]))
+     "SPEECH OUTPUT: 'Hm! She is made of harder stuff! Cardinal Fang! Fetch the COMFY CHAIR!'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("q"))
@@ -42,7 +42,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and'",
      "     VISIBLE:  'NOBODY expects the Spanish Inqui', cursor=1",
      "SPEECH OUTPUT: 'Wrapping to top.' voice=system",
-     "SPEECH OUTPUT: 'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and '"]))
+     "SPEECH OUTPUT: 'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>q"))
@@ -53,7 +53,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'Hm! She is made of harder stuff! Cardinal Fang! Fetch the COMFY CHAIR!'",
      "     VISIBLE:  'Hm! She is made of harder stuff!', cursor=1",
      "SPEECH OUTPUT: 'Wrapping to bottom.' voice=system",
-     "SPEECH OUTPUT: 'Hm! She is made of harder stuff! Cardinal Fang! Fetch the COMFY CHAIR! "]))
+     "SPEECH OUTPUT: 'Hm! She is made of harder stuff! Cardinal Fang! Fetch the COMFY CHAIR!'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>q"))
@@ -61,7 +61,7 @@ sequence.append(utils.AssertPresentationAction(
     "6. Shift+q wrap to second quote", 
     ["BRAILLE LINE:  'Now old lady, you have one last chance. Confess the heinous sin of heresy, reject the 
works of the'",
      "     VISIBLE:  'Now old lady, you have one last ', cursor=1",
-     "SPEECH OUTPUT: 'Now old lady, you have one last chance. Confess the heinous sin of heresy, reject the 
works of the '"]))
+     "SPEECH OUTPUT: 'Now old lady, you have one last chance. Confess the heinous sin of heresy, reject the 
works of the'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
diff --git a/test/keystrokes/firefox/html_struct_nav_bug_554616.py 
b/test/keystrokes/firefox/html_struct_nav_bug_554616.py
index ce99f70..f13106c 100644
--- a/test/keystrokes/firefox/html_struct_nav_bug_554616.py
+++ b/test/keystrokes/firefox/html_struct_nav_bug_554616.py
@@ -69,11 +69,10 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'Download'",
      "SPEECH OUTPUT: 'installer'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (10190 KB)",
-     "'",
+     "SPEECH OUTPUT: '(10190 KB)'",
      "SPEECH OUTPUT: 'portable archive'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (9154 KB)'",
+     "SPEECH OUTPUT: '(9154 KB)'",
      "SPEECH OUTPUT: 'Row 2, column 3.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -90,11 +89,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Row 3, column 3.', cursor=0",
      "SPEECH OUTPUT: 'installer'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (10193 KB)",
-     "'",
+     "SPEECH OUTPUT: '(10193 KB)'",
      "SPEECH OUTPUT: 'portable archive'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (9149 KB)'",
+     "SPEECH OUTPUT: '(9149 KB)'",
      "SPEECH OUTPUT: 'Row 3, column 3.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -143,11 +141,10 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'Download'",
      "SPEECH OUTPUT: 'installer'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (10186 KB)",
-     "'",
+     "SPEECH OUTPUT: '(10186 KB)'",
      "SPEECH OUTPUT: 'portable archive'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (9146 KB)'",
+     "SPEECH OUTPUT: '(9146 KB)'",
      "SPEECH OUTPUT: 'Row 4, column 3.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/html_struct_nav_bug_567984.py 
b/test/keystrokes/firefox/html_struct_nav_bug_567984.py
index 49a4195..90d4d38 100644
--- a/test/keystrokes/firefox/html_struct_nav_bug_567984.py
+++ b/test/keystrokes/firefox/html_struct_nav_bug_567984.py
@@ -62,7 +62,7 @@ sequence.append(utils.AssertPresentationAction(
     "6. Down",
     ["BRAILLE LINE:  'A 75 éves Arthur Nadeltõl több százmillió dollár követelnének az ügyfelei, de még a 
férfit sem találják.'",
      "     VISIBLE:  'A 75 éves Arthur Nadeltõl több s', cursor=1",
-     "SPEECH OUTPUT: 'A 75 éves Arthur Nadeltõl több százmillió dollár követelnének az ügyfelei, de még a 
férfit sem találják. '"]))
+     "SPEECH OUTPUT: 'A 75 éves Arthur Nadeltõl több százmillió dollár követelnének az ügyfelei, de még a 
férfit sem találják.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -90,7 +90,7 @@ sequence.append(utils.AssertPresentationAction(
     "9. Down",
     ["BRAILLE LINE:  'Megállapodott Putyin és Tyimosenko az orosz-ukrán szerzõdésrõl. Amint lepapírozzák, 
jön a gáz.'",
      "     VISIBLE:  'Megállapodott Putyin és Tyimosen', cursor=1",
-     "SPEECH OUTPUT: 'Megállapodott Putyin és Tyimosenko az orosz-ukrán szerzõdésrõl. Amint lepapírozzák, 
jön a gáz. '"]))
+     "SPEECH OUTPUT: 'Megállapodott Putyin és Tyimosenko az orosz-ukrán szerzõdésrõl. Amint lepapírozzák, 
jön a gáz.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>h"))
diff --git a/test/keystrokes/firefox/html_struct_nav_heading_in_div_with_text.py 
b/test/keystrokes/firefox/html_struct_nav_heading_in_div_with_text.py
index ac734d8..b44889e 100644
--- a/test/keystrokes/firefox/html_struct_nav_heading_in_div_with_text.py
+++ b/test/keystrokes/firefox/html_struct_nav_heading_in_div_with_text.py
@@ -15,7 +15,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. 2 for first heading",
     ["BRAILLE LINE:  'First Heading h2'",
      "     VISIBLE:  'First Heading h2', cursor=1",
-     "SPEECH OUTPUT: 'First Heading '",
+     "SPEECH OUTPUT: 'First Heading'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'heading level 2'"]))
 
@@ -25,7 +25,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Down Arrow to text after First Heading",
     ["BRAILLE LINE:  'text'",
      "     VISIBLE:  'text', cursor=1",
-     "SPEECH OUTPUT: 'text '"]))
+     "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("2"))
@@ -33,7 +33,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. 2 to move to the next heading",
     ["BRAILLE LINE:  'Second Heading h2'",
      "     VISIBLE:  'Second Heading h2', cursor=1",
-     "SPEECH OUTPUT: 'Second Heading '",
+     "SPEECH OUTPUT: 'Second Heading'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'heading level 2'"]))
 
@@ -43,7 +43,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Down Arrow to text after First Heading",
     ["BRAILLE LINE:  'text'",
      "     VISIBLE:  'text', cursor=1",
-     "SPEECH OUTPUT: 'text '"]))
+     "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>2"))
@@ -51,7 +51,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Shift+2 to move to the previous heading",
     ["BRAILLE LINE:  'Second Heading h2'",
      "     VISIBLE:  'Second Heading h2', cursor=1",
-     "SPEECH OUTPUT: 'Second Heading '",
+     "SPEECH OUTPUT: 'Second Heading'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'heading level 2'"]))
 
@@ -61,7 +61,7 @@ sequence.append(utils.AssertPresentationAction(
     "6. Up Arrow to text after First Heading",
     ["BRAILLE LINE:  'text'",
      "     VISIBLE:  'text', cursor=1",
-     "SPEECH OUTPUT: 'text '"]))
+     "SPEECH OUTPUT: 'text'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>2"))
@@ -69,7 +69,7 @@ sequence.append(utils.AssertPresentationAction(
     "7. Shift+2 to move to the previous heading",
     ["BRAILLE LINE:  'First Heading h2'",
      "     VISIBLE:  'First Heading h2', cursor=1",
-     "SPEECH OUTPUT: 'First Heading '",
+     "SPEECH OUTPUT: 'First Heading'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'heading level 2'"]))
 
@@ -82,7 +82,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'Second Heading h2'",
      "     VISIBLE:  'Second Heading h2', cursor=1",
      "SPEECH OUTPUT: 'Wrapping to bottom.' voice=system",
-     "SPEECH OUTPUT: 'Second Heading '",
+     "SPEECH OUTPUT: 'Second Heading'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'heading level 2'"]))
 
@@ -95,7 +95,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'First Heading h2'",
      "     VISIBLE:  'First Heading h2', cursor=1",
      "SPEECH OUTPUT: 'Wrapping to top.' voice=system",
-     "SPEECH OUTPUT: 'First Heading '",
+     "SPEECH OUTPUT: 'First Heading'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'heading level 2'"]))
 
diff --git a/test/keystrokes/firefox/html_struct_nav_large_obj.py 
b/test/keystrokes/firefox/html_struct_nav_large_obj.py
index 2671ab9..9c0223b 100644
--- a/test/keystrokes/firefox/html_struct_nav_large_obj.py
+++ b/test/keystrokes/firefox/html_struct_nav_large_obj.py
@@ -96,24 +96,24 @@ sequence.append(utils.AssertPresentationAction(
      "all you need do is take me, ",
      "dissolve me under the tongue, ",
      "all you need do is swallow me, ",
-     "just wash me down with water. '",
+     "just wash me down with water.'",
      "SPEECH OUTPUT: 'I know how to cope with misfortune, ",
      "how to endure bad news, ",
      "take the edge of injustice, ",
      "make up for the absence of God, ",
      "help pick out your widow's weeds. ",
      "What are you waiting for - ",
-     "have faith in chemistry's compassion. '",
+     "have faith in chemistry's compassion.'",
      "SPEECH OUTPUT: 'You're still a young man/woman, ",
      "you really should settle down somehow. ",
      "Who said ",
-     "life must be lived courageously? '",
+     "life must be lived courageously?'",
      "SPEECH OUTPUT: 'Hand your abyss over to me - ",
      "I will line it up with soft sleep, ",
      "you'll be grateful for ",
-     "the four-footed landing. '",
+     "the four-footed landing.'",
      "SPEECH OUTPUT: 'Sell me your soul. ",
-     "There's no other buyer likely to turn up. '"]))
+     "There's no other buyer likely to turn up.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>o"))
diff --git a/test/keystrokes/firefox/html_struct_nav_list_item.py 
b/test/keystrokes/firefox/html_struct_nav_list_item.py
index 17af6bd..9d4e8f2 100644
--- a/test/keystrokes/firefox/html_struct_nav_list_item.py
+++ b/test/keystrokes/firefox/html_struct_nav_list_item.py
@@ -34,18 +34,20 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("l"))
 sequence.append(utils.AssertPresentationAction(
-    "3. l to third list",
-    ["BRAILLE LINE:  'List with 1 item'",
-     "     VISIBLE:  'List with 1 item', cursor=0",
+    "3. l to third list (3) landing on the first item (3.1)",
+    ["KNOWN ISSUE: We are presenting tree level for a non-tree",
+     "BRAILLE LINE:  'List with 2 items'",
+     "     VISIBLE:  'List with 2 items', cursor=0",
      "BRAILLE LINE:  '•listing item'",
      "     VISIBLE:  '•listing item', cursor=1",
-     "SPEECH OUTPUT: 'List with 1 item' voice=system",
-     "SPEECH OUTPUT: '•listing item'"]))
+     "SPEECH OUTPUT: 'List with 2 items' voice=system",
+     "SPEECH OUTPUT: '•listing item'",
+     "SPEECH OUTPUT: 'tree level 1'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("i"))
 sequence.append(utils.AssertPresentationAction(
-    "4. i in third list",
+    "4. i to next list item, which is nested (3.1.1)",
     ["BRAILLE LINE:  '◦first sublevel'",
      "     VISIBLE:  '◦first sublevel', cursor=1",
      "SPEECH OUTPUT: '◦first sublevel'"]))
@@ -53,7 +55,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("i"))
 sequence.append(utils.AssertPresentationAction(
-    "5. i in third list",
+    "5. i to next list item, which is nested (3.1.1.1)",
     ["BRAILLE LINE:  '▪look for the bullet on'",
      "     VISIBLE:  '▪look for the bullet on', cursor=1",
      "SPEECH OUTPUT: '▪look for the bullet on'"]))
@@ -61,7 +63,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("i"))
 sequence.append(utils.AssertPresentationAction(
-    "6. i in third list",
+    "6. i to next list item, which is nested (3.1.1.1.1)",
     ["BRAILLE LINE:  '▪each sublevel'",
      "     VISIBLE:  '▪each sublevel', cursor=1",
      "SPEECH OUTPUT: '▪each sublevel'"]))
@@ -69,7 +71,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("i"))
 sequence.append(utils.AssertPresentationAction(
-    "7. i in third list",
+    "7. i to next list item, which is a peer (3.1.1.1.2)",
     ["BRAILLE LINE:  '▪they should all be different, except here.'",
      "     VISIBLE:  '▪they should all be different, e', cursor=1",
      "SPEECH OUTPUT: '▪they should all be different, except here.'"]))
@@ -77,7 +79,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("i"))
 sequence.append(utils.AssertPresentationAction(
-    "8. i in third list",
+    "8. i to next list item, moving outside of the innermost list (3.1.1.2)",
     ["BRAILLE LINE:  '▪second sublevel'",
      "     VISIBLE:  '▪second sublevel', cursor=1",
      "SPEECH OUTPUT: '▪second sublevel'"]))
@@ -85,7 +87,15 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("i"))
 sequence.append(utils.AssertPresentationAction(
-    "9. i in third list",
+    "9. i to next list item, moving outside of the current nested list (3.1.2)",
+    ["BRAILLE LINE:  '▪or you can specify a square'",
+     "     VISIBLE:  '▪or you can specify a square', cursor=1",
+     "SPEECH OUTPUT: '▪or you can specify a square'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("i"))
+sequence.append(utils.AssertPresentationAction(
+    "10. i to next list item, which is nested (3.1.2.1)",
     ["BRAILLE LINE:  '◦if your TYPE is circle'",
      "     VISIBLE:  '◦if your TYPE is circle', cursor=1",
      "SPEECH OUTPUT: '◦if your TYPE is circle'"]))
@@ -93,7 +103,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("i"))
 sequence.append(utils.AssertPresentationAction(
-    "10. i in third list",
+    "11. i to next list item, which is further nested (3.1.2.2)",
     ["BRAILLE LINE:  '•or even a disc'",
      "     VISIBLE:  '•or even a disc', cursor=1",
      "SPEECH OUTPUT: '•or even a disc'"]))
@@ -101,7 +111,17 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("i"))
 sequence.append(utils.AssertPresentationAction(
-    "11. i in third list",
+    "12. i to next list item, moving out of the last two levels (3.2)",
+    ["KNOWN ISSUE: We are presenting tree level for a non-tree",
+     "BRAILLE LINE:  '▪Franz Liszt'",
+     "     VISIBLE:  '▪Franz Liszt', cursor=1",
+     "SPEECH OUTPUT: '▪Franz Liszt'",
+     "SPEECH OUTPUT: 'tree level 1'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("i"))
+sequence.append(utils.AssertPresentationAction(
+    "13. i to next list item which is nested (3.2.1)",
     ["BRAILLE LINE:  '◦was a composer who was not square'",
      "     VISIBLE:  '◦was a composer who was not squa', cursor=1",
      "SPEECH OUTPUT: '◦was a composer who was not square'"]))
@@ -109,7 +129,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("i"))
 sequence.append(utils.AssertPresentationAction(
-    "12. i in third list",
+    "14. i to next list item which is nested (3.2.2)",
     ["BRAILLE LINE:  '•would have liked the Who'",
      "     VISIBLE:  '•would have liked the Who', cursor=1",
      "SPEECH OUTPUT: '•would have liked the Who'"]))
@@ -117,7 +137,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("i"))
 sequence.append(utils.AssertPresentationAction(
-    "13. i in third list",
+    "15. i to next list item which is starts a new list (4.1)",
     ["BRAILLE LINE:  '◦feeling listless'",
      "     VISIBLE:  '◦feeling listless', cursor=1",
      "SPEECH OUTPUT: '◦feeling listless"]))
@@ -125,7 +145,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("i"))
 sequence.append(utils.AssertPresentationAction(
-    "14. i in third list",
+    "16. i to next list item in the fourth list (4.2)",
     ["BRAILLE LINE:  '▪blah, blah, blah'",
      "     VISIBLE:  '▪blah, blah, blah', cursor=1",
      "SPEECH OUTPUT: '▪blah, blah, blah'"]))
@@ -133,7 +153,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("i"))
 sequence.append(utils.AssertPresentationAction(
-    "15. i in third list",
+    "17. i to last list item in the fourth list (4.3)",
     ["BRAILLE LINE:  '•whine, whine, whine'",
      "     VISIBLE:  '•whine, whine, whine', cursor=1",
      "SPEECH OUTPUT: '•whine, whine, whine'"]))
@@ -141,7 +161,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("i"))
 sequence.append(utils.AssertPresentationAction(
-    "16. i should wrap to top",
+    "18. i should wrap to top",
     ["BRAILLE LINE:  'Wrapping to top.'",
      "     VISIBLE:  'Wrapping to top.', cursor=0",
      "BRAILLE LINE:  '1.remember what the heck we are doing each day'",
diff --git a/test/keystrokes/firefox/html_struct_nav_lists.py 
b/test/keystrokes/firefox/html_struct_nav_lists.py
index a322b1e..652dc7e 100644
--- a/test/keystrokes/firefox/html_struct_nav_lists.py
+++ b/test/keystrokes/firefox/html_struct_nav_lists.py
@@ -35,24 +35,26 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("l"))
 sequence.append(utils.AssertPresentationAction(
     "3. l to third list",
-    ["BRAILLE LINE:  'List with 1 item'",
-     "     VISIBLE:  'List with 1 item', cursor=0",
+    ["KNOWN ISSUE: We are presenting tree level for a non-tree",
+     "BRAILLE LINE:  'List with 2 items'",
+     "     VISIBLE:  'List with 2 items', cursor=0",
      "BRAILLE LINE:  '•listing item'",
      "     VISIBLE:  '•listing item', cursor=1",
-     "SPEECH OUTPUT: 'List with 1 item' voice=system",
-     "SPEECH OUTPUT: '•listing item'"]))
+     "SPEECH OUTPUT: 'List with 2 items' voice=system",
+     "SPEECH OUTPUT: '•listing item'",
+     "SPEECH OUTPUT: 'tree level 1'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("l"))
 sequence.append(utils.AssertPresentationAction(
     "4. l to third list's first sub list",
-    ["BRAILLE LINE:  'List with 1 item'",
-     "     VISIBLE:  'List with 1 item', cursor=0",
+    ["BRAILLE LINE:  'List with 2 items'",
+     "     VISIBLE:  'List with 2 items', cursor=0",
      "BRAILLE LINE:  'Nesting level 1'",
      "     VISIBLE:  'Nesting level 1', cursor=0",
      "BRAILLE LINE:  '◦first sublevel'",
      "     VISIBLE:  '◦first sublevel', cursor=1",
-     "SPEECH OUTPUT: 'List with 1 item' voice=system",
+     "SPEECH OUTPUT: 'List with 2 items' voice=system",
      "SPEECH OUTPUT: 'Nesting level 1' voice=system",
      "SPEECH OUTPUT: '◦first sublevel'"]))
 
@@ -115,7 +117,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("l"))
 sequence.append(utils.AssertPresentationAction(
-    "9. l to last sub list in the third list",
+    "9. l to the fourth list",
     ["BRAILLE LINE:  'List with 3 items'",
      "     VISIBLE:  'List with 3 items', cursor=0",
      "BRAILLE LINE:  '◦feeling listless'",
@@ -211,13 +213,13 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>l"))
 sequence.append(utils.AssertPresentationAction(
     "16. shift + l",
-    ["BRAILLE LINE:  'List with 1 item'",
-     "     VISIBLE:  'List with 1 item', cursor=0",
+    ["BRAILLE LINE:  'List with 2 items'",
+     "     VISIBLE:  'List with 2 items', cursor=0",
      "BRAILLE LINE:  'Nesting level 1'",
      "     VISIBLE:  'Nesting level 1', cursor=0",
      "BRAILLE LINE:  '◦first sublevel'",
      "     VISIBLE:  '◦first sublevel', cursor=1",
-     "SPEECH OUTPUT: 'List with 1 item' voice=system",
+     "SPEECH OUTPUT: 'List with 2 items' voice=system",
      "SPEECH OUTPUT: 'Nesting level 1' voice=system",
      "SPEECH OUTPUT: '◦first sublevel'"]))
 
@@ -225,12 +227,14 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>l"))
 sequence.append(utils.AssertPresentationAction(
     "17. shift + l",
-    ["BRAILLE LINE:  'List with 1 item'",
-     "     VISIBLE:  'List with 1 item', cursor=0",
+    ["KNOWN ISSUE: We are presenting tree level for a non-tree",
+     "BRAILLE LINE:  'List with 2 items'",
+     "     VISIBLE:  'List with 2 items', cursor=0",
      "BRAILLE LINE:  '•listing item'",
      "     VISIBLE:  '•listing item', cursor=1",
-     "SPEECH OUTPUT: 'List with 1 item' voice=system",
-     "SPEECH OUTPUT: '•listing item'"]))
+     "SPEECH OUTPUT: 'List with 2 items' voice=system",
+     "SPEECH OUTPUT: '•listing item'",
+     "SPEECH OUTPUT: 'tree level 1'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>l"))
diff --git a/test/keystrokes/firefox/label_inference_bug_546815.py 
b/test/keystrokes/firefox/label_inference_bug_546815.py
index 033d904..c575153 100644
--- a/test/keystrokes/firefox/label_inference_bug_546815.py
+++ b/test/keystrokes/firefox/label_inference_bug_546815.py
@@ -17,7 +17,8 @@ sequence.append(utils.AssertPresentationAction(
     "1. Next form field",
     ["BRAILLE LINE:  'Enter your Name:  $l text field using default type=text'",
      "     VISIBLE:  'Enter your Name:  $l text field ', cursor=0",
-     "SPEECH OUTPUT: 'Enter your Name: entry'"]))
+     "SPEECH OUTPUT: 'Enter your Name:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -27,7 +28,8 @@ sequence.append(utils.AssertPresentationAction(
     "2. Next form field",
     ["BRAILLE LINE:  '1. Enter your Address:  $l text field using SIZE and'",
      "     VISIBLE:  '1. Enter your Address:  $l text ', cursor=0",
-     "SPEECH OUTPUT: '1. Enter your Address: entry'"]))
+     "SPEECH OUTPUT: '1. Enter your Address:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -37,7 +39,8 @@ sequence.append(utils.AssertPresentationAction(
     "3. Next form field",
     ["BRAILLE LINE:  '2. Enter your City:  $l 3. Enter your State:  $l 4. Enter your Country: US $l image 
text field using'",
      "     VISIBLE:  '2. Enter your City:  $l 3. Enter', cursor=0",
-     "SPEECH OUTPUT: '2. Enter your City: entry'"]))
+     "SPEECH OUTPUT: '2. Enter your City:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -47,7 +50,8 @@ sequence.append(utils.AssertPresentationAction(
     "4. Next form field",
     ["BRAILLE LINE:  '2. Enter your City:  $l 3. Enter your State:  $l 4. Enter your Country: US $l image 
text field using'",
      "     VISIBLE:  '2. Enter your City:  $l 3. Enter', cursor=0",
-     "SPEECH OUTPUT: '3. Enter your State: entry'"]))
+     "SPEECH OUTPUT: '3. Enter your State:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -57,7 +61,9 @@ sequence.append(utils.AssertPresentationAction(
     "5. Next form field",
     ["BRAILLE LINE:  '2. Enter your City:  $l 3. Enter your State:  $l 4. Enter your Country: US $l image 
text field using'",
      "     VISIBLE:  'US $l image text field using', cursor=1",
-     "SPEECH OUTPUT: '4. Enter your Country: entry US'"]))
+     "SPEECH OUTPUT: '4. Enter your Country:'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: 'US'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -67,7 +73,8 @@ sequence.append(utils.AssertPresentationAction(
     "6. Next form field",
     ["BRAILLE LINE:  '5. Enter your Zip:  $l'",
      "     VISIBLE:  '5. Enter your Zip:  $l', cursor=0",
-     "SPEECH OUTPUT: '5. Enter your Zip: entry'"]))
+     "SPEECH OUTPUT: '5. Enter your Zip:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -77,7 +84,8 @@ sequence.append(utils.AssertPresentationAction(
     "7. Next form field",
     ["BRAILLE LINE:  'character:  $l'",
      "     VISIBLE:  'character:  $l', cursor=0",
-     "SPEECH OUTPUT: 'character: entry'"]))
+     "SPEECH OUTPUT: 'character:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -98,7 +106,8 @@ sequence.append(utils.AssertPresentationAction(
     "9. Next form field",
     ["BRAILLE LINE:  '< > check box fish'",
      "     VISIBLE:  '< > check box fish', cursor=0",
-     "SPEECH OUTPUT: 'fish check box not checked'"]))
+     "SPEECH OUTPUT: 'fish'",
+     "SPEECH OUTPUT: 'check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -108,7 +117,8 @@ sequence.append(utils.AssertPresentationAction(
     "10. Next form field",
     ["BRAILLE LINE:  '< > check box wild animal'",
      "     VISIBLE:  '< > check box wild animal', cursor=0",
-     "SPEECH OUTPUT: 'wild animal check box not checked'"]))
+     "SPEECH OUTPUT: 'wild animal'",
+     "SPEECH OUTPUT: 'check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -129,7 +139,8 @@ sequence.append(utils.AssertPresentationAction(
     "12. Next form field",
     ["BRAILLE LINE:  '& y radio button merlot'",
      "     VISIBLE:  '& y radio button merlot', cursor=0",
-     "SPEECH OUTPUT: 'merlot not selected radio button'"]))
+     "SPEECH OUTPUT: 'merlot'",
+     "SPEECH OUTPUT: 'not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -139,7 +150,8 @@ sequence.append(utils.AssertPresentationAction(
     "13. Next form field",
     ["BRAILLE LINE:  '& y radio button nebbiolo'",
      "     VISIBLE:  '& y radio button nebbiolo', cursor=0",
-     "SPEECH OUTPUT: 'nebbiolo not selected radio button'"]))
+     "SPEECH OUTPUT: 'nebbiolo'",
+     "SPEECH OUTPUT: 'not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -149,7 +161,8 @@ sequence.append(utils.AssertPresentationAction(
     "14. Next form field",
     ["BRAILLE LINE:  '& y radio button pinot noir'",
      "     VISIBLE:  '& y radio button pinot noir', cursor=0",
-     "SPEECH OUTPUT: 'pinot noir not selected radio button'"]))
+     "SPEECH OUTPUT: 'pinot noir'",
+     "SPEECH OUTPUT: 'not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -159,7 +172,8 @@ sequence.append(utils.AssertPresentationAction(
     "15. Next form field",
     ["BRAILLE LINE:  '& y radio button don't drink wine'",
      "     VISIBLE:  '& y radio button don't drink win', cursor=0",
-     "SPEECH OUTPUT: 'don't drink wine not selected radio button'"]))
+     "SPEECH OUTPUT: 'don't drink wine'",
+     "SPEECH OUTPUT: 'not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -172,7 +186,8 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'Enter your Name:  $l text field using default type=text'",
      "     VISIBLE:  'Enter your Name:\xa0 $l text field ', cursor=0",
      "SPEECH OUTPUT: 'Wrapping to top.' voice=system",
-     "SPEECH OUTPUT: 'Enter your Name: entry'"]))
+     "SPEECH OUTPUT: 'Enter your Name:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/label_inference_bugzilla_search.py 
b/test/keystrokes/firefox/label_inference_bugzilla_search.py
index 6b90808..9e1d539 100644
--- a/test/keystrokes/firefox/label_inference_bugzilla_search.py
+++ b/test/keystrokes/firefox/label_inference_bugzilla_search.py
@@ -17,7 +17,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Summary: contains all of the wor', cursor=0",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: 'Summary: contains all of the words/strings combo box'",
+     "SPEECH OUTPUT: 'Summary: contains all of the words/strings'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -38,7 +39,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Search push button', cursor=1",
      "BRAILLE LINE:  'Browse mode'",
      "     VISIBLE:  'Browse mode', cursor=0",
-     "SPEECH OUTPUT: 'Search push button'",
+     "SPEECH OUTPUT: 'Search'",
+     "SPEECH OUTPUT: 'push button'",
      "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -51,7 +53,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Admin', cursor=0",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: 'Classification: multi-select List with 8 items'",
+     "SPEECH OUTPUT: 'Classification:'",
+     "SPEECH OUTPUT: 'multi-select List with 8 items'",
      "SPEECH OUTPUT: 'Admin '",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
@@ -63,7 +66,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Admin', cursor=0",
      "BRAILLE LINE:  'accerciser'",
      "     VISIBLE:  'accerciser', cursor=1",
-     "SPEECH OUTPUT: 'Product: multi-select List with 379 items'",
+     "SPEECH OUTPUT: 'Product:'",
+     "SPEECH OUTPUT: 'multi-select List with 379 items'",
      "SPEECH OUTPUT: 'accerciser'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -77,7 +81,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'Component:'",
      "     VISIBLE:  'Component:', cursor=1",
      "SPEECH OUTPUT: 'Component'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -88,7 +92,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'abiscan', cursor=0",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: 'Component: multi-select List with 1248 items'",
+     "SPEECH OUTPUT: 'Component:'",
+     "SPEECH OUTPUT: 'multi-select List with 1248 items'",
      "SPEECH OUTPUT: 'abiscan'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
@@ -100,7 +105,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'abiscan', cursor=0",
      "BRAILLE LINE:  '0.0.1'",
      "     VISIBLE:  '0.0.1', cursor=1",
-     "SPEECH OUTPUT: 'Version: multi-select List with 857 items'",
+     "SPEECH OUTPUT: 'Version:'",
+     "SPEECH OUTPUT: 'multi-select List with 857 items'",
      "SPEECH OUTPUT: '0.0.1'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -109,7 +115,8 @@ sequence.append(utils.AssertPresentationAction(
     "9. Tab",
     ["BRAILLE LINE:  '---'",
      "     VISIBLE:  '---', cursor=1",
-     "SPEECH OUTPUT: 'Target Milestone: multi-select List with 555 items'",
+     "SPEECH OUTPUT: 'Target Milestone:'",
+     "SPEECH OUTPUT: 'multi-select List with 555 items'",
      "SPEECH OUTPUT: '---'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -118,7 +125,8 @@ sequence.append(utils.AssertPresentationAction(
     "10. Tab",
     ["BRAILLE LINE:  'contains the string combo box'",
      "     VISIBLE:  'contains the string combo box', cursor=1",
-     "SPEECH OUTPUT: 'A Comment: contains the string combo box'"]))
+     "SPEECH OUTPUT: 'A Comment: contains the string'",
+     "SPEECH OUTPUT: 'combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -134,7 +142,8 @@ sequence.append(utils.AssertPresentationAction(
     "12. Tab",
     ["BRAILLE LINE:  'contains all of the words/strings combo box'",
      "     VISIBLE:  'contains all of the words/string', cursor=1",
-     "SPEECH OUTPUT: 'Whiteboard: contains all of the words/strings combo box'"]))
+     "SPEECH OUTPUT: 'Whiteboard: contains all of the words/strings'",
+     "SPEECH OUTPUT: 'combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -155,7 +164,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'Keywords: contains all of the keywords combo box $l'",
      "     VISIBLE:  'Keywords: contains all of the ke', cursor=1",
      "SPEECH OUTPUT: 'Keywords'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -166,7 +175,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Keywords: contains all of the ke', cursor=0",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: 'Keywords: contains all of the keywords combo box'",
+     "SPEECH OUTPUT: 'Keywords: contains all of the keywords'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -185,7 +195,8 @@ sequence.append(utils.AssertPresentationAction(
     "17. Tab",
     ["BRAILLE LINE:  'UNCONFIRMED'",
      "     VISIBLE:  'UNCONFIRMED', cursor=1",
-     "SPEECH OUTPUT: 'Status: multi-select List with 8 items'",
+     "SPEECH OUTPUT: 'Status:'",
+     "SPEECH OUTPUT: 'multi-select List with 8 items'",
      "SPEECH OUTPUT: 'UNCONFIRMED'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -194,7 +205,8 @@ sequence.append(utils.AssertPresentationAction(
     "18. Tab",
     ["BRAILLE LINE:  'FIXED'",
      "     VISIBLE:  'FIXED', cursor=1",
-     "SPEECH OUTPUT: 'Resolution: multi-select List with 12 items'",
+     "SPEECH OUTPUT: 'Resolution:'",
+     "SPEECH OUTPUT: 'multi-select List with 12 items'",
      "SPEECH OUTPUT: 'FIXED'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -203,7 +215,8 @@ sequence.append(utils.AssertPresentationAction(
     "19. Tab",
     ["BRAILLE LINE:  'blocker'",
      "     VISIBLE:  'blocker', cursor=1",
-     "SPEECH OUTPUT: 'Severity: multi-select List with 7 items'",
+     "SPEECH OUTPUT: 'Severity:'",
+     "SPEECH OUTPUT: 'multi-select List with 7 items'",
      "SPEECH OUTPUT: 'blocker'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -212,7 +225,8 @@ sequence.append(utils.AssertPresentationAction(
     "20. Tab",
     ["BRAILLE LINE:  'Immediate'",
      "     VISIBLE:  'Immediate', cursor=1",
-     "SPEECH OUTPUT: 'Priority: multi-select List with 5 items'",
+     "SPEECH OUTPUT: 'Priority:'",
+     "SPEECH OUTPUT: 'multi-select List with 5 items'",
      "SPEECH OUTPUT: 'Immediate'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -221,7 +235,8 @@ sequence.append(utils.AssertPresentationAction(
     "21. Tab",
     ["BRAILLE LINE:  'All'",
      "     VISIBLE:  'All', cursor=1",
-     "SPEECH OUTPUT: 'OS: multi-select List with 21 items'",
+     "SPEECH OUTPUT: 'OS:'",
+     "SPEECH OUTPUT: 'multi-select List with 21 items'",
      "SPEECH OUTPUT: 'All'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -232,8 +247,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '<x> check box', cursor=1",
      "BRAILLE LINE:  'Browse mode'",
      "     VISIBLE:  'Browse mode', cursor=0",
-     "SPEECH OUTPUT: 'Email and Numbering  panel'",
-     "SPEECH OUTPUT: 'the bug assignee check box checked'",
+     "SPEECH OUTPUT: 'Email and Numbering '",
+     "SPEECH OUTPUT: 'panel'",
+     "SPEECH OUTPUT: 'the bug assignee'",
+     "SPEECH OUTPUT: 'check box checked'",
      "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -244,7 +261,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '<x> check box', cursor=1",
      "BRAILLE LINE:  '< > check box the reporter'",
      "     VISIBLE:  '< > check box the reporter', cursor=0",
-     "SPEECH OUTPUT: 'the reporter check box not checked'"]))
+     "SPEECH OUTPUT: 'the reporter'",
+     "SPEECH OUTPUT: 'check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -252,7 +270,8 @@ sequence.append(utils.AssertPresentationAction(
     "24. Tab",
     ["BRAILLE LINE:  '< > check box the QA contact'",
      "     VISIBLE:  '< > check box the QA contact', cursor=0",
-     "SPEECH OUTPUT: 'the QA contact check box not checked'"]))
+     "SPEECH OUTPUT: 'the QA contact'",
+     "SPEECH OUTPUT: 'check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -260,7 +279,8 @@ sequence.append(utils.AssertPresentationAction(
     "25. Tab",
     ["BRAILLE LINE:  '< > check box a CC list member'",
      "     VISIBLE:  '< > check box a CC list member', cursor=0",
-     "SPEECH OUTPUT: 'a CC list member check box not checked'"]))
+     "SPEECH OUTPUT: 'a CC list member'",
+     "SPEECH OUTPUT: 'check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -268,7 +288,8 @@ sequence.append(utils.AssertPresentationAction(
     "26. Tab",
     ["BRAILLE LINE:  '< > check box a commenter'",
      "     VISIBLE:  '< > check box a commenter', cursor=0",
-     "SPEECH OUTPUT: 'a commenter check box not checked'"]))
+     "SPEECH OUTPUT: 'a commenter'",
+     "SPEECH OUTPUT: 'check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -278,7 +299,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'contains combo box', cursor=0",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: 'contains combo box'",
+     "SPEECH OUTPUT: 'contains'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -299,7 +321,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '<x> check box', cursor=1",
      "BRAILLE LINE:  'Browse mode'",
      "     VISIBLE:  'Browse mode', cursor=0",
-     "SPEECH OUTPUT: 'the bug assignee check box checked'",
+     "SPEECH OUTPUT: 'the bug assignee'",
+     "SPEECH OUTPUT: 'check box checked'",
      "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -310,7 +333,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '<x> check box', cursor=1",
      "BRAILLE LINE:  '<x> check box the reporter'",
      "     VISIBLE:  '<x> check box the reporter', cursor=0",
-     "SPEECH OUTPUT: 'the reporter check box checked'"]))
+     "SPEECH OUTPUT: 'the reporter'",
+     "SPEECH OUTPUT: 'check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -318,7 +342,8 @@ sequence.append(utils.AssertPresentationAction(
     "31. Tab",
     ["BRAILLE LINE:  '<x> check box the QA contact'",
      "     VISIBLE:  '<x> check box the QA contact', cursor=0",
-     "SPEECH OUTPUT: 'the QA contact check box checked'"]))
+     "SPEECH OUTPUT: 'the QA contact'",
+     "SPEECH OUTPUT: 'check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -326,7 +351,8 @@ sequence.append(utils.AssertPresentationAction(
     "32. Tab",
     ["BRAILLE LINE:  '<x> check box a CC list member'",
      "     VISIBLE:  '<x> check box a CC list member', cursor=0",
-     "SPEECH OUTPUT: 'a CC list member check box checked'"]))
+     "SPEECH OUTPUT: 'a CC list member'",
+     "SPEECH OUTPUT: 'check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -334,7 +360,8 @@ sequence.append(utils.AssertPresentationAction(
     "33. Tab",
     ["BRAILLE LINE:  '< > check box a commenter'",
      "     VISIBLE:  '< > check box a commenter', cursor=0",
-     "SPEECH OUTPUT: 'a commenter check box not checked'"]))
+     "SPEECH OUTPUT: 'a commenter'",
+     "SPEECH OUTPUT: 'check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -344,7 +371,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'contains combo box', cursor=0",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: 'contains combo box'",
+     "SPEECH OUTPUT: 'contains'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -363,7 +391,8 @@ sequence.append(utils.AssertPresentationAction(
     "36. Tab",
     ["BRAILLE LINE:  'Only include combo box'",
      "     VISIBLE:  'Only include combo box', cursor=1",
-     "SPEECH OUTPUT: 'Only include combo box'"]))
+     "SPEECH OUTPUT: 'Only include'",
+     "SPEECH OUTPUT: 'combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -371,7 +400,8 @@ sequence.append(utils.AssertPresentationAction(
     "37. Tab",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: '(comma-separated list) entry'"]))
+     "SPEECH OUTPUT: '(comma-separated list)'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -379,8 +409,10 @@ sequence.append(utils.AssertPresentationAction(
     "38. Tab",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'Bug Changes panel'",
-     "SPEECH OUTPUT: 'Only bugs changed between: entry'"]))
+     "SPEECH OUTPUT: 'Bug Changes'",
+     "SPEECH OUTPUT: 'panel'",
+     "SPEECH OUTPUT: 'Only bugs changed between:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -390,7 +422,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Now $l', cursor=4",
      "BRAILLE LINE:  'Now $l'",
      "     VISIBLE:  'Now $l', cursor=4",
-     "SPEECH OUTPUT: '(YYYY-MM-DD or relative dates) entry Now selected'"]))
+     "SPEECH OUTPUT: '(YYYY-MM-DD or relative dates)'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: 'Now'",
+     "SPEECH OUTPUT: 'selected'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -398,7 +433,8 @@ sequence.append(utils.AssertPresentationAction(
     "40. Tab",
     ["BRAILLE LINE:  '[Bug creation]'",
      "     VISIBLE:  '[Bug creation]', cursor=1",
-     "SPEECH OUTPUT: 'where one or more of the following changed: multi-select List with 26 items'",
+     "SPEECH OUTPUT: 'where one or more of the following changed:'",
+     "SPEECH OUTPUT: 'multi-select List with 26 items'",
      "SPEECH OUTPUT: '[Bug creation]'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -407,7 +443,8 @@ sequence.append(utils.AssertPresentationAction(
     "41. Tab",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'and the new value was: entry'"]))
+     "SPEECH OUTPUT: 'and the new value was:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -415,7 +452,8 @@ sequence.append(utils.AssertPresentationAction(
     "42. Tab",
     ["BRAILLE LINE:  'Unspecified'",
      "     VISIBLE:  'Unspecified', cursor=1",
-     "SPEECH OUTPUT: 'GNOME version: multi-select List with 14 items'",
+     "SPEECH OUTPUT: 'GNOME version:'",
+     "SPEECH OUTPUT: 'multi-select List with 14 items'",
      "SPEECH OUTPUT: 'Unspecified'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -424,7 +462,8 @@ sequence.append(utils.AssertPresentationAction(
     "43. Tab",
     ["BRAILLE LINE:  'Unspecified'",
      "     VISIBLE:  'Unspecified', cursor=1",
-     "SPEECH OUTPUT: 'GNOME target: multi-select List with 12 items'",
+     "SPEECH OUTPUT: 'GNOME target:'",
+     "SPEECH OUTPUT: 'multi-select List with 12 items'",
      "SPEECH OUTPUT: 'Unspecified'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -433,7 +472,8 @@ sequence.append(utils.AssertPresentationAction(
     "44. Tab",
     ["BRAILLE LINE:  'Reuse same sort as last time combo box'",
      "     VISIBLE:  'Reuse same sort as last time com', cursor=1",
-     "SPEECH OUTPUT: 'Sort results by: Reuse same sort as last time combo box'"]))
+     "SPEECH OUTPUT: 'Sort results by: Reuse same sort as last time'",
+     "SPEECH OUTPUT: 'combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -443,7 +483,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Search push button', cursor=1",
      "BRAILLE LINE:  'Browse mode'",
      "     VISIBLE:  'Browse mode', cursor=0",
-     "SPEECH OUTPUT: 'Search push button'",
+     "SPEECH OUTPUT: 'Search'",
+     "SPEECH OUTPUT: 'push button'",
      "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -454,7 +495,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Search push button', cursor=1",
      "BRAILLE LINE:  '< > check box and remember these as my default search options'",
      "     VISIBLE:  '< > check box and remember these', cursor=0",
-     "SPEECH OUTPUT: 'and remember these as my default search options check box not checked'"]))
+     "SPEECH OUTPUT: 'and remember these as my default search options'",
+     "SPEECH OUTPUT: 'check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -462,7 +504,8 @@ sequence.append(utils.AssertPresentationAction(
     "47. Tab",
     ["BRAILLE LINE:  '< > check box Not (negate this whole chart)'",
      "     VISIBLE:  '< > check box Not \(negate this w', cursor=0",
-     "SPEECH OUTPUT: 'Not (negate this whole chart) check box not checked'"]))
+     "SPEECH OUTPUT: 'Not (negate this whole chart)'",
+     "SPEECH OUTPUT: 'check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -472,7 +515,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '--- combo box --- combo box $l O', cursor=0",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: '--- combo box'",
+     "SPEECH OUTPUT: '---'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -483,7 +527,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '--- combo box --- combo box $l O', cursor=0",
      "BRAILLE LINE:  '--- combo box'",
      "     VISIBLE:  '--- combo box', cursor=1",
-     "SPEECH OUTPUT: '--- combo box'"]))
+     "SPEECH OUTPUT: '---'",
+     "SPEECH OUTPUT: 'combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
diff --git a/test/keystrokes/firefox/label_inference_entries.py 
b/test/keystrokes/firefox/label_inference_entries.py
index 11801bc..315da6a 100644
--- a/test/keystrokes/firefox/label_inference_entries.py
+++ b/test/keystrokes/firefox/label_inference_entries.py
@@ -15,7 +15,8 @@ sequence.append(utils.AssertPresentationAction(
     "1. Next form field",
     ["BRAILLE LINE:  'Type something rather amusing here:  $l'",
      "     VISIBLE:  'Type something rather amusing he', cursor=0",
-     "SPEECH OUTPUT: 'Type something rather amusing here: entry'"]))
+     "SPEECH OUTPUT: 'Type something rather amusing here:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(PauseAction(3000))
 
@@ -27,7 +28,8 @@ sequence.append(utils.AssertPresentationAction(
     "2. Next form field",
     ["BRAILLE LINE:  'Amusing numbers fall between  $l and  $l.'",
      "     VISIBLE:  'Amusing numbers fall between  $l', cursor=0",
-     "SPEECH OUTPUT: 'Amusing numbers fall between entry'"]))
+     "SPEECH OUTPUT: 'Amusing numbers fall between'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -38,7 +40,8 @@ sequence.append(utils.AssertPresentationAction(
     ["KNOWN ISSUE: We are not scrolling to the entry",
      "BRAILLE LINE:  'Amusing numbers fall between  $l and  $l.'",
      "     VISIBLE:  'Amusing numbers fall between  $l', cursor=0",
-     "SPEECH OUTPUT: 'and entry'"]))
+     "SPEECH OUTPUT: 'and'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -48,7 +51,8 @@ sequence.append(utils.AssertPresentationAction(
     "4. Next form field",
     ["BRAILLE LINE:  ' $l I'm a label'",
      "     VISIBLE:  ' $l I'm a label', cursor=0",
-     "SPEECH OUTPUT: 'I'm a label entry'"]))
+     "SPEECH OUTPUT: 'I'm a label'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -58,7 +62,8 @@ sequence.append(utils.AssertPresentationAction(
     "5. Next form field",
     ["BRAILLE LINE:  ' $l Am I a label as well?'",
      "     VISIBLE:  ' $l Am I a label as well?', cursor=0",
-     "SPEECH OUTPUT: 'Am I a label as well? entry'"]))
+     "SPEECH OUTPUT: 'Am I a label as well?'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -69,7 +74,8 @@ sequence.append(utils.AssertPresentationAction(
     ["KNOWN ISSUE: As the text suggests, we probably shouldn't be guessing this.",
      "BRAILLE LINE:  ' $l Too far away to be a label.'",
      "     VISIBLE:  ' $l Too far away to be a label.', cursor=0",
-     "SPEECH OUTPUT: 'Too far away to be a label. entry'"]))
+     "SPEECH OUTPUT: 'Too far away to be a label.'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -79,7 +85,8 @@ sequence.append(utils.AssertPresentationAction(
     "7. Next form field",
     ["BRAILLE LINE:  'Distance doesn't count on the left $l'",
      "     VISIBLE:  'Distance doesn't count on the le', cursor=0",
-     "SPEECH OUTPUT: 'Distance doesn't count on the left entry'"]))
+     "SPEECH OUTPUT: 'Distance doesn't count on the left'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -122,7 +129,8 @@ sequence.append(utils.AssertPresentationAction(
     "11. Next form field",
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'First name entry'"]))
+     "SPEECH OUTPUT: 'First name'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -133,7 +141,8 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=0",
      "SPEECH OUTPUT: 'Middle",
-     "initial entry'"]))
+     "initial'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -143,7 +152,8 @@ sequence.append(utils.AssertPresentationAction(
     "13. Next form field",
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'Last name entry'"]))
+     "SPEECH OUTPUT: 'Last name'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -153,7 +163,8 @@ sequence.append(utils.AssertPresentationAction(
     "14. Next form field",
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'First Name entry'"]))
+     "SPEECH OUTPUT: 'First Name'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -164,7 +175,8 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=0",
      "SPEECH OUTPUT: 'Middle",
-     "initial entry'"]))
+     "initial'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -174,7 +186,8 @@ sequence.append(utils.AssertPresentationAction(
     "16. Next form field",
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'Last name entry'"]))
+     "SPEECH OUTPUT: 'Last name'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -184,7 +197,8 @@ sequence.append(utils.AssertPresentationAction(
     "17. Next form field",
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'Given name entry'"]))
+     "SPEECH OUTPUT: 'Given name'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -194,7 +208,8 @@ sequence.append(utils.AssertPresentationAction(
     "18. Next form field",
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'initial entry'"]))
+     "SPEECH OUTPUT: 'initial'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -204,7 +219,8 @@ sequence.append(utils.AssertPresentationAction(
     "19. Next form field",
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'Surname entry'"]))
+     "SPEECH OUTPUT: 'Surname'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -214,7 +230,8 @@ sequence.append(utils.AssertPresentationAction(
     "20. Next form field",
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'First name entry'"]))
+     "SPEECH OUTPUT: 'First name'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -225,7 +242,8 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=0",
      "SPEECH OUTPUT: 'Middle",
-     "initial entry'"]))
+     "initial'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -235,7 +253,8 @@ sequence.append(utils.AssertPresentationAction(
     "22. Next form field",
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'Last name entry'"]))
+     "SPEECH OUTPUT: 'Last name'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -245,7 +264,8 @@ sequence.append(utils.AssertPresentationAction(
     "23. Next form field",
     ["BRAILLE LINE:  ' $l $l $l $l'",
      "     VISIBLE:  ' $l $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'First name entry'"]))
+     "SPEECH OUTPUT: 'First name'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -256,7 +276,8 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  ' $l $l $l $l'",
      "     VISIBLE:  ' $l $l $l $l', cursor=0",
      "SPEECH OUTPUT: 'Middle",
-     "initial entry'"]))
+     "initial'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -266,7 +287,8 @@ sequence.append(utils.AssertPresentationAction(
     "25. Next form field",
     ["BRAILLE LINE:  ' $l $l $l $l'",
      "     VISIBLE:  ' $l $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'Last name entry'"]))
+     "SPEECH OUTPUT: 'Last name'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -276,7 +298,8 @@ sequence.append(utils.AssertPresentationAction(
     "26. Next form field",
     ["BRAILLE LINE:  ' $l $l $l $l'",
      "     VISIBLE:  ' $l $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'patched image entry'"]))
+     "SPEECH OUTPUT: 'patched image'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -286,7 +309,8 @@ sequence.append(utils.AssertPresentationAction(
     "27. Next form field",
     ["BRAILLE LINE:  ' $l $l $l $l'",
      "     VISIBLE:  ' $l $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'First name entry'"]))
+     "SPEECH OUTPUT: 'First name'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -297,7 +321,8 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  ' $l $l $l $l'",
      "     VISIBLE:  ' $l $l $l $l', cursor=0",
      "SPEECH OUTPUT: 'Middle",
-     "initial entry'"]))
+     "initial'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -307,7 +332,8 @@ sequence.append(utils.AssertPresentationAction(
     "29. Next form field",
     ["BRAILLE LINE:  ' $l $l $l $l'",
      "     VISIBLE:  ' $l $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'Last name entry'"]))
+     "SPEECH OUTPUT: 'Last name'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -317,7 +343,8 @@ sequence.append(utils.AssertPresentationAction(
     "30. Next form field",
     ["BRAILLE LINE:  ' $l $l $l $l'",
      "     VISIBLE:  ' $l $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'patched image entry'"]))
+     "SPEECH OUTPUT: 'patched image'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -327,7 +354,8 @@ sequence.append(utils.AssertPresentationAction(
     "31. Next form field",
     ["BRAILLE LINE:  ' $l $l $l $l'",
      "     VISIBLE:  ' $l $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'First name entry'"]))
+     "SPEECH OUTPUT: 'First name'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -338,7 +366,8 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  ' $l $l $l $l'",
      "     VISIBLE:  ' $l $l $l $l', cursor=0",
      "SPEECH OUTPUT: 'Middle",
-     "initial entry'"]))
+     "initial'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -348,7 +377,8 @@ sequence.append(utils.AssertPresentationAction(
     "33. Next form field",
     ["BRAILLE LINE:  ' $l $l $l $l'",
      "     VISIBLE:  ' $l $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'Last name entry'"]))
+     "SPEECH OUTPUT: 'Last name'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -358,7 +388,8 @@ sequence.append(utils.AssertPresentationAction(
     "34. Next form field",
     ["BRAILLE LINE:  ' $l $l $l $l'",
      "     VISIBLE:  ' $l $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'patched image entry'"]))
+     "SPEECH OUTPUT: 'patched image'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -368,7 +399,8 @@ sequence.append(utils.AssertPresentationAction(
     "35. Next form field",
     ["BRAILLE LINE:  'bandaid graphic $l'",
      "     VISIBLE:  'bandaid graphic $l', cursor=0",
-     "SPEECH OUTPUT: 'bandaid graphic entry'"]))
+     "SPEECH OUTPUT: 'bandaid graphic'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -378,7 +410,8 @@ sequence.append(utils.AssertPresentationAction(
     "36. Next form field",
     ["BRAILLE LINE:  ' $l bandaid graphic redux'",
      "     VISIBLE:  ' $l bandaid graphic redux', cursor=0",
-     "SPEECH OUTPUT: 'bandaid graphic redux entry'"]))
+     "SPEECH OUTPUT: 'bandaid graphic redux'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -390,7 +423,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Magic disappearing text trick:  ', cursor=0",
      "BRAILLE LINE:  'Magic disappearing text trick:  $l'",
      "     VISIBLE:  'Magic disappearing text trick:  ', cursor=0",
-     "SPEECH OUTPUT: 'Magic disappearing text trick: entry'"]))
+     "SPEECH OUTPUT: 'Magic disappearing text trick:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -400,7 +434,8 @@ sequence.append(utils.AssertPresentationAction(
     "38. Next form field",
     ["BRAILLE LINE:  'Tell me a secret:  $l'",
      "     VISIBLE:  'Tell me a secret:  $l', cursor=0",
-     "SPEECH OUTPUT: 'Tell me a secret: password text'"]))
+     "SPEECH OUTPUT: 'Tell me a secret:'",
+     "SPEECH OUTPUT: 'password text'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -410,7 +445,9 @@ sequence.append(utils.AssertPresentationAction(
     "39. Next form field",
     ["BRAILLE LINE:  'I $l'",
      "     VISIBLE:  'I $l', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a little more about yourself: entry I'"]))
+     "SPEECH OUTPUT: 'Tell me a little more about yourself:'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: 'I'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -423,7 +460,8 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'Type something rather amusing here:  $l'",
      "     VISIBLE:  'Type something rather amusing he', cursor=0",
      "SPEECH OUTPUT: 'Wrapping to top.' voice=system",
-     "SPEECH OUTPUT: 'Type something rather amusing here: entry'"]))
+     "SPEECH OUTPUT: 'Type something rather amusing here:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/label_inference_mailman.py 
b/test/keystrokes/firefox/label_inference_mailman.py
index b042e38..cf36bf8 100644
--- a/test/keystrokes/firefox/label_inference_mailman.py
+++ b/test/keystrokes/firefox/label_inference_mailman.py
@@ -17,7 +17,8 @@ sequence.append(utils.AssertPresentationAction(
     "1. Next form field",
     ["BRAILLE LINE:  'search mozilla:  $l Go push button'",
      "     VISIBLE:  'search mozilla:  $l Go push butt', cursor=0",
-     "SPEECH OUTPUT: 'search mozilla: entry'"]))
+     "SPEECH OUTPUT: 'search mozilla:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -28,7 +29,8 @@ sequence.append(utils.AssertPresentationAction(
     ["KNOWN ISSUE: We are not scrolling to the current item",
      "BRAILLE LINE:  'search mozilla:  $l Go push button'",
      "     VISIBLE:  'search mozilla:  $l Go push butt', cursor=0",
-     "SPEECH OUTPUT: 'Go push button'"]))
+     "SPEECH OUTPUT: 'Go'",
+     "SPEECH OUTPUT: 'push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -38,7 +40,8 @@ sequence.append(utils.AssertPresentationAction(
     "3. Next form field",
     ["BRAILLE LINE:  'Your email address: $l'",
      "     VISIBLE:  'Your email address: $l', cursor=0",
-     "SPEECH OUTPUT: 'Your email address: entry'"]))
+     "SPEECH OUTPUT: 'Your email address:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -48,7 +51,8 @@ sequence.append(utils.AssertPresentationAction(
     "4. Next form field",
     ["BRAILLE LINE:  'Your name (optional): $l'",
      "     VISIBLE:  'Your name (optional): $l', cursor=0",
-     "SPEECH OUTPUT: 'Your name (optional): entry'"]))
+     "SPEECH OUTPUT: 'Your name (optional):'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -58,7 +62,8 @@ sequence.append(utils.AssertPresentationAction(
     "5. Next form field",
     ["BRAILLE LINE:  'Pick a password: $l'",
      "     VISIBLE:  'Pick a password: $l', cursor=0",
-     "SPEECH OUTPUT: 'Pick a password: password text'"]))
+     "SPEECH OUTPUT: 'Pick a password:'",
+     "SPEECH OUTPUT: 'password text'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -68,7 +73,8 @@ sequence.append(utils.AssertPresentationAction(
     "6. Next form field",
     ["BRAILLE LINE:  'Reenter password to confirm: $l'",
      "     VISIBLE:  'Reenter password to confirm: $l', cursor=0",
-     "SPEECH OUTPUT: 'Reenter password to confirm: password text'"]))
+     "SPEECH OUTPUT: 'Reenter password to confirm:'",
+     "SPEECH OUTPUT: 'password text'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -78,7 +84,8 @@ sequence.append(utils.AssertPresentationAction(
     "7. Next form field",
     ["BRAILLE LINE:  '&=y radio button No & y radio button Yes'",
      "     VISIBLE:  '&=y radio button No & y radio bu', cursor=0",
-     "SPEECH OUTPUT: 'No selected radio button'"]))
+     "SPEECH OUTPUT: 'No'",
+     "SPEECH OUTPUT: 'selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -88,7 +95,8 @@ sequence.append(utils.AssertPresentationAction(
     "8. Next form field",
     ["BRAILLE LINE:  '&=y radio button No & y radio button Yes'",
      "     VISIBLE:  '&=y radio button No & y radio bu', cursor=0",
-     "SPEECH OUTPUT: 'Yes not selected radio button'"]))
+     "SPEECH OUTPUT: 'Yes'",
+     "SPEECH OUTPUT: 'not selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -98,7 +106,8 @@ sequence.append(utils.AssertPresentationAction(
     "9. Next form field",
     ["BRAILLE LINE:  'Subscribe push button'",
      "     VISIBLE:  'Subscribe push button', cursor=0",
-     "SPEECH OUTPUT: 'Subscribe push button'"]))
+     "SPEECH OUTPUT: 'Subscribe",
+     "SPEECH OUTPUT: 'push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -108,7 +117,8 @@ sequence.append(utils.AssertPresentationAction(
     "10. Next form field",
     ["BRAILLE LINE:  'Admin address:  $l Password:  $l Visit Subscriber List push button'",
      "     VISIBLE:  'Admin address:  $l Password:  $l', cursor=0",
-     "SPEECH OUTPUT: 'Admin address: entry'"]))
+     "SPEECH OUTPUT: 'Admin address:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -118,7 +128,8 @@ sequence.append(utils.AssertPresentationAction(
     "11. Next form field",
     ["BRAILLE LINE:  'Admin address:  $l Password:  $l Visit Subscriber List push button'",
      "     VISIBLE:  'Admin address:  $l Password:  $l', cursor=0",
-     "SPEECH OUTPUT: 'Password: password text'"]))
+     "SPEECH OUTPUT: 'Password:'",
+     "SPEECH OUTPUT: 'password text'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -128,7 +139,8 @@ sequence.append(utils.AssertPresentationAction(
     "12. Next form field",
     ["BRAILLE LINE:  'Admin address:  $l Password:  $l Visit Subscriber List push button'",
      "     VISIBLE:  'Admin address:  $l Password:  $l', cursor=0",
-     "SPEECH OUTPUT: 'Visit Subscriber List push button'"]))
+     "SPEECH OUTPUT: 'Visit Subscriber List",
+     "SPEECH OUTPUT: 'push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -149,7 +161,8 @@ sequence.append(utils.AssertPresentationAction(
     "14. Next form field",
     ["BRAILLE LINE:  ' $l Unsubscribe or edit options push button'",
      "     VISIBLE:  ' $l Unsubscribe or edit options ', cursor=0",
-     "SPEECH OUTPUT: 'Unsubscribe or edit options push button'"]))
+     "SPEECH OUTPUT: 'Unsubscribe or edit options",
+     "SPEECH OUTPUT: 'push button'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/line_nav_bug_546815.py b/test/keystrokes/firefox/line_nav_bug_546815.py
index 13962e8..38cce41 100644
--- a/test/keystrokes/firefox/line_nav_bug_546815.py
+++ b/test/keystrokes/firefox/line_nav_bug_546815.py
@@ -23,8 +23,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Line Down",
     ["BRAILLE LINE:  'HTML Form and Widgets'",
      "     VISIBLE:  'HTML Form and Widgets', cursor=1",
-     "SPEECH OUTPUT: 'HTML Form and Widgets",
-     "'"]))
+     "SPEECH OUTPUT: 'HTML Form and Widgets'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -40,7 +39,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Line Down",
     ["BRAILLE LINE:  'Enter your Name:  $l text field using default type=text'",
      "     VISIBLE:  'Enter your Name:  $l text field ', cursor=1",
-     "SPEECH OUTPUT: 'Enter your Name: '",
+     "SPEECH OUTPUT: 'Enter your Name:'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'text field using default type=text'"]))
 
@@ -50,9 +49,9 @@ sequence.append(utils.AssertPresentationAction(
     "5. Line Down",
     ["BRAILLE LINE:  '1. Enter your Address:  $l text field using SIZE and'",
      "     VISIBLE:  '1. Enter your Address:  $l text ', cursor=1",
-     "SPEECH OUTPUT: '1. Enter your Address: '",
+     "SPEECH OUTPUT: '1. Enter your Address:'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'text field using SIZE and '"]))
+     "SPEECH OUTPUT: 'text field using SIZE and'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -68,15 +67,15 @@ sequence.append(utils.AssertPresentationAction(
     "7. Line Down",
     ["BRAILLE LINE:  '2. Enter your City:  $l 3. Enter your State:  $l 4. Enter your Country: US $l image 
text field using'",
      "     VISIBLE:  '2. Enter your City:  $l 3. Enter', cursor=1",
-     "SPEECH OUTPUT: '2. Enter your City: '",
+     "SPEECH OUTPUT: '2. Enter your City:'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: '3. Enter your State: '",
+     "SPEECH OUTPUT: '3. Enter your State:'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: '4. Enter your Country: '",
+     "SPEECH OUTPUT: '4. Enter your Country:'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'US'",
      "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'text field using '"]))
+     "SPEECH OUTPUT: 'text field using'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -92,7 +91,7 @@ sequence.append(utils.AssertPresentationAction(
     "9. Line Down",
     ["BRAILLE LINE:  '5. Enter your Zip:  $l'",
      "     VISIBLE:  '5. Enter your Zip:  $l', cursor=1",
-     "SPEECH OUTPUT: '5. Enter your Zip: '",
+     "SPEECH OUTPUT: '5. Enter your Zip:'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -101,7 +100,7 @@ sequence.append(utils.AssertPresentationAction(
     "10. Line Down",
     ["BRAILLE LINE:  '6. What happens when a fixed-width font(the default) is used for a one-byte text input 
area, let's try it.. Enter one'",
      "     VISIBLE:  '6. What happens when a fixed-wid', cursor=1",
-     "SPEECH OUTPUT: '6. What happens when a fixed-width font(the default) is used for a one-byte text input 
area, let's try it.. Enter one '"]))
+     "SPEECH OUTPUT: '6. What happens when a fixed-width font(the default) is used for a one-byte text input 
area, let's try it.. Enter one'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -109,7 +108,7 @@ sequence.append(utils.AssertPresentationAction(
     "11. Line Down",
     ["BRAILLE LINE:  'character:  $l'",
      "     VISIBLE:  'character:  $l', cursor=1",
-     "SPEECH OUTPUT: 'character: '",
+     "SPEECH OUTPUT: 'character:'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -126,7 +125,7 @@ sequence.append(utils.AssertPresentationAction(
     "13. Line Down",
     ["BRAILLE LINE:  ' CheckBox:'",
      "     VISIBLE:  ' CheckBox:', cursor=1",
-     "SPEECH OUTPUT: ' CheckBox:'"]))
+     "SPEECH OUTPUT: 'CheckBox:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -143,10 +142,8 @@ sequence.append(utils.AssertPresentationAction(
     "15. Line Down",
     ["BRAILLE LINE:  '< > check box bird'",
      "     VISIBLE:  '< > check box bird', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: 'bird ",
-     "'"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'bird'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -154,10 +151,8 @@ sequence.append(utils.AssertPresentationAction(
     "16. Line Down",
     ["BRAILLE LINE:  '< > check box fish'",
      "     VISIBLE:  '< > check box fish', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: 'fish ",
-     "'"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'fish'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -165,10 +160,8 @@ sequence.append(utils.AssertPresentationAction(
     "17. Line Down",
     ["BRAILLE LINE:  '< > check box wild animal'",
      "     VISIBLE:  '< > check box wild animal', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: 'wild animal ",
-     "'"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'wild animal'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -201,10 +194,8 @@ sequence.append(utils.AssertPresentationAction(
     "22. Line Down",
     ["BRAILLE LINE:  '&=y radio button cabernet sauvignon'",
      "     VISIBLE:  '&=y radio button cabernet sauvig', cursor=0",
-     "SPEECH OUTPUT: 'selected'",
-     "SPEECH OUTPUT: 'radio button'",
-     "SPEECH OUTPUT: 'cabernet sauvignon ",
-     "'"]))
+     "SPEECH OUTPUT: 'selected radio button'",
+     "SPEECH OUTPUT: 'cabernet sauvignon'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -212,10 +203,8 @@ sequence.append(utils.AssertPresentationAction(
     "23. Line Down",
     ["BRAILLE LINE:  '& y radio button merlot'",
      "     VISIBLE:  '& y radio button merlot', cursor=0",
-     "SPEECH OUTPUT: 'not selected'",
-     "SPEECH OUTPUT: 'radio button'",
-     "SPEECH OUTPUT: 'merlot ",
-     "'"]))
+     "SPEECH OUTPUT: 'not selected radio button'",
+     "SPEECH OUTPUT: 'merlot'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -223,10 +212,8 @@ sequence.append(utils.AssertPresentationAction(
     "24. Line Down",
     ["BRAILLE LINE:  '& y radio button nebbiolo'",
      "     VISIBLE:  '& y radio button nebbiolo', cursor=0",
-     "SPEECH OUTPUT: 'not selected'",
-     "SPEECH OUTPUT: 'radio button'",
-     "SPEECH OUTPUT: 'nebbiolo ",
-     "'"]))
+     "SPEECH OUTPUT: 'not selected radio button'",
+     "SPEECH OUTPUT: 'nebbiolo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -234,10 +221,8 @@ sequence.append(utils.AssertPresentationAction(
     "25. Line Down",
     ["BRAILLE LINE:  '& y radio button pinot noir'",
      "     VISIBLE:  '& y radio button pinot noir', cursor=0",
-     "SPEECH OUTPUT: 'not selected'",
-     "SPEECH OUTPUT: 'radio button'",
-     "SPEECH OUTPUT: 'pinot noir ",
-     "'"]))
+     "SPEECH OUTPUT: 'not selected radio button'",
+     "SPEECH OUTPUT: 'pinot noir'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -245,22 +230,17 @@ sequence.append(utils.AssertPresentationAction(
     "26. Line Down",
     ["BRAILLE LINE:  '& y radio button don't drink wine'",
      "     VISIBLE:  '& y radio button don't drink win', cursor=0",
-     "SPEECH OUTPUT: 'not selected'",
-     "SPEECH OUTPUT: 'radio button'",
-     "SPEECH OUTPUT: 'don't drink wine '"]))
+     "SPEECH OUTPUT: 'not selected radio button'",
+     "SPEECH OUTPUT: 'don't drink wine'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "27. Line Up",
-    ["KNOWN ISSUE: We're repeating things here and in the next few tests which we should not be",
-     "BRAILLE LINE:  '& y radio button pinot noir'",
+    ["BRAILLE LINE:  '& y radio button pinot noir'",
      "     VISIBLE:  '& y radio button pinot noir', cursor=0",
-     "SPEECH OUTPUT: 'pinot noir'",
-     "SPEECH OUTPUT: 'not selected'",
-     "SPEECH OUTPUT: 'radio button'",
-     "SPEECH OUTPUT: 'pinot noir ",
-     "'"]))
+     "SPEECH OUTPUT: 'not selected radio button'",
+     "SPEECH OUTPUT: 'pinot noir'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -268,11 +248,8 @@ sequence.append(utils.AssertPresentationAction(
     "28. Line Up",
     ["BRAILLE LINE:  '& y radio button nebbiolo'",
      "     VISIBLE:  '& y radio button nebbiolo', cursor=0",
-     "SPEECH OUTPUT: 'nebbiolo'",
-     "SPEECH OUTPUT: 'not selected'",
-     "SPEECH OUTPUT: 'radio button'",
-     "SPEECH OUTPUT: 'nebbiolo ",
-     "'"]))
+     "SPEECH OUTPUT: 'not selected radio button'",
+     "SPEECH OUTPUT: 'nebbiolo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -280,11 +257,8 @@ sequence.append(utils.AssertPresentationAction(
     "29. Line Up",
     ["BRAILLE LINE:  '& y radio button merlot'",
      "     VISIBLE:  '& y radio button merlot', cursor=0",
-     "SPEECH OUTPUT: 'merlot'",
-     "SPEECH OUTPUT: 'not selected'",
-     "SPEECH OUTPUT: 'radio button'",
-     "SPEECH OUTPUT: 'merlot ",
-     "'"]))
+     "SPEECH OUTPUT: 'not selected radio button'",
+     "SPEECH OUTPUT: 'merlot'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -292,10 +266,8 @@ sequence.append(utils.AssertPresentationAction(
     "30. Line Up",
     ["BRAILLE LINE:  '&=y radio button cabernet sauvignon'",
      "     VISIBLE:  '&=y radio button cabernet sauvig', cursor=0",
-     "SPEECH OUTPUT: 'selected'",
-     "SPEECH OUTPUT: 'radio button'",
-     "SPEECH OUTPUT: 'cabernet sauvignon ",
-     "'"]))
+     "SPEECH OUTPUT: 'selected radio button'",
+     "SPEECH OUTPUT: 'cabernet sauvignon'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -328,11 +300,8 @@ sequence.append(utils.AssertPresentationAction(
     "34. Line Up",
     ["BRAILLE LINE:  '< > check box wild animal'",
      "     VISIBLE:  '< > check box wild animal', cursor=0",
-     "SPEECH OUTPUT: 'wild animal'",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: 'wild animal ",
-     "'"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'wild animal'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -340,23 +309,17 @@ sequence.append(utils.AssertPresentationAction(
     "35. Line Up",
     ["BRAILLE LINE:  '< > check box fish'",
      "     VISIBLE:  '< > check box fish', cursor=0",
-     "SPEECH OUTPUT: 'fish'",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: 'fish ",
-     "'"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'fish'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "36. Line Up",
-    ["KNOWN ISSUE: This isn't quite right",
-     "BRAILLE LINE:  '< > check box bird'",
+    ["BRAILLE LINE:  '< > check box bird'",
      "     VISIBLE:  '< > check box bird', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: 'bird ",
-     "'"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'bird'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -373,7 +336,7 @@ sequence.append(utils.AssertPresentationAction(
     "38. Line Up",
     ["BRAILLE LINE:  ' CheckBox:'",
      "     VISIBLE:  ' CheckBox:', cursor=1",
-     "SPEECH OUTPUT: ' CheckBox:'"]))
+     "SPEECH OUTPUT: 'CheckBox:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -389,7 +352,7 @@ sequence.append(utils.AssertPresentationAction(
     "40. Line Up",
     ["BRAILLE LINE:  'character:  $l'",
      "     VISIBLE:  'character:  $l', cursor=1",
-     "SPEECH OUTPUT: 'character: '",
+     "SPEECH OUTPUT: 'character:'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -398,7 +361,7 @@ sequence.append(utils.AssertPresentationAction(
     "41. Line Up",
     ["BRAILLE LINE:  '6. What happens when a fixed-width font(the default) is used for a one-byte text input 
area, let's try it.. Enter one'",
      "     VISIBLE:  '6. What happens when a fixed-wid', cursor=1",
-     "SPEECH OUTPUT: '6. What happens when a fixed-width font(the default) is used for a one-byte text input 
area, let's try it.. Enter one '"]))
+     "SPEECH OUTPUT: '6. What happens when a fixed-width font(the default) is used for a one-byte text input 
area, let's try it.. Enter one'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -406,7 +369,7 @@ sequence.append(utils.AssertPresentationAction(
     "42. Line Up",
     ["BRAILLE LINE:  '5. Enter your Zip:  $l'",
      "     VISIBLE:  '5. Enter your Zip:  $l', cursor=1",
-     "SPEECH OUTPUT: '5. Enter your Zip: '",
+     "SPEECH OUTPUT: '5. Enter your Zip:'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -423,15 +386,15 @@ sequence.append(utils.AssertPresentationAction(
     "44. Line Up",
     ["BRAILLE LINE:  '2. Enter your City:  $l 3. Enter your State:  $l 4. Enter your Country: US $l image 
text field using'",
      "     VISIBLE:  '2. Enter your City:  $l 3. Enter', cursor=1",
-     "SPEECH OUTPUT: '2. Enter your City: '",
+     "SPEECH OUTPUT: '2. Enter your City:'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: '3. Enter your State: '",
+     "SPEECH OUTPUT: '3. Enter your State:'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: '4. Enter your Country: '",
+     "SPEECH OUTPUT: '4. Enter your Country:'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'US'",
      "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'text field using '"]))
+     "SPEECH OUTPUT: 'text field using'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -447,9 +410,9 @@ sequence.append(utils.AssertPresentationAction(
     "46. Line Up",
     ["BRAILLE LINE:  '1. Enter your Address:  $l text field using SIZE and'",
      "     VISIBLE:  '1. Enter your Address:  $l text ', cursor=1",
-     "SPEECH OUTPUT: '1. Enter your Address: '",
+     "SPEECH OUTPUT: '1. Enter your Address:'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'text field using SIZE and '"]))
+     "SPEECH OUTPUT: 'text field using SIZE and'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -457,7 +420,7 @@ sequence.append(utils.AssertPresentationAction(
     "47. Line Up",
     ["BRAILLE LINE:  'Enter your Name:  $l text field using default type=text'",
      "     VISIBLE:  'Enter your Name:  $l text field ', cursor=1",
-     "SPEECH OUTPUT: 'Enter your Name: '",
+     "SPEECH OUTPUT: 'Enter your Name:'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'text field using default type=text'"]))
 
@@ -475,8 +438,7 @@ sequence.append(utils.AssertPresentationAction(
     "49. Line Up",
     ["BRAILLE LINE:  'HTML Form and Widgets'",
      "     VISIBLE:  'HTML Form and Widgets', cursor=1",
-     "SPEECH OUTPUT: 'HTML Form and Widgets",
-     "'"]))
+     "SPEECH OUTPUT: 'HTML Form and Widgets'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_bug_549128.py b/test/keystrokes/firefox/line_nav_bug_549128.py
index 74e3c22..fe68d11 100644
--- a/test/keystrokes/firefox/line_nav_bug_549128.py
+++ b/test/keystrokes/firefox/line_nav_bug_549128.py
@@ -29,8 +29,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. Line Down",
     ["BRAILLE LINE:  'Shop Early - Deliver Later'",
      "     VISIBLE:  'Shop Early - Deliver Later', cursor=1",
-     "SPEECH OUTPUT: 'Shop Early - Deliver Later",
-     "'"]))
+     "SPEECH OUTPUT: 'Shop Early - Deliver Later'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -55,8 +54,7 @@ sequence.append(utils.AssertPresentationAction(
     "6. Line Down",
     ["BRAILLE LINE:  '2 (5 oz.) Filet Mignons'",
      "     VISIBLE:  '2 (5 oz.) Filet Mignons', cursor=0",
-     "SPEECH OUTPUT: '2 (5 oz.) Filet Mignons",
-     "'"]))
+     "SPEECH OUTPUT: '2 (5 oz.) Filet Mignons'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -64,8 +62,7 @@ sequence.append(utils.AssertPresentationAction(
     "7. Line Down",
     ["BRAILLE LINE:  '2 (5 oz.) Top Sirloins'",
      "     VISIBLE:  '2 (5 oz.) Top Sirloins', cursor=0",
-     "SPEECH OUTPUT: '2 (5 oz.) Top Sirloins",
-     "'"]))
+     "SPEECH OUTPUT: '2 (5 oz.) Top Sirloins'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -73,8 +70,7 @@ sequence.append(utils.AssertPresentationAction(
     "8. Line Down",
     ["BRAILLE LINE:  '4 (4 oz.) Foobar Steaks Burgers'",
      "     VISIBLE:  '4 (4 oz.) Foobar Steaks Burgers', cursor=0",
-     "SPEECH OUTPUT: '4 (4 oz.) Foobar Steaks Burgers",
-     "'"]))
+     "SPEECH OUTPUT: '4 (4 oz.) Foobar Steaks Burgers'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -82,8 +78,7 @@ sequence.append(utils.AssertPresentationAction(
     "9. Line Down",
     ["BRAILLE LINE:  '6 (5.75 oz.) Stuffed Baked Potatoes'",
      "     VISIBLE:  '6 (5.75 oz.) Stuffed Baked Potat', cursor=0",
-     "SPEECH OUTPUT: '6 (5.75 oz.) Stuffed Baked Potatoes",
-     "'"]))
+     "SPEECH OUTPUT: '6 (5.75 oz.) Stuffed Baked Potatoes'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -91,8 +86,7 @@ sequence.append(utils.AssertPresentationAction(
     "10. Line Down",
     ["BRAILLE LINE:  '2 (4.5 oz.) Stuffed Sole with Scallops and Crab'",
      "     VISIBLE:  '2 (4.5 oz.) Stuffed Sole with Sc', cursor=0",
-     "SPEECH OUTPUT: '2 (4.5 oz.) Stuffed Sole with Scallops and Crab",
-     "'"]))
+     "SPEECH OUTPUT: '2 (4.5 oz.) Stuffed Sole with Scallops and Crab'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -100,8 +94,7 @@ sequence.append(utils.AssertPresentationAction(
     "11. Line Down",
     ["BRAILLE LINE:  '1 (6 in.) Chocolate Lover's Cake'",
      "     VISIBLE:  '1 (6 in.) Chocolate Lover's Cake', cursor=0",
-     "SPEECH OUTPUT: '1 (6 in.) Chocolate Lover's Cake",
-     "'"]))
+     "SPEECH OUTPUT: '1 (6 in.) Chocolate Lover's Cake'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -109,8 +102,7 @@ sequence.append(utils.AssertPresentationAction(
     "12. Line Down",
     ["BRAILLE LINE:  'Regular $133.00, Now $59.99'",
      "     VISIBLE:  'Regular $133.00, Now $59.99', cursor=1",
-     "SPEECH OUTPUT: 'Regular $133.00, Now $59.99",
-     "'"]))
+     "SPEECH OUTPUT: 'Regular $133.00, Now $59.99'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -124,8 +116,7 @@ sequence.append(utils.AssertPresentationAction(
     "14. Line Up",
     ["BRAILLE LINE:  '1 (6 in.) Chocolate Lover's Cake'",
      "     VISIBLE:  '1 (6 in.) Chocolate Lover's Cake', cursor=0",
-     "SPEECH OUTPUT: '1 (6 in.) Chocolate Lover's Cake",
-     "'"]))
+     "SPEECH OUTPUT: '1 (6 in.) Chocolate Lover's Cake'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -133,8 +124,7 @@ sequence.append(utils.AssertPresentationAction(
     "15. Line Up",
     ["BRAILLE LINE:  '2 (4.5 oz.) Stuffed Sole with Scallops and Crab'",
      "     VISIBLE:  '2 (4.5 oz.) Stuffed Sole with Sc', cursor=0",
-     "SPEECH OUTPUT: '2 (4.5 oz.) Stuffed Sole with Scallops and Crab",
-     "'"]))
+     "SPEECH OUTPUT: '2 (4.5 oz.) Stuffed Sole with Scallops and Crab'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -142,8 +132,7 @@ sequence.append(utils.AssertPresentationAction(
     "16. Line Up",
     ["BRAILLE LINE:  '6 (5.75 oz.) Stuffed Baked Potatoes'",
      "     VISIBLE:  '6 (5.75 oz.) Stuffed Baked Potat', cursor=0",
-     "SPEECH OUTPUT: '6 (5.75 oz.) Stuffed Baked Potatoes",
-     "'"]))
+     "SPEECH OUTPUT: '6 (5.75 oz.) Stuffed Baked Potatoes'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -151,8 +140,7 @@ sequence.append(utils.AssertPresentationAction(
     "17. Line Up",
     ["BRAILLE LINE:  '4 (4 oz.) Foobar Steaks Burgers'",
      "     VISIBLE:  '4 (4 oz.) Foobar Steaks Burgers', cursor=0",
-     "SPEECH OUTPUT: '4 (4 oz.) Foobar Steaks Burgers",
-     "'"]))
+     "SPEECH OUTPUT: '4 (4 oz.) Foobar Steaks Burgers'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -160,8 +148,7 @@ sequence.append(utils.AssertPresentationAction(
     "18. Line Up",
     ["BRAILLE LINE:  '2 (5 oz.) Top Sirloins'",
      "     VISIBLE:  '2 (5 oz.) Top Sirloins', cursor=0",
-     "SPEECH OUTPUT: '2 (5 oz.) Top Sirloins",
-     "'"]))
+     "SPEECH OUTPUT: '2 (5 oz.) Top Sirloins'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -169,8 +156,7 @@ sequence.append(utils.AssertPresentationAction(
     "19. Line Up",
     ["BRAILLE LINE:  '2 (5 oz.) Filet Mignons'",
      "     VISIBLE:  '2 (5 oz.) Filet Mignons', cursor=0",
-     "SPEECH OUTPUT: '2 (5 oz.) Filet Mignons",
-     "'"]))
+     "SPEECH OUTPUT: '2 (5 oz.) Filet Mignons'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -195,8 +181,7 @@ sequence.append(utils.AssertPresentationAction(
     "22. Line Up",
     ["BRAILLE LINE:  'Shop Early - Deliver Later'",
      "     VISIBLE:  'Shop Early - Deliver Later', cursor=1",
-     "SPEECH OUTPUT: 'Shop Early - Deliver Later",
-     "'"]))
+     "SPEECH OUTPUT: 'Shop Early - Deliver Later'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_bug_552887a.py b/test/keystrokes/firefox/line_nav_bug_552887a.py
index 518bbaf..0e09e69 100644
--- a/test/keystrokes/firefox/line_nav_bug_552887a.py
+++ b/test/keystrokes/firefox/line_nav_bug_552887a.py
@@ -21,8 +21,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Line Down",
     ["BRAILLE LINE:  'Line 1'",
      "     VISIBLE:  'Line 1', cursor=1",
-     "SPEECH OUTPUT: 'Line 1",
-     "'"]))
+     "SPEECH OUTPUT: 'Line 1'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -39,8 +38,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Line Down",
     ["BRAILLE LINE:  'Line 3'",
      "     VISIBLE:  'Line 3', cursor=1",
-     "SPEECH OUTPUT: 'Line 3",
-     "'"]))
+     "SPEECH OUTPUT: 'Line 3'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -49,12 +47,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'The Orca logo image '",
      "     VISIBLE:  'The Orca logo image ', cursor=0",
      "SPEECH OUTPUT: 'The Orca logo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'Hey, look, it's our logo!'",
-     "SPEECH OUTPUT: '",
-     "'",
-     "SPEECH OUTPUT: 'link image'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -62,7 +55,7 @@ sequence.append(utils.AssertPresentationAction(
     "6. Line Down",
     ["BRAILLE LINE:  'Can an Orca really'",
      "     VISIBLE:  'Can an Orca really', cursor=1",
-     "SPEECH OUTPUT: 'Can an Orca really '"]))
+     "SPEECH OUTPUT: 'Can an Orca really'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -70,7 +63,7 @@ sequence.append(utils.AssertPresentationAction(
     "7. Line Down",
     ["BRAILLE LINE:  'hold a white cane?'",
      "     VISIBLE:  'hold a white cane?', cursor=1",
-     "SPEECH OUTPUT: 'hold a white cane? '"]))
+     "SPEECH OUTPUT: 'hold a white cane?'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -78,7 +71,7 @@ sequence.append(utils.AssertPresentationAction(
     "8. Line Down",
     ["BRAILLE LINE:  '\(And why aren't we'",
      "     VISIBLE:  '\(And why aren't we', cursor=1",
-     "SPEECH OUTPUT: '\(And why aren't we '"]))
+     "SPEECH OUTPUT: '\(And why aren't we'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -94,8 +87,7 @@ sequence.append(utils.AssertPresentationAction(
     "10. Line Down",
     ["BRAILLE LINE:  'This text comes before the box section'",
      "     VISIBLE:  'This text comes before the box s', cursor=1",
-     "SPEECH OUTPUT: 'This text comes before the box section",
-     "'"]))
+     "SPEECH OUTPUT: 'This text comes before the box section'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -135,7 +127,7 @@ sequence.append(utils.AssertPresentationAction(
     "15. Line Down",
     ["BRAILLE LINE:  'This text comes after'",
      "     VISIBLE:  'This text comes after', cursor=1",
-     "SPEECH OUTPUT: 'This text comes after '"]))
+     "SPEECH OUTPUT: 'This text comes after'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -143,8 +135,7 @@ sequence.append(utils.AssertPresentationAction(
     "16. Line Down",
     ["BRAILLE LINE:  'the box section.'",
      "     VISIBLE:  'the box section.', cursor=1",
-     "SPEECH OUTPUT: 'the box section.",
-     "'"]))
+     "SPEECH OUTPUT: 'the box section.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -152,7 +143,7 @@ sequence.append(utils.AssertPresentationAction(
     "17. Line Up",
     ["BRAILLE LINE:  'This text comes after'",
      "     VISIBLE:  'This text comes after', cursor=1",
-     "SPEECH OUTPUT: 'This text comes after '"]))
+     "SPEECH OUTPUT: 'This text comes after'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -200,8 +191,7 @@ sequence.append(utils.AssertPresentationAction(
     "23. Line Up",
     ["BRAILLE LINE:  'This text comes before the box section'",
      "     VISIBLE:  'This text comes before the box s', cursor=1",
-     "SPEECH OUTPUT: 'This text comes before the box section",
-     "'"]))
+     "SPEECH OUTPUT: 'This text comes before the box section'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -217,7 +207,7 @@ sequence.append(utils.AssertPresentationAction(
     "25. Line Up",
     ["BRAILLE LINE:  '\(And why aren't we'",
      "     VISIBLE:  '\(And why aren't we', cursor=1",
-     "SPEECH OUTPUT: '\(And why aren't we '"]))
+     "SPEECH OUTPUT: '\(And why aren't we'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -225,7 +215,7 @@ sequence.append(utils.AssertPresentationAction(
     "26. Line Up",
     ["BRAILLE LINE:  'hold a white cane?'",
      "     VISIBLE:  'hold a white cane?', cursor=1",
-     "SPEECH OUTPUT: 'hold a white cane? '"]))
+     "SPEECH OUTPUT: 'hold a white cane?'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -233,7 +223,7 @@ sequence.append(utils.AssertPresentationAction(
     "27. Line Up",
     ["BRAILLE LINE:  'Can an Orca really'",
      "     VISIBLE:  'Can an Orca really', cursor=1",
-     "SPEECH OUTPUT: 'Can an Orca really '"]))
+     "SPEECH OUTPUT: 'Can an Orca really'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -242,12 +232,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'The Orca logo image '",
      "     VISIBLE:  'The Orca logo image ', cursor=0",
      "SPEECH OUTPUT: 'The Orca logo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'Hey, look, it's our logo!'",
-     "SPEECH OUTPUT: '",
-     "'",
-     "SPEECH OUTPUT: 'link image'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -255,8 +240,7 @@ sequence.append(utils.AssertPresentationAction(
     "29. Line Up",
     ["BRAILLE LINE:  'Line 3'",
      "     VISIBLE:  'Line 3', cursor=1",
-     "SPEECH OUTPUT: 'Line 3",
-     "'"]))
+     "SPEECH OUTPUT: 'Line 3'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -274,8 +258,7 @@ sequence.append(utils.AssertPresentationAction(
     ["KNOWN ISSUE: We're presenting these together on the way up",
      "BRAILLE LINE:  'Line 1 Line 2 h2'",
      "     VISIBLE:  'Line 1 Line 2 h2', cursor=1",
-     "SPEECH OUTPUT: 'Line 1",
-     "'",
+     "SPEECH OUTPUT: 'Line 1'",
      "SPEECH OUTPUT: 'Line 2'",
      "SPEECH OUTPUT: 'heading level 2'"]))
 
diff --git a/test/keystrokes/firefox/line_nav_bug_554616.py b/test/keystrokes/firefox/line_nav_bug_554616.py
index 06c0198..212431f 100644
--- a/test/keystrokes/firefox/line_nav_bug_554616.py
+++ b/test/keystrokes/firefox/line_nav_bug_554616.py
@@ -39,8 +39,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'installer (10190 KB)', cursor=1",
      "SPEECH OUTPUT: 'installer'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (10190 KB)",
-     "'"]))
+     "SPEECH OUTPUT: '(10190 KB)'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -50,7 +49,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'portable archive (9154 KB)', cursor=1",
      "SPEECH OUTPUT: 'portable archive'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (9154 KB)'"]))
+     "SPEECH OUTPUT: '(9154 KB)'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -69,8 +68,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'installer (10193 KB)', cursor=1",
      "SPEECH OUTPUT: 'installer'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (10193 KB)",
-     "'"]))
+     "SPEECH OUTPUT: '(10193 KB)'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -80,7 +78,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'portable archive (9149 KB)', cursor=1",
      "SPEECH OUTPUT: 'portable archive'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (9149 KB)'"]))
+     "SPEECH OUTPUT: '(9149 KB)'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -92,8 +90,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'Tue Nov 4 16:39:02 2008'",
      "SPEECH OUTPUT: 'installer'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (10193 KB)",
-     "'"]))
+     "SPEECH OUTPUT: '(10193 KB)'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -103,7 +100,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'portable archive (9154 KB)', cursor=1",
      "SPEECH OUTPUT: 'portable archive'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (9154 KB)'"]))
+     "SPEECH OUTPUT: '(9154 KB)'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -115,8 +112,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'Wed Nov 5 16:39:00 2008'",
      "SPEECH OUTPUT: 'installer'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (10190 KB)",
-     "'"]))
+     "SPEECH OUTPUT: '(10190 KB)'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_bug_555055.py b/test/keystrokes/firefox/line_nav_bug_555055.py
index dc2909d..ef9097b 100644
--- a/test/keystrokes/firefox/line_nav_bug_555055.py
+++ b/test/keystrokes/firefox/line_nav_bug_555055.py
@@ -16,7 +16,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. Line Down",
     ["BRAILLE LINE:  'Hello world!'",
      "     VISIBLE:  'Hello world!', cursor=1",
-     "SPEECH OUTPUT: 'Hello world! '"]))
+     "SPEECH OUTPUT: 'Hello world!'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -224,7 +224,7 @@ sequence.append(utils.AssertPresentationAction(
     "27. Line Up",
     ["BRAILLE LINE:  'Hello world!'",
      "     VISIBLE:  'Hello world!', cursor=1",
-     "SPEECH OUTPUT: 'Hello world! '"]))
+     "SPEECH OUTPUT: 'Hello world!'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/line_nav_bug_570757.py b/test/keystrokes/firefox/line_nav_bug_570757.py
index eae639b..64ae553 100644
--- a/test/keystrokes/firefox/line_nav_bug_570757.py
+++ b/test/keystrokes/firefox/line_nav_bug_570757.py
@@ -29,9 +29,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. Line Down",
     ["BRAILLE LINE:  'Here is a step-by-step tutorial:'",
      "     VISIBLE:  'Here is a step-by-step tutorial:', cursor=1",
-     "SPEECH OUTPUT: 'Here is a step-by-step tutorial: ",
-     "'",
-     "SPEECH OUTPUT: 'panel'"]))
+     "SPEECH OUTPUT: 'Here is a step-by-step tutorial:"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -63,9 +61,7 @@ sequence.append(utils.AssertPresentationAction(
     "7. Line Up",
     ["BRAILLE LINE:  'Here is a step-by-step tutorial:'",
      "     VISIBLE:  'Here is a step-by-step tutorial:', cursor=1",
-     "SPEECH OUTPUT: 'Here is a step-by-step tutorial: ",
-     "'",
-     "SPEECH OUTPUT: 'panel'"]))
+     "SPEECH OUTPUT: 'Here is a step-by-step tutorial:"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_bug_577239.py b/test/keystrokes/firefox/line_nav_bug_577239.py
index 0b56686..c84f2bf 100644
--- a/test/keystrokes/firefox/line_nav_bug_577239.py
+++ b/test/keystrokes/firefox/line_nav_bug_577239.py
@@ -13,7 +13,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. Top of file",
     ["BRAILLE LINE:  'this is a page to test how well Orca works with list items.'",
      "     VISIBLE:  'this is a page to test how well ', cursor=1",
-     "SPEECH OUTPUT: 'this is a page to test how well Orca works with list items. '"]))
+     "SPEECH OUTPUT: 'this is a page to test how well Orca works with list items.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -21,7 +21,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Line Down",
     ["BRAILLE LINE:  'this is an ordered list:'",
      "     VISIBLE:  'this is an ordered list:', cursor=1",
-     "SPEECH OUTPUT: 'this is an ordered list: '"]))
+     "SPEECH OUTPUT: 'this is an ordered list:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -29,7 +29,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. Line Down",
     ["BRAILLE LINE:  '1.This is a short list item.'",
      "     VISIBLE:  '1.This is a short list item.', cursor=1",
-     "SPEECH OUTPUT: '1.This is a short list item. '"]))
+     "SPEECH OUTPUT: '1.This is a short list item.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -37,7 +37,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Line Down",
     ["BRAILLE LINE:  '2.This is a list item that spans multiple lines. If Orca can successfully read to the 
end of this list item, it will have'",
      "     VISIBLE:  '2.This is a list item that spans', cursor=1",
-     "SPEECH OUTPUT: '2.This is a list item that spans multiple lines. If Orca can successfully read to the 
end of this list item, it will have '"]))
+     "SPEECH OUTPUT: '2.This is a list item that spans multiple lines. If Orca can successfully read to the 
end of this list item, it will have'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -45,7 +45,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Line Down",
     ["BRAILLE LINE:  'read several lines of text within this single item. And, yes, I realize that this is 
not deathless prose. In fact, it is'",
      "     VISIBLE:  'read several lines of text withi', cursor=1",
-     "SPEECH OUTPUT: 'read several lines of text within this single item. And, yes, I realize that this is 
not deathless prose. In fact, it is '"]))
+     "SPEECH OUTPUT: 'read several lines of text within this single item. And, yes, I realize that this is 
not deathless prose. In fact, it is'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -53,7 +53,7 @@ sequence.append(utils.AssertPresentationAction(
     "6. Line Down",
     ["BRAILLE LINE:  'prose that should probably be put out of its misery.'",
      "     VISIBLE:  'prose that should probably be pu', cursor=1",
-     "SPEECH OUTPUT: 'prose that should probably be put out of its misery. '"]))
+     "SPEECH OUTPUT: 'prose that should probably be put out of its misery.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -61,7 +61,7 @@ sequence.append(utils.AssertPresentationAction(
     "7. Line Down",
     ["BRAILLE LINE:  'This is an example of an unordered list:'",
      "     VISIBLE:  'This is an example of an unorder', cursor=1",
-     "SPEECH OUTPUT: 'This is an example of an unordered list: '"]))
+     "SPEECH OUTPUT: 'This is an example of an unordered list:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -69,7 +69,7 @@ sequence.append(utils.AssertPresentationAction(
     "8. Line Down",
     ["BRAILLE LINE:  '•This is a short list item.'",
      "     VISIBLE:  '•This is a short list item.', cursor=1",
-     "SPEECH OUTPUT: '•This is a short list item. '"]))
+     "SPEECH OUTPUT: '•This is a short list item.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -77,7 +77,7 @@ sequence.append(utils.AssertPresentationAction(
     "9. Line Down",
     ["BRAILLE LINE:  '•This is a list item that spans multiple lines. If Orca can successfully read to the 
end of this list item, it will have'",
      "     VISIBLE:  '•This is a list item that spans ', cursor=1",
-     "SPEECH OUTPUT: '•This is a list item that spans multiple lines. If Orca can successfully read to the 
end of this list item, it will have '"]))
+     "SPEECH OUTPUT: '•This is a list item that spans multiple lines. If Orca can successfully read to the 
end of this list item, it will have'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -85,7 +85,7 @@ sequence.append(utils.AssertPresentationAction(
     "10. Line Down",
     ["BRAILLE LINE:  'read several lines of text within this single item. And, yes, I realize that this is 
not deathless prose. In fact, it is'",
      "     VISIBLE:  'read several lines of text withi', cursor=1",
-     "SPEECH OUTPUT: 'read several lines of text within this single item. And, yes, I realize that this is 
not deathless prose. In fact, it is '"]))
+     "SPEECH OUTPUT: 'read several lines of text within this single item. And, yes, I realize that this is 
not deathless prose. In fact, it is'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -93,7 +93,7 @@ sequence.append(utils.AssertPresentationAction(
     "11. Line Up",
     ["BRAILLE LINE:  '•This is a list item that spans multiple lines. If Orca can successfully read to the 
end of this list item, it will have'",
      "     VISIBLE:  '•This is a list item that spans ', cursor=1",
-     "SPEECH OUTPUT: '•This is a list item that spans multiple lines. If Orca can successfully read to the 
end of this list item, it will have '"]))
+     "SPEECH OUTPUT: '•This is a list item that spans multiple lines. If Orca can successfully read to the 
end of this list item, it will have'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -101,7 +101,7 @@ sequence.append(utils.AssertPresentationAction(
     "12. Line Up",
     ["BRAILLE LINE:  '•This is a short list item.'",
      "     VISIBLE:  '•This is a short list item.', cursor=1",
-     "SPEECH OUTPUT: '•This is a short list item. '"]))
+     "SPEECH OUTPUT: '•This is a short list item.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -109,7 +109,7 @@ sequence.append(utils.AssertPresentationAction(
     "13. Line Up",
     ["BRAILLE LINE:  'This is an example of an unordered list:'",
      "     VISIBLE:  'This is an example of an unorder', cursor=1",
-     "SPEECH OUTPUT: 'This is an example of an unordered list: '"]))
+     "SPEECH OUTPUT: 'This is an example of an unordered list:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -117,7 +117,7 @@ sequence.append(utils.AssertPresentationAction(
     "14. Line Up",
     ["BRAILLE LINE:  'prose that should probably be put out of its misery.'",
      "     VISIBLE:  'prose that should probably be pu', cursor=1",
-     "SPEECH OUTPUT: 'prose that should probably be put out of its misery. '"]))
+     "SPEECH OUTPUT: 'prose that should probably be put out of its misery.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -125,7 +125,7 @@ sequence.append(utils.AssertPresentationAction(
     "15. Line Up",
     ["BRAILLE LINE:  'read several lines of text within this single item. And, yes, I realize that this is 
not deathless prose. In fact, it is'",
      "     VISIBLE:  'read several lines of text withi', cursor=1",
-     "SPEECH OUTPUT: 'read several lines of text within this single item. And, yes, I realize that this is 
not deathless prose. In fact, it is '"]))
+     "SPEECH OUTPUT: 'read several lines of text within this single item. And, yes, I realize that this is 
not deathless prose. In fact, it is'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -133,7 +133,7 @@ sequence.append(utils.AssertPresentationAction(
     "16. Line Up",
     ["BRAILLE LINE:  '2.This is a list item that spans multiple lines. If Orca can successfully read to the 
end of this list item, it will have'",
      "     VISIBLE:  '2.This is a list item that spans', cursor=1",
-     "SPEECH OUTPUT: '2.This is a list item that spans multiple lines. If Orca can successfully read to the 
end of this list item, it will have '"]))
+     "SPEECH OUTPUT: '2.This is a list item that spans multiple lines. If Orca can successfully read to the 
end of this list item, it will have'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -141,7 +141,7 @@ sequence.append(utils.AssertPresentationAction(
     "17. Line Up",
     ["BRAILLE LINE:  '1.This is a short list item.'",
      "     VISIBLE:  '1.This is a short list item.', cursor=1",
-     "SPEECH OUTPUT: '1.This is a short list item. '"]))
+     "SPEECH OUTPUT: '1.This is a short list item.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -149,7 +149,7 @@ sequence.append(utils.AssertPresentationAction(
     "18. Line Up",
     ["BRAILLE LINE:  'this is an ordered list:'",
      "     VISIBLE:  'this is an ordered list:', cursor=1",
-     "SPEECH OUTPUT: 'this is an ordered list: '"]))
+     "SPEECH OUTPUT: 'this is an ordered list:'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/line_nav_bug_592383.py b/test/keystrokes/firefox/line_nav_bug_592383.py
index f8720a0..ca4327e 100644
--- a/test/keystrokes/firefox/line_nav_bug_592383.py
+++ b/test/keystrokes/firefox/line_nav_bug_592383.py
@@ -37,7 +37,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Down",
     ["BRAILLE LINE:  '   hy did the chicken cross the road? Give up? It was to escape from the enormous 
capital letter at the'",
      "     VISIBLE:  '   hy did the chicken cross the ', cursor=1",
-     "SPEECH OUTPUT: '   hy did the chicken cross the road? Give up? It was to escape from the enormous 
capital letter at the '"]))
+     "SPEECH OUTPUT: 'hy did the chicken cross the road? Give up? It was to escape from the enormous capital 
letter at the'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -45,7 +45,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Down",
     ["BRAILLE LINE:  'beginning of this paragraph. These are the things that keep chickens up at night. No. 
Really.They are.'",
      "     VISIBLE:  'beginning of this paragraph. The', cursor=1",
-     "SPEECH OUTPUT: 'beginning of this paragraph. These are the things that keep chickens up at night. No. 
Really.They are. '"]))
+     "SPEECH OUTPUT: 'beginning of this paragraph. These are the things that keep chickens up at night. No. 
Really.They are.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -69,7 +69,7 @@ sequence.append(utils.AssertPresentationAction(
     "8. Up",
     ["BRAILLE LINE:  'beginning of this paragraph. These are the things that keep chickens up at night. No. 
Really.They are.'",
      "     VISIBLE:  'beginning of this paragraph. The', cursor=1",
-     "SPEECH OUTPUT: 'beginning of this paragraph. These are the things that keep chickens up at night. No. 
Really.They are. '"]))
+     "SPEECH OUTPUT: 'beginning of this paragraph. These are the things that keep chickens up at night. No. 
Really.They are.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -77,7 +77,7 @@ sequence.append(utils.AssertPresentationAction(
     "9. Up",
     ["BRAILLE LINE:  '   hy did the chicken cross the road? Give up? It was to escape from the enormous 
capital letter at the'",
      "     VISIBLE:  '   hy did the chicken cross the ', cursor=1",
-     "SPEECH OUTPUT: '   hy did the chicken cross the road? Give up? It was to escape from the enormous 
capital letter at the '"]))
+     "SPEECH OUTPUT: 'hy did the chicken cross the road? Give up? It was to escape from the enormous capital 
letter at the'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_bugzilla_search_down.py 
b/test/keystrokes/firefox/line_nav_bugzilla_search_down.py
index 8efc269..86b3d5b 100644
--- a/test/keystrokes/firefox/line_nav_bugzilla_search_down.py
+++ b/test/keystrokes/firefox/line_nav_bugzilla_search_down.py
@@ -18,25 +18,25 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'New bug · Browse · Search · Repo', cursor=1",
      "SPEECH OUTPUT: 'New bug'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Browse'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Search'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Reports'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Account'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Admin'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Help'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'Logged In joanmarie diggs gmail com | '",
+     "SPEECH OUTPUT: 'Logged In joanmarie diggs gmail com |'",
      "SPEECH OUTPUT: 'Log Out'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -46,9 +46,9 @@ sequence.append(utils.AssertPresentationAction(
     "2. Line Down",
     ["BRAILLE LINE:  'Short Bug Search Form Complicated Bug Search Form'",
      "     VISIBLE:  'Short Bug Search Form Complicate', cursor=0",
-     "SPEECH OUTPUT: 'Short Bug Search Form '",
+     "SPEECH OUTPUT: 'Short Bug Search Form'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'Complicated Bug Search Form '"]))
+     "SPEECH OUTPUT: 'Complicated Bug Search Form'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -58,7 +58,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Give me some help (reloads page.', cursor=1",
      "SPEECH OUTPUT: 'Give me some help'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (reloads page.)'"]))
+     "SPEECH OUTPUT: '(reloads page.)'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -89,10 +89,8 @@ sequence.append(utils.AssertPresentationAction(
     "6. Line Down",
     ["BRAILLE LINE:  'Admin  list box'",
      "     VISIBLE:  'Admin  list box', cursor=0",
-     "SPEECH OUTPUT: 'Classification:'",
      "SPEECH OUTPUT: 'Admin '",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 8 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 8 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -109,10 +107,8 @@ sequence.append(utils.AssertPresentationAction(
     "8. Line Down",
     ["BRAILLE LINE:  'accerciser list box'",
      "     VISIBLE:  'accerciser list box', cursor=0",
-     "SPEECH OUTPUT: 'Product:'",
      "SPEECH OUTPUT: 'accerciser'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 379 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 379 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -122,7 +118,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Component:', cursor=1",
      "SPEECH OUTPUT: 'Component'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '",
+     "SPEECH OUTPUT: 'Component :'",
      "SPEECH OUTPUT: 'column header'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -131,10 +127,8 @@ sequence.append(utils.AssertPresentationAction(
     "10. Line Down",
     ["BRAILLE LINE:  'abiscan list box'",
      "     VISIBLE:  'abiscan list box', cursor=0",
-     "SPEECH OUTPUT: 'Component:'",
      "SPEECH OUTPUT: 'abiscan'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 1248 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 1248 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -151,10 +145,8 @@ sequence.append(utils.AssertPresentationAction(
     "12. Line Down",
     ["BRAILLE LINE:  '0.0.1 list box'",
      "     VISIBLE:  '0.0.1 list box', cursor=0",
-     "SPEECH OUTPUT: 'Version:'",
      "SPEECH OUTPUT: '0.0.1'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 857 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 857 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -171,10 +163,8 @@ sequence.append(utils.AssertPresentationAction(
     "14. Line Down",
     ["BRAILLE LINE:  '--- list box'",
      "     VISIBLE:  '--- list box', cursor=0",
-     "SPEECH OUTPUT: 'Target Milestone:'",
      "SPEECH OUTPUT: '---'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 555 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 555 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -208,7 +198,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Keywords: contains all of the ke', cursor=1",
      "SPEECH OUTPUT: 'Keywords'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '",
+     "SPEECH OUTPUT: 'Keywords :'",
      "SPEECH OUTPUT: 'row header'",
      "SPEECH OUTPUT: 'contains all of the keywords'",
      "SPEECH OUTPUT: 'combo box'",
@@ -238,14 +228,8 @@ sequence.append(utils.AssertPresentationAction(
     ["KNOWN ISSUE: Should we be doing a different presentation of these selected children?",
      "BRAILLE LINE:  'UNCONFIRMED NEW ASSIGNED REOPENED NEEDINFO list box'",
      "     VISIBLE:  'UNCONFIRMED NEW ASSIGNED REOPENE', cursor=0",
-     "SPEECH OUTPUT: 'Status:'",
-     "SPEECH OUTPUT: 'UNCONFIRMED'",
-     "SPEECH OUTPUT: 'NEW'",
-     "SPEECH OUTPUT: 'ASSIGNED'",
-     "SPEECH OUTPUT: 'REOPENED'",
-     "SPEECH OUTPUT: 'NEEDINFO'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 8 items'"]))
+     "SPEECH OUTPUT: 'UNCONFIRMED NEW ASSIGNED REOPENED NEEDINFO'",
+     "SPEECH OUTPUT: 'multi-select List with 8 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -262,10 +246,8 @@ sequence.append(utils.AssertPresentationAction(
     "22. Line Down",
     ["BRAILLE LINE:  'FIXED list box'",
      "     VISIBLE:  'FIXED list box', cursor=0",
-     "SPEECH OUTPUT: 'Resolution:'",
      "SPEECH OUTPUT: 'FIXED'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 12 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 12 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -282,10 +264,8 @@ sequence.append(utils.AssertPresentationAction(
     "24. Line Down",
     ["BRAILLE LINE:  'blocker list box'",
      "     VISIBLE:  'blocker list box', cursor=0",
-     "SPEECH OUTPUT: 'Severity:'",
      "SPEECH OUTPUT: 'blocker'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 7 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 7 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -302,10 +282,8 @@ sequence.append(utils.AssertPresentationAction(
     "26. Line Down",
     ["BRAILLE LINE:  'Immediate list box'",
      "     VISIBLE:  'Immediate list box', cursor=0",
-     "SPEECH OUTPUT: 'Priority:'",
      "SPEECH OUTPUT: 'Immediate'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 5 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 5 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -322,10 +300,8 @@ sequence.append(utils.AssertPresentationAction(
     "28. Line Down",
     ["BRAILLE LINE:  'All list box'",
      "     VISIBLE:  'All list box', cursor=0",
-     "SPEECH OUTPUT: 'OS:'",
      "SPEECH OUTPUT: 'All'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 21 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 21 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -341,7 +317,7 @@ sequence.append(utils.AssertPresentationAction(
     "30. Line Down",
     ["BRAILLE LINE:  'Any one of:'",
      "     VISIBLE:  'Any one of:', cursor=1",
-     "SPEECH OUTPUT: 'Any one of: '"]))
+     "SPEECH OUTPUT: 'Any one of:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -349,9 +325,8 @@ sequence.append(utils.AssertPresentationAction(
     "31. Line Down",
     ["BRAILLE LINE:  '<x> check box the bug assignee'",
      "     VISIBLE:  '<x> check box the bug assignee', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'checked'",
-     "SPEECH OUTPUT: ' the bug assignee '"]))
+     "SPEECH OUTPUT: 'check box checked'",
+     "SPEECH OUTPUT: 'the bug assignee'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -359,9 +334,8 @@ sequence.append(utils.AssertPresentationAction(
     "32. Line Down",
     ["BRAILLE LINE:  '< > check box the reporter'",
      "     VISIBLE:  '< > check box the reporter', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: ' the reporter '"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'the reporter'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -369,9 +343,8 @@ sequence.append(utils.AssertPresentationAction(
     "33. Line Down",
     ["BRAILLE LINE:  '< > check box the QA contact'",
      "     VISIBLE:  '< > check box the QA contact', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: ' the QA contact '"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'the QA contact'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -379,9 +352,8 @@ sequence.append(utils.AssertPresentationAction(
     "34. Line Down",
     ["BRAILLE LINE:  '< > check box a CC list member'",
      "     VISIBLE:  '< > check box a CC list member', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: ' a CC list member '"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'a CC list member'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -389,9 +361,8 @@ sequence.append(utils.AssertPresentationAction(
     "35. Line Down",
     ["BRAILLE LINE:  '< > check box a commenter'",
      "     VISIBLE:  '< > check box a commenter', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: ' a commenter '"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'a commenter'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -416,7 +387,7 @@ sequence.append(utils.AssertPresentationAction(
     "38. Line Down",
     ["BRAILLE LINE:  'Any one of:'",
      "     VISIBLE:  'Any one of:', cursor=1",
-     "SPEECH OUTPUT: 'Any one of: '"]))
+     "SPEECH OUTPUT: 'Any one of:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -424,9 +395,8 @@ sequence.append(utils.AssertPresentationAction(
     "39. Line Down",
     ["BRAILLE LINE:  '<x> check box the bug assignee'",
      "     VISIBLE:  '<x> check box the bug assignee', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'checked'",
-     "SPEECH OUTPUT: ' the bug assignee '"]))
+     "SPEECH OUTPUT: 'check box checked'",
+     "SPEECH OUTPUT: 'the bug assignee'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -434,9 +404,8 @@ sequence.append(utils.AssertPresentationAction(
     "40. Line Down",
     ["BRAILLE LINE:  '<x> check box the reporter'",
      "     VISIBLE:  '<x> check box the reporter', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'checked'",
-     "SPEECH OUTPUT: ' the reporter '"]))
+     "SPEECH OUTPUT: 'check box checked'",
+     "SPEECH OUTPUT: 'the reporter'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -444,9 +413,8 @@ sequence.append(utils.AssertPresentationAction(
     "41. Line Down",
     ["BRAILLE LINE:  '<x> check box the QA contact'",
      "     VISIBLE:  '<x> check box the QA contact', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'checked'",
-     "SPEECH OUTPUT: ' the QA contact '"]))
+     "SPEECH OUTPUT: 'check box checked'",
+     "SPEECH OUTPUT: 'the QA contact'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -454,9 +422,8 @@ sequence.append(utils.AssertPresentationAction(
     "42. Line Down",
     ["BRAILLE LINE:  '<x> check box a CC list member'",
      "     VISIBLE:  '<x> check box a CC list member', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'checked'",
-     "SPEECH OUTPUT: ' a CC list member '"]))
+     "SPEECH OUTPUT: 'check box checked'",
+     "SPEECH OUTPUT: 'a CC list member'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -464,9 +431,8 @@ sequence.append(utils.AssertPresentationAction(
     "43. Line Down",
     ["BRAILLE LINE:  '< > check box a commenter'",
      "     VISIBLE:  '< > check box a commenter', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: ' a commenter '"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'a commenter'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -501,7 +467,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Only include combo box bugs numb', cursor=0",
      "SPEECH OUTPUT: 'Only include'",
      "SPEECH OUTPUT: 'combo box'",
-     "SPEECH OUTPUT: 'bugs numbered: '",
+     "SPEECH OUTPUT: 'bugs numbered:'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -535,7 +501,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  ' $l and'",
      "     VISIBLE:  ' $l and', cursor=0",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'and '",
+     "SPEECH OUTPUT: 'and'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'Now'"]))
 
@@ -545,7 +511,7 @@ sequence.append(utils.AssertPresentationAction(
     "52. Line Down",
     ["BRAILLE LINE:  '(YYYY-MM-DD or relative dates)'",
      "     VISIBLE:  '(YYYY-MM-DD or relative dates)', cursor=1",
-     "SPEECH OUTPUT: '(YYYY-MM-DD or relative dates) '"]))
+     "SPEECH OUTPUT: '(YYYY-MM-DD or relative dates)'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -561,10 +527,8 @@ sequence.append(utils.AssertPresentationAction(
     "54. Line Down",
     ["BRAILLE LINE:  '[Bug creation] list box'",
      "     VISIBLE:  '[Bug creation] list box', cursor=0",
-     "SPEECH OUTPUT: 'where one or more of the following changed:'",
      "SPEECH OUTPUT: '[Bug creation]'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 26 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 26 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -597,10 +561,8 @@ sequence.append(utils.AssertPresentationAction(
     "58. Line Down",
     ["BRAILLE LINE:  'Unspecified list box'",
      "     VISIBLE:  'Unspecified list box', cursor=0",
-     "SPEECH OUTPUT: 'GNOME version:'",
      "SPEECH OUTPUT: 'Unspecified'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 14 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 14 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -617,10 +579,8 @@ sequence.append(utils.AssertPresentationAction(
     "60. Line Down",
     ["BRAILLE LINE:  'Unspecified list box'",
      "     VISIBLE:  'Unspecified list box', cursor=0",
-     "SPEECH OUTPUT: 'GNOME target:'",
      "SPEECH OUTPUT: 'Unspecified'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 12 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 12 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -628,7 +588,7 @@ sequence.append(utils.AssertPresentationAction(
     "61. Line Down",
     ["BRAILLE LINE:  'Sort results by: Reuse same sort as last time combo box'",
      "     VISIBLE:  'Sort results by: Reuse same sort', cursor=1",
-     "SPEECH OUTPUT: 'Sort results by: '",
+     "SPEECH OUTPUT: 'Sort results by:'",
      "SPEECH OUTPUT: 'Reuse same sort as last time'",
      "SPEECH OUTPUT: 'combo box'"]))
 
@@ -647,9 +607,8 @@ sequence.append(utils.AssertPresentationAction(
     "63. Line Down",
     ["BRAILLE LINE:  '< > check box and remember these as my default search options'",
      "     VISIBLE:  '< > check box and remember these', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: ' and remember these as my default search options '"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'and remember these as my default search options'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -665,7 +624,7 @@ sequence.append(utils.AssertPresentationAction(
     "65. Line Down",
     ["BRAILLE LINE:  'Advanced Searching Using Boolean Charts:'",
      "     VISIBLE:  'Advanced Searching Using Boolean', cursor=1",
-     "SPEECH OUTPUT: 'Advanced Searching Using Boolean Charts: '"]))
+     "SPEECH OUTPUT: 'Advanced Searching Using Boolean Charts:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -673,9 +632,8 @@ sequence.append(utils.AssertPresentationAction(
     "66. Line Down",
     ["BRAILLE LINE:  '< > check box Not (negate this whole chart)'",
      "     VISIBLE:  '< > check box Not (negate this w', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: ' Not (negate this whole chart) '"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'Not (negate this whole chart)'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -716,19 +674,19 @@ sequence.append(utils.AssertPresentationAction(
     "70. Line Down",
     ["BRAILLE LINE:  'Saved Searches: My Bugs and Patches | All Orca | Firefox | open orca | Open RFEs'",
      "     VISIBLE:  'Saved Searches: My Bugs and Patc', cursor=1",
-     "SPEECH OUTPUT: 'Saved Searches: '",
+     "SPEECH OUTPUT: 'Saved Searches:'",
      "SPEECH OUTPUT: 'My Bugs and Patches'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'All Orca'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Firefox'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'open orca'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Open RFEs'",
      "SPEECH OUTPUT: 'link'"]))
 
diff --git a/test/keystrokes/firefox/line_nav_bugzilla_search_up.py 
b/test/keystrokes/firefox/line_nav_bugzilla_search_up.py
index 4d3f474..ec5f27b 100644
--- a/test/keystrokes/firefox/line_nav_bugzilla_search_up.py
+++ b/test/keystrokes/firefox/line_nav_bugzilla_search_up.py
@@ -49,9 +49,8 @@ sequence.append(utils.AssertPresentationAction(
     "4. Line Up",
     ["BRAILLE LINE:  '< > check box Not (negate this whole chart)'",
      "     VISIBLE:  '< > check box Not \(negate this w', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: ' Not (negate this whole chart) '"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'Not (negate this whole chart)'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -59,7 +58,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Line Up",
     ["BRAILLE LINE:  'Advanced Searching Using Boolean Charts:'",
      "     VISIBLE:  'Advanced Searching Using Boolean', cursor=1",
-     "SPEECH OUTPUT: 'Advanced Searching Using Boolean Charts: '"]))
+     "SPEECH OUTPUT: 'Advanced Searching Using Boolean Charts:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -75,9 +74,8 @@ sequence.append(utils.AssertPresentationAction(
     "7. Line Up",
     ["BRAILLE LINE:  '< > check box and remember these as my default search options'",
      "     VISIBLE:  '< > check box and remember these', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: ' and remember these as my default search options '"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'and remember these as my default search options'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -94,7 +92,7 @@ sequence.append(utils.AssertPresentationAction(
     "9. Line Up",
     ["BRAILLE LINE:  'Sort results by: Reuse same sort as last time combo box'",
      "     VISIBLE:  'Sort results by: Reuse same sort', cursor=1",
-     "SPEECH OUTPUT: 'Sort results by: '",
+     "SPEECH OUTPUT: 'Sort results by:'",
      "SPEECH OUTPUT: 'Reuse same sort as last time'",
      "SPEECH OUTPUT: 'combo box'"]))
 
@@ -104,10 +102,8 @@ sequence.append(utils.AssertPresentationAction(
     "10. Line Up",
     ["BRAILLE LINE:  'Unspecified list box'",
      "     VISIBLE:  'Unspecified list box', cursor=0",
-     "SPEECH OUTPUT: 'GNOME target:'",
      "SPEECH OUTPUT: 'Unspecified'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 12 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 12 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -124,10 +120,8 @@ sequence.append(utils.AssertPresentationAction(
     "12. Line Up",
     ["BRAILLE LINE:  'Unspecified list box'",
      "     VISIBLE:  'Unspecified list box', cursor=0",
-     "SPEECH OUTPUT: 'GNOME version:'",
      "SPEECH OUTPUT: 'Unspecified'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 14 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 14 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -160,10 +154,8 @@ sequence.append(utils.AssertPresentationAction(
     "16. Line Up",
     ["BRAILLE LINE:  '[Bug creation] list box'",
      "     VISIBLE:  '[Bug creation] list box', cursor=0",
-     "SPEECH OUTPUT: 'where one or more of the following changed:'",
      "SPEECH OUTPUT: '[Bug creation]'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 26 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 26 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -179,16 +171,16 @@ sequence.append(utils.AssertPresentationAction(
     "18. Line Up",
     ["BRAILLE LINE:  '(YYYY-MM-DD or relative dates)'",
      "     VISIBLE:  '(YYYY-MM-DD or relative dates)', cursor=1",
-     "SPEECH OUTPUT: '(YYYY-MM-DD or relative dates) '"]))
+     "SPEECH OUTPUT: '(YYYY-MM-DD or relative dates)'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "19. Line Up",
-    ["BRAILLE LINE:  ' $l and'",
-     "     VISIBLE:  ' $l and', cursor=0",
+    ["BRAILLE LINE:  ' $l and Now $l'",
+     "     VISIBLE:  ' $l and Now $l', cursor=0",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'and '",
+     "SPEECH OUTPUT: 'and'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'Now'"]))
 
@@ -224,7 +216,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Only include combo box bugs numb', cursor=0",
      "SPEECH OUTPUT: 'Only include'",
      "SPEECH OUTPUT: 'combo box'",
-     "SPEECH OUTPUT: 'bugs numbered: '",
+     "SPEECH OUTPUT: 'bugs numbered:'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -258,9 +250,8 @@ sequence.append(utils.AssertPresentationAction(
     "27. Line Up",
     ["BRAILLE LINE:  '< > check box a commenter'",
      "     VISIBLE:  '< > check box a commenter', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: 'a commenter '"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'a commenter'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -268,9 +259,8 @@ sequence.append(utils.AssertPresentationAction(
     "28. Line Up",
     ["BRAILLE LINE:  '<x> check box a CC list member'",
      "     VISIBLE:  '<x> check box a CC list member', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'checked'",
-     "SPEECH OUTPUT: ' a CC list member '"]))
+     "SPEECH OUTPUT: 'check box checked'",
+     "SPEECH OUTPUT: 'a CC list member'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -278,9 +268,8 @@ sequence.append(utils.AssertPresentationAction(
     "29. Line Up",
     ["BRAILLE LINE:  '<x> check box the QA contact'",
      "     VISIBLE:  '<x> check box the QA contact', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'checked'",
-     "SPEECH OUTPUT: ' the QA contact '"]))
+     "SPEECH OUTPUT: 'check box checked'",
+     "SPEECH OUTPUT: 'the QA contact'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -288,9 +277,8 @@ sequence.append(utils.AssertPresentationAction(
     "30. Line Up",
     ["BRAILLE LINE:  '<x> check box the reporter'",
      "     VISIBLE:  '<x> check box the reporter', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'checked'",
-     "SPEECH OUTPUT: ' the reporter '"]))
+     "SPEECH OUTPUT: 'check box checked'",
+     "SPEECH OUTPUT: 'the reporter'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -298,9 +286,8 @@ sequence.append(utils.AssertPresentationAction(
     "31. Line Up",
     ["BRAILLE LINE:  '<x> check box the bug assignee'",
      "     VISIBLE:  '<x> check box the bug assignee', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'checked'",
-     "SPEECH OUTPUT: ' the bug assignee '"]))
+     "SPEECH OUTPUT: 'check box checked'",
+     "SPEECH OUTPUT: 'the bug assignee'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -308,7 +295,7 @@ sequence.append(utils.AssertPresentationAction(
     "32. Line Up",
     ["BRAILLE LINE:  'Any one of:'",
      "     VISIBLE:  'Any one of:', cursor=1",
-     "SPEECH OUTPUT: 'Any one of: '"]))
+     "SPEECH OUTPUT: 'Any one of:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -333,9 +320,8 @@ sequence.append(utils.AssertPresentationAction(
     "35. Line Up",
     ["BRAILLE LINE:  '< > check box a commenter'",
      "     VISIBLE:  '< > check box a commenter', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: 'a commenter '"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'a commenter'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -343,9 +329,8 @@ sequence.append(utils.AssertPresentationAction(
     "36. Line Up",
     ["BRAILLE LINE:  '< > check box a CC list member'",
      "     VISIBLE:  '< > check box a CC list member', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: ' a CC list member '"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'a CC list member'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -353,9 +338,8 @@ sequence.append(utils.AssertPresentationAction(
     "37. Line Up",
     ["BRAILLE LINE:  '< > check box the QA contact'",
      "     VISIBLE:  '< > check box the QA contact', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: ' the QA contact '"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'the QA contact'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -363,9 +347,8 @@ sequence.append(utils.AssertPresentationAction(
     "38. Line Up",
     ["BRAILLE LINE:  '< > check box the reporter'",
      "     VISIBLE:  '< > check box the reporter', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: ' the reporter '"]))
+     "SPEECH OUTPUT: 'check box not checked'",
+     "SPEECH OUTPUT: 'the reporter'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -373,9 +356,8 @@ sequence.append(utils.AssertPresentationAction(
     "39. Line Up",
     ["BRAILLE LINE:  '<x> check box the bug assignee'",
      "     VISIBLE:  '<x> check box the bug assignee', cursor=0",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'checked'",
-     "SPEECH OUTPUT: ' the bug assignee '"]))
+     "SPEECH OUTPUT: 'check box checked'",
+     "SPEECH OUTPUT: 'the bug assignee'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -383,7 +365,7 @@ sequence.append(utils.AssertPresentationAction(
     "40. Line Up",
     ["BRAILLE LINE:  'Any one of:'",
      "     VISIBLE:  'Any one of:', cursor=1",
-     "SPEECH OUTPUT: 'Any one of: '"]))
+     "SPEECH OUTPUT: 'Any one of:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -399,10 +381,8 @@ sequence.append(utils.AssertPresentationAction(
     "42. Line Up",
     ["BRAILLE LINE:  'All list box'",
      "     VISIBLE:  'All list box', cursor=0",
-     "SPEECH OUTPUT: 'OS:'",
      "SPEECH OUTPUT: 'All'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 21 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 21 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -419,10 +399,8 @@ sequence.append(utils.AssertPresentationAction(
     "44. Line Up",
     ["BRAILLE LINE:  'Immediate list box'",
      "     VISIBLE:  'Immediate list box', cursor=0",
-     "SPEECH OUTPUT: 'Priority:'",
      "SPEECH OUTPUT: 'Immediate'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 5 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 5 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -439,10 +417,8 @@ sequence.append(utils.AssertPresentationAction(
     "46. Line Up",
     ["BRAILLE LINE:  'blocker list box'",
      "     VISIBLE:  'blocker list box', cursor=0",
-     "SPEECH OUTPUT: 'Severity:'",
      "SPEECH OUTPUT: 'blocker'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 7 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 7 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -459,10 +435,8 @@ sequence.append(utils.AssertPresentationAction(
     "48. Line Up",
     ["BRAILLE LINE:  'FIXED list box'",
      "     VISIBLE:  'FIXED list box', cursor=0",
-     "SPEECH OUTPUT: 'Resolution:'",
      "SPEECH OUTPUT: 'FIXED'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 12 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 12 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -479,14 +453,8 @@ sequence.append(utils.AssertPresentationAction(
     "50. Line Up",
     ["BRAILLE LINE:  'UNCONFIRMED NEW ASSIGNED REOPENED NEEDINFO list box'",
      "     VISIBLE:  'UNCONFIRMED NEW ASSIGNED REOPENE', cursor=0",
-     "SPEECH OUTPUT: 'Status:'",
-     "SPEECH OUTPUT: 'UNCONFIRMED'",
-     "SPEECH OUTPUT: 'NEW'",
-     "SPEECH OUTPUT: 'ASSIGNED'",
-     "SPEECH OUTPUT: 'REOPENED'",
-     "SPEECH OUTPUT: 'NEEDINFO'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 8 items'"]))
+     "SPEECH OUTPUT: 'UNCONFIRMED NEW ASSIGNED REOPENED NEEDINFO'",
+     "SPEECH OUTPUT: 'multi-select List with 8 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -513,7 +481,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Keywords: contains all of the ke', cursor=1",
      "SPEECH OUTPUT: 'Keywords'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '",
+     "SPEECH OUTPUT: 'Keywords :'",
      "SPEECH OUTPUT: 'row header'",
      "SPEECH OUTPUT: 'contains all of the keywords'",
      "SPEECH OUTPUT: 'combo box'",
@@ -549,10 +517,8 @@ sequence.append(utils.AssertPresentationAction(
     "56. Line Up",
     ["BRAILLE LINE:  '--- list box'",
      "     VISIBLE:  '--- list box', cursor=0",
-     "SPEECH OUTPUT: 'Target Milestone:'",
      "SPEECH OUTPUT: '---'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 555 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 555 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -569,10 +535,8 @@ sequence.append(utils.AssertPresentationAction(
     "58. Line Up",
     ["BRAILLE LINE:  '0.0.1 list box'",
      "     VISIBLE:  '0.0.1 list box', cursor=0",
-     "SPEECH OUTPUT: 'Version:'",
      "SPEECH OUTPUT: '0.0.1'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 857 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 857 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -589,10 +553,8 @@ sequence.append(utils.AssertPresentationAction(
     "60. Line Up",
     ["BRAILLE LINE:  'abiscan list box'",
      "     VISIBLE:  'abiscan list box', cursor=0",
-     "SPEECH OUTPUT: 'Component:'",
      "SPEECH OUTPUT: 'abiscan'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 1248 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 1248 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -602,7 +564,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Component:', cursor=1",
      "SPEECH OUTPUT: 'Component'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '",
+     "SPEECH OUTPUT: 'Component :'",
      "SPEECH OUTPUT: 'column header'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -611,10 +573,8 @@ sequence.append(utils.AssertPresentationAction(
     "62. Line Up",
     ["BRAILLE LINE:  'accerciser list box'",
      "     VISIBLE:  'accerciser list box', cursor=0",
-     "SPEECH OUTPUT: 'Product:'",
      "SPEECH OUTPUT: 'accerciser'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 379 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 379 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -631,10 +591,8 @@ sequence.append(utils.AssertPresentationAction(
     "64. Line Up",
     ["BRAILLE LINE:  'Admin  list box'",
      "     VISIBLE:  'Admin  list box', cursor=0",
-     "SPEECH OUTPUT: 'Classification:'",
      "SPEECH OUTPUT: 'Admin '",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 8 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 8 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -667,7 +625,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Give me some help (reloads page.', cursor=1",
      "SPEECH OUTPUT: 'Give me some help'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (reloads page.)'"]))
+     "SPEECH OUTPUT: '(reloads page.)'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -675,9 +633,9 @@ sequence.append(utils.AssertPresentationAction(
     "68. Line Up",
     ["BRAILLE LINE:  'Short Bug Search Form Complicated Bug Search Form'",
      "     VISIBLE:  'Short Bug Search Form Complicate', cursor=0",
-     "SPEECH OUTPUT: 'Short Bug Search Form '",
+     "SPEECH OUTPUT: 'Short Bug Search Form'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'Complicated Bug Search Form '"]))
+     "SPEECH OUTPUT: 'Complicated Bug Search Form'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -687,25 +645,25 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'New bug · Browse · Search · Repo', cursor=1",
      "SPEECH OUTPUT: 'New bug'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Browse'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Search'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Reports'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Account'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Admin'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Help'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'Logged In joanmarie diggs gmail com | '",
+     "SPEECH OUTPUT: 'Logged In joanmarie diggs gmail com |'",
      "SPEECH OUTPUT: 'Log Out'",
      "SPEECH OUTPUT: 'link'"]))
 
diff --git a/test/keystrokes/firefox/line_nav_clickables.py b/test/keystrokes/firefox/line_nav_clickables.py
index 3a320df..0a24c72 100644
--- a/test/keystrokes/firefox/line_nav_clickables.py
+++ b/test/keystrokes/firefox/line_nav_clickables.py
@@ -17,7 +17,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. Top of file",
     ["BRAILLE LINE:  'Clickable image:'",
      "     VISIBLE:  'Clickable image:', cursor=1",
-     "SPEECH OUTPUT: 'Clickable image: '"]))
+     "SPEECH OUTPUT: 'Clickable image:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -26,8 +26,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Orca Logo'",
      "     VISIBLE:  'Orca Logo', cursor=0",
      "SPEECH OUTPUT: 'Orca Logo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'clickable'"]))
+     "SPEECH OUTPUT: 'image clickable'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -43,10 +42,10 @@ sequence.append(utils.AssertPresentationAction(
     "4. Line Down",
     ["BRAILLE LINE:  'Clickable span: Click Me. More text.'",
      "     VISIBLE:  'Clickable span: Click Me. More t', cursor=1",
-     "SPEECH OUTPUT: 'Clickable span: '",
+     "SPEECH OUTPUT: 'Clickable span:'",
      "SPEECH OUTPUT: 'Click Me.'",
      "SPEECH OUTPUT: 'clickable'",
-     "SPEECH OUTPUT: ' More text.'"]))
+     "SPEECH OUTPUT: 'More text.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -54,7 +53,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Line Down",
     ["BRAILLE LINE:  'Clickable div:'",
      "     VISIBLE:  'Clickable div:', cursor=1",
-     "SPEECH OUTPUT: 'Clickable div: '"]))
+     "SPEECH OUTPUT: 'Clickable div:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -88,7 +87,7 @@ sequence.append(utils.AssertPresentationAction(
     "9. Line Up",
     ["BRAILLE LINE:  'Clickable div:'",
      "     VISIBLE:  'Clickable div:', cursor=1",
-     "SPEECH OUTPUT: 'Clickable div: '"]))
+     "SPEECH OUTPUT: 'Clickable div:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -96,10 +95,10 @@ sequence.append(utils.AssertPresentationAction(
     "10. Line Up",
     ["BRAILLE LINE:  'Clickable span: Click Me. More text.'",
      "     VISIBLE:  'Clickable span: Click Me. More t', cursor=1",
-     "SPEECH OUTPUT: 'Clickable span: '",
+     "SPEECH OUTPUT: 'Clickable span:'",
      "SPEECH OUTPUT: 'Click Me.'",
      "SPEECH OUTPUT: 'clickable'",
-     "SPEECH OUTPUT: ' More text.'"]))
+     "SPEECH OUTPUT: 'More text.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_empty_anchor.py 
b/test/keystrokes/firefox/line_nav_empty_anchor.py
index ad2c319..571bc2d 100644
--- a/test/keystrokes/firefox/line_nav_empty_anchor.py
+++ b/test/keystrokes/firefox/line_nav_empty_anchor.py
@@ -13,7 +13,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. Top of file",
     ["BRAILLE LINE:  'FAQ  h1'",
      "     VISIBLE:  'FAQ  h1', cursor=1",
-     "SPEECH OUTPUT: 'FAQ '",
+     "SPEECH OUTPUT: 'FAQ'",
      "SPEECH OUTPUT: 'heading level 1'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -94,8 +94,7 @@ sequence.append(utils.AssertPresentationAction(
     "10. Line Down",
     ["BRAILLE LINE:  'Q. What is a battery?'",
      "     VISIBLE:  'Q. What is a battery?', cursor=1",
-     "SPEECH OUTPUT: 'Q. What is a battery?",
-     "'"]))
+     "SPEECH OUTPUT: 'Q. What is a battery?'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -111,8 +110,7 @@ sequence.append(utils.AssertPresentationAction(
     "12. Line Down",
     ["BRAILLE LINE:  'Q. Which way is up?'",
      "     VISIBLE:  'Q. Which way is up?', cursor=1",
-     "SPEECH OUTPUT: 'Q. Which way is up?",
-     "'"]))
+     "SPEECH OUTPUT: 'Q. Which way is up?'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -120,7 +118,7 @@ sequence.append(utils.AssertPresentationAction(
     "13. Line Down",
     ["BRAILLE LINE:  'A. That way.'",
      "     VISIBLE:  'A. That way.', cursor=1",
-     "SPEECH OUTPUT: 'A. That way. '"]))
+     "SPEECH OUTPUT: 'A. That way.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -128,8 +126,7 @@ sequence.append(utils.AssertPresentationAction(
     "14. Line Down",
     ["BRAILLE LINE:  'Q. Why did Orca used to get stuck on this page?'",
      "     VISIBLE:  'Q. Why did Orca used to get stuc', cursor=1",
-     "SPEECH OUTPUT: 'Q. Why did Orca used to get stuck on this page?",
-     "'"]))
+     "SPEECH OUTPUT: 'Q. Why did Orca used to get stuck on this page?'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -145,8 +142,7 @@ sequence.append(utils.AssertPresentationAction(
     "16. Line Up",
     ["BRAILLE LINE:  'Q. Why did Orca used to get stuck on this page?'",
      "     VISIBLE:  'Q. Why did Orca used to get stuc', cursor=1",
-     "SPEECH OUTPUT: 'Q. Why did Orca used to get stuck on this page?",
-     "'"]))
+     "SPEECH OUTPUT: 'Q. Why did Orca used to get stuck on this page?'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -154,7 +150,7 @@ sequence.append(utils.AssertPresentationAction(
     "17. Line Up",
     ["BRAILLE LINE:  'A. That way.'",
      "     VISIBLE:  'A. That way.', cursor=1",
-     "SPEECH OUTPUT: 'A. That way. '"]))
+     "SPEECH OUTPUT: 'A. That way.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -162,8 +158,7 @@ sequence.append(utils.AssertPresentationAction(
     "18. Line Up",
     ["BRAILLE LINE:  'Q. Which way is up?'",
      "     VISIBLE:  'Q. Which way is up?', cursor=1",
-     "SPEECH OUTPUT: 'Q. Which way is up?",
-     "'"]))
+     "SPEECH OUTPUT: 'Q. Which way is up?'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -179,8 +174,7 @@ sequence.append(utils.AssertPresentationAction(
     "20. Line Up",
     ["BRAILLE LINE:  'Q. What is a battery?'",
      "     VISIBLE:  'Q. What is a battery?', cursor=1",
-     "SPEECH OUTPUT: 'Q. What is a battery?",
-     "'"]))
+     "SPEECH OUTPUT: 'Q. What is a battery?'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -260,7 +254,7 @@ sequence.append(utils.AssertPresentationAction(
     "29. Line Up",
     ["BRAILLE LINE:  'FAQ  h1'",
      "     VISIBLE:  'FAQ  h1', cursor=1",
-     "SPEECH OUTPUT: 'FAQ '",
+     "SPEECH OUTPUT: 'FAQ'",
      "SPEECH OUTPUT: 'heading level 1'"]))
 
 sequence.append(utils.AssertionSummaryAction())
diff --git a/test/keystrokes/firefox/line_nav_empty_textarea.py 
b/test/keystrokes/firefox/line_nav_empty_textarea.py
index 4d04959..4e4c020 100644
--- a/test/keystrokes/firefox/line_nav_empty_textarea.py
+++ b/test/keystrokes/firefox/line_nav_empty_textarea.py
@@ -22,8 +22,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Label:'",
      "     VISIBLE:  'Label:', cursor=1",
      "SPEECH OUTPUT: 'Label'",
-     "SPEECH OUTPUT: ': ",
-     "'"]))
+     "SPEECH OUTPUT: ':'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -58,8 +57,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Label:'",
      "     VISIBLE:  'Label:', cursor=1",
      "SPEECH OUTPUT: 'Label'",
-     "SPEECH OUTPUT: ': ",
-     "'"]))
+     "SPEECH OUTPUT: ':'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_enter_bug.py b/test/keystrokes/firefox/line_nav_enter_bug.py
index 6d03b83..e2ae7e3 100644
--- a/test/keystrokes/firefox/line_nav_enter_bug.py
+++ b/test/keystrokes/firefox/line_nav_enter_bug.py
@@ -16,6 +16,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Home Bugzilla'",
      "     VISIBLE:  'Home Bugzilla', cursor=1",
      "SPEECH OUTPUT: 'Home'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Bugzilla'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -26,25 +27,25 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'New bug · Browse · Search · Repo', cursor=1",
      "SPEECH OUTPUT: 'New bug'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Browse'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Search'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Reports'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Account'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Admin'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Help'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'Logged In joanmarie diggs gmail com | '",
+     "SPEECH OUTPUT: 'Logged In joanmarie diggs gmail com |'",
      "SPEECH OUTPUT: 'Log Out'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -54,7 +55,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. Line Down",
     ["BRAILLE LINE:  'Enter Bug: orca – This page lets you enter a new bug  h1'",
      "     VISIBLE:  'Enter Bug: orca – This page lets', cursor=1",
-     "SPEECH OUTPUT: 'Enter Bug: orca – This page lets you enter a new bug '",
+     "SPEECH OUTPUT: 'Enter Bug: orca – This page lets you enter a new bug'",
      "SPEECH OUTPUT: 'heading level 1'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -88,10 +89,10 @@ sequence.append(utils.AssertPresentationAction(
     "7. Line Down",
     ["BRAILLE LINE:  'Before reporting a bug, please read the bug writing guidelines,'",
      "     VISIBLE:  'Before reporting a bug, please r', cursor=1",
-     "SPEECH OUTPUT: 'Before reporting a bug, please read the '",
+     "SPEECH OUTPUT: 'Before reporting a bug, please read the'",
      "SPEECH OUTPUT: 'bug writing guidelines'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ', '"]))
+     "SPEECH OUTPUT: ','"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -99,10 +100,10 @@ sequence.append(utils.AssertPresentationAction(
     "8. Line Down",
     ["BRAILLE LINE:  'please look at the list of most frequently reported bugs, and please'",
      "     VISIBLE:  'please look at the list of most ', cursor=1",
-     "SPEECH OUTPUT: 'please look at the list of '",
+     "SPEECH OUTPUT: 'please look at the list of'",
      "SPEECH OUTPUT: 'most frequently reported bugs'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ', and please '"]))
+     "SPEECH OUTPUT: ', and please'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -112,10 +113,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'search or browse for the bug.', cursor=1",
      "SPEECH OUTPUT: 'search'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' or '",
+     "SPEECH OUTPUT: 'or'",
      "SPEECH OUTPUT: 'browse'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for the bug. '"]))
+     "SPEECH OUTPUT: 'for the bug.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -150,7 +151,6 @@ sequence.append(utils.AssertPresentationAction(
     "13. Line Down",
     ["BRAILLE LINE:  '2.21.x  list box'",
      "     VISIBLE:  '2.21.x  list box', cursor=0",
-     "SPEECH OUTPUT: 'Version:'",
      "SPEECH OUTPUT: '2.21.x '",
      "SPEECH OUTPUT: 'List with 9 items'"]))
 
@@ -162,7 +162,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Component:', cursor=1",
      "SPEECH OUTPUT: 'Component'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '"]))
+     "SPEECH OUTPUT: ':'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -170,7 +170,6 @@ sequence.append(utils.AssertPresentationAction(
     "15. Line Down",
     ["BRAILLE LINE:  'braille  list box'",
      "     VISIBLE:  'braille  list box', cursor=0",
-     "SPEECH OUTPUT: 'Component:'",
      "SPEECH OUTPUT: 'braille '",
      "SPEECH OUTPUT: 'List with 5 items'"]))
 
@@ -188,7 +187,7 @@ sequence.append(utils.AssertPresentationAction(
     "17. Line Down",
     ["BRAILLE LINE:  'GNOME'",
      "     VISIBLE:  'GNOME', cursor=1",
-     "SPEECH OUTPUT: 'GNOME '",
+     "SPEECH OUTPUT: 'GNOME'",
      "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -199,7 +198,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'version:', cursor=1",
      "SPEECH OUTPUT: 'version'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '"]))
+     "SPEECH OUTPUT: ':'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -218,7 +217,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'OS: Linux combo box', cursor=1",
      "SPEECH OUTPUT: 'OS'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '",
+     "SPEECH OUTPUT: ':'",
      "SPEECH OUTPUT: 'Linux'",
      "SPEECH OUTPUT: 'combo box'"]))
 
@@ -230,7 +229,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Severity: normal combo box', cursor=1",
      "SPEECH OUTPUT: 'Severity'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '",
+     "SPEECH OUTPUT: ':'",
      "SPEECH OUTPUT: 'normal'",
      "SPEECH OUTPUT: 'combo box'"]))
 
@@ -300,7 +299,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Keywords:', cursor=1",
      "SPEECH OUTPUT: 'Keywords'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '"]))
+     "SPEECH OUTPUT: ':'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -318,7 +317,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Keywords:', cursor=1",
      "SPEECH OUTPUT: 'Keywords'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '"]))
+     "SPEECH OUTPUT: ':'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -351,7 +350,6 @@ sequence.append(utils.AssertPresentationAction(
     "35. Line Up",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=0",
-     "SPEECH OUTPUT: 'Description:'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -387,7 +385,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Severity: normal combo box', cursor=1",
      "SPEECH OUTPUT: 'Severity'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '",
+     "SPEECH OUTPUT: ':'",
      "SPEECH OUTPUT: 'normal'",
      "SPEECH OUTPUT: 'combo box'"]))
 
@@ -399,7 +397,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'OS: Linux combo box', cursor=1",
      "SPEECH OUTPUT: 'OS'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '",
+     "SPEECH OUTPUT: ':'",
      "SPEECH OUTPUT: 'Linux'",
      "SPEECH OUTPUT: 'combo box'"]))
 
@@ -409,7 +407,6 @@ sequence.append(utils.AssertPresentationAction(
     "41. Line Up",
     ["BRAILLE LINE:  'Unspecified combo box'",
      "     VISIBLE:  'Unspecified combo box', cursor=0",
-     "SPEECH OUTPUT: 'GNOME version:'",
      "SPEECH OUTPUT: 'Unspecified'",
      "SPEECH OUTPUT: 'combo box'"]))
 
@@ -421,7 +418,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'version:', cursor=1",
      "SPEECH OUTPUT: 'version'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '"]))
+     "SPEECH OUTPUT: ':'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -429,7 +426,7 @@ sequence.append(utils.AssertPresentationAction(
     "43. Line Up",
     ["BRAILLE LINE:  'GNOME'",
      "     VISIBLE:  'GNOME', cursor=1",
-     "SPEECH OUTPUT: 'GNOME '",
+     "SPEECH OUTPUT: 'GNOME'",
      "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -446,7 +443,6 @@ sequence.append(utils.AssertPresentationAction(
     "45. Line Up",
     ["BRAILLE LINE:  'braille  list box'",
      "     VISIBLE:  'braille  list box', cursor=0",
-     "SPEECH OUTPUT: 'Component:'",
      "SPEECH OUTPUT: 'braille '",
      "SPEECH OUTPUT: 'List with 5 items'"]))
 
@@ -458,7 +454,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Component:', cursor=1",
      "SPEECH OUTPUT: 'Component'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '"]))
+     "SPEECH OUTPUT: ':'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -466,7 +462,6 @@ sequence.append(utils.AssertPresentationAction(
     "47. Line Up",
     ["BRAILLE LINE:  '2.21.x  list box'",
      "     VISIBLE:  '2.21.x  list box', cursor=0",
-     "SPEECH OUTPUT: 'Version:'",
      "SPEECH OUTPUT: '2.21.x '",
      "SPEECH OUTPUT: 'List with 9 items'"]))
 
@@ -505,10 +500,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'search or browse for the bug.', cursor=1",
      "SPEECH OUTPUT: 'search'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' or '",
+     "SPEECH OUTPUT: 'or'",
      "SPEECH OUTPUT: 'browse'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for the bug. '"]))
+     "SPEECH OUTPUT: 'for the bug.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -516,10 +511,10 @@ sequence.append(utils.AssertPresentationAction(
     "52. Line Up",
     ["BRAILLE LINE:  'please look at the list of most frequently reported bugs, and please'",
      "     VISIBLE:  'please look at the list of most ', cursor=1",
-     "SPEECH OUTPUT: 'please look at the list of '",
+     "SPEECH OUTPUT: 'please look at the list of'",
      "SPEECH OUTPUT: 'most frequently reported bugs'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ', and please '"]))
+     "SPEECH OUTPUT: ', and please'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -527,10 +522,10 @@ sequence.append(utils.AssertPresentationAction(
     "53. Line Up",
     ["BRAILLE LINE:  'Before reporting a bug, please read the bug writing guidelines,'",
      "     VISIBLE:  'Before reporting a bug, please r', cursor=1",
-     "SPEECH OUTPUT: 'Before reporting a bug, please read the '",
+     "SPEECH OUTPUT: 'Before reporting a bug, please read the'",
      "SPEECH OUTPUT: 'bug writing guidelines'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ', '"]))
+     "SPEECH OUTPUT: ','"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -563,7 +558,7 @@ sequence.append(utils.AssertPresentationAction(
     "57. Line Up",
     ["BRAILLE LINE:  'Enter Bug: orca \u2013 This page lets you enter a new bug  h1'",
      "     VISIBLE:  'Enter Bug: orca – This page lets', cursor=1",
-     "SPEECH OUTPUT: 'Enter Bug: orca \u2013 This page lets you enter a new bug '",
+     "SPEECH OUTPUT: 'Enter Bug: orca \u2013 This page lets you enter a new bug'",
      "SPEECH OUTPUT: 'heading level 1'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -574,25 +569,25 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'New bug · Browse · Search · Repo', cursor=1",
      "SPEECH OUTPUT: 'New bug'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Browse'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Search'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Reports'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Account'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Admin'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Help'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'Logged In joanmarie diggs gmail com | '",
+     "SPEECH OUTPUT: 'Logged In joanmarie diggs gmail com |'",
      "SPEECH OUTPUT: 'Log Out'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -603,6 +598,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Home Bugzilla'",
      "     VISIBLE:  'Home Bugzilla', cursor=1",
      "SPEECH OUTPUT: 'Home'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Bugzilla'"]))
 
 sequence.append(utils.AssertionSummaryAction())
diff --git a/test/keystrokes/firefox/line_nav_entries.py b/test/keystrokes/firefox/line_nav_entries.py
index 34649b3..5183ba6 100644
--- a/test/keystrokes/firefox/line_nav_entries.py
+++ b/test/keystrokes/firefox/line_nav_entries.py
@@ -25,13 +25,13 @@ sequence.append(utils.AssertPresentationAction(
     "2. Line Down",
     ["BRAILLE LINE:  'Type something rather amusing here:  $l'",
      "     VISIBLE:  'Type something rather amusing he', cursor=1",
-     "SPEECH OUTPUT: 'Type '",
+     "SPEECH OUTPUT: 'Type'",
      "SPEECH OUTPUT: 'something'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' rather '",
+     "SPEECH OUTPUT: 'rather'",
      "SPEECH OUTPUT: 'amusing'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' here: '",
+     "SPEECH OUTPUT: 'here:'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -40,9 +40,9 @@ sequence.append(utils.AssertPresentationAction(
     "3. Line Down",
     ["BRAILLE LINE:  'Amusing numbers fall between  $l and  $l.'",
      "     VISIBLE:  'Amusing numbers fall between  $l', cursor=1",
-     "SPEECH OUTPUT: 'Amusing numbers fall between '",
+     "SPEECH OUTPUT: 'Amusing numbers fall between'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: ' and '",
+     "SPEECH OUTPUT: 'and'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: '.'"]))
 
@@ -189,8 +189,7 @@ sequence.append(utils.AssertPresentationAction(
     "20. Line Down",
     ["BRAILLE LINE:  'Middle'",
      "     VISIBLE:  'Middle', cursor=1",
-     "SPEECH OUTPUT: 'Middle",
-     "'"]))
+     "SPEECH OUTPUT: 'Middle'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -206,7 +205,7 @@ sequence.append(utils.AssertPresentationAction(
     "22. Line Down",
     ["BRAILLE LINE:  'Last name'",
      "     VISIBLE:  'Last name', cursor=1",
-     "SPEECH OUTPUT: 'Last '",
+     "SPEECH OUTPUT: 'Last'",
      "SPEECH OUTPUT: 'name'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -233,8 +232,7 @@ sequence.append(utils.AssertPresentationAction(
     "25. Line Down",
     ["BRAILLE LINE:  'Middle'",
      "     VISIBLE:  'Middle', cursor=1",
-     "SPEECH OUTPUT: 'Middle",
-     "'"]))
+     "SPEECH OUTPUT: 'Middle'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -250,7 +248,7 @@ sequence.append(utils.AssertPresentationAction(
     "27. Line Down",
     ["BRAILLE LINE:  'Last name'",
      "     VISIBLE:  'Last name', cursor=1",
-     "SPEECH OUTPUT: 'Last '",
+     "SPEECH OUTPUT: 'Last'",
      "SPEECH OUTPUT: 'name'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -280,8 +278,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'First name Middle'",
      "     VISIBLE:  'First name Middle', cursor=1",
      "SPEECH OUTPUT: 'First name'",
-     "SPEECH OUTPUT: 'Middle",
-     "'"]))
+     "SPEECH OUTPUT: 'Middle'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -298,7 +295,6 @@ sequence.append(utils.AssertPresentationAction(
     "32. Line Up",
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'First Name'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'entry'"]))
@@ -309,7 +305,7 @@ sequence.append(utils.AssertPresentationAction(
     "33. Line Up",
     ["BRAILLE LINE:  'Last name'",
      "     VISIBLE:  'Last name', cursor=1",
-     "SPEECH OUTPUT: 'Last '",
+     "SPEECH OUTPUT: 'Last'",
      "SPEECH OUTPUT: 'name'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -327,8 +323,7 @@ sequence.append(utils.AssertPresentationAction(
     "35. Line Up",
     ["BRAILLE LINE:  'Middle'",
      "     VISIBLE:  'Middle', cursor=1",
-     "SPEECH OUTPUT: 'Middle",
-     "'"]))
+     "SPEECH OUTPUT: 'Middle'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -353,7 +348,7 @@ sequence.append(utils.AssertPresentationAction(
     "38. Line Up",
     ["BRAILLE LINE:  'Last name'",
      "     VISIBLE:  'Last name', cursor=1",
-     "SPEECH OUTPUT: 'Last '",
+     "SPEECH OUTPUT: 'Last'",
      "SPEECH OUTPUT: 'name'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -371,8 +366,7 @@ sequence.append(utils.AssertPresentationAction(
     "40. Line Up",
     ["BRAILLE LINE:  'Middle'",
      "     VISIBLE:  'Middle', cursor=1",
-     "SPEECH OUTPUT: 'Middle",
-     "'"]))
+     "SPEECH OUTPUT: 'Middle'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -388,7 +382,6 @@ sequence.append(utils.AssertPresentationAction(
     "42. Line Up",
     ["BRAILLE LINE:  ' $l $l $l'",
      "     VISIBLE:  ' $l $l $l', cursor=0",
-     "SPEECH OUTPUT: 'First name'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'entry'"]))
@@ -472,10 +465,8 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "52. Line Up",
-    ["KNOWN ISSUE: We are double-speaking the text",
-     "BRAILLE LINE:  ' $l Too far away to be a label.'",
+    ["BRAILLE LINE:  ' $l Too far away to be a label.'",
      "     VISIBLE:  ' $l Too far away to be a label.', cursor=0",
-     "SPEECH OUTPUT: 'Too far away to be a label.'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'Too far away to be a label.'"]))
 
@@ -500,10 +491,8 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "55. Line Up",
-    ["KNOWN ISSUE: We are double-speaking the text",
-     "BRAILLE LINE:  ' $l Am I a label as well?'",
+    ["BRAILLE LINE:  ' $l Am I a label as well?'",
      "     VISIBLE:  ' $l Am I a label as well?', cursor=0",
-     "SPEECH OUTPUT: 'Am I a label as well?'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'Am I a label as well?'"]))
 
@@ -511,10 +500,8 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "56. Line Up",
-    ["KNOWN ISSUE: We are double-speaking the text",
-     "BRAILLE LINE:  ' $l I'm a label'",
+    ["BRAILLE LINE:  ' $l I'm a label'",
      "     VISIBLE:  ' $l I'm a label', cursor=0",
-     "SPEECH OUTPUT: 'I'm a label'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'I'm a label'"]))
 
@@ -524,9 +511,9 @@ sequence.append(utils.AssertPresentationAction(
     "57. Line Up",
     ["BRAILLE LINE:  'Amusing numbers fall between  $l and  $l.'",
      "     VISIBLE:  'Amusing numbers fall between  $l', cursor=1",
-     "SPEECH OUTPUT: 'Amusing numbers fall between '",
+     "SPEECH OUTPUT: 'Amusing numbers fall between'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: ' and '",
+     "SPEECH OUTPUT: 'and'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: '.'"]))
 
@@ -536,13 +523,13 @@ sequence.append(utils.AssertPresentationAction(
     "58. Line Up",
     ["BRAILLE LINE:  'Type something rather amusing here:  $l'",
      "     VISIBLE:  'Type something rather amusing he', cursor=1",
-     "SPEECH OUTPUT: 'Type '",
+     "SPEECH OUTPUT: 'Type'",
      "SPEECH OUTPUT: 'something'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' rather '",
+     "SPEECH OUTPUT: 'rather'",
      "SPEECH OUTPUT: 'amusing'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' here: '",
+     "SPEECH OUTPUT: 'here:'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/line_nav_focused_link.py 
b/test/keystrokes/firefox/line_nav_focused_link.py
index b453a28..d5e2508 100644
--- a/test/keystrokes/firefox/line_nav_focused_link.py
+++ b/test/keystrokes/firefox/line_nav_focused_link.py
@@ -16,7 +16,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  '[Line 2]'",
      "     VISIBLE:  '[Line 2]', cursor=2",
      "SPEECH OUTPUT: 'Line 2'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
diff --git a/test/keystrokes/firefox/line_nav_follow_same_page_link.py 
b/test/keystrokes/firefox/line_nav_follow_same_page_link.py
index 0e5f4f9..2bf5301 100644
--- a/test/keystrokes/firefox/line_nav_follow_same_page_link.py
+++ b/test/keystrokes/firefox/line_nav_follow_same_page_link.py
@@ -25,7 +25,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  '•First item'",
      "     VISIBLE:  '•First item', cursor=2",
      "SPEECH OUTPUT: 'First item'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -36,7 +36,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  '•Second item'",
      "     VISIBLE:  '•Second item', cursor=2",
      "SPEECH OUTPUT: 'Second item'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
@@ -44,7 +44,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Return",
     ["BRAILLE LINE:  'seas. '",
      "     VISIBLE:  'seas. ', cursor=0",
-     "SPEECH OUTPUT: 'link' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
diff --git a/test/keystrokes/firefox/line_nav_follow_same_page_link_2.py 
b/test/keystrokes/firefox/line_nav_follow_same_page_link_2.py
index a445d2b..2ff0302 100644
--- a/test/keystrokes/firefox/line_nav_follow_same_page_link_2.py
+++ b/test/keystrokes/firefox/line_nav_follow_same_page_link_2.py
@@ -26,7 +26,7 @@ sequence.append(utils.AssertPresentationAction(
     "Line Down to read the text under the About heading",
     ["BRAILLE LINE:  'Orca is a free, open source, flexible, extensible, and'",
      "     VISIBLE:  'Orca is a free, open source, fle', cursor=1",
-     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, extensible, and '"]))
+     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, extensible, and'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/line_nav_follow_same_page_link_3.py 
b/test/keystrokes/firefox/line_nav_follow_same_page_link_3.py
index 5b1e6d1..e2c1a6a 100644
--- a/test/keystrokes/firefox/line_nav_follow_same_page_link_3.py
+++ b/test/keystrokes/firefox/line_nav_follow_same_page_link_3.py
@@ -15,7 +15,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. Line Down to what should be the text below the About heading",
     ["BRAILLE LINE:  'Orca is a free, open source, flexible, extensible, and'",
      "     VISIBLE:  'Orca is a free, open source, fle', cursor=1",
-     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, extensible, and '"]))
+     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, extensible, and'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/line_nav_hidden_float.py 
b/test/keystrokes/firefox/line_nav_hidden_float.py
index bba7779..df25c87 100644
--- a/test/keystrokes/firefox/line_nav_hidden_float.py
+++ b/test/keystrokes/firefox/line_nav_hidden_float.py
@@ -21,7 +21,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Line Down",
     ["BRAILLE LINE:  ' 2'",
      "     VISIBLE:  ' 2', cursor=1",
-     "SPEECH OUTPUT: ' 2'"]))
+     "SPEECH OUTPUT: '2'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -37,7 +37,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Line Up",
     ["BRAILLE LINE:  ' 2'",
      "     VISIBLE:  ' 2', cursor=1",
-     "SPEECH OUTPUT: ' 2'"]))
+     "SPEECH OUTPUT: '2'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_hidden_label.py 
b/test/keystrokes/firefox/line_nav_hidden_label.py
index 707d614..2157399 100644
--- a/test/keystrokes/firefox/line_nav_hidden_label.py
+++ b/test/keystrokes/firefox/line_nav_hidden_label.py
@@ -23,8 +23,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  '< > I am a hidden label!   Check me! check box image'",
      "     VISIBLE:  '< > I am a hidden label!   Check', cursor=0",
      "SPEECH OUTPUT: 'I am a hidden label!   Check me!'",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
+     "SPEECH OUTPUT: 'check box not checked'",
      "SPEECH OUTPUT: 'image'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -50,8 +49,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  '< > I am a hidden label!   Check me! check box image'",
      "     VISIBLE:  '< > I am a hidden label!   Check', cursor=0",
      "SPEECH OUTPUT: 'I am a hidden label!   Check me!'",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'"]))
+     "SPEECH OUTPUT: 'check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_image_in_link.py 
b/test/keystrokes/firefox/line_nav_image_in_link.py
index 590bb90..b4d5e72 100644
--- a/test/keystrokes/firefox/line_nav_image_in_link.py
+++ b/test/keystrokes/firefox/line_nav_image_in_link.py
@@ -22,8 +22,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image'",
      "     VISIBLE:  'foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -31,11 +30,10 @@ sequence.append(utils.AssertPresentationAction(
     "3. Line Down",
     ["BRAILLE LINE:  ' Before Line After'",
      "     VISIBLE:  ' Before Line After', cursor=1",
-     "SPEECH OUTPUT: ' Before '",
+     "SPEECH OUTPUT: 'Before'",
      "SPEECH OUTPUT: 'Line'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' After",
-     "'"]))
+     "SPEECH OUTPUT: 'After'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -52,13 +50,11 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image'",
      "     VISIBLE:  'foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' Before '",
+     "SPEECH OUTPUT: 'image link'",
+     "SPEECH OUTPUT: 'Before'",
      "SPEECH OUTPUT: 'Line'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' After",
-     "'"]))
+     "SPEECH OUTPUT: 'After'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_imagemap.py b/test/keystrokes/firefox/line_nav_imagemap.py
index 08a4840..73350ee 100644
--- a/test/keystrokes/firefox/line_nav_imagemap.py
+++ b/test/keystrokes/firefox/line_nav_imagemap.py
@@ -24,82 +24,56 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'Test:'",
      "SPEECH OUTPUT: 'z'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'y'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'x'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'w'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'v'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'u'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 't'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 's'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'r'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'q'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'p'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'o'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'n'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'm'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'l'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'k'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'j'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'i'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'h'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'g'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'f'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'e'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'd'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'c'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'b'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'a'",
-     "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'"]))
+     "SPEECH OUTPUT: 'image map link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -118,82 +92,56 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'Test:'",
      "SPEECH OUTPUT: 'z'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'y'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'x'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'w'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'v'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'u'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 't'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 's'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'r'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'q'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'p'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'o'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'n'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'm'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'l'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'k'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'j'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'i'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'h'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'g'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'f'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'e'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'd'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'c'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'b'",
      "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'",
      "SPEECH OUTPUT: 'a'",
-     "SPEECH OUTPUT: 'image map link'",
-     "SPEECH OUTPUT: 'rect'"]))
+     "SPEECH OUTPUT: 'image map link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_images_in_links.py 
b/test/keystrokes/firefox/line_nav_images_in_links.py
index d5d678b..49f4ece 100644
--- a/test/keystrokes/firefox/line_nav_images_in_links.py
+++ b/test/keystrokes/firefox/line_nav_images_in_links.py
@@ -17,7 +17,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. Top of file",
     ["BRAILLE LINE:  'One image with alt text in a link:'",
      "     VISIBLE:  'One image with alt text in a lin', cursor=1",
-     "SPEECH OUTPUT: 'One image with alt text in a link: '"]))
+     "SPEECH OUTPUT: 'One image with alt text in a link:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -26,8 +26,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Orca logo image'",
      "     VISIBLE:  'Orca logo image', cursor=0",
      "SPEECH OUTPUT: 'Orca logo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -35,7 +34,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. Line Down",
     ["BRAILLE LINE:  'One image with title attribute in a link:'",
      "     VISIBLE:  'One image with title attribute i', cursor=1",
-     "SPEECH OUTPUT: 'One image with title attribute in a link: '"]))
+     "SPEECH OUTPUT: 'One image with title attribute in a link:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -44,8 +43,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Orca logo showing a whale holding a white cane image'",
      "     VISIBLE:  'Orca logo showing a whale holdin', cursor=0",
      "SPEECH OUTPUT: 'Orca logo showing a whale holding a white cane'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -53,7 +51,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Line Down",
     ["BRAILLE LINE:  'One image with both alt text and title attribute in a link:'",
      "     VISIBLE:  'One image with both alt text and', cursor=1",
-     "SPEECH OUTPUT: 'One image with both alt text and title attribute in a link: '"]))
+     "SPEECH OUTPUT: 'One image with both alt text and title attribute in a link:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -62,9 +60,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Orca logo image'",
      "     VISIBLE:  'Orca logo image', cursor=0",
      "SPEECH OUTPUT: 'Orca logo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'Orca logo showing a whale holding a white cane'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -72,7 +68,7 @@ sequence.append(utils.AssertPresentationAction(
     "7. Line Down",
     ["BRAILLE LINE:  'One \"useless\" image in a link:'",
      "     VISIBLE:  'One \"useless\" image in a link:', cursor=1",
-     "SPEECH OUTPUT: 'One \"useless\" image in a link: '"]))
+     "SPEECH OUTPUT: 'One \"useless\" image in a link:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -81,8 +77,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image'",
      "     VISIBLE:  'foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -90,7 +85,7 @@ sequence.append(utils.AssertPresentationAction(
     "9. Line Down",
     ["BRAILLE LINE:  'Two \"useless\" images in a link:'",
      "     VISIBLE:  'Two \"useless\" images in a link:', cursor=1",
-     "SPEECH OUTPUT: 'Two \"useless\" images in a link: '"]))
+     "SPEECH OUTPUT: 'Two \"useless\" images in a link:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -99,11 +94,9 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image foo image'",
      "     VISIBLE:  'foo image foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image link'",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -111,7 +104,7 @@ sequence.append(utils.AssertPresentationAction(
     "11. Line Down",
     ["BRAILLE LINE:  'Two \"useless\" images in a paragraph that is inside of a link:'",
      "     VISIBLE:  'Two \"useless\" images in a paragr', cursor=1",
-     "SPEECH OUTPUT: 'Two \"useless\" images in a paragraph that is inside of a link: '"]))
+     "SPEECH OUTPUT: 'Two \"useless\" images in a paragraph that is inside of a link:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -120,11 +113,9 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image foo image'",
      "     VISIBLE:  'foo image foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image link'",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -132,7 +123,7 @@ sequence.append(utils.AssertPresentationAction(
     "13. Line Down",
     ["BRAILLE LINE:  'One \"useless\" image and one \"useful\" image in a link:'",
      "     VISIBLE:  'One \"useless\" image and one \"use', cursor=1",
-     "SPEECH OUTPUT: 'One \"useless\" image and one \"useful\" image in a link: '"]))
+     "SPEECH OUTPUT: 'One \"useless\" image and one \"useful\" image in a link:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -141,11 +132,9 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Orca logo image foo image'",
      "     VISIBLE:  'Orca logo image foo image', cursor=0",
      "SPEECH OUTPUT: 'Orca logo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image link'",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -153,7 +142,7 @@ sequence.append(utils.AssertPresentationAction(
     "15. Line Down",
     ["BRAILLE LINE:  'Two \"useless\" images along with some text in a link:'",
      "     VISIBLE:  'Two \"useless\" images along with ', cursor=1",
-     "SPEECH OUTPUT: 'Two \"useless\" images along with some text in a link: '"]))
+     "SPEECH OUTPUT: 'Two \"useless\" images along with some text in a link:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -162,8 +151,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image'",
      "     VISIBLE:  'foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -181,8 +169,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image'",
      "     VISIBLE:  'foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -190,8 +177,8 @@ sequence.append(utils.AssertPresentationAction(
     "19. Line Down",
     ["BRAILLE LINE:  'Two \"useless\" images in a paragraph that is inside of a link along with text that is 
not in the paragraph: Before'",
      "     VISIBLE:  'Two \"useless\" images in a paragr', cursor=1",
-     "SPEECH OUTPUT: 'Two \"useless\" images in a paragraph that is inside of a link along with text that is 
not in the paragraph: '",
-     "SPEECH OUTPUT: 'Before '",
+     "SPEECH OUTPUT: 'Two \"useless\" images in a paragraph that is inside of a link along with text that is 
not in the paragraph:'",
+     "SPEECH OUTPUT: 'Before'",
      "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -210,11 +197,9 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image foo image'",
      "     VISIBLE:  'foo image foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image link'",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -231,7 +216,7 @@ sequence.append(utils.AssertPresentationAction(
     "23. Line Down",
     ["BRAILLE LINE:  'Two \"useless\" images and some additional text in a paragraph that is inside of a 
link along with text that is not in'",
      "     VISIBLE:  'Two \"useless\" images and some ad', cursor=1",
-     "SPEECH OUTPUT: 'Two \"useless\" images and some additional text in a paragraph that is inside of a 
link along with text that is not in '"]))
+     "SPEECH OUTPUT: 'Two \"useless\" images and some additional text in a paragraph that is inside of a 
link along with text that is not in'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -239,7 +224,7 @@ sequence.append(utils.AssertPresentationAction(
     "24. Line Down",
     ["BRAILLE LINE:  'the paragraph: Before the paragraph'",
      "     VISIBLE:  'the paragraph: Before the paragr', cursor=1",
-     "SPEECH OUTPUT: 'the paragraph: '",
+     "SPEECH OUTPUT: 'the paragraph:'",
      "SPEECH OUTPUT: 'Before the paragraph'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -250,8 +235,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image'",
      "     VISIBLE:  'foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -269,8 +253,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image'",
      "     VISIBLE:  'foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -288,8 +271,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image'",
      "     VISIBLE:  'foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -307,8 +289,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image'",
      "     VISIBLE:  'foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -316,7 +297,7 @@ sequence.append(utils.AssertPresentationAction(
     "32. Line Up",
     ["BRAILLE LINE:  'the paragraph: Before the paragraph'",
      "     VISIBLE:  'the paragraph: Before the paragr', cursor=1",
-     "SPEECH OUTPUT: 'the paragraph: '",
+     "SPEECH OUTPUT: 'the paragraph:'",
      "SPEECH OUTPUT: 'Before the paragraph'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -326,7 +307,7 @@ sequence.append(utils.AssertPresentationAction(
     "33. Line Up",
     ["BRAILLE LINE:  'Two \"useless\" images and some additional text in a paragraph that is inside of a 
link along with text that is not in'",
      "     VISIBLE:  'Two \"useless\" images and some ad', cursor=1",
-     "SPEECH OUTPUT: 'Two \"useless\" images and some additional text in a paragraph that is inside of a 
link along with text that is not in '"]))
+     "SPEECH OUTPUT: 'Two \"useless\" images and some additional text in a paragraph that is inside of a 
link along with text that is not in'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -344,11 +325,9 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image foo image'",
      "     VISIBLE:  'foo image foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image link'",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -365,8 +344,8 @@ sequence.append(utils.AssertPresentationAction(
     "37. Line Up",
     ["BRAILLE LINE:  'Two \"useless\" images in a paragraph that is inside of a link along with text that is 
not in the paragraph: Before'",
      "     VISIBLE:  'Two \"useless\" images in a paragr', cursor=1",
-     "SPEECH OUTPUT: 'Two \"useless\" images in a paragraph that is inside of a link along with text that is 
not in the paragraph: '",
-     "SPEECH OUTPUT: 'Before '",
+     "SPEECH OUTPUT: 'Two \"useless\" images in a paragraph that is inside of a link along with text that is 
not in the paragraph:'",
+     "SPEECH OUTPUT: 'Before'",
      "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -376,8 +355,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image'",
      "     VISIBLE:  'foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -395,8 +373,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image'",
      "     VISIBLE:  'foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -404,7 +381,7 @@ sequence.append(utils.AssertPresentationAction(
     "41. Line Up",
     ["BRAILLE LINE:  'Two \"useless\" images along with some text in a link:'",
      "     VISIBLE:  'Two \"useless\" images along with ', cursor=1",
-     "SPEECH OUTPUT: 'Two \"useless\" images along with some text in a link: '"]))
+     "SPEECH OUTPUT: 'Two \"useless\" images along with some text in a link:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -413,11 +390,9 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Orca logo image foo image'",
      "     VISIBLE:  'Orca logo image foo image', cursor=0",
      "SPEECH OUTPUT: 'Orca logo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image link'",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -425,7 +400,7 @@ sequence.append(utils.AssertPresentationAction(
     "43. Line Up",
     ["BRAILLE LINE:  'One \"useless\" image and one \"useful\" image in a link:'",
      "     VISIBLE:  'One \"useless\" image and one \"use', cursor=1",
-     "SPEECH OUTPUT: 'One \"useless\" image and one \"useful\" image in a link: '"]))
+     "SPEECH OUTPUT: 'One \"useless\" image and one \"useful\" image in a link:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -434,11 +409,9 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image foo image'",
      "     VISIBLE:  'foo image foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image link'",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -446,7 +419,7 @@ sequence.append(utils.AssertPresentationAction(
     "45. Line Up",
     ["BRAILLE LINE:  'Two \"useless\" images in a paragraph that is inside of a link:'",
      "     VISIBLE:  'Two \"useless\" images in a paragr', cursor=1",
-     "SPEECH OUTPUT: 'Two \"useless\" images in a paragraph that is inside of a link: '"]))
+     "SPEECH OUTPUT: 'Two \"useless\" images in a paragraph that is inside of a link:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -455,11 +428,9 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image foo image'",
      "     VISIBLE:  'foo image foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image link'",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -467,7 +438,7 @@ sequence.append(utils.AssertPresentationAction(
     "47. Line Up",
     ["BRAILLE LINE:  'Two \"useless\" images in a link:'",
      "     VISIBLE:  'Two \"useless\" images in a link:', cursor=1",
-     "SPEECH OUTPUT: 'Two \"useless\" images in a link: '"]))
+     "SPEECH OUTPUT: 'Two \"useless\" images in a link:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -476,8 +447,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image'",
      "     VISIBLE:  'foo image', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -485,7 +455,7 @@ sequence.append(utils.AssertPresentationAction(
     "49. Line Up",
     ["BRAILLE LINE:  'One \"useless\" image in a link:'",
      "     VISIBLE:  'One \"useless\" image in a link:', cursor=1",
-     "SPEECH OUTPUT: 'One \"useless\" image in a link: '"]))
+     "SPEECH OUTPUT: 'One \"useless\" image in a link:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -494,9 +464,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Orca logo image'",
      "     VISIBLE:  'Orca logo image', cursor=0",
      "SPEECH OUTPUT: 'Orca logo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'Orca logo showing a whale holding a white cane'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -504,7 +472,7 @@ sequence.append(utils.AssertPresentationAction(
     "51. Line Up",
     ["BRAILLE LINE:  'One image with both alt text and title attribute in a link:'",
      "     VISIBLE:  'One image with both alt text and', cursor=1",
-     "SPEECH OUTPUT: 'One image with both alt text and title attribute in a link: '"]))
+     "SPEECH OUTPUT: 'One image with both alt text and title attribute in a link:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -513,8 +481,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Orca logo showing a whale holding a white cane image'",
      "     VISIBLE:  'Orca logo showing a whale holdin', cursor=0",
      "SPEECH OUTPUT: 'Orca logo showing a whale holding a white cane'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -522,7 +489,7 @@ sequence.append(utils.AssertPresentationAction(
     "53. Line Up",
     ["BRAILLE LINE:  'One image with title attribute in a link:'",
      "     VISIBLE:  'One image with title attribute i', cursor=1",
-     "SPEECH OUTPUT: 'One image with title attribute in a link: '"]))
+     "SPEECH OUTPUT: 'One image with title attribute in a link:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -531,8 +498,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Orca logo image'",
      "     VISIBLE:  'Orca logo image', cursor=0",
      "SPEECH OUTPUT: 'Orca logo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -540,7 +506,7 @@ sequence.append(utils.AssertPresentationAction(
     "55. Line Up",
     ["BRAILLE LINE:  'One image with alt text in a link:'",
      "     VISIBLE:  'One image with alt text in a lin', cursor=1",
-     "SPEECH OUTPUT: 'One image with alt text in a link: '"]))
+     "SPEECH OUTPUT: 'One image with alt text in a link:'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/line_nav_lists.py b/test/keystrokes/firefox/line_nav_lists.py
index afe576f..edaddf1 100644
--- a/test/keystrokes/firefox/line_nav_lists.py
+++ b/test/keystrokes/firefox/line_nav_lists.py
@@ -22,7 +22,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Line Down",
     ["BRAILLE LINE:  'Lists are not only fun to make, they are fun to use. They help us:'",
      "     VISIBLE:  'Lists are not only fun to make, ', cursor=1",
-     "SPEECH OUTPUT: 'Lists are not only fun to make, they are fun to use. They help us: '"]))
+     "SPEECH OUTPUT: 'Lists are not only fun to make, they are fun to use. They help us:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -38,7 +38,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Line Down",
     ["BRAILLE LINE:  '2.arrange long and arbitrary lines of text into ordered lists that are pleasing to the 
eye and suggest some'",
      "     VISIBLE:  '2.arrange long and arbitrary lin', cursor=1",
-     "SPEECH OUTPUT: '2.arrange long and arbitrary lines of text into ordered lists that are pleasing to the 
eye and suggest some '"]))
+     "SPEECH OUTPUT: '2.arrange long and arbitrary lines of text into ordered lists that are pleasing to the 
eye and suggest some'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -70,7 +70,7 @@ sequence.append(utils.AssertPresentationAction(
     "8. Line Down",
     ["BRAILLE LINE:  'Your ordered lists can start at a strange number, like:'",
      "     VISIBLE:  'Your ordered lists can start at ', cursor=1",
-     "SPEECH OUTPUT: 'Your ordered lists can start at a strange number, like: '"]))
+     "SPEECH OUTPUT: 'Your ordered lists can start at a strange number, like:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -134,7 +134,7 @@ sequence.append(utils.AssertPresentationAction(
     "16. Line Up",
     ["BRAILLE LINE:  'Your ordered lists can start at a strange number, like:'",
      "     VISIBLE:  'Your ordered lists can start at ', cursor=1",
-     "SPEECH OUTPUT: 'Your ordered lists can start at a strange number, like: '"]))
+     "SPEECH OUTPUT: 'Your ordered lists can start at a strange number, like:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -166,7 +166,7 @@ sequence.append(utils.AssertPresentationAction(
     "20. Line Up",
     ["BRAILLE LINE:  '2.arrange long and arbitrary lines of text into ordered lists that are pleasing to the 
eye and suggest some'",
      "     VISIBLE:  '2.arrange long and arbitrary lin', cursor=1",
-     "SPEECH OUTPUT: '2.arrange long and arbitrary lines of text into ordered lists that are pleasing to the 
eye and suggest some '"]))
+     "SPEECH OUTPUT: '2.arrange long and arbitrary lines of text into ordered lists that are pleasing to the 
eye and suggest some'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -182,7 +182,7 @@ sequence.append(utils.AssertPresentationAction(
     "22. Line Up",
     ["BRAILLE LINE:  'Lists are not only fun to make, they are fun to use. They help us:'",
      "     VISIBLE:  'Lists are not only fun to make, ', cursor=1",
-     "SPEECH OUTPUT: 'Lists are not only fun to make, they are fun to use. They help us: '"]))
+     "SPEECH OUTPUT: 'Lists are not only fun to make, they are fun to use. They help us:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_multi_line_text.py 
b/test/keystrokes/firefox/line_nav_multi_line_text.py
index c9f0ee7..feb45fa 100644
--- a/test/keystrokes/firefox/line_nav_multi_line_text.py
+++ b/test/keystrokes/firefox/line_nav_multi_line_text.py
@@ -13,7 +13,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. Top of file",
     ["BRAILLE LINE:  'Table test'",
      "     VISIBLE:  'Table test', cursor=1",
-     "SPEECH OUTPUT: 'Table test '"]))
+     "SPEECH OUTPUT: 'Table test'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -30,8 +30,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. Line Down",
     ["BRAILLE LINE:  'foo'",
      "     VISIBLE:  'foo', cursor=1",
-     "SPEECH OUTPUT: 'foo",
-     "'"]))
+     "SPEECH OUTPUT: 'foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -47,8 +46,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Line Down",
     ["BRAILLE LINE:  'bar'",
      "     VISIBLE:  'bar', cursor=1",
-     "SPEECH OUTPUT: 'bar",
-     "'"]))
+     "SPEECH OUTPUT: 'bar'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -76,7 +74,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'This is a test'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' that is not very interesting.'"]))
+     "SPEECH OUTPUT: 'that is not very interesting.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -87,7 +85,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'But it looks like'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' a real-world example.'"]))
+     "SPEECH OUTPUT: 'a real-world example.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -98,7 +96,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'And that's'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' why this silly test is here.'"]))
+     "SPEECH OUTPUT: 'why this silly test is here.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -106,10 +104,10 @@ sequence.append(utils.AssertPresentationAction(
     "11. Line Down",
     ["BRAILLE LINE:  'So it's far more interesting than it looks.'",
      "     VISIBLE:  'So it's far more interesting tha', cursor=1",
-     "SPEECH OUTPUT: 'So it's '",
+     "SPEECH OUTPUT: 'So it's'",
      "SPEECH OUTPUT: 'far more interesting'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' than it looks.'"]))
+     "SPEECH OUTPUT: 'than it looks.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -129,7 +127,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'The thing is'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' we can't copy content.'"]))
+     "SPEECH OUTPUT: 'we can't copy content.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -140,7 +138,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'So we must'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' create silly tests.'"]))
+     "SPEECH OUTPUT: 'create silly tests.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -151,7 +149,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'Oh'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' well.'"]))
+     "SPEECH OUTPUT: 'well.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -173,7 +171,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'Oh'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' well.'"]))
+     "SPEECH OUTPUT: 'well.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -184,7 +182,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'So we must'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' create silly tests.'"]))
+     "SPEECH OUTPUT: 'create silly tests.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -195,7 +193,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'The thing is'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' we can't copy content.'"]))
+     "SPEECH OUTPUT: 'we can't copy content.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -212,10 +210,10 @@ sequence.append(utils.AssertPresentationAction(
     "21. Line Up",
     ["BRAILLE LINE:  'So it's far more interesting than it looks.'",
      "     VISIBLE:  'So it's far more interesting tha', cursor=1",
-     "SPEECH OUTPUT: 'So it's '",
+     "SPEECH OUTPUT: 'So it's'",
      "SPEECH OUTPUT: 'far more interesting'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' than it looks.'"]))
+     "SPEECH OUTPUT: 'than it looks.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -226,7 +224,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'And that's'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' why this silly test is here.'"]))
+     "SPEECH OUTPUT: 'why this silly test is here.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -237,7 +235,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'But it looks like'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' a real-world example.'"]))
+     "SPEECH OUTPUT: 'a real-world example.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -248,7 +246,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'This is a test'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' that is not very interesting.'"]))
+     "SPEECH OUTPUT: 'that is not very interesting.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -273,8 +271,7 @@ sequence.append(utils.AssertPresentationAction(
     "27. Line Up",
     ["BRAILLE LINE:  'bar'",
      "     VISIBLE:  'bar', cursor=1",
-     "SPEECH OUTPUT: 'bar",
-     "'"]))
+     "SPEECH OUTPUT: 'bar'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -290,8 +287,7 @@ sequence.append(utils.AssertPresentationAction(
     "29. Line Up",
     ["BRAILLE LINE:  'foo'",
      "     VISIBLE:  'foo', cursor=1",
-     "SPEECH OUTPUT: 'foo",
-     "'"]))
+     "SPEECH OUTPUT: 'foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -308,7 +304,7 @@ sequence.append(utils.AssertPresentationAction(
     "31. Line Up",
     ["BRAILLE LINE:  'Table test'",
      "     VISIBLE:  'Table test', cursor=1",
-     "SPEECH OUTPUT: 'Table test '"]))
+     "SPEECH OUTPUT: 'Table test'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/line_nav_nested_tables.py 
b/test/keystrokes/firefox/line_nav_nested_tables.py
index 3d8f8e5..f119af2 100644
--- a/test/keystrokes/firefox/line_nav_nested_tables.py
+++ b/test/keystrokes/firefox/line_nav_nested_tables.py
@@ -14,8 +14,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'nested-tables image'",
      "     VISIBLE:  'nested-tables image', cursor=0",
      "SPEECH OUTPUT: 'nested-tables'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -25,13 +24,13 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Campus  .  Classroom  .  Communi', cursor=1",
      "SPEECH OUTPUT: 'Campus'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '  .  '",
+     "SPEECH OUTPUT: '.'",
      "SPEECH OUTPUT: 'Classroom'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '  .  '",
+     "SPEECH OUTPUT: '.'",
      "SPEECH OUTPUT: 'Communicate'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '  .  '",
+     "SPEECH OUTPUT: '.'",
      "SPEECH OUTPUT: 'Reports'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -49,7 +48,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. line Down",
     ["BRAILLE LINE:  'Below is a list of the courses that make up your learning plan.'",
      "     VISIBLE:  'Below is a list of the courses t', cursor=1",
-     "SPEECH OUTPUT: 'Below is a list of the courses that make up your learning plan. '"]))
+     "SPEECH OUTPUT: 'Below is a list of the courses that make up your learning plan.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -301,7 +300,7 @@ sequence.append(utils.AssertPresentationAction(
     "35. line Up",
     ["BRAILLE LINE:  'Below is a list of the courses that make up your learning plan.'",
      "     VISIBLE:  'Below is a list of the courses t', cursor=1",
-     "SPEECH OUTPUT: 'Below is a list of the courses that make up your learning plan. '"]))
+     "SPEECH OUTPUT: 'Below is a list of the courses that make up your learning plan.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -319,13 +318,13 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Campus  .  Classroom  .  Communi', cursor=1",
      "SPEECH OUTPUT: 'Campus'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '  .  '",
+     "SPEECH OUTPUT: '.'",
      "SPEECH OUTPUT: 'Classroom'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '  .  '",
+     "SPEECH OUTPUT: '.'",
      "SPEECH OUTPUT: 'Communicate'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '  .  '",
+     "SPEECH OUTPUT: '.'",
      "SPEECH OUTPUT: 'Reports'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -336,8 +335,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'nested-tables image'",
      "     VISIBLE:  'nested-tables image', cursor=0",
      "SPEECH OUTPUT: 'nested-tables'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/line_nav_pre_lines.py b/test/keystrokes/firefox/line_nav_pre_lines.py
index 7f5bbf1..3d416d8 100644
--- a/test/keystrokes/firefox/line_nav_pre_lines.py
+++ b/test/keystrokes/firefox/line_nav_pre_lines.py
@@ -37,8 +37,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Line Down",
     ["BRAILLE LINE:  'line 1'",
      "     VISIBLE:  'line 1', cursor=1",
-     "SPEECH OUTPUT: 'line 1",
-     "'"]))
+     "SPEECH OUTPUT: 'line 1'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -46,8 +45,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Line Down",
     ["BRAILLE LINE:  'line 2'",
      "     VISIBLE:  'line 2', cursor=1",
-     "SPEECH OUTPUT: 'line 2",
-     "'"]))
+     "SPEECH OUTPUT: 'line 2'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -55,8 +53,7 @@ sequence.append(utils.AssertPresentationAction(
     "6. Line Down",
     ["BRAILLE LINE:  'line 3'",
      "     VISIBLE:  'line 3', cursor=1",
-     "SPEECH OUTPUT: 'line 3",
-     "'"]))
+     "SPEECH OUTPUT: 'line 3'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -64,8 +61,7 @@ sequence.append(utils.AssertPresentationAction(
     "7. Line Down",
     ["BRAILLE LINE:  'line 4'",
      "     VISIBLE:  'line 4', cursor=1",
-     "SPEECH OUTPUT: 'line 4",
-     "'"]))
+     "SPEECH OUTPUT: 'line 4'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -105,8 +101,7 @@ sequence.append(utils.AssertPresentationAction(
     "12. Line Up",
     ["BRAILLE LINE:  'line 4'",
      "     VISIBLE:  'line 4', cursor=1",
-     "SPEECH OUTPUT: 'line 4",
-     "'"]))
+     "SPEECH OUTPUT: 'line 4'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -114,8 +109,7 @@ sequence.append(utils.AssertPresentationAction(
     "13. Line Up",
     ["BRAILLE LINE:  'line 3'",
      "     VISIBLE:  'line 3', cursor=1",
-     "SPEECH OUTPUT: 'line 3",
-     "'"]))
+     "SPEECH OUTPUT: 'line 3'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -123,8 +117,7 @@ sequence.append(utils.AssertPresentationAction(
     "14. Line Up",
     ["BRAILLE LINE:  'line 2'",
      "     VISIBLE:  'line 2', cursor=1",
-     "SPEECH OUTPUT: 'line 2",
-     "'"]))
+     "SPEECH OUTPUT: 'line 2'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -132,8 +125,7 @@ sequence.append(utils.AssertPresentationAction(
     "15. Line Up",
     ["BRAILLE LINE:  'line 1'",
      "     VISIBLE:  'line 1', cursor=1",
-     "SPEECH OUTPUT: 'line 1",
-     "'"]))
+     "SPEECH OUTPUT: 'line 1'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_pre_links.py b/test/keystrokes/firefox/line_nav_pre_links.py
index 6339e70..e8c7f3c 100644
--- a/test/keystrokes/firefox/line_nav_pre_links.py
+++ b/test/keystrokes/firefox/line_nav_pre_links.py
@@ -13,7 +13,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. Top of file",
     ["BRAILLE LINE:  'Line 1'",
      "     VISIBLE:  'Line 1', cursor=1",
-     "SPEECH OUTPUT: 'Line 1 '"]))
+     "SPEECH OUTPUT: 'Line 1'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -30,7 +30,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. Line Down",
     ["BRAILLE LINE:  'Line 3'",
      "     VISIBLE:  'Line 3', cursor=1",
-     "SPEECH OUTPUT: 'Line 3 '"]))
+     "SPEECH OUTPUT: 'Line 3'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -47,7 +47,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Line Down",
     ["BRAILLE LINE:  'Line 5'",
      "     VISIBLE:  'Line 5', cursor=1",
-     "SPEECH OUTPUT: 'Line 5 '"]))
+     "SPEECH OUTPUT: 'Line 5'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -72,7 +72,7 @@ sequence.append(utils.AssertPresentationAction(
     "8. Line Up",
     ["BRAILLE LINE:  'Line 3'",
      "     VISIBLE:  'Line 3', cursor=1",
-     "SPEECH OUTPUT: 'Line 3 '"]))
+     "SPEECH OUTPUT: 'Line 3'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -97,7 +97,7 @@ sequence.append(utils.AssertPresentationAction(
     "11. Line Up",
     ["BRAILLE LINE:  'Line 1'",
      "     VISIBLE:  'Line 1', cursor=1",
-     "SPEECH OUTPUT: 'Line 1 '"]))
+     "SPEECH OUTPUT: 'Line 1'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/line_nav_simple_form.py b/test/keystrokes/firefox/line_nav_simple_form.py
index 95b2e50..a103ed0 100644
--- a/test/keystrokes/firefox/line_nav_simple_form.py
+++ b/test/keystrokes/firefox/line_nav_simple_form.py
@@ -15,7 +15,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. line Down",
     ["BRAILLE LINE:  'Magic disappearing text trick: tab to me and I disappear $l'",
      "     VISIBLE:  'Magic disappearing text trick: t', cursor=1",
-     "SPEECH OUTPUT: 'Magic disappearing text trick: '",
+     "SPEECH OUTPUT: 'Magic disappearing text trick:'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'tab to me and I disappear'"]))
 
@@ -25,7 +25,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. line Down",
     ["BRAILLE LINE:  'Tell me a secret:  $l'",
      "     VISIBLE:  'Tell me a secret:  $l', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a secret: '",
+     "SPEECH OUTPUT: 'Tell me a secret:'",
      "SPEECH OUTPUT: 'password text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -34,8 +34,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. line Down",
     ["BRAILLE LINE:  'Tell me a little more about yourself:'",
      "     VISIBLE:  'Tell me a little more about your', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a little more about yourself:",
-     "'"]))
+     "SPEECH OUTPUT: 'Tell me a little more about yourself:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -52,7 +51,6 @@ sequence.append(utils.AssertPresentationAction(
     "5. line Down",
     ["BRAILLE LINE:  'to swing from trees and eat bananas.   $l'",
      "     VISIBLE:  'to swing from trees and eat bana', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a little more about yourself:'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'to swing from trees and eat bananas.  '"]))
 
@@ -62,7 +60,6 @@ sequence.append(utils.AssertPresentationAction(
     "6. line Down",
     ["BRAILLE LINE:  'I've recently taken up typing and plan  $l'",
      "     VISIBLE:  'I've recently taken up typing an', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a little more about yourself:'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'I've recently taken up typing and plan '"]))
 
@@ -72,9 +69,9 @@ sequence.append(utils.AssertPresentationAction(
     "7. line Down",
     ["BRAILLE LINE:  'to write my memoirs. $l'",
      "     VISIBLE:  'to write my memoirs. $l', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a little more about yourself:'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'to write my memoirs.'"]))
+     "SPEECH OUTPUT: 'to write my memoirs.",
+     "'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -82,7 +79,6 @@ sequence.append(utils.AssertPresentationAction(
     "8. line Down",
     ["BRAILLE LINE:  '      $l'",
      "     VISIBLE:  '      $l', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a little more about yourself:'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: '     '"]))
 
@@ -92,16 +88,13 @@ sequence.append(utils.AssertPresentationAction(
     "9. line Down",
     ["BRAILLE LINE:  'Check one or more: < > Red check box < > Blue check box < > Green check box'",
      "     VISIBLE:  'Check one or more: < > Red check', cursor=1",
-     "SPEECH OUTPUT: 'Check one or more: '",
+     "SPEECH OUTPUT: 'Check one or more:'",
      "SPEECH OUTPUT: 'Red'",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
+     "SPEECH OUTPUT: 'check box not checked'",
      "SPEECH OUTPUT: 'Blue'",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
+     "SPEECH OUTPUT: 'check box not checked'",
      "SPEECH OUTPUT: 'Green'",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'"]))
+     "SPEECH OUTPUT: 'check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -109,7 +102,7 @@ sequence.append(utils.AssertPresentationAction(
     "10. line Down",
     ["BRAILLE LINE:  'Make a selection: Water combo box'",
      "     VISIBLE:  'Make a selection: Water combo bo', cursor=1",
-     "SPEECH OUTPUT: 'Make a selection: '",
+     "SPEECH OUTPUT: 'Make a selection:'",
      "SPEECH OUTPUT: 'Water'",
      "SPEECH OUTPUT: 'combo box'"]))
 
@@ -119,8 +112,7 @@ sequence.append(utils.AssertPresentationAction(
     "11. line Down",
     ["BRAILLE LINE:  'Which sports do you like?'",
      "     VISIBLE:  'Which sports do you like?', cursor=1",
-     "SPEECH OUTPUT: 'Which sports do you like?",
-     "'"]))
+     "SPEECH OUTPUT: 'Which sports do you like?'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -128,10 +120,8 @@ sequence.append(utils.AssertPresentationAction(
     "12. line Down",
     ["BRAILLE LINE:  'Hockey list box'",
      "     VISIBLE:  'Hockey list box', cursor=0",
-     "SPEECH OUTPUT: 'Which sports do you like?",
      "SPEECH OUTPUT: 'Hockey'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 4 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 4 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -148,13 +138,11 @@ sequence.append(utils.AssertPresentationAction(
     "14. line Down",
     ["BRAILLE LINE:  'Ain't he handsome (please say yes)? & y radio button Yes & y radio button No'",
      "     VISIBLE:  'Ain't he handsome (please say ye', cursor=1",
-     "SPEECH OUTPUT: 'Ain't he handsome (please say yes)? '",
-     "SPEECH OUTPUT: 'not selected'",
-     "SPEECH OUTPUT: 'radio button'",
-     "SPEECH OUTPUT: 'Yes '",
-     "SPEECH OUTPUT: 'not selected'",
-     "SPEECH OUTPUT: 'radio button'",
-     "SPEECH OUTPUT: 'No '"]))
+     "SPEECH OUTPUT: 'Ain't he handsome (please say yes)?'",
+     "SPEECH OUTPUT: 'not selected radio button'",
+     "SPEECH OUTPUT: 'Yes'",
+     "SPEECH OUTPUT: 'not selected radio button'",
+     "SPEECH OUTPUT: 'No'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -171,10 +159,8 @@ sequence.append(utils.AssertPresentationAction(
     "16. line Up",
     ["BRAILLE LINE:  'Hockey list box'",
      "     VISIBLE:  'Hockey list box', cursor=0",
-     "SPEECH OUTPUT: 'Which sports do you like?",
      "SPEECH OUTPUT: 'Hockey'",
-     "SPEECH OUTPUT: 'multi-select'",
-     "SPEECH OUTPUT: 'List with 4 items'"]))
+     "SPEECH OUTPUT: 'multi-select List with 4 items'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -182,8 +168,7 @@ sequence.append(utils.AssertPresentationAction(
     "17. line Up",
     ["BRAILLE LINE:  'Which sports do you like?'",
      "     VISIBLE:  'Which sports do you like?', cursor=1",
-     "SPEECH OUTPUT: 'Which sports do you like?",
-     "'"]))
+     "SPEECH OUTPUT: 'Which sports do you like?'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -191,7 +176,7 @@ sequence.append(utils.AssertPresentationAction(
     "18. line Up",
     ["BRAILLE LINE:  'Make a selection: Water combo box'",
      "     VISIBLE:  'Make a selection: Water combo bo', cursor=1",
-     "SPEECH OUTPUT: 'Make a selection: '",
+     "SPEECH OUTPUT: 'Make a selection:'",
      "SPEECH OUTPUT: 'Water'",
      "SPEECH OUTPUT: 'combo box'"]))
 
@@ -201,16 +186,13 @@ sequence.append(utils.AssertPresentationAction(
     "19. line Up",
     ["BRAILLE LINE:  'Check one or more: < > Red check box < > Blue check box < > Green check box'",
      "     VISIBLE:  'Check one or more: < > Red check', cursor=1",
-     "SPEECH OUTPUT: 'Check one or more: '",
+     "SPEECH OUTPUT: 'Check one or more:'",
      "SPEECH OUTPUT: 'Red'",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
+     "SPEECH OUTPUT: 'check box not checked'",
      "SPEECH OUTPUT: 'Blue'",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'",
+     "SPEECH OUTPUT: 'check box not checked'",
      "SPEECH OUTPUT: 'Green'",
-     "SPEECH OUTPUT: 'check box'",
-     "SPEECH OUTPUT: 'not checked'"]))
+     "SPEECH OUTPUT: 'check box not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -218,7 +200,6 @@ sequence.append(utils.AssertPresentationAction(
     "20. line Up",
     ["BRAILLE LINE:  '      $l'",
      "     VISIBLE:  '      $l', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a little more about yourself:'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: '     '"]))
 
@@ -228,9 +209,9 @@ sequence.append(utils.AssertPresentationAction(
     "21. line Up",
     ["BRAILLE LINE:  'to write my memoirs. $l'",
      "     VISIBLE:  'to write my memoirs. $l', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a little more about yourself:'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'to write my memoirs.'"]))
+     "SPEECH OUTPUT: 'to write my memoirs.",
+     "'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -238,7 +219,6 @@ sequence.append(utils.AssertPresentationAction(
     "22. line Up",
     ["BRAILLE LINE:  'I've recently taken up typing and plan  $l'",
      "     VISIBLE:  'I've recently taken up typing an', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a little more about yourself:'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'I've recently taken up typing and plan '"]))
 
@@ -248,7 +228,6 @@ sequence.append(utils.AssertPresentationAction(
     "23. line Up",
     ["BRAILLE LINE:  'to swing from trees and eat bananas.   $l'",
      "     VISIBLE:  'to swing from trees and eat bana', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a little more about yourself:'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'to swing from trees and eat bananas.  '"]))
 
@@ -258,7 +237,6 @@ sequence.append(utils.AssertPresentationAction(
     "24. line Up",
     ["BRAILLE LINE:  'I am a monkey with a long tail.  I like  $l'",
      "     VISIBLE:  'I am a monkey with a long tail. ', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a little more about yourself:'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'I am a monkey with a long tail.  I like '"]))
 
@@ -268,8 +246,7 @@ sequence.append(utils.AssertPresentationAction(
     "25. line Up",
     ["BRAILLE LINE:  'Tell me a little more about yourself:'",
      "     VISIBLE:  'Tell me a little more about your', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a little more about yourself:",
-     "'"]))
+     "SPEECH OUTPUT: 'Tell me a little more about yourself:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -277,7 +254,7 @@ sequence.append(utils.AssertPresentationAction(
     "26. line Up",
     ["BRAILLE LINE:  'Tell me a secret:  $l'",
      "     VISIBLE:  'Tell me a secret:  $l', cursor=1",
-     "SPEECH OUTPUT: 'Tell me a secret: '",
+     "SPEECH OUTPUT: 'Tell me a secret:'",
      "SPEECH OUTPUT: 'password text'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -286,7 +263,7 @@ sequence.append(utils.AssertPresentationAction(
     "27. line Up",
     ["BRAILLE LINE:  'Magic disappearing text trick: tab to me and I disappear $l'",
      "     VISIBLE:  'Magic disappearing text trick: t', cursor=1",
-     "SPEECH OUTPUT: 'Magic disappearing text trick: '",
+     "SPEECH OUTPUT: 'Magic disappearing text trick:'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'tab to me and I disappear'"]))
 
@@ -296,7 +273,7 @@ sequence.append(utils.AssertPresentationAction(
     "28. line Up",
     ["BRAILLE LINE:  'Type something here:  $l'",
      "     VISIBLE:  'Type something here:  $l', cursor=1",
-     "SPEECH OUTPUT: 'Type something here: '",
+     "SPEECH OUTPUT: 'Type something here:'",
      "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(utils.AssertionSummaryAction())
diff --git a/test/keystrokes/firefox/line_nav_slash_test.py b/test/keystrokes/firefox/line_nav_slash_test.py
index 203292c..bed15c0 100644
--- a/test/keystrokes/firefox/line_nav_slash_test.py
+++ b/test/keystrokes/firefox/line_nav_slash_test.py
@@ -106,9 +106,7 @@ sequence.append(utils.AssertPresentationAction(
     "10. Line Down",
     ["BRAILLE LINE:  'What is your favorite poison?'",
      "     VISIBLE:  'What is your favorite poison?', cursor=1",
-     "SPEECH OUTPUT: 'What is your favorite poison?",
-     "'",
-     "SPEECH OUTPUT: 'panel'"]))
+     "SPEECH OUTPUT: 'What is your favorite poison?"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -116,10 +114,8 @@ sequence.append(utils.AssertPresentationAction(
     "11. Line Down",
     ["BRAILLE LINE:  '& y radio button Some polls'",
      "     VISIBLE:  '& y radio button Some polls', cursor=0",
-     "SPEECH OUTPUT: 'not selected'",
-     "SPEECH OUTPUT: 'radio button'",
-     "SPEECH OUTPUT: 'Some polls '",
-     "SPEECH OUTPUT: 'panel'"]))
+     "SPEECH OUTPUT: 'not selected radio button'",
+     "SPEECH OUTPUT: 'Some polls'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -135,14 +131,10 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "13. Line Up",
-    ["KNOWN ISSUE: We should not be re-presenting the panel",
-     "BRAILLE LINE:  '& y radio button Some polls'",
+    ["BRAILLE LINE:  '& y radio button Some polls'",
      "     VISIBLE:  '& y radio button Some polls', cursor=0",
-     "SPEECH OUTPUT: 'Some polls'",
-     "SPEECH OUTPUT: 'not selected'",
-     "SPEECH OUTPUT: 'radio button'",
-     "SPEECH OUTPUT: 'Some polls '",
-     "SPEECH OUTPUT: 'panel'"]))
+     "SPEECH OUTPUT: 'not selected radio button'",
+     "SPEECH OUTPUT: 'Some polls'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -150,9 +142,7 @@ sequence.append(utils.AssertPresentationAction(
     "14. Line Up",
     ["BRAILLE LINE:  'What is your favorite poison?'",
      "     VISIBLE:  'What is your favorite poison?', cursor=1",
-     "SPEECH OUTPUT: 'What is your favorite poison?",
-     "'",
-     "SPEECH OUTPUT: 'panel'"]))
+     "SPEECH OUTPUT: 'What is your favorite poison?"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_sun_java.py b/test/keystrokes/firefox/line_nav_sun_java.py
index 88355c1..dbee0d2 100644
--- a/test/keystrokes/firefox/line_nav_sun_java.py
+++ b/test/keystrokes/firefox/line_nav_sun_java.py
@@ -15,9 +15,9 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "1. Line Down",
-    ["BRAILLE LINE:  '\xbb\xa0search tips $l Submit Search push button'",
-     "     VISIBLE:  '\xbb\xa0search tips $l Submit Search p', cursor=1",
-     "SPEECH OUTPUT: '\xbb\xa0'",
+    ["BRAILLE LINE:  '\xbb\xa0search tips Search $l Submit Search push button'",
+     "     VISIBLE:  '\xbb\xa0search tips Search $l Submit S', cursor=1",
+     "SPEECH OUTPUT: '\xbb'",
      "SPEECH OUTPUT: 'search tips'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'entry'",
@@ -32,6 +32,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Home Page Sun Developer Network'",
      "     VISIBLE:  'Home Page Sun Developer Network', cursor=1",
      "SPEECH OUTPUT: 'Home Page'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Sun Developer Network'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -182,10 +183,10 @@ sequence.append(utils.AssertPresentationAction(
     "18. Line Down",
     ["BRAILLE LINE:  'See supported System Configurations for information about supported platforms, 
operating systems, desktop managers, and browsers.'",
      "     VISIBLE:  'See supported System Configurati', cursor=1",
-     "SPEECH OUTPUT: 'See supported '",
+     "SPEECH OUTPUT: 'See supported'",
      "SPEECH OUTPUT: 'System Configurations'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for information about supported platforms, operating systems, desktop managers, and 
browsers. '"]))
+     "SPEECH OUTPUT: 'for information about supported platforms, operating systems, desktop managers, and 
browsers.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -193,10 +194,10 @@ sequence.append(utils.AssertPresentationAction(
     "19. Line Down",
     ["BRAILLE LINE:  'For issues, see the Troubleshooting section below.'",
      "     VISIBLE:  'For issues, see the Troubleshoot', cursor=1",
-     "SPEECH OUTPUT: 'For issues, see the '",
+     "SPEECH OUTPUT: 'For issues, see the'",
      "SPEECH OUTPUT: 'Troubleshooting'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' section below. '"]))
+     "SPEECH OUTPUT: 'section below.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -213,7 +214,7 @@ sequence.append(utils.AssertPresentationAction(
     "21. Line Down",
     ["BRAILLE LINE:  'Installing the JDK automatically installs the Java Plugin and Java Web Start. Note 
that the Java Plugin needs to be registered with the browser. After installing the JDK, refer to:'",
      "     VISIBLE:  'Installing the JDK automatically', cursor=1",
-     "SPEECH OUTPUT: 'Installing the JDK automatically installs the Java Plugin and Java Web Start. Note 
that the Java Plugin needs to be registered with the browser. After installing the JDK, refer to: '"]))
+     "SPEECH OUTPUT: 'Installing the JDK automatically installs the Java Plugin and Java Web Start. Note 
that the Java Plugin needs to be registered with the browser. After installing the JDK, refer to:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -241,7 +242,7 @@ sequence.append(utils.AssertPresentationAction(
     "24. Line Down",
     ["BRAILLE LINE:  'Install formats - This version of the JDK is available in two installation formats.'",
      "     VISIBLE:  'Install formats - This version o', cursor=1",
-     "SPEECH OUTPUT: 'Install formats - This version of the JDK is available in two installation formats. 
'"]))
+     "SPEECH OUTPUT: 'Install formats - This version of the JDK is available in two installation 
formats.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -249,7 +250,7 @@ sequence.append(utils.AssertPresentationAction(
     "25. Line Down",
     ["BRAILLE LINE:  '\u2022Self-extracting Binary File - This file can be used to install the JDK in a 
location chosen by the user. This one can be installed by anyone (not only root users), and it can'",
      "     VISIBLE:  '\u2022Self-extracting Binary File - T', cursor=1",
-     "SPEECH OUTPUT: '\u2022Self-extracting Binary File - This file can be used to install the JDK in a 
location chosen by the user. This one can be installed by anyone (not only root users), and it can '"]))
+     "SPEECH OUTPUT: '\u2022Self-extracting Binary File - This file can be used to install the JDK in a 
location chosen by the user. This one can be installed by anyone (not only root users), and it can'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -257,7 +258,7 @@ sequence.append(utils.AssertPresentationAction(
     "26. Line Down",
     ["BRAILLE LINE:  'easily be installed in any location. As long as you are not root user, it cannot 
displace the system version of the Java platform suppled by Linux. To use this file, see'",
      "     VISIBLE:  'easily be installed in any locat', cursor=1",
-     "SPEECH OUTPUT: 'easily be installed in any location. As long as you are not root user, it cannot 
displace the system version of the Java platform suppled by Linux. To use this file, see '"]))
+     "SPEECH OUTPUT: 'easily be installed in any location. As long as you are not root user, it cannot 
displace the system version of the Java platform suppled by Linux. To use this file, see'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -267,7 +268,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Installation of Self-Extracting ', cursor=1",
      "SPEECH OUTPUT: 'Installation of Self-Extracting Binary'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' below. '"]))
+     "SPEECH OUTPUT: 'below.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -275,7 +276,7 @@ sequence.append(utils.AssertPresentationAction(
     "28. Line Down",
     ["BRAILLE LINE:  '\u2022RPM Packages - A rpm.bin file containing RPM packages, installed with the rpm 
utility. Requires root access to install. RPM packages are the recommended method for'",
      "     VISIBLE:  '\u2022RPM Packages - A rpm.bin file c', cursor=1",
-     "SPEECH OUTPUT: '\u2022RPM Packages - A rpm.bin file containing RPM packages, installed with the rpm 
utility. Requires root access to install. RPM packages are the recommended method for '"]))
+     "SPEECH OUTPUT: '\u2022RPM Packages - A rpm.bin file containing RPM packages, installed with the rpm 
utility. Requires root access to install. RPM packages are the recommended method for'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -283,10 +284,10 @@ sequence.append(utils.AssertPresentationAction(
     "29. Line Down",
     ["BRAILLE LINE:  'installation on Linux. To use this bundle, see Installation of RPM File below.'",
      "     VISIBLE:  'installation on Linux. To use th', cursor=1",
-     "SPEECH OUTPUT: 'installation on Linux. To use this bundle, see '",
+     "SPEECH OUTPUT: 'installation on Linux. To use this bundle, see'",
      "SPEECH OUTPUT: 'Installation of RPM File'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' below. '"]))
+     "SPEECH OUTPUT: 'below.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -294,7 +295,7 @@ sequence.append(utils.AssertPresentationAction(
     "30. Line Down",
     ["BRAILLE LINE:  'Choose the install format that is most suitable to your needs.'",
      "     VISIBLE:  'Choose the install format that i', cursor=1",
-     "SPEECH OUTPUT: 'Choose the install format that is most suitable to your needs. '"]))
+     "SPEECH OUTPUT: 'Choose the install format that is most suitable to your needs.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -302,7 +303,7 @@ sequence.append(utils.AssertPresentationAction(
     "31. Line Down",
     ["BRAILLE LINE:  'Note: For any text on this page containing the following notation, you must substitute 
the appropriate JDK update version number for the notation.'",
      "     VISIBLE:  'Note: For any text on this page ', cursor=1",
-     "SPEECH OUTPUT: 'Note: For any text on this page containing the following notation, you must substitute 
the appropriate JDK update version number for the notation. '"]))
+     "SPEECH OUTPUT: 'Note: For any text on this page containing the following notation, you must substitute 
the appropriate JDK update version number for the notation.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -310,8 +311,7 @@ sequence.append(utils.AssertPresentationAction(
     "32. Line Down",
     ["BRAILLE LINE:  '<version>'",
      "     VISIBLE:  '<version>', cursor=1",
-     "SPEECH OUTPUT: '<version>",
-     "'"]))
+     "SPEECH OUTPUT: '<version>'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -327,7 +327,7 @@ sequence.append(utils.AssertPresentationAction(
     "34. Line Down",
     ["BRAILLE LINE:  'For example, if you were downloading update 6_01, the following command:'",
      "     VISIBLE:  'For example, if you were downloa', cursor=1",
-     "SPEECH OUTPUT: 'For example, if you were downloading update 6_01, the following command: '"]))
+     "SPEECH OUTPUT: 'For example, if you were downloading update 6_01, the following command:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -335,8 +335,7 @@ sequence.append(utils.AssertPresentationAction(
     "35. Line Down",
     ["BRAILLE LINE:  './jdk-6<version>-linux-i586.bin'",
      "     VISIBLE:  './jdk-6<version>-linux-i586.bin', cursor=1",
-     "SPEECH OUTPUT: './jdk-6<version>-linux-i586.bin",
-     "'"]))
+     "SPEECH OUTPUT: './jdk-6<version>-linux-i586.bin'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -352,7 +351,7 @@ sequence.append(utils.AssertPresentationAction(
     "37. Line Down",
     ["BRAILLE LINE:  'would become:'",
      "     VISIBLE:  'would become:', cursor=1",
-     "SPEECH OUTPUT: 'would become: '"]))
+     "SPEECH OUTPUT: 'would become:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -360,8 +359,7 @@ sequence.append(utils.AssertPresentationAction(
     "38. Line Down",
     ["BRAILLE LINE:  './jdk-6u1-linux-i586.bin'",
      "     VISIBLE:  './jdk-6u1-linux-i586.bin', cursor=1",
-     "SPEECH OUTPUT: './jdk-6u1-linux-i586.bin",
-     "'"]))
+     "SPEECH OUTPUT: './jdk-6u1-linux-i586.bin'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -386,10 +384,10 @@ sequence.append(utils.AssertPresentationAction(
     "41. Line Down",
     ["BRAILLE LINE:  'Use these instructions if you want to use the self-extracting binary file to install 
the JDK. If you want to install RPM packages instead, see Installation of RPM File.'",
      "     VISIBLE:  'Use these instructions if you wa', cursor=1",
-     "SPEECH OUTPUT: 'Use these instructions if you want to use the self-extracting binary file to install 
the JDK. If you want to install RPM packages instead, see '",
+     "SPEECH OUTPUT: 'Use these instructions if you want to use the self-extracting binary file to install 
the JDK. If you want to install RPM packages instead, see'",
      "SPEECH OUTPUT: 'Installation of RPM File'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '. '"]))
+     "SPEECH OUTPUT: '.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -405,7 +403,7 @@ sequence.append(utils.AssertPresentationAction(
     "43. Line Down",
     ["BRAILLE LINE:  'You can download to any directory you choose; it does not have to be the directory 
where you want to install the JDK.'",
      "     VISIBLE:  'You can download to any director', cursor=1",
-     "SPEECH OUTPUT: 'You can download to any directory you choose; it does not have to be the directory 
where you want to install the JDK. '"]))
+     "SPEECH OUTPUT: 'You can download to any directory you choose; it does not have to be the directory 
where you want to install the JDK.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -413,7 +411,7 @@ sequence.append(utils.AssertPresentationAction(
     "44. Line Down",
     ["BRAILLE LINE:  'Before you download the file, notice its byte size provided on the download page on 
the web site. Once the download has completed, compare that file size to the'",
      "     VISIBLE:  'Before you download the file, no', cursor=1",
-     "SPEECH OUTPUT: 'Before you download the file, notice its byte size provided on the download page on 
the web site. Once the download has completed, compare that file size to the '"]))
+     "SPEECH OUTPUT: 'Before you download the file, notice its byte size provided on the download page on 
the web site. Once the download has completed, compare that file size to the'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -421,7 +419,7 @@ sequence.append(utils.AssertPresentationAction(
     "45. Line Down",
     ["BRAILLE LINE:  'size of the downloaded file to make sure they are equal.'",
      "     VISIBLE:  'size of the downloaded file to m', cursor=1",
-     "SPEECH OUTPUT: 'size of the downloaded file to make sure they are equal. '"]))
+     "SPEECH OUTPUT: 'size of the downloaded file to make sure they are equal.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -429,7 +427,7 @@ sequence.append(utils.AssertPresentationAction(
     "46. Line Down",
     ["BRAILLE LINE:  '2. Make sure that execute permissions are set on the self-extracting binary.'",
      "     VISIBLE:  '2. Make sure that execute permis', cursor=1",
-     "SPEECH OUTPUT: '2. Make sure that execute permissions are set on the self-extracting binary. '"]))
+     "SPEECH OUTPUT: '2. Make sure that execute permissions are set on the self-extracting binary.'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/line_nav_table_cell_links.py 
b/test/keystrokes/firefox/line_nav_table_cell_links.py
index 4c63f17..be1cd40 100644
--- a/test/keystrokes/firefox/line_nav_table_cell_links.py
+++ b/test/keystrokes/firefox/line_nav_table_cell_links.py
@@ -21,8 +21,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Line Down",
     ["BRAILLE LINE:  'HTML Tags'",
      "     VISIBLE:  'HTML Tags', cursor=1",
-     "SPEECH OUTPUT: 'HTML Tags",
-     "'"]))
+     "SPEECH OUTPUT: 'HTML Tags'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -119,8 +118,7 @@ sequence.append(utils.AssertPresentationAction(
     "13. Line Up",
     ["BRAILLE LINE:  'HTML Tags'",
      "     VISIBLE:  'HTML Tags', cursor=1",
-     "SPEECH OUTPUT: 'HTML Tags",
-     "'"]))
+     "SPEECH OUTPUT: 'HTML Tags'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/line_nav_twitter_bug.py b/test/keystrokes/firefox/line_nav_twitter_bug.py
index 0a15f55..7968f16 100644
--- a/test/keystrokes/firefox/line_nav_twitter_bug.py
+++ b/test/keystrokes/firefox/line_nav_twitter_bug.py
@@ -22,8 +22,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image h2'",
      "     VISIBLE:  'foo image h2', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image link'",
      "SPEECH OUTPUT: 'heading level 2'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -59,8 +58,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'foo image h2'",
      "     VISIBLE:  'foo image h2', cursor=0",
      "SPEECH OUTPUT: 'foo'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image link'",
      "SPEECH OUTPUT: 'heading level 2'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/line_nav_wiki_down.py b/test/keystrokes/firefox/line_nav_wiki_down.py
index 44bfcf0..9fc63b7 100644
--- a/test/keystrokes/firefox/line_nav_wiki_down.py
+++ b/test/keystrokes/firefox/line_nav_wiki_down.py
@@ -35,18 +35,16 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "2. Line Down",
-    ["BRAILLE LINE:  'live.gnome.org  h1 $l Titles push button Text push button'",
-     "     VISIBLE:  'live.gnome.org  h1 $l Titles pus', cursor=1",
-     "SPEECH OUTPUT: 'live.gnome.org '",
+    ["BRAILLE LINE:  'live.gnome.org  h1 Search $l Titles push button Text push button'",
+     "     VISIBLE:  'live.gnome.org  h1 Search $l Tit', cursor=1",
+     "SPEECH OUTPUT: 'live.gnome.org'",
      "SPEECH OUTPUT: 'heading level 1'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'Search'",
      "SPEECH OUTPUT: 'Titles'",
-     "SPEECH OUTPUT: 'push button'",
-     "SPEECH OUTPUT: 'grayed'",
+     "SPEECH OUTPUT: 'push button grayed'",
      "SPEECH OUTPUT: 'Text'",
-     "SPEECH OUTPUT: 'push button'",
-     "SPEECH OUTPUT: 'grayed'"]))
+     "SPEECH OUTPUT: 'push button grayed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -82,19 +80,19 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Home | Download/Installation | C', cursor=1",
      "SPEECH OUTPUT: 'Home'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Download/Installation'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Configuration/Use'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Accessible Applications'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Mailing List'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ' ('"]))
+     "SPEECH OUTPUT: '('"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -104,10 +102,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Archives\) | FAQ | DocIndex', cursor=1",
      "SPEECH OUTPUT: 'Archives'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ') | '",
+     "SPEECH OUTPUT: ') |'",
      "SPEECH OUTPUT: 'FAQ'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'DocIndex'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -126,7 +124,8 @@ sequence.append(utils.AssertPresentationAction(
     "8. Line Down",
     ["BRAILLE LINE:  'Orca Logo'",
      "     VISIBLE:  'Orca Logo', cursor=1",
-     "SPEECH OUTPUT: 'Orca Logo'"]))
+     "SPEECH OUTPUT: 'Orca Logo'",
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -134,7 +133,7 @@ sequence.append(utils.AssertPresentationAction(
     "9. Line Down",
     ["BRAILLE LINE:  'HOT HOT HOT: Notes on access to Firefox 3.0'",
      "     VISIBLE:  'HOT HOT HOT: Notes on access to ', cursor=1",
-     "SPEECH OUTPUT: 'HOT HOT HOT: Notes on '",
+     "SPEECH OUTPUT: 'HOT HOT HOT: Notes on'",
      "SPEECH OUTPUT: 'access to Firefox 3.0'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -241,7 +240,7 @@ sequence.append(utils.AssertPresentationAction(
     "20. Line Down",
     ["BRAILLE LINE:  'Orca is a free, open source, flexible, extensible, and'",
      "     VISIBLE:  'Orca is a free, open source, fle', cursor=1",
-     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, extensible, and '"]))
+     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, extensible, and'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -249,7 +248,7 @@ sequence.append(utils.AssertPresentationAction(
     "21. Line Down",
     ["BRAILLE LINE:  'powerful assistive technology for people with visual'",
      "     VISIBLE:  'powerful assistive technology fo', cursor=1",
-     "SPEECH OUTPUT: 'powerful assistive technology for people with visual '"]))
+     "SPEECH OUTPUT: 'powerful assistive technology for people with visual'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -257,7 +256,7 @@ sequence.append(utils.AssertPresentationAction(
     "22. Line Down",
     ["BRAILLE LINE:  'impairments. Using various combinations of speech'",
      "     VISIBLE:  'impairments. Using various combi', cursor=1",
-     "SPEECH OUTPUT: 'impairments. Using various combinations of speech '"]))
+     "SPEECH OUTPUT: 'impairments. Using various combinations of speech'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -265,7 +264,7 @@ sequence.append(utils.AssertPresentationAction(
     "23. Line Down",
     ["BRAILLE LINE:  'synthesis, braille, and magnification, Orca helps provide'",
      "     VISIBLE:  'synthesis, braille, and magnific', cursor=1",
-     "SPEECH OUTPUT: 'synthesis, braille, and magnification, Orca helps provide '"]))
+     "SPEECH OUTPUT: 'synthesis, braille, and magnification, Orca helps provide'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -273,7 +272,7 @@ sequence.append(utils.AssertPresentationAction(
     "24. Line Down",
     ["BRAILLE LINE:  'access to applications and toolkits that support the AT-SPI'",
      "     VISIBLE:  'access to applications and toolk', cursor=1",
-     "SPEECH OUTPUT: 'access to applications and toolkits that support the AT-SPI '"]))
+     "SPEECH OUTPUT: 'access to applications and toolkits that support the AT-SPI'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -281,7 +280,7 @@ sequence.append(utils.AssertPresentationAction(
     "25. Line Down",
     ["BRAILLE LINE:  '(e.g., the GNOME desktop). The development of Orca has'",
      "     VISIBLE:  '(e.g., the GNOME desktop). The d', cursor=1",
-     "SPEECH OUTPUT: '(e.g., the GNOME desktop). The development of Orca has '"]))
+     "SPEECH OUTPUT: '(e.g., the GNOME desktop). The development of Orca has'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -289,8 +288,8 @@ sequence.append(utils.AssertPresentationAction(
     "26. Line Down",
     ["BRAILLE LINE:  'been led by the Accessibility Program Office of Sun'",
      "     VISIBLE:  'been led by the Accessibility Pr', cursor=1",
-     "SPEECH OUTPUT: 'been led by the '",
-     "SPEECH OUTPUT: 'Accessibility Program Office of Sun '",
+     "SPEECH OUTPUT: 'been led by the'",
+     "SPEECH OUTPUT: 'Accessibility Program Office of Sun'",
      "SPEECH OUTPUT: 'link image'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -301,8 +300,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Microsystems, Inc. with contribu', cursor=1",
      "SPEECH OUTPUT: 'Microsystems, Inc.'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: 'with '",
-     "SPEECH OUTPUT: 'contributions from many '",
+     "SPEECH OUTPUT: 'with'",
+     "SPEECH OUTPUT: 'contributions from many'",
      "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -313,7 +312,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'community members.', cursor=1",
      "SPEECH OUTPUT: 'community members'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '. '"]))
+     "SPEECH OUTPUT: '.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -321,7 +320,7 @@ sequence.append(utils.AssertPresentationAction(
     "29. Line Down",
     ["BRAILLE LINE:  'The complete list of work to do, including bugs and feature requests, along with 
known'",
      "     VISIBLE:  'The complete list of work to do,', cursor=1",
-     "SPEECH OUTPUT: 'The complete list of work to do, including bugs and feature requests, along with known 
'"]))
+     "SPEECH OUTPUT: 'The complete list of work to do, including bugs and feature requests, along with 
known'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -329,11 +328,11 @@ sequence.append(utils.AssertPresentationAction(
     "30. Line Down",
     ["BRAILLE LINE:  'problems in other components, is maintained in Bugzilla \(please see our notes on how 
we'",
      "     VISIBLE:  'problems in other components, is', cursor=1",
-     "SPEECH OUTPUT: 'problems in other components, is maintained in '",
+     "SPEECH OUTPUT: 'problems in other components, is maintained in'",
      "SPEECH OUTPUT: 'Bugzilla'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ' \(please see our '",
-     "SPEECH OUTPUT: 'notes on how we '",
+     "SPEECH OUTPUT: '\(please see our'",
+     "SPEECH OUTPUT: 'notes on how we'",
      "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -344,7 +343,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'use Bugzilla\).', cursor=1",
      "SPEECH OUTPUT: 'use Bugzilla'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '\). '"]))
+     "SPEECH OUTPUT: '\).'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -352,13 +351,13 @@ sequence.append(utils.AssertPresentationAction(
     "32. Line Down",
     ["BRAILLE LINE:  'Please join and participate on the Orca mailing list (archives): it's a helpful, kind, 
and'",
      "     VISIBLE:  'Please join and participate on t', cursor=1",
-     "SPEECH OUTPUT: 'Please join and participate on the '",
+     "SPEECH OUTPUT: 'Please join and participate on the'",
      "SPEECH OUTPUT: 'Orca mailing list'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ' ('",
+     "SPEECH OUTPUT: '('",
      "SPEECH OUTPUT: 'archives'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: '): it's a helpful, kind, and '"]))
+     "SPEECH OUTPUT: '): it's a helpful, kind, and'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -366,7 +365,7 @@ sequence.append(utils.AssertPresentationAction(
     "33. Line Down",
     ["BRAILLE LINE:  'productive environment composed of users and developers.'",
      "     VISIBLE:  'productive environment composed ', cursor=1",
-     "SPEECH OUTPUT: 'productive environment composed of users and developers. '"]))
+     "SPEECH OUTPUT: 'productive environment composed of users and developers.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -385,7 +384,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Darragh Ó Héiligh has created se', cursor=1",
      "SPEECH OUTPUT: 'Darragh Ó Héiligh'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ' has created several audio guides for Orca. This is a fantastic '"]))
+     "SPEECH OUTPUT: 'has created several audio guides for Orca. This is a fantastic'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -393,7 +392,7 @@ sequence.append(utils.AssertPresentationAction(
     "36. Line Down",
     ["BRAILLE LINE:  'contribution (THANKS!)!!! The audio guides can be found at 
http://www.digitaldarragh.com'",
      "     VISIBLE:  'contribution (THANKS!)!!! The au', cursor=1",
-     "SPEECH OUTPUT: 'contribution (THANKS!)!!! The audio guides can be found at '",
+     "SPEECH OUTPUT: 'contribution (THANKS!)!!! The audio guides can be found at'",
      "SPEECH OUTPUT: 'http://www.digitaldarragh.com'",
      "SPEECH OUTPUT: 'link image'"]))
 
@@ -405,7 +404,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '/linuxat.asp and include the fol', cursor=1",
      "SPEECH OUTPUT: '/linuxat.asp'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: 'and include the following: '"]))
+     "SPEECH OUTPUT: 'and include the following:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -452,7 +451,7 @@ sequence.append(utils.AssertPresentationAction(
     "42. Line Down",
     ["BRAILLE LINE:  'As of GNOME 2.16, Orca is a part of the GNOME platform. As a result, Orca is already'",
      "     VISIBLE:  'As of GNOME 2.16, Orca is a part', cursor=1",
-     "SPEECH OUTPUT: 'As of GNOME 2.16, Orca is a part of the GNOME platform. As a result, Orca is already 
'"]))
+     "SPEECH OUTPUT: 'As of GNOME 2.16, Orca is a part of the GNOME platform. As a result, Orca is 
already'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -460,7 +459,7 @@ sequence.append(utils.AssertPresentationAction(
     "43. Line Down",
     ["BRAILLE LINE:  'provided by default on a number of operating system distributions, including Open 
Solaris'",
      "     VISIBLE:  'provided by default on a number ', cursor=1",
-     "SPEECH OUTPUT: 'provided by default on a number of operating system distributions, including '",
+     "SPEECH OUTPUT: 'provided by default on a number of operating system distributions, including'",
      "SPEECH OUTPUT: 'Open Solaris'",
      "SPEECH OUTPUT: 'link image'"]))
 
@@ -470,10 +469,10 @@ sequence.append(utils.AssertPresentationAction(
     "44. Line Down",
     ["BRAILLE LINE:  'and Ubuntu.'",
      "     VISIBLE:  'and Ubuntu.', cursor=1",
-     "SPEECH OUTPUT: 'and '",
+     "SPEECH OUTPUT: 'and'",
      "SPEECH OUTPUT: 'Ubuntu'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: '. '"]))
+     "SPEECH OUTPUT: '.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -481,10 +480,10 @@ sequence.append(utils.AssertPresentationAction(
     "45. Line Down",
     ["BRAILLE LINE:  'Please also refer to the Download/Installation page for detailed information on 
various'",
      "     VISIBLE:  'Please also refer to the Downloa', cursor=1",
-     "SPEECH OUTPUT: 'Please also refer to the '",
+     "SPEECH OUTPUT: 'Please also refer to the'",
      "SPEECH OUTPUT: 'Download/Installation page'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for detailed information on various '"]))
+     "SPEECH OUTPUT: 'for detailed information on various'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -492,7 +491,7 @@ sequence.append(utils.AssertPresentationAction(
     "46. Line Down",
     ["BRAILLE LINE:  'distributions as well as installing Orca directly from source.'",
      "     VISIBLE:  'distributions as well as install', cursor=1",
-     "SPEECH OUTPUT: 'distributions as well as installing Orca directly from source. '"]))
+     "SPEECH OUTPUT: 'distributions as well as installing Orca directly from source.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -509,7 +508,7 @@ sequence.append(utils.AssertPresentationAction(
     "48. Line Down",
     ["BRAILLE LINE:  'The command to run orca is orca. You can enter this command by pressing Alt+F2 when'",
      "     VISIBLE:  'The command to run orca is orca.', cursor=1",
-     "SPEECH OUTPUT: 'The command to run orca is orca. You can enter this command by pressing Alt+F2 when 
'"]))
+     "SPEECH OUTPUT: 'The command to run orca is orca. You can enter this command by pressing Alt+F2 
when'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -517,7 +516,7 @@ sequence.append(utils.AssertPresentationAction(
     "49. Line Down",
     ["BRAILLE LINE:  'logged in, waiting for a second or so, then typing orca and pressing return. Orca is'",
      "     VISIBLE:  'logged in, waiting for a second ', cursor=1",
-     "SPEECH OUTPUT: 'logged in, waiting for a second or so, then typing orca and pressing return. Orca is 
'"]))
+     "SPEECH OUTPUT: 'logged in, waiting for a second or so, then typing orca and pressing return. Orca 
is'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -525,8 +524,8 @@ sequence.append(utils.AssertPresentationAction(
     "50. Line Down",
     ["BRAILLE LINE:  'designed to present information as you navigate the desktop using the built-in 
navigation'",
      "     VISIBLE:  'designed to present information ', cursor=1",
-     "SPEECH OUTPUT: 'designed to present information as you navigate the desktop using the '",
-     "SPEECH OUTPUT: 'built-in navigation '",
+     "SPEECH OUTPUT: 'designed to present information as you navigate the desktop using the'",
+     "SPEECH OUTPUT: 'built-in navigation'",
      "SPEECH OUTPUT: 'link image'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -537,7 +536,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'mechanisms of GNOME. These navig', cursor=1",
      "SPEECH OUTPUT: 'mechanisms of GNOME'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: '. These navigation mechanisms are consistent across most '"]))
+     "SPEECH OUTPUT: '. These navigation mechanisms are consistent across most'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -545,7 +544,7 @@ sequence.append(utils.AssertPresentationAction(
     "52. Line Down",
     ["BRAILLE LINE:  'desktop applications.'",
      "     VISIBLE:  'desktop applications.', cursor=1",
-     "SPEECH OUTPUT: 'desktop applications. '"]))
+     "SPEECH OUTPUT: 'desktop applications.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -553,8 +552,8 @@ sequence.append(utils.AssertPresentationAction(
     "53. Line Down",
     ["BRAILLE LINE:  'You may sometimes wish to control Orca itself, such as bringing up the Orca 
Configuration'",
      "     VISIBLE:  'You may sometimes wish to contro', cursor=1",
-     "SPEECH OUTPUT: 'You may sometimes wish to control Orca itself, such as bringing up the '",
-     "SPEECH OUTPUT: 'Orca Configuration '",
+     "SPEECH OUTPUT: 'You may sometimes wish to control Orca itself, such as bringing up the'",
+     "SPEECH OUTPUT: 'Orca Configuration'",
      "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -565,7 +564,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'GUI (accessed by pressing Insert', cursor=1",
      "SPEECH OUTPUT: 'GUI'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '(accessed by pressing Insert+Space when Orca is running) and for using flat review 
'"]))
+     "SPEECH OUTPUT: '(accessed by pressing Insert+Space when Orca is running) and for using flat review'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -573,12 +572,12 @@ sequence.append(utils.AssertPresentationAction(
     "55. Line Down",
     ["BRAILLE LINE:  'mode to examine a window. Refer to Orca Keyboard Commands (Laptop Layout) for more'",
      "     VISIBLE:  'mode to examine a window. Refer ', cursor=1",
-     "SPEECH OUTPUT: 'mode to examine a window. Refer to '",
+     "SPEECH OUTPUT: 'mode to examine a window. Refer to'",
      "SPEECH OUTPUT: 'Orca Keyboard Commands'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: '(Laptop Layout)'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for more '"]))
+     "SPEECH OUTPUT: 'for more'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -586,10 +585,10 @@ sequence.append(utils.AssertPresentationAction(
     "56. Line Down",
     ["BRAILLE LINE:  'information on Orca-specific keyboard commands. The Orca Configuration GUI also'",
      "     VISIBLE:  'information on Orca-specific key', cursor=1",
-     "SPEECH OUTPUT: 'information on Orca-specific keyboard commands. The '",
+     "SPEECH OUTPUT: 'information on Orca-specific keyboard commands. The'",
      "SPEECH OUTPUT: 'Orca Configuration GUI'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' also '"]))
+     "SPEECH OUTPUT: 'also'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -597,7 +596,7 @@ sequence.append(utils.AssertPresentationAction(
     "57. Line Down",
     ["BRAILLE LINE:  'includes a \"Key Bindings\" tab that allows you to get a complete list of Orca key 
bindings.'",
      "     VISIBLE:  'includes a \"Key Bindings\" tab th', cursor=1",
-     "SPEECH OUTPUT: 'includes a \"Key Bindings\" tab that allows you to get a complete list of Orca key 
bindings. '"]))
+     "SPEECH OUTPUT: 'includes a \"Key Bindings\" tab that allows you to get a complete list of Orca key 
bindings.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -605,10 +604,10 @@ sequence.append(utils.AssertPresentationAction(
     "58. Line Down",
     ["BRAILLE LINE:  'Please also refer to the Configuration/Use page for detailed information.'",
      "     VISIBLE:  'Please also refer to the Configu', cursor=1",
-     "SPEECH OUTPUT: 'Please also refer to the '",
+     "SPEECH OUTPUT: 'Please also refer to the'",
      "SPEECH OUTPUT: 'Configuration/Use page'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for detailed information. '"]))
+     "SPEECH OUTPUT: 'for detailed information.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -625,7 +624,7 @@ sequence.append(utils.AssertPresentationAction(
     "60. Line Down",
     ["BRAILLE LINE:  'Orca is designed to work with applications and toolkits that support the assistive'",
      "     VISIBLE:  'Orca is designed to work with ap', cursor=1",
-     "SPEECH OUTPUT: 'Orca is designed to work with applications and toolkits that support the assistive 
'"]))
+     "SPEECH OUTPUT: 'Orca is designed to work with applications and toolkits that support the assistive'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -633,7 +632,7 @@ sequence.append(utils.AssertPresentationAction(
     "61. Line Down",
     ["BRAILLE LINE:  'technology service provider interface (AT-SPI). This includes the GNOME desktop and 
its'",
      "     VISIBLE:  'technology service provider inte', cursor=1",
-     "SPEECH OUTPUT: 'technology service provider interface (AT-SPI). This includes the GNOME desktop and 
its '"]))
+     "SPEECH OUTPUT: 'technology service provider interface (AT-SPI). This includes the GNOME desktop and 
its'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -641,10 +640,10 @@ sequence.append(utils.AssertPresentationAction(
     "62. Line Down",
     ["BRAILLE LINE:  'applications, OpenOffice, Firefox, and the Java platform. Some applications work 
better'",
      "     VISIBLE:  'applications, OpenOffice, Firefo', cursor=1",
-     "SPEECH OUTPUT: 'applications, '",
+     "SPEECH OUTPUT: 'applications,'",
      "SPEECH OUTPUT: 'OpenOffice'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ', Firefox, and the Java platform. Some applications work better '"]))
+     "SPEECH OUTPUT: ', Firefox, and the Java platform. Some applications work better'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -652,7 +651,7 @@ sequence.append(utils.AssertPresentationAction(
     "63. Line Down",
     ["BRAILLE LINE:  'than others, however, and the Orca community continually works to provide compelling'",
      "     VISIBLE:  'than others, however, and the Or', cursor=1",
-     "SPEECH OUTPUT: 'than others, however, and the Orca community continually works to provide compelling 
'"]))
+     "SPEECH OUTPUT: 'than others, however, and the Orca community continually works to provide 
compelling'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -660,7 +659,7 @@ sequence.append(utils.AssertPresentationAction(
     "64. Line Down",
     ["BRAILLE LINE:  'access to more and more applications.'",
      "     VISIBLE:  'access to more and more applicat', cursor=1",
-     "SPEECH OUTPUT: 'access to more and more applications. '"]))
+     "SPEECH OUTPUT: 'access to more and more applications.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -668,10 +667,10 @@ sequence.append(utils.AssertPresentationAction(
     "65. Line Down",
     ["BRAILLE LINE:  'On the Accessible Applications page, you will find a growing list of information 
regarding'",
      "     VISIBLE:  'On the Accessible Applications p', cursor=1",
-     "SPEECH OUTPUT: 'On the '",
+     "SPEECH OUTPUT: 'On the'",
      "SPEECH OUTPUT: 'Accessible Applications page'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ', you will find a growing list of information regarding '"]))
+     "SPEECH OUTPUT: ', you will find a growing list of information regarding'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -679,7 +678,7 @@ sequence.append(utils.AssertPresentationAction(
     "66. Line Down",
     ["BRAILLE LINE:  'various applications that can be accessed with Orca as well as tips and tricks for 
using'",
      "     VISIBLE:  'various applications that can be', cursor=1",
-     "SPEECH OUTPUT: 'various applications that can be accessed with Orca as well as tips and tricks for 
using '"]))
+     "SPEECH OUTPUT: 'various applications that can be accessed with Orca as well as tips and tricks for 
using'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -687,7 +686,7 @@ sequence.append(utils.AssertPresentationAction(
     "67. Line Down",
     ["BRAILLE LINE:  'them. The list is not to be a conclusive list of all applications. Rather, the goal is 
to provide a'",
      "     VISIBLE:  'them. The list is not to be a co', cursor=1",
-     "SPEECH OUTPUT: 'them. The list is not to be a conclusive list of all applications. Rather, the goal is 
to provide a '"]))
+     "SPEECH OUTPUT: 'them. The list is not to be a conclusive list of all applications. Rather, the goal is 
to provide a'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -695,7 +694,7 @@ sequence.append(utils.AssertPresentationAction(
     "68. Line Down",
     ["BRAILLE LINE:  'repository within which users can share experiences regarding applications they have'",
      "     VISIBLE:  'repository within which users ca', cursor=1",
-     "SPEECH OUTPUT: 'repository within which users can share experiences regarding applications they have 
'"]))
+     "SPEECH OUTPUT: 'repository within which users can share experiences regarding applications they 
have'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -703,7 +702,7 @@ sequence.append(utils.AssertPresentationAction(
     "69. Line Down",
     ["BRAILLE LINE:  'tested.'",
      "     VISIBLE:  'tested.', cursor=1",
-     "SPEECH OUTPUT: 'tested. '"]))
+     "SPEECH OUTPUT: 'tested.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -711,10 +710,10 @@ sequence.append(utils.AssertPresentationAction(
     "70. Line Down",
     ["BRAILLE LINE:  'See also the Application Specific Settings page for how to configure settings specific 
to an'",
      "     VISIBLE:  'See also the Application Specifi', cursor=1",
-     "SPEECH OUTPUT: 'See also the '",
+     "SPEECH OUTPUT: 'See also the'",
      "SPEECH OUTPUT: 'Application Specific Settings'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' page for how to configure settings specific to an '"]))
+     "SPEECH OUTPUT: 'page for how to configure settings specific to an'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -722,7 +721,7 @@ sequence.append(utils.AssertPresentationAction(
     "71. Line Down",
     ["BRAILLE LINE:  'application.'",
      "     VISIBLE:  'application.', cursor=1",
-     "SPEECH OUTPUT: 'application. '"]))
+     "SPEECH OUTPUT: 'application.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -730,10 +729,10 @@ sequence.append(utils.AssertPresentationAction(
     "72. Line Down",
     ["BRAILLE LINE:  'Please also refer to the Accessible Applications page for detailed information.'",
      "     VISIBLE:  'Please also refer to the Accessi', cursor=1",
-     "SPEECH OUTPUT: 'Please also refer to the '",
+     "SPEECH OUTPUT: 'Please also refer to the'",
      "SPEECH OUTPUT: 'Accessible Applications page'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for detailed information. '"]))
+     "SPEECH OUTPUT: 'for detailed information.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -750,10 +749,10 @@ sequence.append(utils.AssertPresentationAction(
     "74. Line Down",
     ["BRAILLE LINE:  'There's a bunch you can do! Please refer to the How Can I Help page for detailed'",
      "     VISIBLE:  'There's a bunch you can do! Plea', cursor=1",
-     "SPEECH OUTPUT: 'There's a bunch you can do! Please refer to the '",
+     "SPEECH OUTPUT: 'There's a bunch you can do! Please refer to the'",
      "SPEECH OUTPUT: 'How Can I Help page'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for detailed '"]))
+     "SPEECH OUTPUT: 'for detailed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -761,7 +760,7 @@ sequence.append(utils.AssertPresentationAction(
     "75. Line Down",
     ["BRAILLE LINE:  'information.'",
      "     VISIBLE:  'information.', cursor=1",
-     "SPEECH OUTPUT: 'information. '"]))
+     "SPEECH OUTPUT: 'information.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -779,7 +778,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  '•Frequently Asked Questions: FAQ'",
      "     VISIBLE:  '•Frequently Asked Questions: FAQ', cursor=1",
      "SPEECH OUTPUT: '•'",
-     "SPEECH OUTPUT: 'Frequently Asked Questions: '",
+     "SPEECH OUTPUT: 'Frequently Asked Questions:'",
      "SPEECH OUTPUT: 'FAQ'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -790,13 +789,13 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  '•Mailing list: orca-list gnome org (Archives)'",
      "     VISIBLE:  '•Mailing list: orca-list gnome o', cursor=1",
      "SPEECH OUTPUT: '•'",
-     "SPEECH OUTPUT: 'Mailing list: '",
+     "SPEECH OUTPUT: 'Mailing list:'",
      "SPEECH OUTPUT: 'orca-list gnome org'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ' ('",
+     "SPEECH OUTPUT: '('",
      "SPEECH OUTPUT: 'Archives'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ') '"]))
+     "SPEECH OUTPUT: ')'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -805,13 +804,13 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  '•Bug database: GNOME Bug Tracking System (Bugzilla) (current bug list)'",
      "     VISIBLE:  '•Bug database: GNOME Bug Trackin', cursor=1",
      "SPEECH OUTPUT: '•'",
-     "SPEECH OUTPUT: 'Bug database: '",
+     "SPEECH OUTPUT: 'Bug database:'",
      "SPEECH OUTPUT: 'GNOME Bug Tracking System (Bugzilla)'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ' ('",
+     "SPEECH OUTPUT: '('",
      "SPEECH OUTPUT: 'current bug list'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ') '"]))
+     "SPEECH OUTPUT: ')'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -820,7 +819,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  '•Design documents: Orca Documentation Series'",
      "     VISIBLE:  '•Design documents: Orca Document', cursor=1",
      "SPEECH OUTPUT: '•'",
-     "SPEECH OUTPUT: 'Design documents: '",
+     "SPEECH OUTPUT: 'Design documents:'",
      "SPEECH OUTPUT: 'Orca Documentation Series'",
      "SPEECH OUTPUT: 'link image'"]))
 
@@ -868,7 +867,7 @@ sequence.append(utils.AssertPresentationAction(
     "85. Line Down",
     ["BRAILLE LINE:  'The information on this page and the other Orca-related pages on this site are 
distributed'",
      "     VISIBLE:  'The information on this page and', cursor=1",
-     "SPEECH OUTPUT: 'The information on this page and the other Orca-related pages on this site are 
distributed '"]))
+     "SPEECH OUTPUT: 'The information on this page and the other Orca-related pages on this site are 
distributed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -876,7 +875,7 @@ sequence.append(utils.AssertPresentationAction(
     "86. Line Down",
     ["BRAILLE LINE:  'in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the 
implied'",
      "     VISIBLE:  'in the hope that it will be usef', cursor=1",
-     "SPEECH OUTPUT: 'in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied 
'"]))
+     "SPEECH OUTPUT: 'in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the 
implied'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -884,7 +883,7 @@ sequence.append(utils.AssertPresentationAction(
     "87. Line Down",
     ["BRAILLE LINE:  'warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.'",
      "     VISIBLE:  'warranty of MERCHANTABILITY or F', cursor=1",
-     "SPEECH OUTPUT: 'warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. '"]))
+     "SPEECH OUTPUT: 'warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -909,7 +908,7 @@ sequence.append(utils.AssertPresentationAction(
     "90. Line Down",
     ["BRAILLE LINE:  'Orca (last edited 2007-12-07 22:09:22 by WillieWalker)'",
      "     VISIBLE:  'Orca (last edited 2007-12-07 22:', cursor=1",
-     "SPEECH OUTPUT: 'Orca (last edited 2007-12-07 22:09:22 by '",
+     "SPEECH OUTPUT: 'Orca (last edited 2007-12-07 22:09:22 by'",
      "SPEECH OUTPUT: 'WillieWalker'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: ')'"]))
@@ -982,7 +981,7 @@ sequence.append(utils.AssertPresentationAction(
     "98. Line Down",
     ["BRAILLE LINE:  'GNOME World  h3'",
      "     VISIBLE:  'GNOME World  h3', cursor=1",
-     "SPEECH OUTPUT: 'GNOME World '",
+     "SPEECH OUTPUT: 'GNOME World'",
      "SPEECH OUTPUT: 'heading level 3'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -1001,8 +1000,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'GnomeWorldWide image'",
      "     VISIBLE:  'GnomeWorldWide image', cursor=0",
      "SPEECH OUTPUT: 'GnomeWorldWide'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -1010,11 +1008,10 @@ sequence.append(utils.AssertPresentationAction(
     "101. Line Down",
     ["BRAILLE LINE:  'Copyright \xa9 2005, 2006, 2007 The GNOME Project.'",
      "     VISIBLE:  'Copyright \xa9 2005, 2006, 2007 The', cursor=1",
-     "SPEECH OUTPUT: 'Copyright \xa9 2005, 2006, 2007 '",
+     "SPEECH OUTPUT: 'Copyright \xa9 2005, 2006, 2007'",
      "SPEECH OUTPUT: 'The GNOME Project'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '.",
-     "'"]))
+     "SPEECH OUTPUT: '.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -1022,10 +1019,10 @@ sequence.append(utils.AssertPresentationAction(
     "102. Line Down",
     ["BRAILLE LINE:  'Hosted by Red Hat.'",
      "     VISIBLE:  'Hosted by Red Hat.', cursor=1",
-     "SPEECH OUTPUT: 'Hosted by '",
+     "SPEECH OUTPUT: 'Hosted by'",
      "SPEECH OUTPUT: 'Red Hat'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '. '"]))
+     "SPEECH OUTPUT: '.'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/line_nav_wiki_up.py b/test/keystrokes/firefox/line_nav_wiki_up.py
index 432c955..7d93039 100644
--- a/test/keystrokes/firefox/line_nav_wiki_up.py
+++ b/test/keystrokes/firefox/line_nav_wiki_up.py
@@ -16,10 +16,10 @@ sequence.append(utils.AssertPresentationAction(
     "1. Bottom of file",
     ["BRAILLE LINE:  'Hosted by Red Hat.'",
      "     VISIBLE:  'Hosted by Red Hat.', cursor=1",
-     "SPEECH OUTPUT: 'Hosted by '",
+     "SPEECH OUTPUT: 'Hosted by'",
      "SPEECH OUTPUT: 'Red Hat'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '. '"]))
+     "SPEECH OUTPUT: '.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -27,11 +27,10 @@ sequence.append(utils.AssertPresentationAction(
     "2. Line Up",
     ["BRAILLE LINE:  'Copyright \xa9 2005, 2006, 2007 The GNOME Project.'",
      "     VISIBLE:  'Copyright \xa9 2005, 2006, 2007 The', cursor=1",
-     "SPEECH OUTPUT: 'Copyright \xa9 2005, 2006, 2007 '",
+     "SPEECH OUTPUT: 'Copyright \xa9 2005, 2006, 2007'",
      "SPEECH OUTPUT: 'The GNOME Project'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '.",
-     "'"]))
+     "SPEECH OUTPUT: '.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -40,8 +39,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'GnomeWorldWide image'",
      "     VISIBLE:  'GnomeWorldWide image', cursor=0",
      "SPEECH OUTPUT: 'GnomeWorldWide'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'link'"]))
+     "SPEECH OUTPUT: 'image link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -58,7 +56,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Line Up",
     ["BRAILLE LINE:  'GNOME World  h3'",
      "     VISIBLE:  'GNOME World  h3', cursor=1",
-     "SPEECH OUTPUT: 'GNOME World '",
+     "SPEECH OUTPUT: 'GNOME World'",
      "SPEECH OUTPUT: 'heading level 3'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -129,7 +127,7 @@ sequence.append(utils.AssertPresentationAction(
     "13. Line Up",
     ["BRAILLE LINE:  'Orca (last edited 2007-12-07 22:09:22 by WillieWalker)'",
      "     VISIBLE:  'Orca (last edited 2007-12-07 22:', cursor=1",
-     "SPEECH OUTPUT: 'Orca (last edited 2007-12-07 22:09:22 by '",
+     "SPEECH OUTPUT: 'Orca (last edited 2007-12-07 22:09:22 by'",
      "SPEECH OUTPUT: 'WillieWalker'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: ')'"]))
@@ -157,7 +155,7 @@ sequence.append(utils.AssertPresentationAction(
     "16. Line Up",
     ["BRAILLE LINE:  'warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.'",
      "     VISIBLE:  'warranty of MERCHANTABILITY or F', cursor=1",
-     "SPEECH OUTPUT: 'warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. '"]))
+     "SPEECH OUTPUT: 'warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -165,7 +163,7 @@ sequence.append(utils.AssertPresentationAction(
     "17. Line Up",
     ["BRAILLE LINE:  'in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the 
implied'",
      "     VISIBLE:  'in the hope that it will be usef', cursor=1",
-     "SPEECH OUTPUT: 'in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied 
'"]))
+     "SPEECH OUTPUT: 'in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the 
implied'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -173,7 +171,7 @@ sequence.append(utils.AssertPresentationAction(
     "18. Line Up",
     ["BRAILLE LINE:  'The information on this page and the other Orca-related pages on this site are 
distributed'",
      "     VISIBLE:  'The information on this page and', cursor=1",
-     "SPEECH OUTPUT: 'The information on this page and the other Orca-related pages on this site are 
distributed '"]))
+     "SPEECH OUTPUT: 'The information on this page and the other Orca-related pages on this site are 
distributed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -220,7 +218,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  '•Design documents: Orca Documentation Series'",
      "     VISIBLE:  '•Design documents: Orca Document', cursor=1",
      "SPEECH OUTPUT: '•'",
-     "SPEECH OUTPUT: 'Design documents: '",
+     "SPEECH OUTPUT: 'Design documents:'",
      "SPEECH OUTPUT: 'Orca Documentation Series'",
      "SPEECH OUTPUT: 'link image'"]))
 
@@ -231,13 +229,13 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  '•Bug database: GNOME Bug Tracking System (Bugzilla) (current bug list)'",
      "     VISIBLE:  '•Bug database: GNOME Bug Trackin', cursor=1",
      "SPEECH OUTPUT: '•'",
-     "SPEECH OUTPUT: 'Bug database: '",
+     "SPEECH OUTPUT: 'Bug database:'",
      "SPEECH OUTPUT: 'GNOME Bug Tracking System (Bugzilla)'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ' ('",
+     "SPEECH OUTPUT: '('",
      "SPEECH OUTPUT: 'current bug list'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ') '"]))
+     "SPEECH OUTPUT: ')'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -246,13 +244,13 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  '•Mailing list: orca-list gnome org (Archives)'",
      "     VISIBLE:  '•Mailing list: orca-list gnome o', cursor=1",
      "SPEECH OUTPUT: '•'",
-     "SPEECH OUTPUT: 'Mailing list: '",
+     "SPEECH OUTPUT: 'Mailing list:'",
      "SPEECH OUTPUT: 'orca-list gnome org'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ' ('",
+     "SPEECH OUTPUT: '('",
      "SPEECH OUTPUT: 'Archives'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ') '"]))
+     "SPEECH OUTPUT: ')'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -261,7 +259,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  '•Frequently Asked Questions: FAQ'",
      "     VISIBLE:  '•Frequently Asked Questions: FAQ', cursor=1",
      "SPEECH OUTPUT: '•'",
-     "SPEECH OUTPUT: 'Frequently Asked Questions: '",
+     "SPEECH OUTPUT: 'Frequently Asked Questions:'",
      "SPEECH OUTPUT: 'FAQ'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -280,7 +278,7 @@ sequence.append(utils.AssertPresentationAction(
     "28. Line Up",
     ["BRAILLE LINE:  'information.'",
      "     VISIBLE:  'information.', cursor=1",
-     "SPEECH OUTPUT: 'information. '"]))
+     "SPEECH OUTPUT: 'information.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -288,10 +286,10 @@ sequence.append(utils.AssertPresentationAction(
     "29. Line Up",
     ["BRAILLE LINE:  'There's a bunch you can do! Please refer to the How Can I Help page for detailed'",
      "     VISIBLE:  'There's a bunch you can do! Plea', cursor=1",
-     "SPEECH OUTPUT: 'There's a bunch you can do! Please refer to the '",
+     "SPEECH OUTPUT: 'There's a bunch you can do! Please refer to the'",
      "SPEECH OUTPUT: 'How Can I Help page'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for detailed '"]))
+     "SPEECH OUTPUT: 'for detailed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -308,10 +306,10 @@ sequence.append(utils.AssertPresentationAction(
     "31. Line Up",
     ["BRAILLE LINE:  'Please also refer to the Accessible Applications page for detailed information.'",
      "     VISIBLE:  'Please also refer to the Accessi', cursor=1",
-     "SPEECH OUTPUT: 'Please also refer to the '",
+     "SPEECH OUTPUT: 'Please also refer to the'",
      "SPEECH OUTPUT: 'Accessible Applications page'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for detailed information. '"]))
+     "SPEECH OUTPUT: 'for detailed information.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -319,7 +317,7 @@ sequence.append(utils.AssertPresentationAction(
     "32. Line Up",
     ["BRAILLE LINE:  'application.'",
      "     VISIBLE:  'application.', cursor=1",
-     "SPEECH OUTPUT: 'application. '"]))
+     "SPEECH OUTPUT: 'application.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -327,10 +325,10 @@ sequence.append(utils.AssertPresentationAction(
     "33. Line Up",
     ["BRAILLE LINE:  'See also the Application Specific Settings page for how to configure settings specific 
to an'",
      "     VISIBLE:  'See also the Application Specifi', cursor=1",
-     "SPEECH OUTPUT: 'See also the '",
+     "SPEECH OUTPUT: 'See also the'",
      "SPEECH OUTPUT: 'Application Specific Settings'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' page for how to configure settings specific to an '"]))
+     "SPEECH OUTPUT: 'page for how to configure settings specific to an'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -338,7 +336,7 @@ sequence.append(utils.AssertPresentationAction(
     "34. Line Up",
     ["BRAILLE LINE:  'tested.'",
      "     VISIBLE:  'tested.', cursor=1",
-     "SPEECH OUTPUT: 'tested. '"]))
+     "SPEECH OUTPUT: 'tested.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -346,7 +344,7 @@ sequence.append(utils.AssertPresentationAction(
     "35. Line Up",
     ["BRAILLE LINE:  'repository within which users can share experiences regarding applications they have'",
      "     VISIBLE:  'repository within which users ca', cursor=1",
-     "SPEECH OUTPUT: 'repository within which users can share experiences regarding applications they have 
'"]))
+     "SPEECH OUTPUT: 'repository within which users can share experiences regarding applications they 
have'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -354,7 +352,7 @@ sequence.append(utils.AssertPresentationAction(
     "36. Line Up",
     ["BRAILLE LINE:  'them. The list is not to be a conclusive list of all applications. Rather, the goal is 
to provide a'",
      "     VISIBLE:  'them. The list is not to be a co', cursor=1",
-     "SPEECH OUTPUT: 'them. The list is not to be a conclusive list of all applications. Rather, the goal is 
to provide a '"]))
+     "SPEECH OUTPUT: 'them. The list is not to be a conclusive list of all applications. Rather, the goal is 
to provide a'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -362,7 +360,7 @@ sequence.append(utils.AssertPresentationAction(
     "37. Line Up",
     ["BRAILLE LINE:  'various applications that can be accessed with Orca as well as tips and tricks for 
using'",
      "     VISIBLE:  'various applications that can be', cursor=1",
-     "SPEECH OUTPUT: 'various applications that can be accessed with Orca as well as tips and tricks for 
using '"]))
+     "SPEECH OUTPUT: 'various applications that can be accessed with Orca as well as tips and tricks for 
using'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -370,10 +368,10 @@ sequence.append(utils.AssertPresentationAction(
     "38. Line Up",
     ["BRAILLE LINE:  'On the Accessible Applications page, you will find a growing list of information 
regarding'",
      "     VISIBLE:  'On the Accessible Applications p', cursor=1",
-     "SPEECH OUTPUT: 'On the '",
+     "SPEECH OUTPUT: 'On the'",
      "SPEECH OUTPUT: 'Accessible Applications page'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ', you will find a growing list of information regarding '"]))
+     "SPEECH OUTPUT: ', you will find a growing list of information regarding'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -381,7 +379,7 @@ sequence.append(utils.AssertPresentationAction(
     "39. Line Up",
     ["BRAILLE LINE:  'access to more and more applications.'",
      "     VISIBLE:  'access to more and more applicat', cursor=1",
-     "SPEECH OUTPUT: 'access to more and more applications. '"]))
+     "SPEECH OUTPUT: 'access to more and more applications.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -389,7 +387,7 @@ sequence.append(utils.AssertPresentationAction(
     "40. Line Up",
     ["BRAILLE LINE:  'than others, however, and the Orca community continually works to provide compelling'",
      "     VISIBLE:  'than others, however, and the Or', cursor=1",
-     "SPEECH OUTPUT: 'than others, however, and the Orca community continually works to provide compelling 
'"]))
+     "SPEECH OUTPUT: 'than others, however, and the Orca community continually works to provide 
compelling'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -397,10 +395,10 @@ sequence.append(utils.AssertPresentationAction(
     "41. Line Up",
     ["BRAILLE LINE:  'applications, OpenOffice, Firefox, and the Java platform. Some applications work 
better'",
      "     VISIBLE:  'applications, OpenOffice, Firefo', cursor=1",
-     "SPEECH OUTPUT: 'applications, '",
+     "SPEECH OUTPUT: 'applications,'",
      "SPEECH OUTPUT: 'OpenOffice'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ', Firefox, and the Java platform. Some applications work better '"]))
+     "SPEECH OUTPUT: ', Firefox, and the Java platform. Some applications work better'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -408,7 +406,7 @@ sequence.append(utils.AssertPresentationAction(
     "42. Line Up",
     ["BRAILLE LINE:  'technology service provider interface (AT-SPI). This includes the GNOME desktop and 
its'",
      "     VISIBLE:  'technology service provider inte', cursor=1",
-     "SPEECH OUTPUT: 'technology service provider interface (AT-SPI). This includes the GNOME desktop and 
its '"]))
+     "SPEECH OUTPUT: 'technology service provider interface (AT-SPI). This includes the GNOME desktop and 
its'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -416,7 +414,7 @@ sequence.append(utils.AssertPresentationAction(
     "43. Line Up",
     ["BRAILLE LINE:  'Orca is designed to work with applications and toolkits that support the assistive'",
      "     VISIBLE:  'Orca is designed to work with ap', cursor=1",
-     "SPEECH OUTPUT: 'Orca is designed to work with applications and toolkits that support the assistive 
'"]))
+     "SPEECH OUTPUT: 'Orca is designed to work with applications and toolkits that support the assistive'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -433,10 +431,10 @@ sequence.append(utils.AssertPresentationAction(
     "45. Line Up",
     ["BRAILLE LINE:  'Please also refer to the Configuration/Use page for detailed information.'",
      "     VISIBLE:  'Please also refer to the Configu', cursor=1",
-     "SPEECH OUTPUT: 'Please also refer to the '",
+     "SPEECH OUTPUT: 'Please also refer to the'",
      "SPEECH OUTPUT: 'Configuration/Use page'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for detailed information. '"]))
+     "SPEECH OUTPUT: 'for detailed information.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -444,7 +442,7 @@ sequence.append(utils.AssertPresentationAction(
     "46. Line Up",
     ["BRAILLE LINE:  'includes a \"Key Bindings\" tab that allows you to get a complete list of Orca key 
bindings.'",
      "     VISIBLE:  'includes a \"Key Bindings\" tab th', cursor=1",
-     "SPEECH OUTPUT: 'includes a \"Key Bindings\" tab that allows you to get a complete list of Orca key 
bindings. '"]))
+     "SPEECH OUTPUT: 'includes a \"Key Bindings\" tab that allows you to get a complete list of Orca key 
bindings.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -452,10 +450,10 @@ sequence.append(utils.AssertPresentationAction(
     "47. Line Up",
     ["BRAILLE LINE:  'information on Orca-specific keyboard commands. The Orca Configuration GUI also'",
      "     VISIBLE:  'information on Orca-specific key', cursor=1",
-     "SPEECH OUTPUT: 'information on Orca-specific keyboard commands. The '",
+     "SPEECH OUTPUT: 'information on Orca-specific keyboard commands. The'",
      "SPEECH OUTPUT: 'Orca Configuration GUI'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' also '"]))
+     "SPEECH OUTPUT: 'also'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -463,12 +461,12 @@ sequence.append(utils.AssertPresentationAction(
     "48. Line Up",
     ["BRAILLE LINE:  'mode to examine a window. Refer to Orca Keyboard Commands \(Laptop Layout\) for more'",
      "     VISIBLE:  'mode to examine a window. Refer ', cursor=1",
-     "SPEECH OUTPUT: 'mode to examine a window. Refer to '",
+     "SPEECH OUTPUT: 'mode to examine a window. Refer to'",
      "SPEECH OUTPUT: 'Orca Keyboard Commands'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: '\(Laptop Layout\)'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for more '"]))
+     "SPEECH OUTPUT: 'for more'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -478,7 +476,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'GUI (accessed by pressing Insert', cursor=1",
      "SPEECH OUTPUT: 'GUI'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '(accessed by pressing Insert+Space when Orca is running) and for using flat review 
'"]))
+     "SPEECH OUTPUT: '(accessed by pressing Insert+Space when Orca is running) and for using flat review'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -486,8 +484,8 @@ sequence.append(utils.AssertPresentationAction(
     "50. Line Up",
     ["BRAILLE LINE:  'You may sometimes wish to control Orca itself, such as bringing up the Orca 
Configuration'",
      "     VISIBLE:  'You may sometimes wish to contro', cursor=1",
-     "SPEECH OUTPUT: 'You may sometimes wish to control Orca itself, such as bringing up the '",
-     "SPEECH OUTPUT: 'Orca Configuration '",
+     "SPEECH OUTPUT: 'You may sometimes wish to control Orca itself, such as bringing up the'",
+     "SPEECH OUTPUT: 'Orca Configuration'",
      "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -496,7 +494,7 @@ sequence.append(utils.AssertPresentationAction(
     "51. Line Up",
     ["BRAILLE LINE:  'desktop applications.'",
      "     VISIBLE:  'desktop applications.', cursor=1",
-     "SPEECH OUTPUT: 'desktop applications. '"]))
+     "SPEECH OUTPUT: 'desktop applications.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -506,7 +504,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'mechanisms of GNOME. These navig', cursor=1",
      "SPEECH OUTPUT: 'mechanisms of GNOME'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: '. These navigation mechanisms are consistent across most '"]))
+     "SPEECH OUTPUT: '. These navigation mechanisms are consistent across most'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -514,8 +512,8 @@ sequence.append(utils.AssertPresentationAction(
     "53. Line Up",
     ["BRAILLE LINE:  'designed to present information as you navigate the desktop using the built-in 
navigation'",
      "     VISIBLE:  'designed to present information ', cursor=1",
-     "SPEECH OUTPUT: 'designed to present information as you navigate the desktop using the '",
-     "SPEECH OUTPUT: 'built-in navigation '",
+     "SPEECH OUTPUT: 'designed to present information as you navigate the desktop using the'",
+     "SPEECH OUTPUT: 'built-in navigation'",
      "SPEECH OUTPUT: 'link image'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -524,7 +522,7 @@ sequence.append(utils.AssertPresentationAction(
     "54. Line Up",
     ["BRAILLE LINE:  'logged in, waiting for a second or so, then typing orca and pressing return. Orca is'",
      "     VISIBLE:  'logged in, waiting for a second ', cursor=1",
-     "SPEECH OUTPUT: 'logged in, waiting for a second or so, then typing orca and pressing return. Orca is 
'"]))
+     "SPEECH OUTPUT: 'logged in, waiting for a second or so, then typing orca and pressing return. Orca 
is'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -532,7 +530,7 @@ sequence.append(utils.AssertPresentationAction(
     "55. Line Up",
     ["BRAILLE LINE:  'The command to run orca is orca. You can enter this command by pressing Alt+F2 when'",
      "     VISIBLE:  'The command to run orca is orca.', cursor=1",
-     "SPEECH OUTPUT: 'The command to run orca is orca. You can enter this command by pressing Alt+F2 when 
'"]))
+     "SPEECH OUTPUT: 'The command to run orca is orca. You can enter this command by pressing Alt+F2 
when'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -549,7 +547,7 @@ sequence.append(utils.AssertPresentationAction(
     "57. Line Up",
     ["BRAILLE LINE:  'distributions as well as installing Orca directly from source.'",
      "     VISIBLE:  'distributions as well as install', cursor=1",
-     "SPEECH OUTPUT: 'distributions as well as installing Orca directly from source. '"]))
+     "SPEECH OUTPUT: 'distributions as well as installing Orca directly from source.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -557,10 +555,10 @@ sequence.append(utils.AssertPresentationAction(
     "58. Line Up",
     ["BRAILLE LINE:  'Please also refer to the Download/Installation page for detailed information on 
various'",
      "     VISIBLE:  'Please also refer to the Downloa', cursor=1",
-     "SPEECH OUTPUT: 'Please also refer to the '",
+     "SPEECH OUTPUT: 'Please also refer to the'",
      "SPEECH OUTPUT: 'Download/Installation page'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for detailed information on various '"]))
+     "SPEECH OUTPUT: 'for detailed information on various'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -568,10 +566,10 @@ sequence.append(utils.AssertPresentationAction(
     "59. Line Up",
     ["BRAILLE LINE:  'and Ubuntu.'",
      "     VISIBLE:  'and Ubuntu.', cursor=1",
-     "SPEECH OUTPUT: 'and '",
+     "SPEECH OUTPUT: 'and'",
      "SPEECH OUTPUT: 'Ubuntu'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: '. '"]))
+     "SPEECH OUTPUT: '.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -579,7 +577,7 @@ sequence.append(utils.AssertPresentationAction(
     "60. Line Up",
     ["BRAILLE LINE:  'provided by default on a number of operating system distributions, including Open 
Solaris'",
      "     VISIBLE:  'provided by default on a number ', cursor=1",
-     "SPEECH OUTPUT: 'provided by default on a number of operating system distributions, including '",
+     "SPEECH OUTPUT: 'provided by default on a number of operating system distributions, including'",
      "SPEECH OUTPUT: 'Open Solaris'",
      "SPEECH OUTPUT: 'link image'"]))
 
@@ -589,7 +587,7 @@ sequence.append(utils.AssertPresentationAction(
     "61. Line Up",
     ["BRAILLE LINE:  'As of GNOME 2.16, Orca is a part of the GNOME platform. As a result, Orca is already'",
      "     VISIBLE:  'As of GNOME 2.16, Orca is a part', cursor=1",
-     "SPEECH OUTPUT: 'As of GNOME 2.16, Orca is a part of the GNOME platform. As a result, Orca is already 
'"]))
+     "SPEECH OUTPUT: 'As of GNOME 2.16, Orca is a part of the GNOME platform. As a result, Orca is 
already'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -638,7 +636,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  '/linuxat.asp and include the fol', cursor=1",
      "SPEECH OUTPUT: '/linuxat.asp'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: 'and include the following: '"]))
+     "SPEECH OUTPUT: 'and include the following:'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -646,7 +644,7 @@ sequence.append(utils.AssertPresentationAction(
     "67. Line Up",
     ["BRAILLE LINE:  'contribution (THANKS!)!!! The audio guides can be found at 
http://www.digitaldarragh.com'",
      "     VISIBLE:  'contribution (THANKS!)!!! The au', cursor=1",
-     "SPEECH OUTPUT: 'contribution (THANKS!)!!! The audio guides can be found at '",
+     "SPEECH OUTPUT: 'contribution (THANKS!)!!! The audio guides can be found at'",
      "SPEECH OUTPUT: 'http://www.digitaldarragh.com'",
      "SPEECH OUTPUT: 'link image'"]))
 
@@ -658,7 +656,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Darragh Ó Héiligh has created se', cursor=1",
      "SPEECH OUTPUT: 'Darragh Ó Héiligh'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ' has created several audio guides for Orca. This is a fantastic '"]))
+     "SPEECH OUTPUT: 'has created several audio guides for Orca. This is a fantastic'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -675,7 +673,7 @@ sequence.append(utils.AssertPresentationAction(
     "70. Line Up",
     ["BRAILLE LINE:  'productive environment composed of users and developers.'",
      "     VISIBLE:  'productive environment composed ', cursor=1",
-     "SPEECH OUTPUT: 'productive environment composed of users and developers. '"]))
+     "SPEECH OUTPUT: 'productive environment composed of users and developers.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -683,13 +681,13 @@ sequence.append(utils.AssertPresentationAction(
     "71. Line Up",
     ["BRAILLE LINE:  'Please join and participate on the Orca mailing list (archives): it's a helpful, kind, 
and'",
      "     VISIBLE:  'Please join and participate on t', cursor=1",
-     "SPEECH OUTPUT: 'Please join and participate on the '",
+     "SPEECH OUTPUT: 'Please join and participate on the'",
      "SPEECH OUTPUT: 'Orca mailing list'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ' ('",
+     "SPEECH OUTPUT: '('",
      "SPEECH OUTPUT: 'archives'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: '): it's a helpful, kind, and '"]))
+     "SPEECH OUTPUT: '): it's a helpful, kind, and'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -699,7 +697,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'use Bugzilla\).', cursor=1",
      "SPEECH OUTPUT: 'use Bugzilla'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '\). '"]))
+     "SPEECH OUTPUT: '\).'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -707,11 +705,11 @@ sequence.append(utils.AssertPresentationAction(
     "73. Line Up",
     ["BRAILLE LINE:  'problems in other components, is maintained in Bugzilla \(please see our notes on how 
we'",
      "     VISIBLE:  'problems in other components, is', cursor=1",
-     "SPEECH OUTPUT: 'problems in other components, is maintained in '",
+     "SPEECH OUTPUT: 'problems in other components, is maintained in'",
      "SPEECH OUTPUT: 'Bugzilla'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ' \(please see our '",
-     "SPEECH OUTPUT: 'notes on how we '",
+     "SPEECH OUTPUT: '\(please see our'",
+     "SPEECH OUTPUT: 'notes on how we'",
      "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -720,7 +718,7 @@ sequence.append(utils.AssertPresentationAction(
     "74. Line Up",
     ["BRAILLE LINE:  'The complete list of work to do, including bugs and feature requests, along with 
known'",
      "     VISIBLE:  'The complete list of work to do,', cursor=1",
-     "SPEECH OUTPUT: 'The complete list of work to do, including bugs and feature requests, along with known 
'"]))
+     "SPEECH OUTPUT: 'The complete list of work to do, including bugs and feature requests, along with 
known'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -730,7 +728,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'community members.', cursor=1",
      "SPEECH OUTPUT: 'community members'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '. '"]))
+     "SPEECH OUTPUT: '.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -740,8 +738,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Microsystems, Inc. with contribu', cursor=1",
      "SPEECH OUTPUT: 'Microsystems, Inc.'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: 'with '",
-     "SPEECH OUTPUT: 'contributions from many '",
+     "SPEECH OUTPUT: 'with'",
+     "SPEECH OUTPUT: 'contributions from many'",
      "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -750,8 +748,8 @@ sequence.append(utils.AssertPresentationAction(
     "77. Line Up",
     ["BRAILLE LINE:  'been led by the Accessibility Program Office of Sun'",
      "     VISIBLE:  'been led by the Accessibility Pr', cursor=1",
-     "SPEECH OUTPUT: 'been led by the '",
-     "SPEECH OUTPUT: 'Accessibility Program Office of Sun '",
+     "SPEECH OUTPUT: 'been led by the'",
+     "SPEECH OUTPUT: 'Accessibility Program Office of Sun'",
      "SPEECH OUTPUT: 'link image'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -760,7 +758,7 @@ sequence.append(utils.AssertPresentationAction(
     "78. Line Up",
     ["BRAILLE LINE:  '(e.g., the GNOME desktop). The development of Orca has'",
      "     VISIBLE:  '(e.g., the GNOME desktop). The d', cursor=1",
-     "SPEECH OUTPUT: '(e.g., the GNOME desktop). The development of Orca has '"]))
+     "SPEECH OUTPUT: '(e.g., the GNOME desktop). The development of Orca has'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -768,7 +766,7 @@ sequence.append(utils.AssertPresentationAction(
     "79. Line Up",
     ["BRAILLE LINE:  'access to applications and toolkits that support the AT-SPI'",
      "     VISIBLE:  'access to applications and toolk', cursor=1",
-     "SPEECH OUTPUT: 'access to applications and toolkits that support the AT-SPI '"]))
+     "SPEECH OUTPUT: 'access to applications and toolkits that support the AT-SPI'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -776,7 +774,7 @@ sequence.append(utils.AssertPresentationAction(
     "80. Line Up",
     ["BRAILLE LINE:  'synthesis, braille, and magnification, Orca helps provide'",
      "     VISIBLE:  'synthesis, braille, and magnific', cursor=1",
-     "SPEECH OUTPUT: 'synthesis, braille, and magnification, Orca helps provide '"]))
+     "SPEECH OUTPUT: 'synthesis, braille, and magnification, Orca helps provide'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -784,7 +782,7 @@ sequence.append(utils.AssertPresentationAction(
     "81. Line Up",
     ["BRAILLE LINE:  'impairments. Using various combinations of speech'",
      "     VISIBLE:  'impairments. Using various combi', cursor=1",
-     "SPEECH OUTPUT: 'impairments. Using various combinations of speech '"]))
+     "SPEECH OUTPUT: 'impairments. Using various combinations of speech'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -792,7 +790,7 @@ sequence.append(utils.AssertPresentationAction(
     "82. Line Up",
     ["BRAILLE LINE:  'powerful assistive technology for people with visual'",
      "     VISIBLE:  'powerful assistive technology fo', cursor=1",
-     "SPEECH OUTPUT: 'powerful assistive technology for people with visual '"]))
+     "SPEECH OUTPUT: 'powerful assistive technology for people with visual'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -800,7 +798,7 @@ sequence.append(utils.AssertPresentationAction(
     "83. Line Up",
     ["BRAILLE LINE:  'Orca is a free, open source, flexible, extensible, and'",
      "     VISIBLE:  'Orca is a free, open source, fle', cursor=1",
-     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, extensible, and '"]))
+     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, extensible, and'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -905,7 +903,7 @@ sequence.append(utils.AssertPresentationAction(
     "94. Line Up",
     ["BRAILLE LINE:  'HOT HOT HOT: Notes on access to Firefox 3.0'",
      "     VISIBLE:  'HOT HOT HOT: Notes on access to ', cursor=1",
-     "SPEECH OUTPUT: 'HOT HOT HOT: Notes on '",
+     "SPEECH OUTPUT: 'HOT HOT HOT: Notes on'",
      "SPEECH OUTPUT: 'access to Firefox 3.0'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -915,7 +913,8 @@ sequence.append(utils.AssertPresentationAction(
     "95. Line Up",
     ["BRAILLE LINE:  'Orca Logo'",
      "     VISIBLE:  'Orca Logo', cursor=1",
-     "SPEECH OUTPUT: 'Orca Logo'"]))
+     "SPEECH OUTPUT: 'Orca Logo'",
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -934,10 +933,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Archives\) | FAQ | DocIndex', cursor=1",
      "SPEECH OUTPUT: 'Archives'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: '\) | '",
+     "SPEECH OUTPUT: '\) |'",
      "SPEECH OUTPUT: 'FAQ'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'DocIndex'",
      "SPEECH OUTPUT: 'link'"]))
 
@@ -949,19 +948,19 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Home | Download/Installation | C', cursor=1",
      "SPEECH OUTPUT: 'Home'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Download/Installation'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Configuration/Use'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Accessible Applications'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Mailing List'",
      "SPEECH OUTPUT: 'link image'",
-     "SPEECH OUTPUT: ' ('"]))
+     "SPEECH OUTPUT: '('"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -993,18 +992,16 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "101. Line Up",
-    ["BRAILLE LINE:  'live.gnome.org  h1 $l Titles push button Text push button'",
-     "     VISIBLE:  'live.gnome.org  h1 $l Titles pus', cursor=1",
-     "SPEECH OUTPUT: 'live.gnome.org '",
+    ["BRAILLE LINE:  'live.gnome.org  h1 Search $l Titles push button Text push button'",
+     "     VISIBLE:  'live.gnome.org  h1 Search $l Tit', cursor=1",
+     "SPEECH OUTPUT: 'live.gnome.org'",
      "SPEECH OUTPUT: 'heading level 1'",
      "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'Search'",
      "SPEECH OUTPUT: 'Titles'",
-     "SPEECH OUTPUT: 'push button'",
-     "SPEECH OUTPUT: 'grayed'",
+     "SPEECH OUTPUT: 'push button grayed'",
      "SPEECH OUTPUT: 'Text'",
-     "SPEECH OUTPUT: 'push button'",
-     "SPEECH OUTPUT: 'grayed'"]))
+     "SPEECH OUTPUT: 'push button grayed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
diff --git a/test/keystrokes/firefox/longdesc_13.py b/test/keystrokes/firefox/longdesc_13.py
index 4cd1c8d..5aeee1c 100644
--- a/test/keystrokes/firefox/longdesc_13.py
+++ b/test/keystrokes/firefox/longdesc_13.py
@@ -12,8 +12,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'the image image'",
      "     VISIBLE:  'the image image', cursor=0",
      "SPEECH OUTPUT: 'the image'",
-     "SPEECH OUTPUT: 'image'",
-     "SPEECH OUTPUT: 'has long description'"]))
+     "SPEECH OUTPUT: 'image has long description'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
diff --git a/test/keystrokes/firefox/mouseover_javascript_alert.py 
b/test/keystrokes/firefox/mouseover_javascript_alert.py
index f71baf3..2143a4a 100644
--- a/test/keystrokes/firefox/mouseover_javascript_alert.py
+++ b/test/keystrokes/firefox/mouseover_javascript_alert.py
@@ -21,7 +21,8 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'Firefox application MouseOvers - Mozilla Firefox frame dialog OK push button'",
      "     VISIBLE:  'OK push button', cursor=1",
      "SPEECH OUTPUT: 'Welcome to mouseover-enabled Orca!'",
-     "SPEECH OUTPUT: 'OK push button'"]))
+     "SPEECH OUTPUT: 'OK'",
+     "SPEECH OUTPUT: 'push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Escape"))
@@ -29,7 +30,8 @@ sequence.append(utils.AssertPresentationAction(
     "2. Escape to dismiss the dialog.",
     ["BRAILLE LINE:  'Orca Logo image'",
      "     VISIBLE:  'Orca Logo image', cursor=0",
-     "SPEECH OUTPUT: 'Orca Logo image'"]))
+     "SPEECH OUTPUT: 'Orca Logo'",
+     "SPEECH OUTPUT: 'image'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/say_all_bug_511389.py b/test/keystrokes/firefox/say_all_bug_511389.py
index 765112d..f430047 100644
--- a/test/keystrokes/firefox/say_all_bug_511389.py
+++ b/test/keystrokes/firefox/say_all_bug_511389.py
@@ -18,8 +18,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Bar'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '",
-     "The end.'"]))
+     "SPEECH OUTPUT: 'The end.'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/say_all_bug_591351_1.py b/test/keystrokes/firefox/say_all_bug_591351_1.py
index 1146ee9..edc9079 100644
--- a/test/keystrokes/firefox/say_all_bug_591351_1.py
+++ b/test/keystrokes/firefox/say_all_bug_591351_1.py
@@ -11,13 +11,15 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Add"))
 sequence.append(utils.AssertPresentationAction(
     "1. KP_Add to do a SayAll",
-    ["SPEECH OUTPUT: 'Hello world.",
-     "",
-     "",
-     " I wonder what a bevezeto is. I should Google that. Aha! It is the Hungarian word for 
\"Introduction\". Here is some '",
-     "SPEECH OUTPUT: 'proof link'",
-     "SPEECH OUTPUT: '. I really think we need to get Attila to teach the Orca team some Hungarian. Maybe 
one (really easy) phrase per bug comment. separator'",
-     "SPEECH OUTPUT: 'Foo link'"]))
+    ["SPEECH OUTPUT: 'Hello world.'",
+     "SPEECH OUTPUT: 'I wonder what a bevezeto is. I should Google that.'",
+     "SPEECH OUTPUT: 'Aha! It is the Hungarian word for \"Introduction\". Here is some'",
+     "SPEECH OUTPUT: 'proof'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: '. I really think we need to get Attila to teach the Orca team some Hungarian. Maybe 
one (really easy) phrase per bug comment.'",
+     "SPEECH OUTPUT: 'separator'",
+     "SPEECH OUTPUT: 'Foo'",
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/say_all_bugzilla_search.py 
b/test/keystrokes/firefox/say_all_bugzilla_search.py
index 5a6f69f..c48827e 100644
--- a/test/keystrokes/firefox/say_all_bugzilla_search.py
+++ b/test/keystrokes/firefox/say_all_bugzilla_search.py
@@ -16,165 +16,234 @@ sequence.append(KeyComboAction("KP_Add"))
 sequence.append(utils.AssertPresentationAction(
     "KP_Add to do a SayAll",
     ["SPEECH OUTPUT: 'Home'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Bugzilla'",
      "SPEECH OUTPUT: 'New bug'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Browse'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Search'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Reports'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Account'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Admin'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Help'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'Logged In joanmarie diggs gmail com | '",
+     "SPEECH OUTPUT: 'Logged In joanmarie diggs gmail com |'",
      "SPEECH OUTPUT: 'Log Out'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'Short Bug Search Form '",
+     "SPEECH OUTPUT: 'Short Bug Search Form'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Complicated Bug Search Form'",
      "SPEECH OUTPUT: 'Give me some help'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (reloads page.)'",
+     "SPEECH OUTPUT: '(reloads page.)'",
      "SPEECH OUTPUT: 'Summary:'",
      "SPEECH OUTPUT: 'row header'",
-     "SPEECH OUTPUT: 'Summary: contains all of the words/strings combo box'",
+     "SPEECH OUTPUT: 'contains all of the words/strings'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'Search push button'",
+     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: 'Search'",
+     "SPEECH OUTPUT: 'push button'",
      "SPEECH OUTPUT: 'Classification:'",
      "SPEECH OUTPUT: 'column header'",
-     "SPEECH OUTPUT: 'Classification: Admin multi-select List with 8 items'",
+     "SPEECH OUTPUT: 'Admin '",
+     "SPEECH OUTPUT: 'multi-select'",
+     "SPEECH OUTPUT: 'List with 8 items'",
      "SPEECH OUTPUT: 'Product:'",
      "SPEECH OUTPUT: 'column header'",
-     "SPEECH OUTPUT: 'Product: accerciser multi-select List with 379 items'",
+     "SPEECH OUTPUT: 'accerciser'",
+     "SPEECH OUTPUT: 'multi-select'",
+     "SPEECH OUTPUT: 'List with 379 items'",
      "SPEECH OUTPUT: 'Component'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '",
+     "SPEECH OUTPUT: 'Component :'",
      "SPEECH OUTPUT: 'column header'",
-     "SPEECH OUTPUT: 'Component: abiscan multi-select List with 1248 items'",
+     "SPEECH OUTPUT: 'abiscan'",
+     "SPEECH OUTPUT: 'multi-select'",
+     "SPEECH OUTPUT: 'List with 1248 items'",
      "SPEECH OUTPUT: 'Version:'",
      "SPEECH OUTPUT: 'column header'",
-     "SPEECH OUTPUT: 'Version: 0.0.1 multi-select List with 857 items'",
+     "SPEECH OUTPUT: '0.0.1'",
+     "SPEECH OUTPUT: 'multi-select'",
+     "SPEECH OUTPUT: 'List with 857 items'",
      "SPEECH OUTPUT: 'Target Milestone:'",
      "SPEECH OUTPUT: 'column header'",
-     "SPEECH OUTPUT: 'Target Milestone: --- multi-select List with 555 items'",
+     "SPEECH OUTPUT: '---'",
+     "SPEECH OUTPUT: 'multi-select'",
+     "SPEECH OUTPUT: 'List with 555 items'",
      "SPEECH OUTPUT: 'A Comment:'",
      "SPEECH OUTPUT: 'row header'",
-     "SPEECH OUTPUT: 'contains the string combo box'",
+     "SPEECH OUTPUT: 'contains the string'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'Whiteboard:'",
      "SPEECH OUTPUT: 'row header'",
-     "SPEECH OUTPUT: 'contains all of the words/strings combo box'",
+     "SPEECH OUTPUT: 'contains all of the words/strings'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'Keywords'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': '",
+     "SPEECH OUTPUT: 'Keywords :'",
      "SPEECH OUTPUT: 'row header'",
-     "SPEECH OUTPUT: 'contains all of the keywords combo box'",
+     "SPEECH OUTPUT: 'contains all of the keywords'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'separator'",
      "SPEECH OUTPUT: 'Status:'",
      "SPEECH OUTPUT: 'column header'",
-     "SPEECH OUTPUT: 'Status:'",
-     "SPEECH OUTPUT: 'UNCONFIRMED NEW ASSIGNED REOPENED NEEDINFO'",
-     "SPEECH OUTPUT: 'multi-select List with 8 items'",
+     "SPEECH OUTPUT: 'UNCONFIRMED'",
+     "SPEECH OUTPUT: 'NEW'",
+     "SPEECH OUTPUT: 'ASSIGNED'",
+     "SPEECH OUTPUT: 'REOPENED'",
+     "SPEECH OUTPUT: 'NEEDINFO'",
+     "SPEECH OUTPUT: 'multi-select'",
+     "SPEECH OUTPUT: 'List with 8 items'",
      "SPEECH OUTPUT: 'Resolution: '",
      "SPEECH OUTPUT: 'column header'",
-     "SPEECH OUTPUT: 'Resolution:'",
      "SPEECH OUTPUT: 'FIXED'",
-     "SPEECH OUTPUT: 'multi-select List with 12 items'",
+     "SPEECH OUTPUT: 'multi-select'",
+     "SPEECH OUTPUT: 'List with 12 items'",
      "SPEECH OUTPUT: 'Severity:'",
      "SPEECH OUTPUT: 'column header'",
-     "SPEECH OUTPUT: 'Severity: blocker multi-select List with 7 items'",
+     "SPEECH OUTPUT: 'blocker'",
+     "SPEECH OUTPUT: 'multi-select'",
+     "SPEECH OUTPUT: 'List with 7 items'",
      "SPEECH OUTPUT: 'Priority:'",
      "SPEECH OUTPUT: 'column header'",
-     "SPEECH OUTPUT: 'Priority: Immediate multi-select List with 5 items'",
+     "SPEECH OUTPUT: 'Immediate'",
+     "SPEECH OUTPUT: 'multi-select'",
+     "SPEECH OUTPUT: 'List with 5 items'",
      "SPEECH OUTPUT: 'OS:'",
      "SPEECH OUTPUT: 'column header'",
-     "SPEECH OUTPUT: 'OS: All multi-select List with 21 items'",
-     "SPEECH OUTPUT: 'Email and Numbering'",
+     "SPEECH OUTPUT: 'All'",
+     "SPEECH OUTPUT: 'multi-select'",
+     "SPEECH OUTPUT: 'List with 21 items'",
+     "SPEECH OUTPUT: 'Email and Numbering '",
      "SPEECH OUTPUT: 'Any one of:'",
-     "SPEECH OUTPUT: 'check box checked'",
-     "SPEECH OUTPUT: ' the bug assignee'",
-     "SPEECH OUTPUT: 'check box not checked'",
-     "SPEECH OUTPUT: ' the reporter'",
-     "SPEECH OUTPUT: 'check box not checked'",
-     "SPEECH OUTPUT: ' the QA contact'",
-     "SPEECH OUTPUT: 'check box not checked'",
-     "SPEECH OUTPUT: ' a CC list member'",
-     "SPEECH OUTPUT: 'check box not checked'",
-     "SPEECH OUTPUT: ' a commenter'",
-     "SPEECH OUTPUT: 'contains combo box'",
+     "SPEECH OUTPUT: 'check box'",
+     "SPEECH OUTPUT: 'checked'",
+     "SPEECH OUTPUT: 'the bug assignee'",
+     "SPEECH OUTPUT: 'check box'",
+     "SPEECH OUTPUT: 'not checked'",
+     "SPEECH OUTPUT: 'the reporter'",
+     "SPEECH OUTPUT: 'check box'",
+     "SPEECH OUTPUT: 'not checked'",
+     "SPEECH OUTPUT: 'the QA contact'",
+     "SPEECH OUTPUT: 'check box'",
+     "SPEECH OUTPUT: 'not checked'",
+     "SPEECH OUTPUT: 'a CC list member'",
+     "SPEECH OUTPUT: 'check box'",
+     "SPEECH OUTPUT: 'not checked'",
+     "SPEECH OUTPUT: 'a commenter'",
+     "SPEECH OUTPUT: 'contains'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'Any one of:'",
-     "SPEECH OUTPUT: 'check box checked'",
-     "SPEECH OUTPUT: ' the bug assignee'",
-     "SPEECH OUTPUT: 'check box checked'",
-     "SPEECH OUTPUT: ' the reporter'",
-     "SPEECH OUTPUT: 'check box checked'",
-     "SPEECH OUTPUT: ' the QA contact'",
-     "SPEECH OUTPUT: 'check box checked'",
-     "SPEECH OUTPUT: ' a CC list member'",
-     "SPEECH OUTPUT: 'check box not checked'",
-     "SPEECH OUTPUT: ' a commenter'",
-     "SPEECH OUTPUT: 'contains combo box'",
+     "SPEECH OUTPUT: 'check box'",
+     "SPEECH OUTPUT: 'checked'",
+     "SPEECH OUTPUT: 'the bug assignee'",
+     "SPEECH OUTPUT: 'check box'",
+     "SPEECH OUTPUT: 'checked'",
+     "SPEECH OUTPUT: 'the reporter'",
+     "SPEECH OUTPUT: 'check box'",
+     "SPEECH OUTPUT: 'checked'",
+     "SPEECH OUTPUT: 'the QA contact'",
+     "SPEECH OUTPUT: 'check box'",
+     "SPEECH OUTPUT: 'checked'",
+     "SPEECH OUTPUT: 'a CC list member'",
+     "SPEECH OUTPUT: 'check box'",
+     "SPEECH OUTPUT: 'not checked'",
+     "SPEECH OUTPUT: 'a commenter'",
+     "SPEECH OUTPUT: 'contains'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'separator'",
-     "SPEECH OUTPUT: 'Only include combo box'",
+     "SPEECH OUTPUT: 'Only include'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'bugs numbered:'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: '(comma-separated list)'",
      "SPEECH OUTPUT: 'Bug Changes'",
      "SPEECH OUTPUT: 'Only bugs changed between:'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: ' and entry Now ",
-     "(YYYY-MM-DD or relative dates)'",
+     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: 'and'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: 'Now'",
+     "SPEECH OUTPUT: '(YYYY-MM-DD or relative dates)'",
      "SPEECH OUTPUT: 'where one or more of the following changed:'",
-     "SPEECH OUTPUT: 'where one or more of the following changed: [Bug creation] multi-select List with 26 
items'",
+     "SPEECH OUTPUT: '[Bug creation]'",
+     "SPEECH OUTPUT: 'multi-select'",
+     "SPEECH OUTPUT: 'List with 26 items'",
      "SPEECH OUTPUT: 'and the new value was:'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'GNOME version:'",
      "SPEECH OUTPUT: 'column header'",
-     "SPEECH OUTPUT: 'GNOME version: Unspecified multi-select List with 14 items'",
+     "SPEECH OUTPUT: 'Unspecified'",
+     "SPEECH OUTPUT: 'multi-select'",
+     "SPEECH OUTPUT: 'List with 14 items'",
      "SPEECH OUTPUT: 'GNOME target:'",
      "SPEECH OUTPUT: 'column header'",
-     "SPEECH OUTPUT: 'GNOME target: Unspecified multi-select List with 12 items'",
-     "SPEECH OUTPUT: 'Sort results by: Reuse same sort as last time combo box'",
-     "SPEECH OUTPUT: 'Search push button'",
-     "SPEECH OUTPUT: 'check box not checked  and remember these as my default search options'",
+     "SPEECH OUTPUT: 'Unspecified'",
+     "SPEECH OUTPUT: 'multi-select'",
+     "SPEECH OUTPUT: 'List with 12 items'",
+     "SPEECH OUTPUT: 'Sort results by:'",
+     "SPEECH OUTPUT: 'Reuse same sort as last time'",
+     "SPEECH OUTPUT: 'combo box'",
+     "SPEECH OUTPUT: 'Search'",
+     "SPEECH OUTPUT: 'push button'",
+     "SPEECH OUTPUT: 'check box'",
+     "SPEECH OUTPUT: 'not checked'",
+     "SPEECH OUTPUT: 'and remember these as my default search options'",
      "SPEECH OUTPUT: 'separator'",
      "SPEECH OUTPUT: 'Advanced Searching Using Boolean Charts:'",
-     "SPEECH OUTPUT: 'check box not checked'",
-     "SPEECH OUTPUT: ' Not (negate this whole chart)'",
-     "SPEECH OUTPUT: '--- combo box'",
-     "SPEECH OUTPUT: '--- combo box entry'",
-     "SPEECH OUTPUT: 'Or push button'",
-     "SPEECH OUTPUT: 'And push button'",
-     "SPEECH OUTPUT: 'Add another boolean chart push button'",
+     "SPEECH OUTPUT: 'check box'",
+     "SPEECH OUTPUT: 'not checked'",
+     "SPEECH OUTPUT: 'Not (negate this whole chart)'",
+     "SPEECH OUTPUT: '---'",
+     "SPEECH OUTPUT: 'combo box'",
+     "SPEECH OUTPUT: '---'",
+     "SPEECH OUTPUT: 'combo box'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: 'Or'",
+     "SPEECH OUTPUT: 'push button'",
+     "SPEECH OUTPUT: 'And'",
+     "SPEECH OUTPUT: 'push button'",
+     "SPEECH OUTPUT: 'Add another boolean chart'",
+     "SPEECH OUTPUT: 'push button'",
      "SPEECH OUTPUT: 'separator'",
-     "SPEECH OUTPUT: 'Saved Searches: '",
+     "SPEECH OUTPUT: 'Saved Searches:'",
      "SPEECH OUTPUT: 'My Bugs and Patches'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'All Orca'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Firefox'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'open orca'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Open RFEs'",
      "SPEECH OUTPUT: 'link'"]))
 
diff --git a/test/keystrokes/firefox/say_all_empty_anchor.py b/test/keystrokes/firefox/say_all_empty_anchor.py
index 0f7569e..8d977b8 100644
--- a/test/keystrokes/firefox/say_all_empty_anchor.py
+++ b/test/keystrokes/firefox/say_all_empty_anchor.py
@@ -11,7 +11,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Add"))
 sequence.append(utils.AssertPresentationAction(
     "1. KP_Add to do a SayAll",
-    ["SPEECH OUTPUT: 'FAQ '",
+    ["SPEECH OUTPUT: 'FAQ'",
      "SPEECH OUTPUT: 'heading level 1'",
      "SPEECH OUTPUT: 'Battery'",
      "SPEECH OUTPUT: 'heading level 2'",
@@ -21,15 +21,13 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Q. Why did Orca used to get stuck on this page?'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '",
-     "FOO'",
+     "SPEECH OUTPUT: 'FOO'",
      "SPEECH OUTPUT: 'heading level 2'",
      "SPEECH OUTPUT: 'Q. Why would someone put a line break in a heading?'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Q. What is the airspeed velocity of an unladen swallow?'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '",
-     "Battery'",
+     "SPEECH OUTPUT: 'Battery'",
      "SPEECH OUTPUT: 'heading level 2'",
      "SPEECH OUTPUT: 'Q. What is a battery?",
      "A. Look it up.'",
diff --git a/test/keystrokes/firefox/say_all_enter_bug.py b/test/keystrokes/firefox/say_all_enter_bug.py
index 0b57998..6d76806 100644
--- a/test/keystrokes/firefox/say_all_enter_bug.py
+++ b/test/keystrokes/firefox/say_all_enter_bug.py
@@ -12,96 +12,109 @@ sequence.append(KeyComboAction("KP_Add"))
 sequence.append(utils.AssertPresentationAction(
     "1. KP_Add to do a SayAll",
     ["SPEECH OUTPUT: 'Home'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Bugzilla'",
      "SPEECH OUTPUT: 'New bug'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Browse'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Search'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Reports'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Account'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Admin'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' · '",
+     "SPEECH OUTPUT: '·'",
      "SPEECH OUTPUT: 'Help'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'Logged In joanmarie diggs gmail com | '",
+     "SPEECH OUTPUT: 'Logged In joanmarie diggs gmail com |'",
      "SPEECH OUTPUT: 'Log Out'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Enter Bug: orca \u2013 This page lets you enter a new bug into Bugzilla.'",
      "SPEECH OUTPUT: 'heading level 1'",
-     "SPEECH OUTPUT: 'Before reporting a bug, please read the '",
+     "SPEECH OUTPUT: 'Before reporting a bug, please read the'",
      "SPEECH OUTPUT: 'bug writing guidelines'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ', please look at the list of '",
+     "SPEECH OUTPUT: ', please look at the list of'",
      "SPEECH OUTPUT: 'most frequently reported bugs'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ', and please '",
+     "SPEECH OUTPUT: ', and please'",
      "SPEECH OUTPUT: 'search'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' or '",
+     "SPEECH OUTPUT: 'or'",
      "SPEECH OUTPUT: 'browse'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for the bug.'",
+     "SPEECH OUTPUT: 'for the bug.'",
      "SPEECH OUTPUT: 'Reporter:'",
      "SPEECH OUTPUT: 'joanmarie diggs gmail com'",
      "SPEECH OUTPUT: 'Product:'",
      "SPEECH OUTPUT: 'orca'",
      "SPEECH OUTPUT: 'Version:'",
-     "SPEECH OUTPUT: 'Version: 2.21.x List with 9 items'",
+     "SPEECH OUTPUT: '2.21.x '",
+     "SPEECH OUTPUT: 'List with 9 items'",
      "SPEECH OUTPUT: 'Component'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: ':'",
-     "SPEECH OUTPUT: 'Component: braille List with 5 items'",
+     "SPEECH OUTPUT: 'braille '",
+     "SPEECH OUTPUT: 'List with 5 items'",
      "SPEECH OUTPUT: 'GNOME version'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: ':'",
-     "SPEECH OUTPUT: 'Unspecified combo box'",
+     "SPEECH OUTPUT: 'Unspecified'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'OS'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: ':'",
-     "SPEECH OUTPUT: 'Linux combo box'",
+     "SPEECH OUTPUT: 'Linux'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'Severity'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: ':'",
-     "SPEECH OUTPUT: 'normal combo box'",
+     "SPEECH OUTPUT: 'normal'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'Summary:'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'Description:'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'Optional Fields'",
      "SPEECH OUTPUT: 'Cc:'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'Keywords'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: ':'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'Depends on:'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'Blocks:'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: 'Commit push button'",
-     "SPEECH OUTPUT: 'Remember values as bookmarkable template push button'",
-     "SPEECH OUTPUT: '",
-     "We've made a guess at your operating system. Please check it and, if we got it wrong, email bugmaster 
gnome org '",
-     "SPEECH OUTPUT: 'Saved Searches: '",
+     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: 'Commit'",
+     "SPEECH OUTPUT: 'push button'",
+     "SPEECH OUTPUT: 'Remember values as bookmarkable template'",
+     "SPEECH OUTPUT: 'push button'",
+     "SPEECH OUTPUT: 'We've made a guess at your operating system. Please check it and, if we got it wrong, 
email bugmaster gnome org '",
+     "SPEECH OUTPUT: 'Saved Searches:'",
      "SPEECH OUTPUT: 'All Orca'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Firefox'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'open orca'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Open RFEs'",
      "SPEECH OUTPUT: 'link'"]))
 
diff --git a/test/keystrokes/firefox/say_all_entries.py b/test/keystrokes/firefox/say_all_entries.py
index 2cc6f6c..a9d9713 100644
--- a/test/keystrokes/firefox/say_all_entries.py
+++ b/test/keystrokes/firefox/say_all_entries.py
@@ -13,45 +13,60 @@ sequence.append(utils.AssertPresentationAction(
     "1. KP_Add to do a SayAll",
     ["SPEECH OUTPUT: 'Here are some entries'",
      "SPEECH OUTPUT: 'heading level 2'",
-     "SPEECH OUTPUT: 'Type '",
+     "SPEECH OUTPUT: 'Type'",
      "SPEECH OUTPUT: 'something'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' rather '",
+     "SPEECH OUTPUT: 'rather'",
      "SPEECH OUTPUT: 'amusing'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' here: entry'",
-     "SPEECH OUTPUT: 'Amusing numbers fall between entry  and entry .'",
+     "SPEECH OUTPUT: 'here:'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: 'Amusing numbers fall between'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: 'and'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: '.'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'I'm a label'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'Am I a label as well?'",
      "SPEECH OUTPUT: 'What the heck should we do here?'",
      "SPEECH OUTPUT: 'heading level 2'",
      "SPEECH OUTPUT: 'Looking at what follows visually, I'm not sure what I would type/i.e. what the labels 
are.'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'Too far away to be a label.'",
      "SPEECH OUTPUT: 'Distance doesn't count on the left'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'Sometimes labels can be below the fields due to <br />'",
      "SPEECH OUTPUT: 'heading level 2'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: '",
-     "First Name'",
+     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: 'First Name'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: '",
-     "M.I.'",
+     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: 'M.I.'",
      "SPEECH OUTPUT: 'entry'",
-     "SPEECH OUTPUT: '",
-     "Last Name'",
+     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: 'Last Name'",
      "SPEECH OUTPUT: 'Other times it's due to layout tables'",
      "SPEECH OUTPUT: 'heading level 2'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'First name'",
      "SPEECH OUTPUT: 'Middle",
      "initial'",
-     "SPEECH OUTPUT: 'Last '",
+     "SPEECH OUTPUT: 'Last'",
      "SPEECH OUTPUT: 'name'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Second verse same as the first (only now the labels are above the fields)'",
@@ -59,12 +74,15 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'First Name'",
      "SPEECH OUTPUT: 'Middle",
      "initial'",
-     "SPEECH OUTPUT: 'Last '",
+     "SPEECH OUTPUT: 'Last'",
      "SPEECH OUTPUT: 'name'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'Decisions, decisions.... When in doubt, closest table cell text wins'",
      "SPEECH OUTPUT: 'heading level 2'",
      "SPEECH OUTPUT: 'First name'",
@@ -72,8 +90,11 @@ sequence.append(utils.AssertPresentationAction(
      "initial'",
      "SPEECH OUTPUT: 'Last name'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'Given name'",
      "SPEECH OUTPUT: 'initial'",
      "SPEECH OUTPUT: 'Surname'",
@@ -82,8 +103,11 @@ sequence.append(utils.AssertPresentationAction(
      "initial'",
      "SPEECH OUTPUT: 'Last name'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'Given name'",
      "SPEECH OUTPUT: 'initial'",
      "SPEECH OUTPUT: 'Surname'",
@@ -95,27 +119,48 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'Last name'",
      "SPEECH OUTPUT: 'patched image'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'We mustn't forget images as labels -- even if that practice is lame'",
      "SPEECH OUTPUT: 'heading level 2'",
      "SPEECH OUTPUT: 'bandaid graphic'",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
      "SPEECH OUTPUT: 'bandaid graphic redux'",
-     "SPEECH OUTPUT: 'Magic disappearing text trick: entry tab to me and I disappear'",
-     "SPEECH OUTPUT: 'Tell me a secret: password text'",
-     "SPEECH OUTPUT: 'Tell me a little more about yourself:",
-     " entry and plan to write my memoirs.'"]))
+     "SPEECH OUTPUT: 'Magic disappearing text trick:'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: 'tab to me and I disappear'",
+     "SPEECH OUTPUT: 'Tell me a secret:",
+     "SPEECH OUTPUT: 'password text'",
+     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: 'Tell me a little more about yourself:'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: 'I",
+     "am a monkey with a long tail. I like to swing from trees and eat",
+     "bananas. I've recently taken up typing and plan to write my memoirs. '"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/say_all_heading_section.py 
b/test/keystrokes/firefox/say_all_heading_section.py
index 33f1319..12cae3c 100644
--- a/test/keystrokes/firefox/say_all_heading_section.py
+++ b/test/keystrokes/firefox/say_all_heading_section.py
@@ -15,11 +15,14 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'heading level 1'",
      "SPEECH OUTPUT: 'Heading 2.'",
      "SPEECH OUTPUT: 'heading level 1'",
-     "SPEECH OUTPUT: 'sect 1 Heading 3.'",
+     "SPEECH OUTPUT: 'sect 1'",
+     "SPEECH OUTPUT: 'Heading 3.'",
      "SPEECH OUTPUT: 'heading level 1'",
-     "SPEECH OUTPUT: 'sect 2 Heading 4.'",
+     "SPEECH OUTPUT: 'sect 2'",
+     "SPEECH OUTPUT: 'Heading 4.'",
      "SPEECH OUTPUT: 'heading level 1'",
-     "SPEECH OUTPUT: 'sect 3 Heading 5.'",
+     "SPEECH OUTPUT: 'sect 3'",
+     "SPEECH OUTPUT: 'Heading 5.'",
      "SPEECH OUTPUT: 'heading level 1'",
      "SPEECH OUTPUT: 'Heading 6.'",
      "SPEECH OUTPUT: 'heading level 1'"]))
diff --git a/test/keystrokes/firefox/say_all_imagemap.py b/test/keystrokes/firefox/say_all_imagemap.py
index d975d99..dba8663 100644
--- a/test/keystrokes/firefox/say_all_imagemap.py
+++ b/test/keystrokes/firefox/say_all_imagemap.py
@@ -13,35 +13,63 @@ sequence.append(utils.AssertPresentationAction(
     "1. KP_Add to do a SayAll",
     ["SPEECH OUTPUT: 'This looks like A to Z, but it's really Z to A.'",
      "SPEECH OUTPUT: 'Test:'",
-     "SPEECH OUTPUT: 'z image map link rect'",
-     "SPEECH OUTPUT: 'y image map link rect'",
-     "SPEECH OUTPUT: 'x image map link rect'",
-     "SPEECH OUTPUT: 'w image map link rect'",
-     "SPEECH OUTPUT: 'v image map link rect'",
-     "SPEECH OUTPUT: 'u image map link rect'",
-     "SPEECH OUTPUT: 't image map link rect'",
-     "SPEECH OUTPUT: 's image map link rect'",
-     "SPEECH OUTPUT: 'r image map link rect'",
-     "SPEECH OUTPUT: 'q image map link rect'",
-     "SPEECH OUTPUT: 'p image map link rect'",
-     "SPEECH OUTPUT: 'o image map link rect'",
-     "SPEECH OUTPUT: 'n image map link rect'",
-     "SPEECH OUTPUT: 'm image map link rect'",
-     "SPEECH OUTPUT: 'l image map link rect'",
-     "SPEECH OUTPUT: 'k image map link rect'",
-     "SPEECH OUTPUT: 'j image map link rect'",
-     "SPEECH OUTPUT: 'i image map link rect'",
-     "SPEECH OUTPUT: 'h image map link rect'",
-     "SPEECH OUTPUT: 'g image map link rect'",
-     "SPEECH OUTPUT: 'f image map link rect'",
-     "SPEECH OUTPUT: 'e image map link rect'",
-     "SPEECH OUTPUT: 'd image map link rect'",
-     "SPEECH OUTPUT: 'c image map link rect'",
-     "SPEECH OUTPUT: 'b image map link rect'",
-     "SPEECH OUTPUT: 'a image map link rect'",
+     "SPEECH OUTPUT: 'z'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'y'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'x'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'w'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'v'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'u'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 't'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'r'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'q'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'p'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'o'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'n'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'm'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'l'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'k'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'j'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'i'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'h'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'g'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'f'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'e'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'd'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'c'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'b'",
+     "SPEECH OUTPUT: 'image map link'",
+     "SPEECH OUTPUT: 'a'",
+     "SPEECH OUTPUT: 'image map link'",
      "SPEECH OUTPUT: 'Here is some text.'",
      "SPEECH OUTPUT: 'Safeway had some interesting (and problematic) image maps. I didn't steal the images, 
but if you tab and look at the status bar, you should be able to see the URI for each region. We should also 
be speaking and brailling it correctly now -- at least as best as we can given what they gave us.'",
-     "SPEECH OUTPUT: 'wk09_frozenmovie image link'",
+     "SPEECH OUTPUT: 'wk09_frozenmovie'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'image'",
      "SPEECH OUTPUT: 'image'",
      "SPEECH OUTPUT: 'image'"]))
diff --git a/test/keystrokes/firefox/say_all_multi_line_text.py 
b/test/keystrokes/firefox/say_all_multi_line_text.py
index fbf141b..b9ec541 100644
--- a/test/keystrokes/firefox/say_all_multi_line_text.py
+++ b/test/keystrokes/firefox/say_all_multi_line_text.py
@@ -11,32 +11,44 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Add"))
 sequence.append(utils.AssertPresentationAction(
     "1. KP_Add to do a SayAll",
-    ["SPEECH OUTPUT: 'Table test foo bar table row foo foo bar bar table row Hello'",
+    ["SPEECH OUTPUT: 'Table test'",
+     "SPEECH OUTPUT: 'foo bar'",
+     "SPEECH OUTPUT: 'table row'",
+     "SPEECH OUTPUT: 'foo foo bar bar'",
+     "SPEECH OUTPUT: 'table row'",
+     "SPEECH OUTPUT: 'Hello'",
      "SPEECH OUTPUT: 'heading level 3'",
      "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'This is a test'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' that is not very interesting. \u2022'",
+     "SPEECH OUTPUT: 'that is not very interesting.'",
+     "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'But it looks like'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' a real-world example. \u2022'",
+     "SPEECH OUTPUT: 'a real-world example.'",
+     "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'And that's'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' why this silly test is here. So it's '",
+     "SPEECH OUTPUT: 'why this silly test is here.'",
+     "SPEECH OUTPUT: 'So it's'",
      "SPEECH OUTPUT: 'far more interesting'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' than it looks. World'",
+     "SPEECH OUTPUT: 'than it looks.'",
+     "SPEECH OUTPUT: 'World'",
      "SPEECH OUTPUT: 'heading level 3'",
      "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'The thing is'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' we can't copy content. •'",
+     "SPEECH OUTPUT: 'we can't copy content.'",
+     "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'So we must'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' create silly tests. •'",
+     "SPEECH OUTPUT: 'create silly tests.'",
+     "SPEECH OUTPUT: '•'",
      "SPEECH OUTPUT: 'Oh'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' well. At least it's '",
+     "SPEECH OUTPUT: 'well.'",
+     "SPEECH OUTPUT: 'At least it's'",
      "SPEECH OUTPUT: 'over'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: '.'"]))
diff --git a/test/keystrokes/firefox/say_all_nested_tables.py 
b/test/keystrokes/firefox/say_all_nested_tables.py
index 43926d1..f2cadcd 100644
--- a/test/keystrokes/firefox/say_all_nested_tables.py
+++ b/test/keystrokes/firefox/say_all_nested_tables.py
@@ -11,16 +11,18 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Add"))
 sequence.append(utils.AssertPresentationAction(
     "1. KP_Add to do a SayAll",
-    ["SPEECH OUTPUT: 'nested-tables image link'",
+    ["SPEECH OUTPUT: 'nested-tables'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Campus'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '  .  '",
+     "SPEECH OUTPUT: '.'",
      "SPEECH OUTPUT: 'Classroom'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '  .  '",
+     "SPEECH OUTPUT: '.'",
      "SPEECH OUTPUT: 'Communicate'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '  .  '",
+     "SPEECH OUTPUT: '.'",
      "SPEECH OUTPUT: 'Reports'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Your Learning Plan'",
diff --git a/test/keystrokes/firefox/say_all_role_combo_box.py 
b/test/keystrokes/firefox/say_all_role_combo_box.py
index e1c344d..c63341f 100644
--- a/test/keystrokes/firefox/say_all_role_combo_box.py
+++ b/test/keystrokes/firefox/say_all_role_combo_box.py
@@ -13,18 +13,24 @@ sequence.append(utils.AssertPresentationAction(
     "1. KP_Add to do a SayAll",
     ["SPEECH OUTPUT: 'Severity'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': Severity normal combo box'",
+     "SPEECH OUTPUT: ':'",
+     "SPEECH OUTPUT: 'Severity'",
+     "SPEECH OUTPUT: 'normal'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'Priority'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ': Normal combo box'",
-     "SPEECH OUTPUT: 'Resolution: ",
-     "'",
+     "SPEECH OUTPUT: ':'",
+     "SPEECH OUTPUT: 'Normal'",
+     "SPEECH OUTPUT: 'combo box'",
+     "SPEECH OUTPUT: 'Resolution:'",
      "SPEECH OUTPUT: 'FIXED'",
      "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'Version'",
-     "SPEECH OUTPUT: '2.16 combo box'",
+     "SPEECH OUTPUT: '2.16'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'Component'",
-     "SPEECH OUTPUT: 'Speech combo box'"]))
+     "SPEECH OUTPUT: 'Speech'",
+     "SPEECH OUTPUT: 'combo box'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/say_all_role_lists.py b/test/keystrokes/firefox/say_all_role_lists.py
index f143bae..fd4e729 100644
--- a/test/keystrokes/firefox/say_all_role_lists.py
+++ b/test/keystrokes/firefox/say_all_role_lists.py
@@ -13,7 +13,36 @@ sequence.append(utils.AssertPresentationAction(
     "1. KP_Add to do a SayAll",
     ["SPEECH OUTPUT: 'Welcome to a List of Lists'",
      "SPEECH OUTPUT: 'heading level 1'",
-     "SPEECH OUTPUT: 'Lists are not only fun to make, they are fun to use. They help us: 1.remember what the 
heck we are doing each day 2.arrange long and arbitrary lines of text into ordered lists that are pleasing to 
the eye and suggest some sense of priority, even if it is artificial 3.look really cool when we carry them 
around on yellow Post-Itstm. 4.and that other thing I keep forgetting. Your ordered lists can start at a 
strange number, like: VI.And use roman numerals, g.You might try using letters as well, H.Maybe you prefer 
Big Letters, ix.or small roman numerals •But discs belong to unordered lists 50.Though you can set the value 
in a list item! Unordered list: •listing item ◦first sublevel ▪look for the bullet on ▪each sublevel ▪they 
should all be different, except here. ▪second sublevel or you can specify a square ◦if your TYPE is circle 
•or even a disc Franz Liszt ◦was a composer who was not square •would have liked the Who ◦feeling listle
 ss ▪blah, blah, blah •whine, whine, whine'"]))
+     "SPEECH OUTPUT: 'Lists are not only fun to make, they are fun to use. They help us:'",
+     "SPEECH OUTPUT: '1.remember what the heck we are doing each day'",
+     "SPEECH OUTPUT: '2.arrange long and arbitrary lines of text into ordered lists that are pleasing to the 
eye and suggest some sense of priority, even if it is artificial'",
+     "SPEECH OUTPUT: '3.look really cool when we carry them around on yellow Post-Itstm.'",
+     "SPEECH OUTPUT: '4.and that other thing I keep forgetting.'",
+     "SPEECH OUTPUT: 'Your ordered lists can start at a strange number, like:'",
+     "SPEECH OUTPUT: 'VI.And use roman numerals,'",
+     "SPEECH OUTPUT: 'g.You might try using letters as well,'",
+     "SPEECH OUTPUT: 'H.Maybe you prefer Big Letters,'",
+     "SPEECH OUTPUT: 'ix.or small roman numerals'",
+     "SPEECH OUTPUT: '•But discs belong to unordered lists'",
+     "SPEECH OUTPUT: '50.Though you can set the value in a list item!'",
+     "SPEECH OUTPUT: 'Unordered list:'",
+     "SPEECH OUTPUT: '•listing item'",
+     "SPEECH OUTPUT: 'tree level 1'",
+     "SPEECH OUTPUT: '◦first sublevel'",
+     "SPEECH OUTPUT: '▪look for the bullet on'",
+     "SPEECH OUTPUT: '▪each sublevel'",
+     "SPEECH OUTPUT: '▪they should all be different, except here.'",
+     "SPEECH OUTPUT: '▪second sublevel'",
+     "SPEECH OUTPUT: '▪or you can specify a square'",
+     "SPEECH OUTPUT: '◦if your TYPE is circle'",
+     "SPEECH OUTPUT: '•or even a disc'",
+     "SPEECH OUTPUT: '▪Franz Liszt'",
+     "SPEECH OUTPUT: 'tree level 1'",
+     "SPEECH OUTPUT: '◦was a composer who was not square'",
+     "SPEECH OUTPUT: '•would have liked the Who'",
+     "SPEECH OUTPUT: '◦feeling listless'",
+     "SPEECH OUTPUT: '▪blah, blah, blah'",
+     "SPEECH OUTPUT: '•whine, whine, whine'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/say_all_simple_form.py b/test/keystrokes/firefox/say_all_simple_form.py
index a22bced..adcc4f8 100644
--- a/test/keystrokes/firefox/say_all_simple_form.py
+++ b/test/keystrokes/firefox/say_all_simple_form.py
@@ -11,19 +11,45 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Add"))
 sequence.append(utils.AssertPresentationAction(
     "1. KP_Add to do a SayAll",
-    ["KNOWN ISSUE: We are guessing the list box label here; we should not",
-     "SPEECH OUTPUT: 'Type something here: entry'",
-     "SPEECH OUTPUT: 'Magic disappearing text trick: entry tab to me and I disappear'",
-     "SPEECH OUTPUT: 'Tell me a secret: password text'",
-     "SPEECH OUTPUT: 'Tell me a little more about yourself:",
-     " entry'",
-     "SPEECH OUTPUT: 'Check one or more: Red check box not checked Blue check box not checked Green check 
box not checked'",
-     "SPEECH OUTPUT: 'Make a selection: Water combo box'",
-     "SPEECH OUTPUT: 'Which sports do you like?",
-     " Which sports do you like? Hockey multi-select List with 4 items'",
-     "SPEECH OUTPUT: 'Dashing picture of Willie Walker image'",
-     "SPEECH OUTPUT: '",
-     "Ain't he handsome (please say yes)? not selected radio button Yes not selected radio button No'"]))
+    ["SPEECH OUTPUT: 'Type something here:'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: 'Magic disappearing text trick:'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: 'tab to me and I disappear'",
+     "SPEECH OUTPUT: 'Tell me a secret:'",
+     "SPEECH OUTPUT: 'password text'",
+     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: 'Tell me a little more about yourself:'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: 'I am a monkey with a long tail.  I like to swing from trees and eat bananas.  I've 
recently taken up typing and plan to write my memoirs.",
+     "     '",
+     "SPEECH OUTPUT: 'Check one or more:'",
+     "SPEECH OUTPUT: 'Red'",
+     "SPEECH OUTPUT: 'check box'",
+     "SPEECH OUTPUT: 'not checked'",
+     "SPEECH OUTPUT: 'Blue'",
+     "SPEECH OUTPUT: 'check box'",
+     "SPEECH OUTPUT: 'not checked'",
+     "SPEECH OUTPUT: 'Green'",
+     "SPEECH OUTPUT: 'check box'",
+     "SPEECH OUTPUT: 'not checked'",
+     "SPEECH OUTPUT: 'Make a selection:'",
+     "SPEECH OUTPUT: 'Water'",
+     "SPEECH OUTPUT: 'combo box'",
+     "SPEECH OUTPUT: 'Which sports do you like?'",
+     "SPEECH OUTPUT: 'Hockey'",
+     "SPEECH OUTPUT: 'multi-select'",
+     "SPEECH OUTPUT: 'List with 4 items'",
+     "SPEECH OUTPUT: 'Dashing picture of Willie Walker'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'Ain't he handsome (please say yes)?'",
+     "SPEECH OUTPUT: 'not selected'",
+     "SPEECH OUTPUT: 'radio button'",
+     "SPEECH OUTPUT: 'Yes'",
+     "SPEECH OUTPUT: 'not selected'",
+     "SPEECH OUTPUT: 'radio button'",
+     "SPEECH OUTPUT: 'No'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/say_all_table_cell_links.py 
b/test/keystrokes/firefox/say_all_table_cell_links.py
index 86d70c7..3787ef4 100644
--- a/test/keystrokes/firefox/say_all_table_cell_links.py
+++ b/test/keystrokes/firefox/say_all_table_cell_links.py
@@ -12,9 +12,7 @@ sequence.append(KeyComboAction("KP_Add"))
 sequence.append(utils.AssertPresentationAction(
     "1. KP_Add to do a SayAll",
     ["SPEECH OUTPUT: 'Here are some links'",
-     "SPEECH OUTPUT: 'HTML Tags",
-     "",
-     "'",
+     "SPEECH OUTPUT: 'HTML Tags'",
      "SPEECH OUTPUT: '<!-->'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: '<!DOCTYPE>'",
diff --git a/test/keystrokes/firefox/say_all_wiki.py b/test/keystrokes/firefox/say_all_wiki.py
index 1164a6d..f0d952c 100644
--- a/test/keystrokes/firefox/say_all_wiki.py
+++ b/test/keystrokes/firefox/say_all_wiki.py
@@ -25,10 +25,16 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Community'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'live.gnome.org '",
+     "SPEECH OUTPUT: 'live.gnome.org'",
      "SPEECH OUTPUT: 'heading level 1'",
-     "SPEECH OUTPUT: 'entry Search'",
-     "SPEECH OUTPUT: 'Titles push button grayed Text push button grayed'",
+     "SPEECH OUTPUT: 'entry'",
+     "SPEECH OUTPUT: 'Search'",
+     "SPEECH OUTPUT: 'Titles'",
+     "SPEECH OUTPUT: 'push button'",
+     "SPEECH OUTPUT: 'grayed'",
+     "SPEECH OUTPUT: 'Text'",
+     "SPEECH OUTPUT: 'push button'",
+     "SPEECH OUTPUT: 'grayed'",
      "SPEECH OUTPUT: 'Home'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'RecentChanges'",
@@ -40,31 +46,44 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'Orca'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'en Español'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
      "SPEECH OUTPUT: 'Home'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Download/Installation'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Configuration/Use'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'Accessible Applications'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | orca-list image link'",
+     "SPEECH OUTPUT: '|'",
+     "SPEECH OUTPUT: 'orca-list'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Mailing List'",
-     "SPEECH OUTPUT: ' ( orca-list image link'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: '('",
+     "SPEECH OUTPUT: 'orca-list'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Archives'",
-     "SPEECH OUTPUT: ') | '",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: ') |'",
      "SPEECH OUTPUT: 'FAQ'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' | '",
+     "SPEECH OUTPUT: '|'",
      "SPEECH OUTPUT: 'DocIndex'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Welcome to Orca!'",
      "SPEECH OUTPUT: 'heading level 1'",
      "SPEECH OUTPUT: 'Orca Logo'",
-     "SPEECH OUTPUT: 'HOT HOT HOT: Notes on '",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'HOT HOT HOT: Notes on'",
      "SPEECH OUTPUT: 'access to Firefox 3.0'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Contents'",
@@ -94,120 +113,221 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'About'",
      "SPEECH OUTPUT: 'heading level 1'",
-     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, extensible, and powerful assistive technology 
for people with visual impairments. Using various combinations of speech synthesis, braille, and 
magnification, Orca helps provide access to applications and toolkits that support the AT-SPI (e.g., the 
GNOME desktop). The development of Orca has been led by the access image link'",
+     "SPEECH OUTPUT: 'Orca is a free, open source, flexible, extensible, and powerful assistive technology 
for people with visual impairments. Using various combinations of speech synthesis, braille, and 
magnification, Orca helps provide access to applications and toolkits that support the AT-SPI (e.g., the 
GNOME desktop). The development of Orca has been led by the'",
+     "SPEECH OUTPUT: 'access'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Accessibility Program Office of Sun Microsystems, Inc.'",
-     "SPEECH OUTPUT: ' with '",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'with'",
      "SPEECH OUTPUT: 'contributions from many community members'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: '.'",
-     "SPEECH OUTPUT: 'The complete list of work to do, including bugs and feature requests, along with known 
problems in other components, is maintained in buglist image link'",
+     "SPEECH OUTPUT: 'The complete list of work to do, including bugs and feature requests, along with known 
problems in other components, is maintained in'",
+     "SPEECH OUTPUT: 'buglist'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Bugzilla'",
-     "SPEECH OUTPUT: ' (please see our '",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: '(please see our'",
      "SPEECH OUTPUT: 'notes on how we use Bugzilla'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: ').'",
-     "SPEECH OUTPUT: 'Please join and participate on the orca-list image link'",
+     "SPEECH OUTPUT: 'Please join and participate on the'",
+     "SPEECH OUTPUT: 'orca-list'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Orca mailing list'",
-     "SPEECH OUTPUT: ' ( orca-list image link'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: '('",
+     "SPEECH OUTPUT: 'orca-list'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'archives'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
      "SPEECH OUTPUT: '): it's a helpful, kind, and productive environment composed of users and 
developers.'",
      "SPEECH OUTPUT: 'Audio Guides'",
      "SPEECH OUTPUT: 'heading level 1'",
      "SPEECH OUTPUT: 'Darragh \xd3 H\xe9iligh'",
-     "SPEECH OUTPUT: ' has created several audio guides for Orca. This is a fantastic contribution 
(THANKS!)!!! The audio guides can be found at linuxat image link'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'has created several audio guides for Orca. This is a fantastic contribution 
(THANKS!)!!! The audio guides can be found at'",
+     "SPEECH OUTPUT: 'linuxat'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'http://www.digitaldarragh.com/linuxat.asp'",
-     "SPEECH OUTPUT: ' and include the following:'",
-     "SPEECH OUTPUT: '• ubuntu-7-4-install-walk-through image link'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'and include the following:'",
+     "SPEECH OUTPUT: '•'",
+     "SPEECH OUTPUT: 'ubuntu-7-4-install-walk-through'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Walk through of the installation of Ubuntu 7.4. Very helpful tutorial'",
-     "SPEECH OUTPUT: '• linux-and-orca-review image link'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: '•'",
+     "SPEECH OUTPUT: 'linux-and-orca-review'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Review of Fedora 7 and the Orca screen reader for the Gnome graphical desktop'",
-     "SPEECH OUTPUT: '• installing-firefox-and-orca image link'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: '•'",
+     "SPEECH OUTPUT: 'installing-firefox-and-orca'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Guide to installing the latest versions of Firefox and Orca'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
      "SPEECH OUTPUT: 'Download/Installation'",
      "SPEECH OUTPUT: 'heading level 1'",
-     "SPEECH OUTPUT: 'As of GNOME 2.16, Orca is a part of the GNOME platform. As a result, Orca is already 
provided by default on a number of operating system distributions, including www.opensolaris.org image link'",
+     "SPEECH OUTPUT: 'As of GNOME 2.16, Orca is a part of the GNOME platform. As a result, Orca is already 
provided by default on a number of operating system distributions, including'",
+     "SPEECH OUTPUT: 'www.opensolaris.org'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Open Solaris'",
-     "SPEECH OUTPUT: ' and www.ubuntu.com image link'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'and'",
+     "SPEECH OUTPUT: 'www.ubuntu.com'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Ubuntu'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
      "SPEECH OUTPUT: '.'",
-     "SPEECH OUTPUT: 'Please also refer to the '",
+     "SPEECH OUTPUT: 'Please also refer to the'",
      "SPEECH OUTPUT: 'Download/Installation page'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for detailed information on various distributions as well as installing Orca directly 
from source.'",
+     "SPEECH OUTPUT: 'for detailed information on various distributions as well as installing Orca directly 
from source.'",
      "SPEECH OUTPUT: 'Configuration/Use'",
      "SPEECH OUTPUT: 'heading level 1'",
-     "SPEECH OUTPUT: 'The command to run orca is orca. You can enter this command by pressing Alt+F2 when 
logged in, waiting for a second or so, then typing orca and pressing return. Orca is designed to present 
information as you navigate the desktop using the keynav-1 image link'",
+     "SPEECH OUTPUT: 'The command to run orca is orca. You can enter this command by pressing Alt+F2 when 
logged in, waiting for a second or so, then typing orca and pressing return. Orca is designed to present 
information as you navigate the desktop using the'",
+     "SPEECH OUTPUT: 'keynav-1'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'built-in navigation mechanisms of GNOME'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
      "SPEECH OUTPUT: '. These navigation mechanisms are consistent across most desktop applications.'",
-     "SPEECH OUTPUT: 'You may sometimes wish to control Orca itself, such as bringing up the '",
+     "SPEECH OUTPUT: 'You may sometimes wish to control Orca itself, such as bringing up the'",
      "SPEECH OUTPUT: 'Orca Configuration GUI'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' (accessed by pressing Insert+Space when Orca is running) and for using flat review 
mode to examine a window. Refer to '",
+     "SPEECH OUTPUT: '(accessed by pressing Insert+Space when Orca is running) and for using flat review 
mode to examine a window. Refer to'",
      "SPEECH OUTPUT: 'Orca Keyboard Commands'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: '(Laptop Layout)'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for more information on Orca-specific keyboard commands. The '",
+     "SPEECH OUTPUT: 'for more information on Orca-specific keyboard commands. The'",
      "SPEECH OUTPUT: 'Orca Configuration GUI'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' also includes a \"Key Bindings\" tab that allows you to get a complete list of Orca 
key bindings.'",
-     "SPEECH OUTPUT: 'Please also refer to the '",
+     "SPEECH OUTPUT: 'also includes a \"Key Bindings\" tab that allows you to get a complete list of Orca 
key bindings.'",
+     "SPEECH OUTPUT: 'Please also refer to the'",
      "SPEECH OUTPUT: 'Configuration/Use page'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for detailed information.'",
+     "SPEECH OUTPUT: 'for detailed information.'",
      "SPEECH OUTPUT: 'Accessible Applications'",
      "SPEECH OUTPUT: 'heading level 1'",
-     "SPEECH OUTPUT: 'Orca is designed to work with applications and toolkits that support the assistive 
technology service provider interface (AT-SPI). This includes the GNOME desktop and its applications, '",
+     "SPEECH OUTPUT: 'Orca is designed to work with applications and toolkits that support the assistive 
technology service provider interface (AT-SPI). This includes the GNOME desktop and its applications,'",
      "SPEECH OUTPUT: 'OpenOffice'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: ', Firefox, and the Java platform. Some applications work better than others, however, 
and the Orca community continually works to provide compelling access to more and more applications.'",
-     "SPEECH OUTPUT: 'On the '",
+     "SPEECH OUTPUT: 'On the'",
      "SPEECH OUTPUT: 'Accessible Applications page'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: ', you will find a growing list of information regarding various applications that can 
be accessed with Orca as well as tips and tricks for using them. The list is not to be a conclusive list of 
all applications. Rather, the goal is to provide a repository within which users can share experiences 
regarding applications they have tested.'",
-     "SPEECH OUTPUT: 'See also the '",
+     "SPEECH OUTPUT: 'See also the'",
      "SPEECH OUTPUT: 'Application Specific Settings'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' page for how to configure settings specific to an application.'",
-     "SPEECH OUTPUT: 'Please also refer to the '",
+     "SPEECH OUTPUT: 'page for how to configure settings specific to an application.'",
+     "SPEECH OUTPUT: 'Please also refer to the'",
      "SPEECH OUTPUT: 'Accessible Applications page'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for detailed information.'",
+     "SPEECH OUTPUT: 'for detailed information.'",
      "SPEECH OUTPUT: 'How Can I Help?'",
      "SPEECH OUTPUT: 'heading level 1'",
-     "SPEECH OUTPUT: 'There's a bunch you can do! Please refer to the '",
+     "SPEECH OUTPUT: 'There's a bunch you can do! Please refer to the'",
      "SPEECH OUTPUT: 'How Can I Help page'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: ' for detailed information.'",
+     "SPEECH OUTPUT: 'for detailed information.'",
      "SPEECH OUTPUT: 'More Information'",
      "SPEECH OUTPUT: 'heading level 1'",
-     "SPEECH OUTPUT: '• Frequently Asked Questions: '",
+     "SPEECH OUTPUT: '•'",
+     "SPEECH OUTPUT: 'Frequently Asked Questions:'",
      "SPEECH OUTPUT: 'FAQ'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '• Mailing list: orca-list image link'",
+     "SPEECH OUTPUT: '•'",
+     "SPEECH OUTPUT: 'Mailing list:'",
+     "SPEECH OUTPUT: 'orca-list'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'orca-list gnome org'",
-     "SPEECH OUTPUT: ' ( orca-list image link'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: '('",
+     "SPEECH OUTPUT: 'orca-list'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Archives'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
      "SPEECH OUTPUT: ')'",
-     "SPEECH OUTPUT: '• Bug database: bugzilla.gnome.org image link'",
+     "SPEECH OUTPUT: '•'",
+     "SPEECH OUTPUT: 'Bug database:'",
+     "SPEECH OUTPUT: 'bugzilla.gnome.org'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'GNOME Bug Tracking System (Bugzilla)'",
-     "SPEECH OUTPUT: ' ( buglist image link'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: '('",
+     "SPEECH OUTPUT: 'buglist'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'current bug list'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
      "SPEECH OUTPUT: ')'",
-     "SPEECH OUTPUT: '• Design documents: orca image link'",
+     "SPEECH OUTPUT: '•'",
+     "SPEECH OUTPUT: 'Design documents:'",
+     "SPEECH OUTPUT: 'orca'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Orca Documentation Series'",
-     "SPEECH OUTPUT: '• www.diveintopython.org image link'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: '•'",
+     "SPEECH OUTPUT: 'www.diveintopython.org'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Dive Into Python, Mark Pilgrim'",
-     "SPEECH OUTPUT: '• 103-6779448-2183842 image link'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: '•'",
+     "SPEECH OUTPUT: '103-6779448-2183842'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Python in a Nutshell, Alex Martelli'",
-     "SPEECH OUTPUT: '• 103-6779448-2183842 image link'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: '•'",
+     "SPEECH OUTPUT: '103-6779448-2183842'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Python Pocket Reference, Mark Lutz'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'image'",
      "SPEECH OUTPUT: 'separator'",
      "SPEECH OUTPUT: 'The information on this page and the other Orca-related pages on this site are 
distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty 
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.'",
      "SPEECH OUTPUT: 'separator'",
      "SPEECH OUTPUT: 'CategoryAccessibility'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'Orca (last edited 2007-12-07 22:09:22 by '",
+     "SPEECH OUTPUT: 'Orca (last edited 2007-12-07 22:09:22 by'",
      "SPEECH OUTPUT: 'WillieWalker'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: ')'",
@@ -222,15 +342,18 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'Attachments'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'More Actions: combo box'",
+     "SPEECH OUTPUT: 'More Actions:'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'GNOME World Wide'",
      "SPEECH OUTPUT: 'heading level 3'",
-     "SPEECH OUTPUT: 'GnomeWorldWide image link'",
-     "SPEECH OUTPUT: 'Copyright \xa9 2005, 2006, 2007 '",
+     "SPEECH OUTPUT: 'GnomeWorldWide'",
+     "SPEECH OUTPUT: 'image'",
+     "SPEECH OUTPUT: 'link'",
+     "SPEECH OUTPUT: 'Copyright \xa9 2005, 2006, 2007'",
      "SPEECH OUTPUT: 'The GNOME Project'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: '.",
-     "Hosted by '",
+     "Hosted by'",
      "SPEECH OUTPUT: 'Red Hat'",
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: '.'"]))
diff --git a/test/keystrokes/firefox/spelling_errors.py b/test/keystrokes/firefox/spelling_errors.py
index e5bc582..3661d0c 100644
--- a/test/keystrokes/firefox/spelling_errors.py
+++ b/test/keystrokes/firefox/spelling_errors.py
@@ -303,9 +303,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
     "36. Right",
-    ["BRAILLE LINE:  'Thiss is a tesst.  $l'",
-     "     VISIBLE:  'Thiss is a tesst.  $l', cursor=19",
-     "SPEECH OUTPUT: 'blank' voice=system"]))
+    []))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
diff --git a/test/keystrokes/firefox/ui_doc_tabs.py b/test/keystrokes/firefox/ui_doc_tabs.py
index 2d7995e..928ed47 100644
--- a/test/keystrokes/firefox/ui_doc_tabs.py
+++ b/test/keystrokes/firefox/ui_doc_tabs.py
@@ -17,9 +17,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Orca - GNOME Live! page tab', cursor=1",
      "BRAILLE LINE:  'Home'",
      "     VISIBLE:  'Home', cursor=0",
-     "SPEECH OUTPUT: 'Orca - GNOME Live! page tab'",
+     "SPEECH OUTPUT: 'Orca - GNOME Live!'",
+     "SPEECH OUTPUT: 'page tab'",
      "SPEECH OUTPUT: 'Home'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt>1"))
@@ -29,9 +30,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'HTML test page page tab', cursor=1",
      "BRAILLE LINE:  'Test Formats'",
      "     VISIBLE:  'Test Formats', cursor=0",
-     "SPEECH OUTPUT: 'HTML test page page tab'",
+     "SPEECH OUTPUT: 'HTML test page'",
+     "SPEECH OUTPUT: 'page tab'",
      "SPEECH OUTPUT: 'Test Formats'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt>3"))
@@ -43,8 +45,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  ' $l Show push button [Help]', cursor=0",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: 'GNOME Bug Tracking System page tab'",
-     "SPEECH OUTPUT: 'Enter a bug # or some search terms: entry'",
+     "SPEECH OUTPUT: 'GNOME Bug Tracking System'",
+     "SPEECH OUTPUT: 'page tab'",
+     "SPEECH OUTPUT: 'Enter a bug # or some search terms:'",
+     "SPEECH OUTPUT: 'entry'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -57,9 +61,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Orca - GNOME Live! page tab', cursor=1",
      "BRAILLE LINE:  'Home'",
      "     VISIBLE:  'Home', cursor=0",
-     "SPEECH OUTPUT: 'Orca - GNOME Live! page tab'",
+     "SPEECH OUTPUT: 'Orca - GNOME Live!'",
+     "SPEECH OUTPUT: 'page tab'",
      "SPEECH OUTPUT: 'Home'",
-     "SPEECH OUTPUT: 'link' voice=hyperlink"]))
+     "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/ui_role_accel_label.py b/test/keystrokes/firefox/ui_role_accel_label.py
index 5e11502..2f6f844 100644
--- a/test/keystrokes/firefox/ui_role_accel_label.py
+++ b/test/keystrokes/firefox/ui_role_accel_label.py
@@ -15,7 +15,8 @@ sequence.append(utils.AssertPresentationAction(
     "1. Down Arrow in File menu",
     ["BRAILLE LINE:  'Firefox application Mozilla Firefox frame Menu Bar tool bar Application menu bar New 
Window(Ctrl+N)'",
      "     VISIBLE:  'New Window(Ctrl+N)', cursor=1",
-     "SPEECH OUTPUT: 'New Window Ctrl+N'"]))
+     "SPEECH OUTPUT: 'New Window'",
+     "SPEECH OUTPUT: 'Ctrl+N'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -23,7 +24,8 @@ sequence.append(utils.AssertPresentationAction(
     "2. Down Arrow in File menu",
     ["BRAILLE LINE:  'Firefox application Mozilla Firefox frame Menu Bar tool bar Application menu bar New 
Private Window(Shift+Ctrl+P)'",
      "     VISIBLE:  'New Private Window(Shift+Ctrl+P)', cursor=1",
-     "SPEECH OUTPUT: 'New Private Window Shift+Ctrl+P'"]))
+     "SPEECH OUTPUT: 'New Private Window'",
+     "SPEECH OUTPUT: 'Shift+Ctrl+P'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
diff --git a/test/keystrokes/firefox/ui_role_check_box.py b/test/keystrokes/firefox/ui_role_check_box.py
index cad84ac..084cad2 100644
--- a/test/keystrokes/firefox/ui_role_check_box.py
+++ b/test/keystrokes/firefox/ui_role_check_box.py
@@ -17,7 +17,8 @@ sequence.append(utils.AssertPresentationAction(
     "1. Right Arrow to Page Setup",
     ["BRAILLE LINE:  'Firefox application Print dialog Page Setup page tab'",
      "     VISIBLE:  'Page Setup page tab', cursor=1",
-     "SPEECH OUTPUT: 'Page Setup page tab'"]))
+     "SPEECH OUTPUT: 'Page Setup'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
@@ -25,7 +26,8 @@ sequence.append(utils.AssertPresentationAction(
     "2. Right Arrow to Options",
     ["BRAILLE LINE:  'Firefox application Print dialog Options page tab'",
      "     VISIBLE:  'Options page tab', cursor=1",
-     "SPEECH OUTPUT: 'Options page tab'"]))
+     "SPEECH OUTPUT: 'Options'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -33,7 +35,8 @@ sequence.append(utils.AssertPresentationAction(
     "3. Tab to checkbox",
     ["BRAILLE LINE:  'Firefox application Print dialog Options page tab <x> Ignore Scaling and Shrink To Fit 
Page Width check box'",
      "     VISIBLE:  '<x> Ignore Scaling and Shrink To', cursor=1",
-     "SPEECH OUTPUT: 'Ignore Scaling and Shrink To Fit Page Width check box checked'"]))
+     "SPEECH OUTPUT: 'Ignore Scaling and Shrink To Fit Page Width'",
+     "SPEECH OUTPUT: 'check box checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
diff --git a/test/keystrokes/firefox/ui_role_check_menu_item.py 
b/test/keystrokes/firefox/ui_role_check_menu_item.py
index c070336..a2736dd 100644
--- a/test/keystrokes/firefox/ui_role_check_menu_item.py
+++ b/test/keystrokes/firefox/ui_role_check_menu_item.py
@@ -15,7 +15,8 @@ sequence.append(utils.AssertPresentationAction(
     "1. Up Arrow in View menu",
     ["BRAILLE LINE:  'Firefox application Mozilla Firefox frame Menu Bar tool bar Application menu bar < > 
Full Screen check menu item'",
      "     VISIBLE:  '< > Full Screen check menu item', cursor=1",
-     "SPEECH OUTPUT: 'Full Screen check menu item not checked'"]))
+     "SPEECH OUTPUT: 'Full Screen'",
+     "SPEECH OUTPUT: 'check menu item not checked'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
diff --git a/test/keystrokes/firefox/ui_role_combo_box.py b/test/keystrokes/firefox/ui_role_combo_box.py
index 74e0ad8..8549f0e 100644
--- a/test/keystrokes/firefox/ui_role_combo_box.py
+++ b/test/keystrokes/firefox/ui_role_combo_box.py
@@ -17,8 +17,10 @@ sequence.append(utils.AssertPresentationAction(
     "1. Tab to combobox",
     ["BRAILLE LINE:  'Firefox application Firefox Preferences dialog Startup When Firefox starts: Show a 
blank page combo box'",
      "     VISIBLE:  'When Firefox starts: Show a blan', cursor=22",
-     "SPEECH OUTPUT: 'Startup panel'",
-     "SPEECH OUTPUT: 'When Firefox starts: Show a blank page combo box'"]))
+     "SPEECH OUTPUT: 'Startup'",
+     "SPEECH OUTPUT: 'panel'",
+     "SPEECH OUTPUT: 'When Firefox starts: Show a blank page'",
+     "SPEECH OUTPUT: 'combo box'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -67,7 +69,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'When Firefox starts: Show a blan', cursor=22",
      "BRAILLE LINE:  'Firefox application Firefox Preferences dialog Startup When Firefox starts: Show a 
blank page combo box'",
      "     VISIBLE:  'When Firefox starts: Show a blan', cursor=22",
-     "SPEECH OUTPUT: 'When Firefox starts: Show a blank page combo box'",
+     "SPEECH OUTPUT: 'When Firefox starts: Show a blank page'",
+     "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'collapsed'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/ui_role_entry.py b/test/keystrokes/firefox/ui_role_entry.py
index 53c3bcb..7f61db2 100644
--- a/test/keystrokes/firefox/ui_role_entry.py
+++ b/test/keystrokes/firefox/ui_role_entry.py
@@ -7,8 +7,9 @@ import utils
 
 sequence = MacroSequence()
 
-sequence.append(KeyComboAction("<Alt>b"))
-sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Control><Shift>o"))
+
 
 ########################################################################
 # Tab three times, then down arrow twice to Bookmarks Menu. (This is
@@ -17,6 +18,8 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Tab"))
+sequence.append(PauseAction(3000))
+
 sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("<Alt>o"))
@@ -115,7 +118,8 @@ sequence.append(utils.AssertPresentationAction(
     "10. Alt+D to Description",
     ["BRAILLE LINE:  'Description:  $l'",
      "     VISIBLE:  'Description:  $l', cursor=14",
-     "SPEECH OUTPUT: 'Description: entry'"]))
+     "SPEECH OUTPUT: 'Description:'",
+     "SPEECH OUTPUT: 'entry'"]))
 
 sequence.append(TypeAction("Here is the first line."))
 sequence.append(KeyComboAction("Return"))
diff --git a/test/keystrokes/firefox/ui_role_menu_bar.py b/test/keystrokes/firefox/ui_role_menu_bar.py
index 587e0d2..c60b9cb 100644
--- a/test/keystrokes/firefox/ui_role_menu_bar.py
+++ b/test/keystrokes/firefox/ui_role_menu_bar.py
@@ -17,8 +17,10 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Edit menu', cursor=1",
      "BRAILLE LINE:  'Firefox application Mozilla Firefox frame Menu Bar tool bar Application menu bar Undo 
grayed(Ctrl+Z)'",
      "     VISIBLE:  'Undo grayed(Ctrl+Z)', cursor=1",
-     "SPEECH OUTPUT: 'Edit menu'",
-     "SPEECH OUTPUT: 'Undo grayed Ctrl+Z'"]))
+     "SPEECH OUTPUT: 'Edit'",
+     "SPEECH OUTPUT: 'menu'",
+     "SPEECH OUTPUT: 'Undo'",
+     "SPEECH OUTPUT: 'grayed Ctrl+Z'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
@@ -26,8 +28,10 @@ sequence.append(utils.AssertPresentationAction(
     "2. Left Arrow on menu bar",
     ["BRAILLE LINE:  'Firefox application Mozilla Firefox frame Menu Bar tool bar Application menu bar New 
Tab(Ctrl+T)'",
      "     VISIBLE:  'New Tab(Ctrl+T)', cursor=1",
-     "SPEECH OUTPUT: 'File menu'",
-     "SPEECH OUTPUT: 'New Tab Ctrl+T'"]))
+     "SPEECH OUTPUT: 'File'",
+     "SPEECH OUTPUT: 'menu'",
+     "SPEECH OUTPUT: 'New Tab'",
+     "SPEECH OUTPUT: 'Ctrl+T'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
diff --git a/test/keystrokes/firefox/ui_role_page_tab.py b/test/keystrokes/firefox/ui_role_page_tab.py
index 80f779d..d26318b 100644
--- a/test/keystrokes/firefox/ui_role_page_tab.py
+++ b/test/keystrokes/firefox/ui_role_page_tab.py
@@ -17,7 +17,8 @@ sequence.append(utils.AssertPresentationAction(
     "1. Right Arrow to next page tab",
     ["BRAILLE LINE:  'Firefox application Print dialog Page Setup page tab'",
      "     VISIBLE:  'Page Setup page tab', cursor=1",
-     "SPEECH OUTPUT: 'Page Setup page tab'"]))
+     "SPEECH OUTPUT: 'Page Setup'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
@@ -25,7 +26,8 @@ sequence.append(utils.AssertPresentationAction(
     "2. Right Arrow to next page tab",
     ["BRAILLE LINE:  'Firefox application Print dialog Options page tab'",
      "     VISIBLE:  'Options page tab', cursor=1",
-     "SPEECH OUTPUT: 'Options page tab'"]))
+     "SPEECH OUTPUT: 'Options'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -43,7 +45,8 @@ sequence.append(utils.AssertPresentationAction(
     "4. Left Arrow to previous page tab",
     ["BRAILLE LINE:  'Firefox application Print dialog Page Setup page tab'",
      "     VISIBLE:  'Page Setup page tab', cursor=1",
-     "SPEECH OUTPUT: 'Page Setup page tab'"]))
+     "SPEECH OUTPUT: 'Page Setup'",
+     "SPEECH OUTPUT: 'page tab'"]))
 
 sequence.append(KeyComboAction("Escape"))
 
diff --git a/test/keystrokes/firefox/ui_role_push_button.py b/test/keystrokes/firefox/ui_role_push_button.py
index 8b6e3fb..5f8e5d9 100644
--- a/test/keystrokes/firefox/ui_role_push_button.py
+++ b/test/keystrokes/firefox/ui_role_push_button.py
@@ -16,7 +16,8 @@ sequence.append(utils.AssertPresentationAction(
     "1. Shift+Tab to button",
     ["BRAILLE LINE:  'Firefox application Print dialog Print push button'",
      "     VISIBLE:  'Print push button', cursor=1",
-     "SPEECH OUTPUT: 'Print push button'"]))
+     "SPEECH OUTPUT: 'Print'",
+     "SPEECH OUTPUT: 'push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
diff --git a/test/keystrokes/firefox/ui_role_radio_button.py b/test/keystrokes/firefox/ui_role_radio_button.py
index 8635508..4bf2c31 100644
--- a/test/keystrokes/firefox/ui_role_radio_button.py
+++ b/test/keystrokes/firefox/ui_role_radio_button.py
@@ -16,8 +16,10 @@ sequence.append(utils.AssertPresentationAction(
     "1. Alt a to radio button group",
     ["BRAILLE LINE:  'Firefox application Print dialog General page tab &=y All Pages radio button'",
      "     VISIBLE:  '&=y All Pages radio button', cursor=1",
-     "SPEECH OUTPUT: 'General page tab'",
-     "SPEECH OUTPUT: 'All Pages selected radio button'"]))
+     "SPEECH OUTPUT: 'General'",
+     "SPEECH OUTPUT: 'page tab'",
+     "SPEECH OUTPUT: 'All Pages'",
+     "SPEECH OUTPUT: 'selected radio button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
diff --git a/test/keystrokes/firefox/ui_role_radio_menu_item.py 
b/test/keystrokes/firefox/ui_role_radio_menu_item.py
index e861427..722db80 100644
--- a/test/keystrokes/firefox/ui_role_radio_menu_item.py
+++ b/test/keystrokes/firefox/ui_role_radio_menu_item.py
@@ -15,8 +15,10 @@ sequence.append(utils.AssertPresentationAction(
     "1. y for the Page Style menu",
     ["BRAILLE LINE:  'Firefox application Mozilla Firefox frame Menu Bar tool bar Application menu bar View 
menu & y No Style radio menu item'",
      "     VISIBLE:  '& y No Style radio menu item', cursor=1",
-     "SPEECH OUTPUT: 'Page Style menu'",
-     "SPEECH OUTPUT: 'No Style not selected radio menu item'"]))
+     "SPEECH OUTPUT: 'Page Style'",
+     "SPEECH OUTPUT: 'menu'",
+     "SPEECH OUTPUT: 'No Style'",
+     "SPEECH OUTPUT: 'not selected radio menu item'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -40,7 +42,8 @@ sequence.append(utils.AssertPresentationAction(
     "3. Down Arrow in menu",
     ["BRAILLE LINE:  'Firefox application Mozilla Firefox frame Menu Bar tool bar Application menu bar View 
menu &=y Basic Page Style radio menu item'",
      "     VISIBLE:  '&=y Basic Page Style radio menu ', cursor=1",
-     "SPEECH OUTPUT: 'Basic Page Style selected radio menu item'"]))
+     "SPEECH OUTPUT: 'Basic Page Style'",
+     "SPEECH OUTPUT: 'selected radio menu item'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
diff --git a/test/keystrokes/firefox/ui_role_tree.py b/test/keystrokes/firefox/ui_role_tree.py
index 9227ae4..7e6a8ee 100644
--- a/test/keystrokes/firefox/ui_role_tree.py
+++ b/test/keystrokes/firefox/ui_role_tree.py
@@ -16,7 +16,8 @@ sequence.append(utils.AssertPresentationAction(
     "1. Shift Tab for tree",
     ["BRAILLE LINE:  'Firefox application Library frame All Bookmarks expanded list item TREE LEVEL 1'",
      "     VISIBLE:  'All Bookmarks expanded list item', cursor=1",
-     "SPEECH OUTPUT: 'All Bookmarks expanded'"]))
+     "SPEECH OUTPUT: 'All Bookmarks'",
+     "SPEECH OUTPUT: 'expanded'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -24,7 +25,8 @@ sequence.append(utils.AssertPresentationAction(
     "2. Down Arrow in tree",
     ["BRAILLE LINE:  'Firefox application Library frame Bookmarks Toolbar collapsed list item TREE LEVEL 2'",
      "     VISIBLE:  'Bookmarks Toolbar collapsed list', cursor=1",
-     "SPEECH OUTPUT: 'Bookmarks Toolbar collapsed tree level 2'"]))
+     "SPEECH OUTPUT: 'Bookmarks Toolbar'",
+     "SPEECH OUTPUT: 'collapsed tree level 2'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -32,7 +34,8 @@ sequence.append(utils.AssertPresentationAction(
     "3. Down Arrow in tree",
     ["BRAILLE LINE:  'Firefox application Library frame Bookmarks Menu collapsed list item TREE LEVEL 2'",
      "     VISIBLE:  'Bookmarks Menu collapsed list it', cursor=1",
-     "SPEECH OUTPUT: 'Bookmarks Menu collapsed'"]))
+     "SPEECH OUTPUT: 'Bookmarks Menu'",
+     "SPEECH OUTPUT: 'collapsed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -68,7 +71,8 @@ sequence.append(utils.AssertPresentationAction(
     "7. Down Arrow in tree",
     ["BRAILLE LINE:  'Firefox application Library frame Recently Bookmarked list item TREE LEVEL 3'",
      "     VISIBLE:  'Recently Bookmarked list item TR', cursor=1",
-     "SPEECH OUTPUT: 'Recently Bookmarked tree level 3'"]))
+     "SPEECH OUTPUT: 'Recently Bookmarked'",
+     "SPEECH OUTPUT: 'tree level 3'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -86,7 +90,8 @@ sequence.append(utils.AssertPresentationAction(
     "9. Up Arrow in tree",
     ["BRAILLE LINE:  'Firefox application Library frame Bookmarks Menu expanded list item TREE LEVEL 2'",
      "     VISIBLE:  'Bookmarks Menu expanded list ite', cursor=1",
-     "SPEECH OUTPUT: 'Bookmarks Menu expanded tree level 2'"]))
+     "SPEECH OUTPUT: 'Bookmarks Menu'",
+     "SPEECH OUTPUT: 'expanded tree level 2'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
@@ -102,7 +107,8 @@ sequence.append(utils.AssertPresentationAction(
     "11. Up Arrow in tree",
     ["BRAILLE LINE:  'Firefox application Library frame Bookmarks Toolbar collapsed list item TREE LEVEL 2'",
      "     VISIBLE:  'Bookmarks Toolbar collapsed list', cursor=1",
-     "SPEECH OUTPUT: 'Bookmarks Toolbar collapsed'"]))
+     "SPEECH OUTPUT: 'Bookmarks Toolbar'",
+     "SPEECH OUTPUT: 'collapsed'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -110,7 +116,8 @@ sequence.append(utils.AssertPresentationAction(
     "12. Up Arrow in tree",
     ["BRAILLE LINE:  'Firefox application Library frame All Bookmarks expanded list item TREE LEVEL 1'",
      "     VISIBLE:  'All Bookmarks expanded list item', cursor=1",
-     "SPEECH OUTPUT: 'All Bookmarks expanded tree level 1'"]))
+     "SPEECH OUTPUT: 'All Bookmarks'",
+     "SPEECH OUTPUT: 'expanded tree level 1'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -118,7 +125,8 @@ sequence.append(utils.AssertPresentationAction(
     "13. Tab back to tree table",
     ["BRAILLE LINE:  'Firefox application Library frame tree table Tags column header Bookmarks Toolbar   
table row TREE LEVEL 1'",
      "     VISIBLE:  'Bookmarks Toolbar   table row TR', cursor=1",
-     "SPEECH OUTPUT: 'Bookmarks Toolbar   table row'"]))
+     "SPEECH OUTPUT: 'Bookmarks Toolbar  '",
+     "SPEECH OUTPUT: 'table row'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/firefox/ui_role_tree_table.py b/test/keystrokes/firefox/ui_role_tree_table.py
index 08cd975..87b8d93 100644
--- a/test/keystrokes/firefox/ui_role_tree_table.py
+++ b/test/keystrokes/firefox/ui_role_tree_table.py
@@ -16,7 +16,8 @@ sequence.append(utils.AssertPresentationAction(
     "1. Down Arrow in tree table",
     ["BRAILLE LINE:  'Firefox application Library frame tree table Location column header Bookmarks Menu   
table row TREE LEVEL 1'",
      "     VISIBLE:  'Bookmarks Menu   table row TREE ', cursor=1",
-     "SPEECH OUTPUT: 'Bookmarks Menu   table row'"]))
+     "SPEECH OUTPUT: 'Bookmarks Menu  '",
+     "SPEECH OUTPUT: 'table row'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -33,7 +34,8 @@ sequence.append(utils.AssertPresentationAction(
     "3. Up Arrow in tree table",
     ["BRAILLE LINE:  'Firefox application Library frame tree table Tags column header Bookmarks Toolbar   
table row TREE LEVEL 1'",
      "     VISIBLE:  'Bookmarks Toolbar   table row TR', cursor=1",
-     "SPEECH OUTPUT: 'Bookmarks Toolbar   table row'"]))
+     "SPEECH OUTPUT: 'Bookmarks Toolbar  '",
+     "SPEECH OUTPUT: 'table row'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/firefox/word_nav_links.py b/test/keystrokes/firefox/word_nav_links.py
index 4c36629..84e7c8c 100644
--- a/test/keystrokes/firefox/word_nav_links.py
+++ b/test/keystrokes/firefox/word_nav_links.py
@@ -16,7 +16,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. Next Word",
     ["BRAILLE LINE:  'Hello W o r l d. Go odbye w orld.'",
      "     VISIBLE:  'Hello W o r l d. Go odbye w orld', cursor=6",
-     "SPEECH OUTPUT: 'Hello '"]))
+     "SPEECH OUTPUT: 'Hello'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
@@ -32,7 +32,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'l'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'd. '"]))
+     "SPEECH OUTPUT: 'd.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
@@ -41,7 +41,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Hello W o r l d. Go odbye w orld.'",
      "     VISIBLE:  'odbye w orld.', cursor=1",
      "SPEECH OUTPUT: 'Go'",
-     "SPEECH OUTPUT: 'odbye '",
+     "SPEECH OUTPUT: 'odbye'",
      "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -60,7 +60,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Next Word",
     ["BRAILLE LINE:  'More stuff! Yay!'",
      "     VISIBLE:  'More stuff! Yay!', cursor=5",
-     "SPEECH OUTPUT: 'More '"]))
+     "SPEECH OUTPUT: 'More'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
@@ -70,7 +70,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'More stuff! Yay!', cursor=12",
      "SPEECH OUTPUT: 'stuff'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '! '"]))
+     "SPEECH OUTPUT: '!'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
@@ -80,7 +80,7 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'More stuff! Yay!', cursor=6",
      "SPEECH OUTPUT: 'stuff'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: '! '"]))
+     "SPEECH OUTPUT: '!'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
@@ -88,7 +88,7 @@ sequence.append(utils.AssertPresentationAction(
     "8. Previous Word",
     ["BRAILLE LINE:  'More stuff! Yay!'",
      "     VISIBLE:  'More stuff! Yay!', cursor=1",
-     "SPEECH OUTPUT: 'More '"]))
+     "SPEECH OUTPUT: 'More'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
@@ -107,7 +107,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Hello W o r l d. Go odbye w orld.'",
      "     VISIBLE:  'd. Go odbye w orld.', cursor=4",
      "SPEECH OUTPUT: 'Go'",
-     "SPEECH OUTPUT: 'odbye '",
+     "SPEECH OUTPUT: 'odbye'",
      "SPEECH OUTPUT: 'link'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -124,7 +124,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'link'",
      "SPEECH OUTPUT: 'l'",
      "SPEECH OUTPUT: 'link'",
-     "SPEECH OUTPUT: 'd. '"]))
+     "SPEECH OUTPUT: 'd.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
@@ -132,7 +132,7 @@ sequence.append(utils.AssertPresentationAction(
     "12. Previous Word",
     ["BRAILLE LINE:  'Hello W o r l d. Go odbye w orld.'",
      "     VISIBLE:  'Hello W o r l d. Go odbye w orld', cursor=1",
-     "SPEECH OUTPUT: 'Hello '"]))
+     "SPEECH OUTPUT: 'Hello'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/word_nav_list_items.py b/test/keystrokes/firefox/word_nav_list_items.py
index 01c2a1a..4b51407 100644
--- a/test/keystrokes/firefox/word_nav_list_items.py
+++ b/test/keystrokes/firefox/word_nav_list_items.py
@@ -16,7 +16,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. Line Down",
     ["BRAILLE LINE:  '1.This is a short list item.'",
      "     VISIBLE:  '1.This is a short list item.', cursor=1",
-     "SPEECH OUTPUT: '1.This is a short list item. '"]))
+     "SPEECH OUTPUT: '1.This is a short list item.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
@@ -25,7 +25,7 @@ sequence.append(utils.AssertPresentationAction(
     ["KNOWN ISSUE: Gecko stable has no space between the marker and the first word. They've fixed that in 
nightly.",
      "BRAILLE LINE:  '1.This is a short list item.'",
      "     VISIBLE:  '1.This is a short list item.', cursor=7",
-     "SPEECH OUTPUT: '1.This '"]))
+     "SPEECH OUTPUT: '1.This'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
@@ -33,7 +33,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. Next Word",
     ["BRAILLE LINE:  '1.This is a short list item.'",
      "     VISIBLE:  '1.This is a short list item.', cursor=10",
-     "SPEECH OUTPUT: 'is '"]))
+     "SPEECH OUTPUT: 'is'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
@@ -41,7 +41,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Next Word",
     ["BRAILLE LINE:  '1.This is a short list item.'",
      "     VISIBLE:  '1.This is a short list item.', cursor=12",
-     "SPEECH OUTPUT: 'a '"]))
+     "SPEECH OUTPUT: 'a'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
@@ -49,7 +49,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Previous Word",
     ["BRAILLE LINE:  '1.This is a short list item.'",
      "     VISIBLE:  '1.This is a short list item.', cursor=11",
-     "SPEECH OUTPUT: 'a '"]))
+     "SPEECH OUTPUT: 'a'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
@@ -57,7 +57,7 @@ sequence.append(utils.AssertPresentationAction(
     "6. Previous Word",
     ["BRAILLE LINE:  '1.This is a short list item.'",
      "     VISIBLE:  '1.This is a short list item.', cursor=8",
-     "SPEECH OUTPUT: 'is '"]))
+     "SPEECH OUTPUT: 'is'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
@@ -65,7 +65,7 @@ sequence.append(utils.AssertPresentationAction(
     "7. Previous Word",
     ["BRAILLE LINE:  '1.This is a short list item.'",
      "     VISIBLE:  '1.This is a short list item.', cursor=1",
-     "SPEECH OUTPUT: '1.This '"]))
+     "SPEECH OUTPUT: '1.This'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]