Index: test/keystrokes/firefox/line_nav_wiki.py
===================================================================
--- test/keystrokes/firefox/line_nav_wiki.py	(revision 4175)
+++ test/keystrokes/firefox/line_nav_wiki.py	(working copy)
@@ -1454,7 +1454,7 @@
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "Line Down", 
+    "Line Up", 
     ["BRAILLE LINE:  'FAQ Link | DocIndex Link'",
      "     VISIBLE:  'FAQ Link | DocIndex Link', cursor=1",
      "SPEECH OUTPUT: 'FAQ link | DocIndex link'"]))
Index: test/keystrokes/firefox/dojo_spinner.py
===================================================================
--- test/keystrokes/firefox/dojo_spinner.py	(revision 4175)
+++ test/keystrokes/firefox/dojo_spinner.py	(working copy)
@@ -38,8 +38,9 @@
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Tab to the first spinner", 
-    ["BRAILLE LINE:  'Spinbox #1: 900 $l not fired yet! $l '",
+    "Tab to the first spinner",
+    ["BUG? - The spinbox is followed by some text - 'onChange:' followed by a grayed out entry containing the text 'not fired yet!'. Either the 'on change' text should be present or, in my opinion, this 'not fired yet!' removed",
+     "BRAILLE LINE:  'Spinbox #1: 900 $l not fired yet! $l '",
      "     VISIBLE:  'Spinbox #1: 900 $l not fired yet', cursor=16",
      "BRAILLE LINE:  'Spinbox #1: 900 $l not fired yet! $l '",
      "     VISIBLE:  'Spinbox #1: 900 $l not fired yet', cursor=16",
@@ -53,10 +54,10 @@
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "first spinner decrement 1", 
-    ["BRAILLE LINE:  'Spinbox #1: 900 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 900 $l not fired yet', cursor=16",
-     "BRAILLE LINE:  'Spinbox #1: 899 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 899 $l not fired yet', cursor=16",
+    ["BRAILLE LINE:  'Spinbox #1: 900 $l'",
+     "     VISIBLE:  'Spinbox #1: 900 $l', cursor=16",
+     "BRAILLE LINE:  'Spinbox #1: 899 $l'",
+     "     VISIBLE:  'Spinbox #1: 899 $l', cursor=16",
      "SPEECH OUTPUT: '899'"]))
 
 ########################################################################
@@ -66,10 +67,10 @@
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "first spinner decrement 2", 
-    ["BRAILLE LINE:  'Spinbox #1: 899 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 899 $l not fired yet', cursor=16",
-     "BRAILLE LINE:  'Spinbox #1: 898 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 898 $l not fired yet', cursor=16",
+    ["BRAILLE LINE:  'Spinbox #1: 899 $l'",
+     "     VISIBLE:  'Spinbox #1: 899 $l', cursor=16",
+     "BRAILLE LINE:  'Spinbox #1: 898 $l'",
+     "     VISIBLE:  'Spinbox #1: 898 $l', cursor=16",
      "SPEECH OUTPUT: '898'"]))
 
 ########################################################################
@@ -79,10 +80,10 @@
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "first spinner decrement 3", 
-    ["BRAILLE LINE:  'Spinbox #1: 898 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 898 $l not fired yet', cursor=16",
-     "BRAILLE LINE:  'Spinbox #1: 897 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 897 $l not fired yet', cursor=16",
+    ["BRAILLE LINE:  'Spinbox #1: 898 $l'",
+     "     VISIBLE:  'Spinbox #1: 898 $l', cursor=16",
+     "BRAILLE LINE:  'Spinbox #1: 897 $l'",
+     "     VISIBLE:  'Spinbox #1: 897 $l', cursor=16",
      "SPEECH OUTPUT: '897'"]))
 
 ########################################################################
@@ -92,10 +93,10 @@
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "first spinner decrement 4", 
-    ["BRAILLE LINE:  'Spinbox #1: 897 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 897 $l not fired yet', cursor=16",
-     "BRAILLE LINE:  'Spinbox #1: 896 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 896 $l not fired yet', cursor=16",
+    ["BRAILLE LINE:  'Spinbox #1: 897 $l'",
+     "     VISIBLE:  'Spinbox #1: 897 $l', cursor=16",
+     "BRAILLE LINE:  'Spinbox #1: 896 $l'",
+     "     VISIBLE:  'Spinbox #1: 896 $l', cursor=16",
      "SPEECH OUTPUT: '896'"]))
 
 ########################################################################
@@ -105,10 +106,10 @@
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "first spinner decrement 5", 
-    ["BRAILLE LINE:  'Spinbox #1: 896 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 896 $l not fired yet', cursor=16",
-     "BRAILLE LINE:  'Spinbox #1: 895 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 895 $l not fired yet', cursor=16",
+    ["BRAILLE LINE:  'Spinbox #1: 896 $l'",
+     "     VISIBLE:  'Spinbox #1: 896 $l', cursor=16",
+     "BRAILLE LINE:  'Spinbox #1: 895 $l'",
+     "     VISIBLE:  'Spinbox #1: 895 $l', cursor=16",
      "SPEECH OUTPUT: '895'"]))
 
 ########################################################################
@@ -118,10 +119,10 @@
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "first spinner increment 1", 
-    ["BRAILLE LINE:  'Spinbox #1: 895 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 895 $l not fired yet', cursor=16",
-     "BRAILLE LINE:  'Spinbox #1: 896 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 896 $l not fired yet', cursor=16",
+    ["BRAILLE LINE:  'Spinbox #1: 895 $l'",
+     "     VISIBLE:  'Spinbox #1: 895 $l', cursor=16",
+     "BRAILLE LINE:  'Spinbox #1: 896 $l'",
+     "     VISIBLE:  'Spinbox #1: 896 $l', cursor=16",
      "SPEECH OUTPUT: '896'"]))
 
 ########################################################################
@@ -131,10 +132,10 @@
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "first spinner increment 2", 
-    ["BRAILLE LINE:  'Spinbox #1: 896 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 896 $l not fired yet', cursor=16",
-     "BRAILLE LINE:  'Spinbox #1: 897 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 897 $l not fired yet', cursor=16",
+    ["BRAILLE LINE:  'Spinbox #1: 896 $l'",
+     "     VISIBLE:  'Spinbox #1: 896 $l', cursor=16",
+     "BRAILLE LINE:  'Spinbox #1: 897 $l'",
+     "     VISIBLE:  'Spinbox #1: 897 $l', cursor=16",
      "SPEECH OUTPUT: '897'"]))
 
 ########################################################################
@@ -144,10 +145,10 @@
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "first spinner increment 3", 
-    ["BRAILLE LINE:  'Spinbox #1: 897 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 897 $l not fired yet', cursor=16",
-     "BRAILLE LINE:  'Spinbox #1: 898 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 898 $l not fired yet', cursor=16",
+    ["BRAILLE LINE:  'Spinbox #1: 897 $l'",
+     "     VISIBLE:  'Spinbox #1: 897 $l', cursor=16",
+     "BRAILLE LINE:  'Spinbox #1: 898 $l'",
+     "     VISIBLE:  'Spinbox #1: 898 $l', cursor=16",
      "SPEECH OUTPUT: '898'"]))
 
 ########################################################################
@@ -157,10 +158,10 @@
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "first spinner increment 4", 
-    ["BRAILLE LINE:  'Spinbox #1: 898 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 898 $l not fired yet', cursor=16",
-     "BRAILLE LINE:  'Spinbox #1: 899 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 899 $l not fired yet', cursor=16",
+    ["BRAILLE LINE:  'Spinbox #1: 898 $l'",
+     "     VISIBLE:  'Spinbox #1: 898 $l', cursor=16",
+     "BRAILLE LINE:  'Spinbox #1: 899 $l'",
+     "     VISIBLE:  'Spinbox #1: 899 $l', cursor=16",
      "SPEECH OUTPUT: '899'"]))
 
 ########################################################################
@@ -170,10 +171,10 @@
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "first spinner increment 5", 
-    ["BRAILLE LINE:  'Spinbox #1: 899 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 899 $l not fired yet', cursor=16",
-     "BRAILLE LINE:  'Spinbox #1: 900 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 900 $l not fired yet', cursor=16",
+    ["BRAILLE LINE:  'Spinbox #1: 899 $l'",
+     "     VISIBLE:  'Spinbox #1: 899 $l', cursor=16",
+     "BRAILLE LINE:  'Spinbox #1: 900 $l'",
+     "     VISIBLE:  'Spinbox #1: 900 $l', cursor=16",
      "SPEECH OUTPUT: '900'"]))
 
 ########################################################################
@@ -183,10 +184,10 @@
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "first spinner increment 6", 
-    ["BRAILLE LINE:  'Spinbox #1: 900 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 900 $l not fired yet', cursor=16",
-     "BRAILLE LINE:  'Spinbox #1: 901 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 901 $l not fired yet', cursor=16",
+    ["BRAILLE LINE:  'Spinbox #1: 900 $l'",
+     "     VISIBLE:  'Spinbox #1: 900 $l', cursor=16",
+     "BRAILLE LINE:  'Spinbox #1: 901 $l'",
+     "     VISIBLE:  'Spinbox #1: 901 $l', cursor=16",
      "SPEECH OUTPUT: '901'"]))
 
 ########################################################################
@@ -196,10 +197,10 @@
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "first spinner increment 7", 
-    ["BRAILLE LINE:  'Spinbox #1: 901 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 901 $l not fired yet', cursor=16",
-     "BRAILLE LINE:  'Spinbox #1: 902 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 902 $l not fired yet', cursor=16",
+    ["BRAILLE LINE:  'Spinbox #1: 901 $l'",
+     "     VISIBLE:  'Spinbox #1: 901 $l', cursor=16",
+     "BRAILLE LINE:  'Spinbox #1: 902 $l'",
+     "     VISIBLE:  'Spinbox #1: 902 $l', cursor=16",
      "SPEECH OUTPUT: '902'"]))
 
 ########################################################################
@@ -210,8 +211,8 @@
 sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "basic whereAmI", 
-    ["BRAILLE LINE:  'Spinbox #1: 902 $l not fired yet! $l '",
-     "     VISIBLE:  'Spinbox #1: 902 $l not fired yet', cursor=16",
+    ["BRAILLE LINE:  'Spinbox #1: 902 $l'",
+     "     VISIBLE:  'Spinbox #1: 902 $l', cursor=16",
      "SPEECH OUTPUT: 'Spinbox #1:'",
      "SPEECH OUTPUT: 'spin button'",
      "SPEECH OUTPUT: '902'",
Index: test/keystrokes/firefox/line_nav_bugzilla_search.py
===================================================================
--- test/keystrokes/firefox/line_nav_bugzilla_search.py	(revision 4175)
+++ test/keystrokes/firefox/line_nav_bugzilla_search.py	(working copy)
@@ -631,7 +631,7 @@
     "Line Up",
     ["BRAILLE LINE:  'And Button Add another boolean chart Button'",
      "     VISIBLE:  'And Button Add another boolean c', cursor=1",
-     "SPEECH OUTPUT: 'And button       Add another boolean chart button       '"]))
+     "SPEECH OUTPUT: 'And button        Add another boolean chart button       '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -645,9 +645,9 @@
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "Line Up",
-    ["BRAILLE LINE:  '< > CheckBox Not (negate this whole chart)'",
-     "     VISIBLE:  '< > CheckBox Not (negate this wh', cursor=1",
-     "SPEECH OUTPUT: 'Not (negate this whole chart) check box not checked Not (negate this whole chart)'"]))
+    ["BRAILLE LINE:  '< > CheckBox  Not (negate this whole chart)'",
+     "     VISIBLE:  '< > CheckBox  Not (negate this w', cursor=1",
+     "SPEECH OUTPUT: 'Not (negate this whole chart) check box not checked  Not (negate this whole chart)'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -765,9 +765,9 @@
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "Line Up",
-    ["BRAILLE LINE:  ' $l and Now $l'",
-     "     VISIBLE:  ' $l and Now $l', cursor=1",
-     "SPEECH OUTPUT: 'Only bugs changed between: text and text Now",
+    ["BRAILLE LINE:  ' $l  and Now $l'",
+     "     VISIBLE:  ' $l  and Now $l', cursor=1",
+     "SPEECH OUTPUT: 'Only bugs changed between: text  and text Now",
      "'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -830,41 +830,41 @@
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "Line Up",
-    ["BRAILLE LINE:  '< > CheckBox a commenter'",
-     "     VISIBLE:  '< > CheckBox a commenter', cursor=1",
-     "SPEECH OUTPUT: 'a commenter check box not checked a commenter'"]))
+    ["BRAILLE LINE:  '< > CheckBox  a commenter'",
+     "     VISIBLE:  '< > CheckBox  a commenter', cursor=1",
+     "SPEECH OUTPUT: 'a commenter check box not checked  a commenter'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "Line Up",
-    ["BRAILLE LINE:  '<x> CheckBox a CC list member'",
-     "     VISIBLE:  '<x> CheckBox a CC list member', cursor=1",
-     "SPEECH OUTPUT: 'a CC list member check box checked a CC list member'"]))
+    ["BRAILLE LINE:  '<x> CheckBox  a CC list member'",
+     "     VISIBLE:  '<x> CheckBox  a CC list member', cursor=1",
+     "SPEECH OUTPUT: 'a CC list member check box checked  a CC list member'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "Line Up",
-    ["BRAILLE LINE:  '<x> CheckBox the QA contact'",
-     "     VISIBLE:  '<x> CheckBox the QA contact', cursor=1",
-     "SPEECH OUTPUT: 'the QA contact check box checked the QA contact'"]))
+    ["BRAILLE LINE:  '<x> CheckBox  the QA contact'",
+     "     VISIBLE:  '<x> CheckBox  the QA contact', cursor=1",
+     "SPEECH OUTPUT: 'the QA contact check box checked  the QA contact'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "Line Up",
-    ["BRAILLE LINE:  '<x> CheckBox the reporter'",
-     "     VISIBLE:  '<x> CheckBox the reporter', cursor=1",
-     "SPEECH OUTPUT: 'the reporter check box checked the reporter'"]))
+    ["BRAILLE LINE:  '<x> CheckBox  the reporter'",
+     "     VISIBLE:  '<x> CheckBox  the reporter', cursor=1",
+     "SPEECH OUTPUT: 'the reporter check box checked  the reporter'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "Line Up",
-    ["BRAILLE LINE:  '<x> CheckBox the bug assignee'",
-     "     VISIBLE:  '<x> CheckBox the bug assignee', cursor=1",
-     "SPEECH OUTPUT: 'the bug assignee check box checked the bug assignee'"]))
+    ["BRAILLE LINE:  '<x> CheckBox  the bug assignee'",
+     "     VISIBLE:  '<x> CheckBox  the bug assignee', cursor=1",
+     "SPEECH OUTPUT: 'the bug assignee check box checked  the bug assignee'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
@@ -894,41 +894,41 @@
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "Line Up",
-    ["BRAILLE LINE:  '< > CheckBox a commenter'",
-     "     VISIBLE:  '< > CheckBox a commenter', cursor=1",
-     "SPEECH OUTPUT: 'a commenter check box not checked a commenter'"]))
+    ["BRAILLE LINE:  '< > CheckBox  a commenter'",
+     "     VISIBLE:  '< > CheckBox  a commenter', cursor=1",
+     "SPEECH OUTPUT: 'a commenter check box not checked  a commenter'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "Line Up",
-    ["BRAILLE LINE:  '< > CheckBox a CC list member'",
-     "     VISIBLE:  '< > CheckBox a CC list member', cursor=1",
-     "SPEECH OUTPUT: 'a CC list member check box not checked a CC list member'"]))
+    ["BRAILLE LINE:  '< > CheckBox  a CC list member'",
+     "     VISIBLE:  '< > CheckBox  a CC list member', cursor=1",
+     "SPEECH OUTPUT: 'a CC list member check box not checked  a CC list member'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "Line Up",
-    ["BRAILLE LINE:  '< > CheckBox the QA contact'",
-     "     VISIBLE:  '< > CheckBox the QA contact', cursor=1",
-     "SPEECH OUTPUT: 'the QA contact check box not checked the QA contact'"]))
+    ["BRAILLE LINE:  '< > CheckBox  the QA contact'",
+     "     VISIBLE:  '< > CheckBox  the QA contact', cursor=1",
+     "SPEECH OUTPUT: 'the QA contact check box not checked  the QA contact'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "Line Up",
-    ["BRAILLE LINE:  '< > CheckBox the reporter'",
-     "     VISIBLE:  '< > CheckBox the reporter', cursor=1",
-     "SPEECH OUTPUT: 'the reporter check box not checked the reporter'"]))
+    ["BRAILLE LINE:  '< > CheckBox  the reporter'",
+     "     VISIBLE:  '< > CheckBox  the reporter', cursor=1",
+     "SPEECH OUTPUT: 'the reporter check box not checked  the reporter'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "Line Up",
-    ["BRAILLE LINE:  '<x> CheckBox the bug assignee'",
-     "     VISIBLE:  '<x> CheckBox the bug assignee', cursor=1",
-     "SPEECH OUTPUT: 'the bug assignee check box checked the bug assignee'"]))
+    ["BRAILLE LINE:  '<x> CheckBox  the bug assignee'",
+     "     VISIBLE:  '<x> CheckBox  the bug assignee', cursor=1",
+     "SPEECH OUTPUT: 'the bug assignee check box checked  the bug assignee'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
Index: test/keystrokes/firefox/line_nav_enter_bug.py
===================================================================
--- test/keystrokes/firefox/line_nav_enter_bug.py	(revision 4175)
+++ test/keystrokes/firefox/line_nav_enter_bug.py	(working copy)
@@ -194,6 +194,15 @@
     "Line Down",
     ["BRAILLE LINE:  ''",
      "     VISIBLE:  '', cursor=0",
+     "SPEECH OUTPUT: '",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "Line Down",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0",
      "SPEECH OUTPUT: ' '"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -363,6 +372,15 @@
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "Line Up",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=0",
+     "SPEECH OUTPUT: '",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "Line Up",
     ["BRAILLE LINE:  'Description:  $l'",
      "     VISIBLE:  'Description:  $l', cursor=1",
      "SPEECH OUTPUT: 'Description: text'"]))
Index: test/keystrokes/firefox/line_nav_simple_form.py
===================================================================
--- test/keystrokes/firefox/line_nav_simple_form.py	(revision 4175)
+++ test/keystrokes/firefox/line_nav_simple_form.py	(working copy)
@@ -161,14 +161,6 @@
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "15. line Down",
-    ["BRAILLE LINE:  ''",
-     "     VISIBLE:  '', cursor=0",
-     "SPEECH OUTPUT: 'blank'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Down"))
-sequence.append(utils.AssertPresentationAction(
-    "16. line Down",
     ["BRAILLE LINE:  'Ain't he handsome (please say yes)? & y RadioButton Yes & y RadioButton No'",
      "     VISIBLE:  'Ain't he handsome (please say ye', cursor=1",
      "SPEECH OUTPUT: 'Ain't he handsome (please say yes)? not selected radio button Yes not selected radio button No'"]))
@@ -180,14 +172,6 @@
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "1. line Up",
-    ["BRAILLE LINE:  ''",
-     "     VISIBLE:  '', cursor=0",
-     "SPEECH OUTPUT: 'blank'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Up"))
-sequence.append(utils.AssertPresentationAction(
-    "2. line Up",
     ["BRAILLE LINE:  'Dashing picture of Willie Walker Image'",
      "     VISIBLE:  'Dashing picture of Willie Walker', cursor=1",
      "SPEECH OUTPUT: 'Dashing picture of Willie Walker image ",
@@ -196,7 +180,7 @@
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "3. line Up",
+    "2. line Up",
     ["BRAILLE LINE:  'List'",
      "     VISIBLE:  'List', cursor=0",
      "SPEECH OUTPUT: 'Hockey multi-select List with 4 items'"]))
@@ -204,7 +188,7 @@
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "4. line Up",
+    "3. line Up",
     ["BRAILLE LINE:  'Which sports do you like?'",
      "     VISIBLE:  'Which sports do you like?', cursor=1",
      "SPEECH OUTPUT: 'Which sports do you like?",
@@ -213,7 +197,7 @@
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "5. line Up",
+    "4. line Up",
     ["BRAILLE LINE:  'Make a selection: Water Combo'",
      "     VISIBLE:  'Make a selection: Water Combo', cursor=1",
      "SPEECH OUTPUT: 'Make a selection: Water combo box'"]))
@@ -221,7 +205,7 @@
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "6. line Up",
+    "5. line Up",
     ["BRAILLE LINE:  'Check one or more: < > CheckBox Red < > CheckBox Blue < > CheckBox Green'",
      "     VISIBLE:  'Check one or more: < > CheckBox ', cursor=1",
      "SPEECH OUTPUT: 'Check one or more: Red check box not checked Blue check box not checked Green check box not checked'"]))
@@ -229,7 +213,7 @@
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "7. line Up",
+    "6. line Up",
     ["BRAILLE LINE:  '      $l'",
      "     VISIBLE:  '      $l', cursor=1",
      "SPEECH OUTPUT: 'Tell me a little more about yourself: text'"]))
@@ -237,7 +221,7 @@
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "8. line Up",
+    "7. line Up",
     ["BRAILLE LINE:  'write my memoirs. $l'",
      "     VISIBLE:  'write my memoirs. $l', cursor=1",
      "SPEECH OUTPUT: 'write my memoirs.'"]))
@@ -245,7 +229,7 @@
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "9. line Up",
+    "8. line Up",
     ["BRAILLE LINE:  'I've recently taken up typing and plan to  $l'",
      "     VISIBLE:  'I've recently taken up typing an', cursor=1",
      "SPEECH OUTPUT: 'I've recently taken up typing and plan to '"]))
@@ -253,7 +237,7 @@
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "10. line Up",
+    "9. line Up",
     ["BRAILLE LINE:  'to swing from trees and eat bananas.   $l'",
      "     VISIBLE:  'to swing from trees and eat bana', cursor=1",
      "SPEECH OUTPUT: 'to swing from trees and eat bananas.  '"]))
@@ -261,7 +245,7 @@
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "11. line Up",
+    "10. 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: 'I am a monkey with a long tail.  I like '"]))
@@ -269,7 +253,7 @@
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "12. line Up",
+    "11. 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:",
@@ -278,7 +262,7 @@
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "13. line Up",
+    "12. line Up",
     ["BRAILLE LINE:  'Tell me a secret:  $l'",
      "     VISIBLE:  'Tell me a secret:  $l', cursor=1",
      "SPEECH OUTPUT: 'Tell me a secret: password'"]))
@@ -286,7 +270,7 @@
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "14. line Up",
+    "13. 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: text tab to me and I disappear'"]))
@@ -294,7 +278,7 @@
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "15. line Up",
+    "14. line Up",
     ["BRAILLE LINE:  'Type something here:  $l'",
      "     VISIBLE:  'Type something here:  $l', cursor=1",
      "SPEECH OUTPUT: 'Type something here: text'"]))
Index: src/orca/scripts/toolkits/Gecko/script.py
===================================================================
--- src/orca/scripts/toolkits/Gecko/script.py	(revision 4175)
+++ src/orca/scripts/toolkits/Gecko/script.py	(working copy)
@@ -4828,59 +4828,55 @@
 
         boundary = pyatspi.TEXT_BOUNDARY_LINE_START
 
-        if obj.getRole() == pyatspi.ROLE_IMAGE \
-           and obj.parent.getRole() == pyatspi.ROLE_LINK:
-            offset = obj.getIndexInParent()
-            obj = obj.parent
-
         # Find the beginning of this line w.r.t. this object.
         #
         text = self.queryNonEmptyText(obj)
-        if text:
+        if not text:
+            offset = 0
+        else:            
             [line, start, end] = text.getTextAtOffset(offset, boundary)
-            unicodeText = line.decode("UTF-8")
-            if unicodeText.startswith(self.EMBEDDED_OBJECT_CHARACTER):
-                childIndex = self.getChildIndex(obj, start)
-                if childIndex >= 0:
-                    child = obj[childIndex]
-                    childText = self.queryNonEmptyText(child)
-                    childRole = child.getRole()
-                    # If the object represented by the EOC at the beginning
-                    # of this line is a section, it is functionally not part
-                    # of this line and should not be included here.
+
+            # Unfortunately, we sometimes get bogus results from Gecko when
+            # we ask for this line. If the offset is not within the range of
+            # characters on this line, try the character reported as the end.
+            #
+            if not (start <= offset < end):
+                [line, start, end] = text.getTextAfterOffset(end, boundary)
+
+            if start <= offset < end:
+                # So far so good. If the line doesn't begin with an EOC, we
+                # have our first character for this object.
+                #
+                if not line.startswith(self.EMBEDDED_OBJECT_CHARACTER):
+                    offset = start
+                else:
+                    # The line may begin with a link, or it may begin with
+                    # an anchor which makes this text something one can jump
+                    # to via a link. Anchors are bad.
                     #
-                    if childText and childRole != pyatspi.ROLE_SECTION:
-                        noChars = childText.characterCount
-                        [cLine, cStart, cEnd] = \
-                               childText.getTextAtOffset(noChars - 1, boundary)
-                        if cEnd - cStart > 1:
-                            obj = child
-                            start = cStart
+                    childIndex = self.getChildIndex(obj, start)
+                    if childIndex >= 0:
+                        child = obj[childIndex]
+                        childText = self.queryNonEmptyText(child)
+                        if not childText:
+                            # It's probably an anchor. It might be something
+                            # else, but that's okay because we do another
+                            # check later to make sure we have everything on
+                            # the left. Set the offset to just after the
+                            # assumed anchor.
+                            #
+                            offset = start + 1
                         else:
-                            start += 1
-                    elif not childRole in [pyatspi.ROLE_LINK,
-                                           pyatspi.ROLE_IMAGE,
-                                           pyatspi.ROLE_SECTION]:
-                        text = None
-                        obj = child
-                    else:
-                        [line, start, end] = \
-                               text.getTextAfterOffset(start + 1, boundary)
-            elif offset > end and start < end:
-                # Line break characters might be messing us up. If the
-                # difference is 1, then we're moving down and want the
-                # text that comes after this offset.  Otherwise, we're
-                # moving up and want the text that comes after the end.
-                #
-                if offset - end > 1:
-                    offset = end + 1
-                [line, start, end] = text.getTextAfterOffset(end + 1, boundary)
+                            # It's a link that ends on our left. Who knows
+                            # where it starts. Might be on the previous
+                            # line.
+                            #
+                            obj = child
+                            offset = childText.characterCount - 1
+                            [line, start, end] = \
+                                childText.getTextAtOffset(offset, boundary)
+                            offset = start
 
-        if text:
-            offset = start
-        else:
-            offset = 0
-
         extents = self.getExtents(obj, offset, offset + 1)
 
         # Get the objects on this line.
@@ -4894,11 +4890,6 @@
         while not done:
             [firstObj, start, end, string] = objects[0]
             isAria = not self.isNavigableAria(firstObj)
-
-            text = self.queryNonEmptyText(firstObj)
-            if text and start > 0 and not isAria:
-                break
-
             if isAria:
                 documentFrame = self.getDocumentFrame()
                 prevObj = self.findPreviousObject(firstObj, documentFrame)
@@ -4935,10 +4926,6 @@
             [lastObj, start, end, string] = objects[-1]
             isAria = not self.isNavigableAria(lastObj)
 
-            text = self.queryNonEmptyText(lastObj)
-            if text and end < text.characterCount - 1 and not isAria:
-                break
-
             if isAria:
                 documentFrame = self.getDocumentFrame()
                 nextObj = self.findNextObject(lastObj, documentFrame)
@@ -5392,10 +5379,13 @@
 
         prevObj = currentLine[0][0]
         prevOffset = currentLine[0][1]
+        [prevObj, prevOffset] = \
+            self.findPreviousCaretInOrder(currentLine[0][0], currentLine[0][1])
 
         extents = self.getExtents(obj, characterOffset, characterOffset + 1)
         prevExtents = self.getExtents(prevObj, prevOffset, prevOffset + 1)
-        while self.onSameLine(extents, prevExtents):
+        while self.onSameLine(extents, prevExtents) \
+              and (extents != prevExtents):
             [prevObj, prevOffset] = \
                 self.findPreviousCaretInOrder(prevObj, prevOffset)
             prevExtents = self.getExtents(prevObj, prevOffset, prevOffset + 1)
@@ -5484,8 +5474,9 @@
         if index < 0:
             currentLine = self.getLineContentsAtOffset(obj, characterOffset)
 
-        nextObj = currentLine[-1][0]
-        nextOffset = currentLine[-1][2] - 1
+        [nextObj, nextOffset] = \
+            self.findNextCaretInOrder(currentLine[-1][0],
+                                      currentLine[-1][2] - 1)
 
         extents = self.getExtents(obj, characterOffset, characterOffset + 1)
         nextExtents = self.getExtents(nextObj, nextOffset, nextOffset + 1)
