[orca] New and updated tests



commit 77c9d864a4d980a486eb8bd46ffe71061882d580
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Tue Aug 23 04:39:57 2016 -0400

    New and updated tests

 test/harness/runone.sh                             |   21 ++-
 test/keystrokes/firefox/aria_alert.py              |    8 +-
 test/keystrokes/firefox/aria_button_dojo.py        |    9 +-
 test/keystrokes/firefox/aria_combobox_dojo.py      |    4 +-
 test/keystrokes/firefox/aria_landmarks.py          |    2 -
 test/keystrokes/firefox/aria_radiobutton.py        |   11 +-
 test/keystrokes/firefox/aria_slider_tpg.params     |    2 +-
 test/keystrokes/firefox/aria_slider_tpg.py         |    2 +-
 test/keystrokes/firefox/aria_sliders.py            |   11 +-
 test/keystrokes/firefox/aria_tabpanel2.py          |    9 +-
 test/keystrokes/firefox/aria_treegrid.py           |   28 +-
 test/keystrokes/firefox/flat_review_combo_box.py   |    2 +-
 .../firefox/flat_review_text_by_word_and_char.py   |   26 +-
 test/keystrokes/firefox/label_inference_entries.py |    5 +-
 test/keystrokes/firefox/line_nav_bug_546815.py     |    8 +-
 ...av_button_in_link_position_relative_on_focus.py |    4 +
 .../firefox/line_nav_inline_block_spans.py         |    8 +-
 test/keystrokes/firefox/line_nav_nested_tables.py  |    4 +-
 .../firefox/line_nav_role_application.py           |    2 -
 test/keystrokes/firefox/line_nav_sun_java.py       |    4 +-
 test/keystrokes/firefox/line_nav_wiki_down.py      |    4 +-
 .../keystrokes/firefox/object_nav_links_in_text.py |    6 +-
 .../keystrokes/firefox/object_nav_links_on_line.py |    6 +-
 test/keystrokes/firefox/ui_role_accel_label.py     |    5 +-
 test/keystrokes/firefox/ui_role_check_menu_item.py |    1 +
 test/keystrokes/firefox/ui_role_menu_bar.py        |    3 +-
 test/keystrokes/firefox/ui_role_radio_menu_item.py |    2 +
 test/keystrokes/firefox/ui_title_and_status_bar.py |    2 -
 .../gnome-clocks/stop_watch_flat_review.py         |  105 +++++++
 test/keystrokes/gnome-clocks/timer_flat_review.py  |  118 ++++++++
 test/keystrokes/gnome-terminal/ls.py               |   31 ++
 test/keystrokes/gnome-terminal/ls_flat_review.py   |  120 ++++++++
 test/keystrokes/gnome-terminal/man_page.py         |  262 +++++++++++++++++
 .../gnome-terminal/man_page_flat_review.py         |  291 +++++++++++++++++++
 test/keystrokes/gnome-terminal/multiple_tabs.py    |   83 ++++++
 test/keystrokes/gnome-terminal/nano.py             |  163 +++++++++++
 test/keystrokes/gnome-terminal/nano_flat_review.py |  140 +++++++++
 test/keystrokes/gtk-demo/learn_mode.py             |    2 +
 test/keystrokes/gtk-demo/role_check_menu_item.py   |    2 +
 test/keystrokes/gtk-demo/role_column_header.py     |    3 +-
 test/keystrokes/gtk-demo/role_icon_flat_review.py  |  147 ++++++++++
 test/keystrokes/gtk-demo/role_label.py             |   87 ++++---
 test/keystrokes/gtk-demo/role_menu_flat_review.py  |  138 +++++++++
 test/keystrokes/gtk-demo/role_page_tab.py          |    1 +
 test/keystrokes/gtk-demo/role_radio_button.py      |    1 +
 test/keystrokes/gtk-demo/role_spin_button.py       |    4 -
 test/keystrokes/gtk-demo/role_split_pane.py        |   30 +-
 test/keystrokes/gtk-demo/role_status_bar.py        |    2 -
 test/keystrokes/gtk-demo/role_table.py             |    2 +
 test/keystrokes/gtk-demo/role_text_multiline.py    |    5 +-
 ...eview.py => role_text_multiline_flat_review.py} |   14 +-
 .../gtk-demo/role_text_multiline_navigation.py     |    8 +-
 .../gtk-demo/role_text_multiline_navigation2.py    |   18 +-
 test/keystrokes/gtk-demo/role_window.py            |    3 +
 test/keystrokes/gtk-demo/spoken_indentation.py     |    2 +
 test/keystrokes/gtk3-demo/role_alert.py            |    2 +-
 test/keystrokes/gtk3-demo/role_color_chooser.py    |    5 +-
 test/keystrokes/gtk3-demo/role_column_header.py    |    3 +-
 test/keystrokes/gtk3-demo/role_combo_box.py        |   11 +-
 test/keystrokes/gtk3-demo/role_dialog.py           |    2 +-
 .../gtk3-demo/role_dialog_flat_review.py           |  295 ++++++++++++++++++++
 test/keystrokes/gtk3-demo/role_icon_flat_review.py |  147 ++++++++++
 test/keystrokes/gtk3-demo/role_info_bar.py         |    6 +-
 test/keystrokes/gtk3-demo/role_label.py            |  142 ----------
 test/keystrokes/gtk3-demo/role_spin_button.py      |    5 +-
 test/keystrokes/gtk3-demo/role_split_pane.py       |   64 +++--
 test/keystrokes/gtk3-demo/role_status_bar.py       |    5 +-
 .../keystrokes/gtk3-demo/role_table_flat_review.py |  278 ++++++++++++++++++
 test/keystrokes/gtk3-demo/role_text_multiline.py   |    4 +-
 ...eview.py => role_text_multiline_flat_review.py} |   30 ++-
 .../gtk3-demo/role_text_multiline_navigation.py    |    7 +-
 .../gtk3-demo/role_text_multiline_navigation2.py   |   15 +-
 .../gtk3-demo/role_text_multiline_selection.py     |    3 +-
 .../gtk3-demo/role_toggle_button_flat_review.py    |  162 +++++++++++
 test/keystrokes/gtk3-demo/role_toolbar.py          |    1 +
 test/keystrokes/gtk3-demo/role_tooltip.py          |    7 +-
 test/keystrokes/gtk3-demo/spoken_indentation.py    |    3 +-
 .../gtk3-demo/spoken_indentation.settings          |    2 +-
 .../oocalc/coordinate_announcement_off.py          |   33 +--
 .../oocalc/coordinate_announcement_on.py           |   27 +--
 test/keystrokes/oocalc/document_enter_text.py      |   30 +--
 .../oocalc/document_nav_dynamic_headers.py         |   93 +++----
 test/keystrokes/oocalc/document_text_attributes.py |   11 +-
 test/keystrokes/oocalc/manage_names_combobox.py    |   47 ++--
 test/keystrokes/oocalc/messages_dynamic_headers.py |   21 +-
 test/keystrokes/oocalc/ui_role_check_menu_item.py  |   21 +-
 test/keystrokes/oowriter/document_nav_cell.py      |   14 +-
 test/keystrokes/oowriter/document_nav_line.py      |   15 +-
 .../oowriter/document_nav_line_bullets.py          |   24 +-
 test/keystrokes/oowriter/document_nav_paragraph.py |    2 +-
 test/keystrokes/oowriter/document_nav_word.py      |   43 ++--
 test/keystrokes/oowriter/document_new.py           |    4 +-
 test/keystrokes/oowriter/flat_review_line.py       |   25 ++-
 .../oowriter/flat_review_line_columns.py           |   75 ++++-
 .../oowriter/flat_review_platform_menubar.py       |   59 ++--
 test/keystrokes/oowriter/flat_review_word.py       |   49 ++--
 test/keystrokes/oowriter/messages_table.py         |   26 ++-
 test/keystrokes/oowriter/say_all.py                |    2 +-
 test/keystrokes/oowriter/selection_word.py         |   55 ++--
 test/keystrokes/oowriter/spellcheck.py             |   12 +-
 test/keystrokes/oowriter/spoken_indentation.py     |    5 +-
 test/keystrokes/oowriter/structural_nav_table.py   |  175 ++++++++----
 .../oowriter/structural_nav_table.settings         |    2 +-
 test/keystrokes/oowriter/table_cell_row.py         |   46 ++--
 test/keystrokes/oowriter/text_attributes.py        |   26 +-
 test/keystrokes/oowriter/ui_navigator.py           |   30 ++-
 test/keystrokes/oowriter/ui_role_combo_box.py      |   40 ++-
 test/keystrokes/oowriter/ui_role_label.py          |   21 +-
 test/keystrokes/oowriter/ui_role_list_item.py      |   16 +-
 test/keystrokes/oowriter/ui_role_menu.py           |   15 +-
 test/keystrokes/oowriter/ui_role_toolbar.py        |  259 +++++++++---------
 test/keystrokes/oowriter/where_am_i_document.py    |    3 +-
 112 files changed, 3542 insertions(+), 964 deletions(-)
---
diff --git a/test/harness/runone.sh b/test/harness/runone.sh
index 7702f99..bc0e614 100755
--- a/test/harness/runone.sh
+++ b/test/harness/runone.sh
@@ -87,7 +87,6 @@ fi
 if [ "$APP_NAME" == "swriter" ] || [ "$APP_NAME" == "oowriter" ] || [ "$APP_NAME" == "scalc" ] || [ 
"$APP_NAME" == "oocalc" ] || [ "$APP_NAME" == "simpress" ] || [ "$APP_NAME" == "ooimpress" ] || [ "$APP_NAME" 
== "sbase" ] || [ "$APP_NAME" == "oobase" ] || [ "$APP_NAME" == "soffice" ] || [ "$APP_NAME" == "ooffice" ]
 then
     SOFFICE=1
-    ARGS="--norestore --nologo"
 fi
 
 # If we're using Firefox, give it a known profile to work from.
@@ -113,6 +112,19 @@ then
     ARGS="-p --profile=$EWB_PROFILE_DIR"
 fi
 
+if [ "x$SOFFICE" == "x1" ]
+then
+    LO_PROFILE_DIR=/tmp/soffice-profile
+    ARGS="--norestore --nologo --nolockcheck -env:UserInstallation=file://$LO_PROFILE_DIR"
+fi
+
+if [ "$APP_NAME" = "gnome-terminal" ]
+then
+    TERMINAL_WORKING_DIR=/tmp/gnome-terminal-wd
+    mkdir $TERMINAL_WORKING_DIR
+    ARGS="--working-directory=$TERMINAL_WORKING_DIR"
+fi
+
 if [ $orcaRunning -eq 0 ]
 then
     $harnessDir/runorca.py --user-prefs `pwd` --debug-file $debugFile &
@@ -140,6 +152,13 @@ if [ "x$SOFFICE" == "x1" ]
 then
     APP_PID=$(ps -eo pid,ruid,args | grep norestore | grep -v grep | awk '{ print $1 }')
     kill $APP_PID > /dev/null 2>&1
+    rm -rf $LO_PROFILE_DIR
+fi
+
+if [ "$APP_NAME" == "gnome-terminal" ]
+then
+    pkill $APP_NAME > /dev/null 2>&1
+    rm -rf $TERMINAL_WORKING_DIR
 fi
 
 if [ "$APP_NAME" == "epiphany" ]
diff --git a/test/keystrokes/firefox/aria_alert.py b/test/keystrokes/firefox/aria_alert.py
index bdc1d7d..098c7c5 100644
--- a/test/keystrokes/firefox/aria_alert.py
+++ b/test/keystrokes/firefox/aria_alert.py
@@ -22,14 +22,16 @@ sequence.append(TypeAction(" "))
 sequence.append(utils.AssertPresentationAction(
     "1. Press button",
     ["KNOWN ISSUE: Because the link has focus, we double-present it.",
-     "BRAILLE LINE:  'alert'",
-     "     VISIBLE:  'alert', cursor=1",
+     "BRAILLE LINE:  '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'",
+     "     VISIBLE:  'This popup is created as a div i', cursor=0",
      "BRAILLE LINE:  'close'",
      "     VISIBLE:  'close', cursor=1",
      "BRAILLE LINE:  'close'",
      "     VISIBLE:  'close', cursor=1",
      "SPEECH OUTPUT: 'alert.'",
-     "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: '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. '",
+     "SPEECH OUTPUT: 'close'",
+     "SPEECH OUTPUT: 'link.'",     
      "SPEECH OUTPUT: 'close link.'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/aria_button_dojo.py b/test/keystrokes/firefox/aria_button_dojo.py
index 424d338..e5ac3ab 100644
--- a/test/keystrokes/firefox/aria_button_dojo.py
+++ b/test/keystrokes/firefox/aria_button_dojo.py
@@ -236,11 +236,12 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
     "25. Go to lime",
-    ["BRAILLE LINE:  'white table cell'",
+    ["KNOWN ISSUE: This is a side effect of working around Roundcube's message list table.",
+     "BRAILLE LINE:  'white table cell'",
      "     VISIBLE:  'white table cell', cursor=1",
-     "BRAILLE LINE:  'lime table cell'",
-     "     VISIBLE:  'lime table cell', cursor=1",
-     "SPEECH OUTPUT: 'lime.'"]))
+     "BRAILLE LINE:  'white white lime lime green green blue blue table row'",
+     "     VISIBLE:  'white white lime lime green gree', cursor=1",
+     "SPEECH OUTPUT: 'white white lime lime green green blue blue table row.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Escape"))
diff --git a/test/keystrokes/firefox/aria_combobox_dojo.py b/test/keystrokes/firefox/aria_combobox_dojo.py
index 67b0a63..79060bc 100644
--- a/test/keystrokes/firefox/aria_combobox_dojo.py
+++ b/test/keystrokes/firefox/aria_combobox_dojo.py
@@ -24,7 +24,7 @@ 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): editable combo box California selected'",
      "SPEECH OUTPUT: 'Focus mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -120,7 +120,7 @@ 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): editable combo box California selected'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/aria_landmarks.py b/test/keystrokes/firefox/aria_landmarks.py
index 0e3f6e7..9ac8b08 100644
--- a/test/keystrokes/firefox/aria_landmarks.py
+++ b/test/keystrokes/firefox/aria_landmarks.py
@@ -26,7 +26,6 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'main application embedded'",
      "     VISIBLE:  'main application embedded', cursor=1",
      "SPEECH OUTPUT: 'main'",
-     "SPEECH OUTPUT: 'application'",
      "SPEECH OUTPUT: 'embedded'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -114,7 +113,6 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'main application embedded'",
      "     VISIBLE:  'main application embedded', cursor=1",
      "SPEECH OUTPUT: 'main'",
-     "SPEECH OUTPUT: 'application'",
      "SPEECH OUTPUT: 'embedded'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/aria_radiobutton.py b/test/keystrokes/firefox/aria_radiobutton.py
index 023fd09..36692e3 100644
--- a/test/keystrokes/firefox/aria_radiobutton.py
+++ b/test/keystrokes/firefox/aria_radiobutton.py
@@ -12,11 +12,16 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
     "1. Tab to first radio button",
-    ["BRAILLE LINE:  '&=y Radio Maria radio button'",
+    ["BRAILLE LINE:  'embedded'",
+     "     VISIBLE:  'embedded', cursor=1",
+     "BRAILLE LINE:  '&=y Radio Maria radio button'",
      "     VISIBLE:  '&=y Radio Maria radio button', cursor=1",
+     "BRAILLE LINE:  'Browse mode'",
+     "     VISIBLE:  'Browse mode', cursor=0",
      "SPEECH OUTPUT: 'Lunch Options panel'",
      "SPEECH OUTPUT: 'Radio Maria.'",
-     "SPEECH OUTPUT: 'selected radio button'"]))
+     "SPEECH OUTPUT: 'selected radio button'",
+     "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -24,6 +29,8 @@ sequence.append(utils.AssertPresentationAction(
     "2. Basic whereamI",
     ["BRAILLE LINE:  '&=y Radio Maria radio button'",
      "     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.'",
      "SPEECH OUTPUT: 'Radio Maria radio button.'",
      "SPEECH OUTPUT: 'selected.'"]))
diff --git a/test/keystrokes/firefox/aria_slider_tpg.params b/test/keystrokes/firefox/aria_slider_tpg.params
index 7e2fae0..e6b9dd8 100644
--- a/test/keystrokes/firefox/aria_slider_tpg.params
+++ b/test/keystrokes/firefox/aria_slider_tpg.params
@@ -1 +1 @@
-PARAMS=http://www.paciellogroup.com/blog/misc/samples/aria/slider/
+PARAMS=http://files.paciellogroup.com/blogmisc/samples/aria/slider/
diff --git a/test/keystrokes/firefox/aria_slider_tpg.py b/test/keystrokes/firefox/aria_slider_tpg.py
index acdb3a7..fc9606d 100644
--- a/test/keystrokes/firefox/aria_slider_tpg.py
+++ b/test/keystrokes/firefox/aria_slider_tpg.py
@@ -8,7 +8,7 @@ import utils
 sequence = MacroSequence()
 
 #sequence.append(WaitForDocLoad())
-sequence.append(PauseAction(5000))
+sequence.append(PauseAction(10000))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Tab"))
 
diff --git a/test/keystrokes/firefox/aria_sliders.py b/test/keystrokes/firefox/aria_sliders.py
index 7ceafa5..4e7d857 100644
--- a/test/keystrokes/firefox/aria_sliders.py
+++ b/test/keystrokes/firefox/aria_sliders.py
@@ -12,12 +12,11 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
     "1. Tab to slider 1",
-    ["BRAILLE LINE:  '30 slider'",
+    ["BRAILLE LINE:  'embedded'",
+     "     VISIBLE:  'embedded', cursor=1",
+     "BRAILLE LINE:  '30 slider'",
      "     VISIBLE:  '30 slider', cursor=1",
-     "BRAILLE LINE:  'Focus mode'",
-     "     VISIBLE:  'Focus mode', cursor=0",
-     "SPEECH OUTPUT: 'slider 30'",
-     "SPEECH OUTPUT: 'Focus mode' voice=system"]))
+     "SPEECH OUTPUT: 'slider 30'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
@@ -25,8 +24,6 @@ sequence.append(utils.AssertPresentationAction(
     "2. Basic whereAmI on slider 1",
     ["BRAILLE LINE:  '30 slider'",
      "     VISIBLE:  '30 slider', cursor=1",
-     "BRAILLE LINE:  '30 slider'",
-     "     VISIBLE:  '30 slider', cursor=1",
      "SPEECH OUTPUT: 'slider 30'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/aria_tabpanel2.py b/test/keystrokes/firefox/aria_tabpanel2.py
index 4847692..6d71012 100644
--- a/test/keystrokes/firefox/aria_tabpanel2.py
+++ b/test/keystrokes/firefox/aria_tabpanel2.py
@@ -18,15 +18,20 @@ 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=1",
+     "BRAILLE LINE:  'Browse mode'",
+     "     VISIBLE:  'Browse mode', cursor=0",
      "SPEECH OUTPUT: 'List with 4 items'",
      "SPEECH OUTPUT: 'Thick and cheesy.'",
-     "SPEECH OUTPUT: 'selected radio button'"]))
+     "SPEECH OUTPUT: 'selected radio button'",
+     "SPEECH OUTPUT: 'Browse mode' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Page_Down"))
 sequence.append(utils.AssertPresentationAction(
     "2. Ctrl Page Down to second tab",
-    ["BRAILLE LINE:  'Veggies page tab'",
+    ["BRAILLE LINE:  '&=y Thick and cheesy radio button'",
+     "     VISIBLE:  '&=y Thick and cheesy radio butto', cursor=1",
+     "BRAILLE LINE:  'Veggies page tab'",
      "     VISIBLE:  'Veggies page tab', cursor=1",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
diff --git a/test/keystrokes/firefox/aria_treegrid.py b/test/keystrokes/firefox/aria_treegrid.py
index 356f2ac..6dfbb93 100644
--- a/test/keystrokes/firefox/aria_treegrid.py
+++ b/test/keystrokes/firefox/aria_treegrid.py
@@ -15,7 +15,7 @@ sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
     "1. Navigate to the treegrid",
     ["BRAILLE LINE:  '+A Question of Love table cell'",
-     "     VISIBLE:  '+A Question of Love table cell', cursor=1",
+     "     VISIBLE:  '+A Question of Love table row', cursor=1",
      "BRAILLE LINE:  'Focus mode'",
      "     VISIBLE:  'Focus mode', cursor=0",
      "SPEECH OUTPUT: 'collapsed'",
@@ -27,9 +27,9 @@ sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "2. Down Arrow",
     ["BRAILLE LINE:  '+A Question of Love table cell'",
-     "     VISIBLE:  '+A Question of Love table cell', cursor=1",
+     "     VISIBLE:  '+A Question of Love table row', cursor=1",
      "BRAILLE LINE:  '+ Piece of Peace table cell'",
-     "     VISIBLE:  '+ Piece of Peace table cell', cursor=1",
+     "     VISIBLE:  '+ Piece of Peace table row', cursor=1",
      "SPEECH OUTPUT: 'collapsed'",
      "SPEECH OUTPUT: '+ Piece of Peace.'"]))
 
@@ -38,7 +38,7 @@ sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "3. Down Arrow",
     ["BRAILLE LINE:  '+ International Law table cell'",
-     "     VISIBLE:  '+ International Law table cell', cursor=1",
+     "     VISIBLE:  '+ International Law table row', cursor=1",
      "SPEECH OUTPUT: 'collapsed'",
      "SPEECH OUTPUT: '+ International Law.'"]))
 
@@ -47,7 +47,7 @@ sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "4. Up Arrow",
     ["BRAILLE LINE:  '+ Piece of Peace table cell'",
-     "     VISIBLE:  '+ Piece of Peace table cell', cursor=1",
+     "     VISIBLE:  '+ Piece of Peace table row', cursor=1",
      "SPEECH OUTPUT: 'collapsed'",
      "SPEECH OUTPUT: '+ Piece of Peace.'"]))
 
@@ -56,7 +56,7 @@ sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "5. Up Arrow",
     ["BRAILLE LINE:  '+A Question of Love table cell'",
-     "     VISIBLE:  '+A Question of Love table cell', cursor=1",
+     "     VISIBLE:  '+A Question of Love table row', cursor=1",
      "SPEECH OUTPUT: 'collapsed'",
      "SPEECH OUTPUT: '+A Question of Love.'"]))
 
@@ -65,7 +65,7 @@ sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
     "6. basic whereAmI",
     ["BRAILLE LINE:  '+A Question of Love table cell'",
-     "     VISIBLE:  '+A Question of Love table cell', cursor=1",
+     "     VISIBLE:  '+A Question of Love table row', cursor=1",
      "SPEECH OUTPUT: 'table row.'",
      "SPEECH OUTPUT: 'ISBN.'",
      "SPEECH OUTPUT: '+A Question of Love.'"]))
@@ -83,7 +83,7 @@ sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
     "8. basic whereAmI",
     ["BRAILLE LINE:  '-A Question of Love table cell'",
-     "     VISIBLE:  '-A Question of Love table cell', cursor=1",
+     "     VISIBLE:  '-A Question of Love table row', cursor=1",
      "SPEECH OUTPUT: 'table row.'",
      "SPEECH OUTPUT: 'ISBN.'",
      "SPEECH OUTPUT: '-A Question of Love.'"]))
@@ -93,7 +93,7 @@ sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "9. Down Arrow into child",
     ["BRAILLE LINE:  '978-3-453-40540-0 table cell'",
-     "     VISIBLE:  '978-3-453-40540-0 table cell', cursor=1",
+     "     VISIBLE:  '978-3-453-40540-0 table row', cursor=1",
      "SPEECH OUTPUT: '978-3-453-40540-0.'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -101,7 +101,7 @@ sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
     "10. Right Arrow in child",
     ["BRAILLE LINE:  'Nora Roberts table cell'",
-     "     VISIBLE:  'Nora Roberts table cell', cursor=1",
+     "     VISIBLE:  'Nora Roberts table row', cursor=1",
      "SPEECH OUTPUT: 'Nora Roberts.'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -109,7 +109,7 @@ sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
     "11. Right Arrow in child",
     ["BRAILLE LINE:  '$ 9.99 table cell'",
-     "     VISIBLE:  '$ 9.99 table cell', cursor=1",
+     "     VISIBLE:  '$ 9.99 table row', cursor=1",
      "SPEECH OUTPUT: '$ 9.99.'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -117,7 +117,7 @@ sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
     "12. Left Arrow in child",
     ["BRAILLE LINE:  'Nora Roberts table cell'",
-     "     VISIBLE:  'Nora Roberts table cell', cursor=1",
+     "     VISIBLE:  'Nora Roberts table row', cursor=1",
      "SPEECH OUTPUT: 'Nora Roberts.'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -125,7 +125,7 @@ sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
     "13. Left Arrow in child",
     ["BRAILLE LINE:  '978-3-453-40540-0 table cell'",
-     "     VISIBLE:  '978-3-453-40540-0 table cell', cursor=1",
+     "     VISIBLE:  '978-3-453-40540-0 table row', cursor=1",
      "SPEECH OUTPUT: '978-3-453-40540-0.'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -133,7 +133,7 @@ sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "14. Up Arrow back to parent",
     ["BRAILLE LINE:  '-A Question of Love table cell'",
-     "     VISIBLE:  '-A Question of Love table cell', cursor=1",
+     "     VISIBLE:  '-A Question of Love table row', cursor=1",
      "SPEECH OUTPUT: 'expanded'",
      "SPEECH OUTPUT: '-A Question of Love.'"]))
 
diff --git a/test/keystrokes/firefox/flat_review_combo_box.py 
b/test/keystrokes/firefox/flat_review_combo_box.py
index f54f128..fb9a134 100644
--- a/test/keystrokes/firefox/flat_review_combo_box.py
+++ b/test/keystrokes/firefox/flat_review_combo_box.py
@@ -45,7 +45,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Flat review next line",
     ["BRAILLE LINE:  'FIXED $l'",
      "     VISIBLE:  'FIXED $l', cursor=1",
-     "SPEECH OUTPUT: 'FIXED' voice=uppercase"]))
+     "SPEECH OUTPUT: 'FIXED'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_9"))
diff --git a/test/keystrokes/firefox/flat_review_text_by_word_and_char.py 
b/test/keystrokes/firefox/flat_review_text_by_word_and_char.py
index f1431a1..a17b994 100644
--- a/test/keystrokes/firefox/flat_review_text_by_word_and_char.py
+++ b/test/keystrokes/firefox/flat_review_text_by_word_and_char.py
@@ -85,22 +85,22 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_6"))
 sequence.append(utils.AssertPresentationAction(
-    "flat review next word",
+    "5. flat review next word",
     ["BRAILLE LINE:  'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and  $l'",
      "     VISIBLE:  'NOBODY expects the Spanish Inqui', cursor=1",
-     "SPEECH OUTPUT: 'NOBODY' voice=uppercase"]))
+     "SPEECH OUTPUT: 'NOBODY'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_6"))
 sequence.append(utils.AssertPresentationAction(
-    "flat review next word",
+    "6. flat review next word",
     ["BRAILLE LINE:  'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and  $l'",
      "     VISIBLE:  'NOBODY expects the Spanish Inqui', cursor=8",
      "SPEECH OUTPUT: 'expects'"]))
 
 sequence.append(KeyComboAction("KP_2"))
 sequence.append(utils.AssertPresentationAction(
-    "flat review current char",
+    "7. flat review current char",
     ["BRAILLE LINE:  'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and  $l'",
      "     VISIBLE:  'NOBODY expects the Spanish Inqui', cursor=8",
      "BRAILLE LINE:  'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and  $l'",
@@ -112,7 +112,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_2"))
 sequence.append(KeyComboAction("KP_2"))
 sequence.append(utils.AssertPresentationAction(
-    "phonetic for current char",
+    "8. phonetic for current char",
     ["BRAILLE LINE:  'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and  $l'",
      "     VISIBLE:  'NOBODY expects the Spanish Inqui', cursor=8",
      "BRAILLE LINE:  'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and  $l'",
@@ -125,7 +125,7 @@ sequence.append(KeyComboAction("KP_2"))
 sequence.append(KeyComboAction("KP_2"))
 sequence.append(KeyComboAction("KP_2"))
 sequence.append(utils.AssertPresentationAction(
-    "unicode for current char",
+    "9. unicode for current char",
     ["BRAILLE LINE:  'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and  $l'",
      "     VISIBLE:  'NOBODY expects the Spanish Inqui', cursor=8",
      "BRAILLE LINE:  'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and  $l'",
@@ -139,7 +139,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_3"))
 sequence.append(utils.AssertPresentationAction(
-    "flat review next char",
+    "10. flat review next char",
     ["BRAILLE LINE:  'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and  $l'",
      "     VISIBLE:  'NOBODY expects the Spanish Inqui', cursor=9",
      "SPEECH OUTPUT: 'x'"]))
@@ -147,7 +147,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_3"))
 sequence.append(utils.AssertPresentationAction(
-    "flat review next char",
+    "11. flat review next char",
     ["BRAILLE LINE:  'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and  $l'",
      "     VISIBLE:  'NOBODY expects the Spanish Inqui', cursor=10",
      "SPEECH OUTPUT: 'p'"]))
@@ -155,7 +155,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_1"))
 sequence.append(utils.AssertPresentationAction(
-    "flat review previous char",
+    "12. flat review previous char",
     ["BRAILLE LINE:  'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and  $l'",
      "     VISIBLE:  'NOBODY expects the Spanish Inqui', cursor=9",
      "SPEECH OUTPUT: 'x'"]))
@@ -163,7 +163,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_1"))
 sequence.append(utils.AssertPresentationAction(
-    "flat review previous char",
+    "13. flat review previous char",
     ["BRAILLE LINE:  'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and  $l'",
      "     VISIBLE:  'NOBODY expects the Spanish Inqui', cursor=8",
      "SPEECH OUTPUT: 'e'"]))
@@ -171,15 +171,15 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_4"))
 sequence.append(utils.AssertPresentationAction(
-    "flat review previous word",
+    "14. flat review previous word",
     ["BRAILLE LINE:  'NOBODY expects the Spanish Inquisition! Our chief weapon is surprise. Surprise and 
fear. Fear and  $l'",
      "     VISIBLE:  'NOBODY expects the Spanish Inqui', cursor=1",
-     "SPEECH OUTPUT: 'NOBODY' voice=uppercase"]))
+     "SPEECH OUTPUT: 'NOBODY'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_4"))
 sequence.append(utils.AssertPresentationAction(
-    "flat review previous word",
+    "15. flat review previous word",
     ["BRAILLE LINE:  'On weaponry: $l'",
      "     VISIBLE:  'On weaponry: $l', cursor=4",
      "SPEECH OUTPUT: 'weaponry:'"]))
diff --git a/test/keystrokes/firefox/label_inference_entries.py 
b/test/keystrokes/firefox/label_inference_entries.py
index 3b6f302..f06700b 100644
--- a/test/keystrokes/firefox/label_inference_entries.py
+++ b/test/keystrokes/firefox/label_inference_entries.py
@@ -381,10 +381,9 @@ sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "37. Next form field",
-    ["KNOWN ISSUE: We're double-displaying the placeholder text.",
-     "BRAILLE LINE:  'Magic disappearing text trick:  $l'",
+    ["BRAILLE LINE:  'Magic disappearing text trick:  $l'",
      "     VISIBLE:  'Magic disappearing text trick:  ', cursor=0",
-     "BRAILLE LINE:  'Magic disappearing text trick: Magic disappearing text trick:  $l'",
+     "BRAILLE LINE:  'Magic disappearing text trick:  $l'",
      "     VISIBLE:  'Magic disappearing text trick:  ', cursor=32",
      "SPEECH OUTPUT: 'Magic disappearing text trick: entry'"]))
 
diff --git a/test/keystrokes/firefox/line_nav_bug_546815.py b/test/keystrokes/firefox/line_nav_bug_546815.py
index 6d12314..3d4938c 100644
--- a/test/keystrokes/firefox/line_nav_bug_546815.py
+++ b/test/keystrokes/firefox/line_nav_bug_546815.py
@@ -105,8 +105,8 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "10. Line Down",
-    ["BRAILLE LINE:  'character:  $l'",
-     "     VISIBLE:  'character:  $l', cursor=1",
+    ["BRAILLE LINE:  'character:  $l '",
+     "     VISIBLE:  'character:  $l ', cursor=1",
      "SPEECH OUTPUT: 'character:'",
      "SPEECH OUTPUT: 'entry'"]))
 
@@ -339,8 +339,8 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "38. Line Up",
-    ["BRAILLE LINE:  'character:  $l'",
-     "     VISIBLE:  'character:  $l', cursor=1",
+    ["BRAILLE LINE:  'character:  $l '",
+     "     VISIBLE:  'character:  $l ', cursor=1",
      "SPEECH OUTPUT: 'character:'",
      "SPEECH OUTPUT: 'entry'"]))
 
diff --git a/test/keystrokes/firefox/line_nav_button_in_link_position_relative_on_focus.py 
b/test/keystrokes/firefox/line_nav_button_in_link_position_relative_on_focus.py
index 7014176..efcd6fa 100644
--- a/test/keystrokes/firefox/line_nav_button_in_link_position_relative_on_focus.py
+++ b/test/keystrokes/firefox/line_nav_button_in_link_position_relative_on_focus.py
@@ -27,6 +27,8 @@ sequence.append(utils.AssertPresentationAction(
     "2. Line Down",
     ["BRAILLE LINE:  '  Line 2   push button'",
      "     VISIBLE:  '  Line 2   push button', cursor=1",
+     "BRAILLE LINE:  '  Line 2   push button'",
+     "     VISIBLE:  '  Line 2   push button', cursor=1",
      "SPEECH OUTPUT: '  Line 2   push button'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -43,6 +45,8 @@ sequence.append(utils.AssertPresentationAction(
     "4. Line Up",
     ["BRAILLE LINE:  '  Line 2   push button'",
      "     VISIBLE:  '  Line 2   push button', cursor=1",
+     "BRAILLE LINE:  '  Line 2   push button'",
+     "     VISIBLE:  '  Line 2   push button', cursor=1",
      "SPEECH OUTPUT: '  Line 2   push button'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/line_nav_inline_block_spans.py 
b/test/keystrokes/firefox/line_nav_inline_block_spans.py
index 990b2ad..5168bb0 100644
--- a/test/keystrokes/firefox/line_nav_inline_block_spans.py
+++ b/test/keystrokes/firefox/line_nav_inline_block_spans.py
@@ -26,8 +26,8 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "2. Line Down",
-    ["BRAILLE LINE:  'Line 2'",
-     "     VISIBLE:  'Line 2', cursor=1",
+    ["BRAILLE LINE:  'Line 2  '",
+     "     VISIBLE:  'Line 2  ', cursor=1",
      "SPEECH OUTPUT: 'Line 2'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -42,8 +42,8 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "4. Line Up",
-    ["BRAILLE LINE:  'Line 2'",
-     "     VISIBLE:  'Line 2', cursor=1",
+    ["BRAILLE LINE:  'Line 2  '",
+     "     VISIBLE:  'Line 2  ', cursor=1",
      "SPEECH OUTPUT: 'Line 2'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/line_nav_nested_tables.py 
b/test/keystrokes/firefox/line_nav_nested_tables.py
index 0dbd127..5a94e11 100644
--- a/test/keystrokes/firefox/line_nav_nested_tables.py
+++ b/test/keystrokes/firefox/line_nav_nested_tables.py
@@ -20,7 +20,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. Top of file",
     ["BRAILLE LINE:  'nested-tables image'",
      "     VISIBLE:  'nested-tables image', cursor=1",
-     "SPEECH OUTPUT: 'nested-tables image link'"]))
+     "SPEECH OUTPUT: 'nested-tables image visited link'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -220,7 +220,7 @@ sequence.append(utils.AssertPresentationAction(
     "23. line Up",
     ["BRAILLE LINE:  'nested-tables image'",
      "     VISIBLE:  'nested-tables image', cursor=1",
-     "SPEECH OUTPUT: 'nested-tables image link'"]))
+     "SPEECH OUTPUT: 'nested-tables image visited link'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/firefox/line_nav_role_application.py 
b/test/keystrokes/firefox/line_nav_role_application.py
index d0d29f6..b666149 100644
--- a/test/keystrokes/firefox/line_nav_role_application.py
+++ b/test/keystrokes/firefox/line_nav_role_application.py
@@ -28,7 +28,6 @@ sequence.append(utils.AssertPresentationAction(
     "2. Line Down",
     ["BRAILLE LINE:  'line 2 embedded'",
      "     VISIBLE:  'line 2 embedded', cursor=1",
-     "SPEECH OUTPUT: 'line 2'",
      "SPEECH OUTPUT: 'embedded'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -45,7 +44,6 @@ sequence.append(utils.AssertPresentationAction(
     "4. Line Up",
     ["BRAILLE LINE:  'line 2 embedded'",
      "     VISIBLE:  'line 2 embedded', cursor=1",
-     "SPEECH OUTPUT: 'line 2'",
      "SPEECH OUTPUT: 'embedded'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/line_nav_sun_java.py b/test/keystrokes/firefox/line_nav_sun_java.py
index 2f27d9b..ef45ceb 100644
--- a/test/keystrokes/firefox/line_nav_sun_java.py
+++ b/test/keystrokes/firefox/line_nav_sun_java.py
@@ -20,8 +20,8 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "1. Line Down",
-    ["BRAILLE LINE:  '» search tips Search $l Submit Search push button'",
-     "     VISIBLE:  '» search tips Search $l Submit S', cursor=1",
+    ["BRAILLE LINE:  '» search tips  Search $l Submit Search push button'",
+     "     VISIBLE:  '» search tips  Search $l Submit ', cursor=1",
      "SPEECH OUTPUT: '»'",
      "SPEECH OUTPUT: 'search tips'",
      "SPEECH OUTPUT: 'link.'",
diff --git a/test/keystrokes/firefox/line_nav_wiki_down.py b/test/keystrokes/firefox/line_nav_wiki_down.py
index 6479ac6..67f1c00 100644
--- a/test/keystrokes/firefox/line_nav_wiki_down.py
+++ b/test/keystrokes/firefox/line_nav_wiki_down.py
@@ -201,7 +201,7 @@ sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "16. Line Down",
     ["BRAILLE LINE:  '6. Accessible Applications'",
-     "     VISIBLE:  '6. Accessible Applications', cursor=1",
+     "     VISIBLE:  '6. Accessible Applications', cursor=4",
      "SPEECH OUTPUT: '6.'",
      "SPEECH OUTPUT: 'Accessible Applications'",
      "SPEECH OUTPUT: 'link.'"]))
@@ -850,7 +850,7 @@ sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "84. Line Down",
     ["BRAILLE LINE:  '• Python Pocket Reference, Mark Lutz'",
-     "     VISIBLE:  '• Python Pocket Reference, Mark ', cursor=1",
+     "     VISIBLE:  '• Python Pocket Reference, Mark ', cursor=3",
      "SPEECH OUTPUT: '•.'",
      "SPEECH OUTPUT: 'Python Pocket Reference, Mark Lutz'",
      "SPEECH OUTPUT: 'link.'"]))
diff --git a/test/keystrokes/firefox/object_nav_links_in_text.py 
b/test/keystrokes/firefox/object_nav_links_in_text.py
index e10e28f..34b2ad1 100644
--- a/test/keystrokes/firefox/object_nav_links_in_text.py
+++ b/test/keystrokes/firefox/object_nav_links_in_text.py
@@ -18,12 +18,8 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(utils.AssertPresentationAction(
     "1. Top of file",
-    ["KNOWN ISSUE: We are presenting this twice",
-     "BRAILLE LINE:  'Home'",
+    ["BRAILLE LINE:  'Home'",
      "     VISIBLE:  'Home', cursor=1",
-     "BRAILLE LINE:  'Home'",
-     "     VISIBLE:  'Home', cursor=1",
-     "SPEECH OUTPUT: 'Home link.' voice=hyperlink",
      "SPEECH OUTPUT: 'Home link.' voice=hyperlink"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/object_nav_links_on_line.py 
b/test/keystrokes/firefox/object_nav_links_on_line.py
index 5fa1993..11a4b8e 100644
--- a/test/keystrokes/firefox/object_nav_links_on_line.py
+++ b/test/keystrokes/firefox/object_nav_links_on_line.py
@@ -16,12 +16,8 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(utils.AssertPresentationAction(
     "1. Top of file",
-    ["KNOWN ISSUE: We are presenting this twice",
-     "BRAILLE LINE:  'Home'",
-     "     VISIBLE:  'Home', cursor=1",
-     "BRAILLE LINE:  'Home'",
+    ["BRAILLE LINE:  'Home'",
      "     VISIBLE:  'Home', cursor=1",
-     "SPEECH OUTPUT: 'Home link.' voice=hyperlink",
      "SPEECH OUTPUT: 'Home link.' voice=hyperlink"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/firefox/ui_role_accel_label.py b/test/keystrokes/firefox/ui_role_accel_label.py
index 6f8873e..26e7173 100644
--- a/test/keystrokes/firefox/ui_role_accel_label.py
+++ b/test/keystrokes/firefox/ui_role_accel_label.py
@@ -8,6 +8,8 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("<Alt>f"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -32,11 +34,12 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Firefox application (Mozilla Firefox|Nightly) 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: '(Mozilla Firefox|Nightly) frame'",
+     "SPEECH OUTPUT: 'Menu Bar tool bar'",
      "SPEECH OUTPUT: 'File menu'",
      "SPEECH OUTPUT: 'Menu Bar tool bar.'",
      "SPEECH OUTPUT: 'New Private Window.'",
      "SPEECH OUTPUT: 'Shift+Ctrl+P.'",
-     "SPEECH OUTPUT: '3 of 12.'",
+     "SPEECH OUTPUT: '4 of 13.'",
      "SPEECH OUTPUT: 'W'"]))
 
 sequence.append(utils.AssertionSummaryAction())
diff --git a/test/keystrokes/firefox/ui_role_check_menu_item.py 
b/test/keystrokes/firefox/ui_role_check_menu_item.py
index fd05cdf..2a9d3ef 100644
--- a/test/keystrokes/firefox/ui_role_check_menu_item.py
+++ b/test/keystrokes/firefox/ui_role_check_menu_item.py
@@ -24,6 +24,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Firefox application (Mozilla Firefox|Nightly) frame Menu Bar tool bar Application menu 
bar < > Full Screen check menu item'",
      "     VISIBLE:  '< > Full Screen check menu item', cursor=1",
      "SPEECH OUTPUT: '(Mozilla Firefox|Nightly) frame'",
+     "SPEECH OUTPUT: 'Menu Bar tool bar'",
      "SPEECH OUTPUT: 'View menu'",
      "SPEECH OUTPUT: 'Menu Bar tool bar.'",
      "SPEECH OUTPUT: 'Full Screen check menu item not checked.'",
diff --git a/test/keystrokes/firefox/ui_role_menu_bar.py b/test/keystrokes/firefox/ui_role_menu_bar.py
index 6a4c904..ea33a12 100644
--- a/test/keystrokes/firefox/ui_role_menu_bar.py
+++ b/test/keystrokes/firefox/ui_role_menu_bar.py
@@ -39,11 +39,12 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Firefox application (Mozilla Firefox|Nightly) frame Menu Bar tool bar Application menu 
bar New Tab\(Ctrl\+T\)'",
      "     VISIBLE:  'New Tab(Ctrl+T)', cursor=1",
      "SPEECH OUTPUT: '(Mozilla Firefox|Nightly) frame'",
+     "SPEECH OUTPUT: 'Menu Bar tool bar'",
      "SPEECH OUTPUT: 'File menu'",
      "SPEECH OUTPUT: 'Menu Bar tool bar.'",
      "SPEECH OUTPUT: 'New Tab.'",
      "SPEECH OUTPUT: 'Ctrl+T.'",
-     "SPEECH OUTPUT: '1 of 12.'",
+     "SPEECH OUTPUT: '1 of 13.'",
      "SPEECH OUTPUT: 'T'"]))
 
 sequence.append(KeyComboAction("Escape"))
diff --git a/test/keystrokes/firefox/ui_role_radio_menu_item.py 
b/test/keystrokes/firefox/ui_role_radio_menu_item.py
index f11f904..eac4e17 100644
--- a/test/keystrokes/firefox/ui_role_radio_menu_item.py
+++ b/test/keystrokes/firefox/ui_role_radio_menu_item.py
@@ -28,6 +28,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Firefox application Nightly 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: 'Nightly frame'",
+     "SPEECH OUTPUT: 'Menu Bar tool bar'",
      "SPEECH OUTPUT: 'View menu'",
      "SPEECH OUTPUT: 'Page Style menu'",
      "SPEECH OUTPUT: 'Menu Bar tool bar No Style radio menu item not selected 1 of 2.'",
@@ -48,6 +49,7 @@ sequence.append(utils.AssertPresentationAction(
     ["BRAILLE LINE:  'Firefox application Nightly 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: 'Nightly frame'",
+     "SPEECH OUTPUT: 'Menu Bar tool bar'",
      "SPEECH OUTPUT: 'View menu'",
      "SPEECH OUTPUT: 'Page Style menu'",
      "SPEECH OUTPUT: 'Menu Bar tool bar Basic Page Style radio menu item selected 2 of 2.'",
diff --git a/test/keystrokes/firefox/ui_title_and_status_bar.py 
b/test/keystrokes/firefox/ui_title_and_status_bar.py
index 9ea6680..0061727 100644
--- a/test/keystrokes/firefox/ui_title_and_status_bar.py
+++ b/test/keystrokes/firefox/ui_title_and_status_bar.py
@@ -33,8 +33,6 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'anchors.html', cursor=1",
      "BRAILLE LINE:  'anchors.html'",
      "     VISIBLE:  'anchors.html', cursor=1",
-     "BRAILLE LINE:  'file:///.+/anchors.html'",
-     "     VISIBLE:  'file:///.+', cursor=0",
      "SPEECH OUTPUT: 'Links to test files - Nightly'",
      "SPEECH OUTPUT: 'file:///.+/anchors.html'"]))
 
diff --git a/test/keystrokes/gnome-clocks/stop_watch_flat_review.py 
b/test/keystrokes/gnome-clocks/stop_watch_flat_review.py
new file mode 100644
index 0000000..fb34cc5
--- /dev/null
+++ b/test/keystrokes/gnome-clocks/stop_watch_flat_review.py
@@ -0,0 +1,105 @@
+#!/usr/bin/python
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("F10"))
+sequence.append(KeyComboAction("space"))
+sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("F10"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("space"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Review current line",
+    ["BRAILLE LINE:  'Start Reset $l'",
+     "     VISIBLE:  'Start Reset $l', cursor=1",
+     "SPEECH OUTPUT: 'Start Reset'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("space"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Activate stop watch",
+    ["BRAILLE LINE:  'gnome-clocks application frame Stop push button'",
+     "     VISIBLE:  'Stop push button', cursor=1"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Review current line",
+    ["BRAILLE LINE:  'Start Reset $l'",
+     "     VISIBLE:  'Start Reset $l', cursor=1",
+     "SPEECH OUTPUT: 'Start Reset'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Review previous line",
+    ["KNOWN ISSUE: There is no listbox on the screen, and we're not updating the values",
+     "BRAILLE LINE:  '00‎∶00.0 list box $l'",
+     "     VISIBLE:  '00‎∶00.0 list box $l', cursor=1",
+     "SPEECH OUTPUT: '00‎∶00.0 list box'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Review previous line",
+    ["BRAILLE LINE:  '& y World & y Alarm &=y Stopwatch & y Timer $l'",
+     "     VISIBLE:  '& y World & y Alarm &=y Stopwatc', cursor=1",
+     "SPEECH OUTPUT: 'not selected World not selected Alarm selected Stopwatch not selected Timer'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Review next line",
+    ["KNOWN ISSUE: There is no listbox on the screen, and we're not updating the values",
+     "BRAILLE LINE:  '00‎∶00.0 list box $l'",
+     "     VISIBLE:  '00‎∶00.0 list box $l', cursor=1",
+     "SPEECH OUTPUT: '00‎∶00.0 list box'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Subtract"))
+sequence.append(KeyComboAction("KP_Subtract"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Toggle flat review",
+    ["BRAILLE LINE:  'Leaving flat review.'",
+     "     VISIBLE:  'Leaving flat review.', cursor=0",
+     "BRAILLE LINE:  'gnome-clocks application frame Stop push button'",
+     "     VISIBLE:  'Stop push button', cursor=1",
+     "BRAILLE LINE:  'Entering flat review.'",
+     "     VISIBLE:  'Entering flat review.', cursor=0",
+     "BRAILLE LINE:  'Stop Lap $l'",
+     "     VISIBLE:  'Stop Lap $l', cursor=1",
+     "SPEECH OUTPUT: 'Leaving flat review.' voice=system",
+     "SPEECH OUTPUT: 'Entering flat review.' voice=system",
+     "SPEECH OUTPUT: 'Stop'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Review previous line",
+    ["BRAILLE LINE:  '00‎∶11.5 list box $l'",
+     "     VISIBLE:  '00‎∶11.5 list box $l', cursor=1",
+     "SPEECH OUTPUT: '00‎∶11.5 list box'"]))
+
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Review current line",
+    ["KNOWN ISSUE: We're not presenting the updated value",
+     "BRAILLE LINE:  '00‎∶11.5 list box $l'",
+     "     VISIBLE:  '00‎∶11.5 list box $l', cursor=1",
+     "SPEECH OUTPUT: '00‎∶11.5 list box'"]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gnome-clocks/timer_flat_review.py 
b/test/keystrokes/gnome-clocks/timer_flat_review.py
new file mode 100644
index 0000000..f88e107
--- /dev/null
+++ b/test/keystrokes/gnome-clocks/timer_flat_review.py
@@ -0,0 +1,118 @@
+#!/usr/bin/python
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("F10"))
+sequence.append(KeyComboAction("space"))
+sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("F10"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("space"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Review current line",
+    ["BRAILLE LINE:  'Start $l'",
+     "     VISIBLE:  'Start $l', cursor=1",
+     "SPEECH OUTPUT: 'Start'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("space"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Activate timer",
+    ["BRAILLE LINE:  'gnome-clocks application frame Pause push button'",
+     "     VISIBLE:  'Pause push button', cursor=1",
+     "BRAILLE LINE:  'gnome-clocks application frame Pause push button'",
+     "     VISIBLE:  'Pause push button', cursor=1",
+     "SPEECH OUTPUT: 'frame'",
+     "SPEECH OUTPUT: 'Pause push button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Review current line",
+    ["BRAILLE LINE:  'Pause Reset $l'",
+     "     VISIBLE:  'Pause Reset $l', cursor=1",
+     "SPEECH OUTPUT: 'Pause Reset'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Review previous line",
+    ["KNOWN ISSUE: We're not presenting the displayed values",
+     "BRAILLE LINE:  'label spin button ∶ spin button ∶ spin button label $l'",
+     "     VISIBLE:  'label spin button ∶ spin button ', cursor=1",
+     "SPEECH OUTPUT: 'label spin button ∶ spin button ∶ spin button label'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Review previous line",
+    ["BRAILLE LINE:  '& y World & y Alarm & y Stopwatch &=y Timer $l'",
+     "     VISIBLE:  '& y World & y Alarm & y Stopwatc', cursor=1",
+     "SPEECH OUTPUT: 'not selected World not selected Alarm not selected Stopwatch selected Timer'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Review next line",
+    ["KNOWN ISSUE: The spin buttons are no longer showing",
+     "BRAILLE LINE:  'label spin button ∶ spin button ∶ spin button label $l'",
+     "     VISIBLE:  'label spin button ∶ spin button ', cursor=1",
+     "SPEECH OUTPUT: 'label spin button ∶ spin button ∶ spin button label'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Subtract"))
+sequence.append(KeyComboAction("KP_Subtract"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Toggle flat review",
+    ["BRAILLE LINE:  'Leaving flat review.'",
+     "     VISIBLE:  'Leaving flat review.', cursor=0",
+     "BRAILLE LINE:  'gnome-clocks application frame Pause push button'",
+     "     VISIBLE:  'Pause push button', cursor=1",
+     "BRAILLE LINE:  'Entering flat review.'",
+     "     VISIBLE:  'Entering flat review.', cursor=0",
+     "BRAILLE LINE:  'Pause Reset $l'",
+     "     VISIBLE:  'Pause Reset $l', cursor=1",
+     "SPEECH OUTPUT: 'Leaving flat review.' voice=system",
+     "SPEECH OUTPUT: 'Entering flat review.' voice=system",
+     "SPEECH OUTPUT: 'Pause'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Review previous line",
+    ["KNOWN ISSUE: The spin buttons are no longer showing",
+     "BRAILLE LINE:  'label spin button ∶ spin button ∶ spin button label $l'",
+     "     VISIBLE:  'label spin button ∶ spin button ', cursor=1",
+     "SPEECH OUTPUT: 'label spin button ∶ spin button ∶ spin button label'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Review current line",
+    ["BRAILLE LINE:  'label spin button ∶ spin button ∶ spin button label $l'",
+     "     VISIBLE:  'label spin button ∶ spin button ', cursor=1",
+     "SPEECH OUTPUT: 'label spin button ∶ spin button ∶ spin button label'"]))
+
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Review current line",
+    ["BRAILLE LINE:  'label spin button ∶ spin button ∶ spin button label $l'",
+     "     VISIBLE:  'label spin button ∶ spin button ', cursor=1",
+     "SPEECH OUTPUT: 'label spin button ∶ spin button ∶ spin button label'"]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gnome-terminal/ls.py b/test/keystrokes/gnome-terminal/ls.py
new file mode 100644
index 0000000..06e08e0
--- /dev/null
+++ b/test/keystrokes/gnome-terminal/ls.py
@@ -0,0 +1,31 @@
+#!/usr/bin/python
+
+import os
+
+from macaroon.playback import *
+import utils
+
+tmpdir = "/tmp/gnome-terminal-wd"
+for i in range(10):
+    filename = os.path.join(tmpdir, "another_test_file_%s" % i)
+    os.close(os.open(filename, os.O_CREAT, 0o700))
+
+sequence = MacroSequence()
+sequence.append(TypeAction("ls"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "1. ls",
+    ["BRAILLE LINE:  '$ '",
+     "     VISIBLE:  '$ ', cursor=3",
+     "BRAILLE LINE:  '$ '",
+     "     VISIBLE:  '$ ', cursor=3",
+     "SPEECH OUTPUT: 'another_test_file_0  another_test_file_4  another_test_file_8",
+     "another_test_file_1  another_test_file_5  another_test_file_9",
+     "another_test_file_2  another_test_file_6",
+     "another_test_file_3  another_test_file_7",
+     "$ '"]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gnome-terminal/ls_flat_review.py 
b/test/keystrokes/gnome-terminal/ls_flat_review.py
new file mode 100644
index 0000000..025dafd
--- /dev/null
+++ b/test/keystrokes/gnome-terminal/ls_flat_review.py
@@ -0,0 +1,120 @@
+#!/usr/bin/python
+
+import os
+
+from macaroon.playback import *
+import utils
+
+tmpdir = "/tmp/gnome-terminal-wd"
+for i in range(10):
+    filename = os.path.join(tmpdir, "another_test_file_%s" % i)
+    os.close(os.open(filename, os.O_CREAT, 0o700))
+
+sequence = MacroSequence()
+sequence.append(TypeAction("ls"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Review current line",
+    ["BRAILLE LINE:  '$  $l'",
+     "     VISIBLE:  '$  $l', cursor=3",
+     "SPEECH OUTPUT: '$ ",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Review previous line",
+    ["BRAILLE LINE:  'another_test_file_3  another_test_file_7 $l'",
+     "     VISIBLE:  'another_test_file_3  another_tes', cursor=1",
+     "SPEECH OUTPUT: 'another_test_file_3  another_test_file_7",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Review previous line",
+    ["BRAILLE LINE:  'another_test_file_2  another_test_file_6 $l'",
+     "     VISIBLE:  'another_test_file_2  another_tes', cursor=1",
+     "SPEECH OUTPUT: 'another_test_file_2  another_test_file_6",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Review previous line",
+    ["BRAILLE LINE:  'another_test_file_1  another_test_file_5  another_test_file_9 $l'",
+     "     VISIBLE:  'another_test_file_1  another_tes', cursor=1",
+     "SPEECH OUTPUT: 'another_test_file_1  another_test_file_5  another_test_file_9",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Review previous line",
+    ["BRAILLE LINE:  'another_test_file_0  another_test_file_4  another_test_file_8 $l'",
+     "     VISIBLE:  'another_test_file_0  another_tes', cursor=1",
+     "SPEECH OUTPUT: 'another_test_file_0  another_test_file_4  another_test_file_8",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Review next line",
+    ["BRAILLE LINE:  'another_test_file_1  another_test_file_5  another_test_file_9 $l'",
+     "     VISIBLE:  'another_test_file_1  another_tes', cursor=1",
+     "SPEECH OUTPUT: 'another_test_file_1  another_test_file_5  another_test_file_9",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Review first line",
+    ["BRAILLE LINE:  'File Edit View Search Terminal Help $l'",
+     "     VISIBLE:  'File Edit View Search Terminal H', cursor=1",
+     "SPEECH OUTPUT: 'File Edit View Search Terminal Help'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Review next line",
+    ["BRAILLE LINE:  '$ ls vertical scroll bar 0% $l'",
+     "     VISIBLE:  '$ ls vertical scroll bar 0% $l', cursor=1",
+     "SPEECH OUTPUT: '$ ls",
+     " vertical scroll bar 0 percent.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Review next line",
+    ["BRAILLE LINE:  'another_test_file_0  another_test_file_4  another_test_file_8 $l'",
+     "     VISIBLE:  'another_test_file_0  another_tes', cursor=1",
+     "SPEECH OUTPUT: 'another_test_file_0  another_test_file_4  another_test_file_8",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Review last line",
+    ["KNOWN ISSUE: We're not finding the bottom",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Review previous line",
+    ["KNOWN ISSUE: We're not finding the bottom",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gnome-terminal/man_page.py b/test/keystrokes/gnome-terminal/man_page.py
new file mode 100644
index 0000000..98ce97e
--- /dev/null
+++ b/test/keystrokes/gnome-terminal/man_page.py
@@ -0,0 +1,262 @@
+#!/usr/bin/python
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(PauseAction(3000))
+sequence.append(TypeAction("man orca"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+sequence.append(utils.AssertPresentationAction(
+    "1. Return",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=1",
+     "BRAILLE LINE:  ' Manual page orca(1) line 1 (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "SPEECH OUTPUT: 'orca(1)                     General Commands Manual                    orca(1)",
+     "",
+     "NAME",
+     "       orca - a scriptable screen reader",
+     "",
+     "SYNOPSIS",
+     "       orca [option...]",
+     "",
+     "DESCRIPTION",
+     "       orca is a screen reader for people with visual impairments, it provides",
+     "       alternative access  to  the  desktop  by  using  speech  synthesis  and",
+     "       braille.",
+     "",
+     "       orca  works  with  applications and toolkits that support the Assistive",
+     "       Technology Service Provider Interface (AT-SPI), which  is  the  primary",
+     "       assistive technology infrastructure for Linux and Solaris. Applications",
+     "       and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit,  the",
+     "       Java  platform's  Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-",
+     "       SPI support for the KDE Qt toolkit is being pursued.",
+     "",
+     "OPTIONS",
+     "       -s, --setup",
+     "              When starting orca, initiate the GUI-based configuration.",
+     " Manual page orca(1) line 1 (press h for help or q to quit)'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("space"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Space",
+    ["BRAILLE LINE:  ' Manual page orca(1) line 24 (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "SPEECH OUTPUT: '              When starting orca, use dirname as an  alternate  directory  for",
+     "              the user preferences.",
+     "",
+     "       -e, --enable=speech|braille|braille-monitor",
+     "              When starting orca, force the enabling of the supplied options.",
+     "",
+     "       -d, --disable=speech|braille|braille-monitor",
+     "              When starting orca, force the disabling of the supplied options.",
+     "",
+     "       -l, --list-apps",
+     "              Prints  the  names  of  all  the currently running applications.",
+     "              This is used primarily for debugging purposes to see if orca can",
+     "              talk  to the accessibility infrastructure.  Note that if orca is",
+     "              already running, this will not kill the other orca process.   It",
+     "              will  just list the currently running applications, and you will",
+     "              see orca listed twice: once for the existing orca and  once  for",
+     "              this instance.",
+     "",
+     "       --debug",
+     "              Enables  debug  output  for orca and sends all debug output to a",
+     "              file with a name of the form 'debug-YYYY-MM-DD-HH:MM:SS.out'  in",
+     " Manual page orca(1) line 24 (press h for help or q to quit)'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>b"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Ctrl+b",
+    ["BRAILLE LINE:  ' Manual page orca(1) line 1 (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "BRAILLE LINE:  ' Manual page orca(1) line 1 (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "SPEECH OUTPUT: 'orca(1)                     General Commands Manual                    orca(1)",
+     "",
+     "NAME",
+     "       orca - a scriptable screen reader",
+     "",
+     "SYNOPSIS",
+     "       orca [option...]",
+     "",
+     "DESCRIPTION",
+     "       orca is a screen reader for people with visual impairments, it provides",
+     "       alternative access  to  the  desktop  by  using  speech  synthesis  and",
+     "       braille.",
+     "",
+     "       orca  works  with  applications and toolkits that support the Assistive",
+     "       Technology Service Provider Interface (AT-SPI), which  is  the  primary",
+     "       assistive technology infrastructure for Linux and Solaris. Applications",
+     "       and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit,  the",
+     "       Java  platform's  Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-",
+     "       SPI support for the KDE Qt toolkit is being pursued.",
+     "",
+     "OPTIONS",
+     "       -s, --setup",
+     "              When starting orca, initiate the GUI-based configuration.",
+     " Manual page orca(1) line 1 (press h for help or q to quit)'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Ctrl+f",
+    ["BRAILLE LINE:  ' Manual page orca(1) line 24 (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "BRAILLE LINE:  ' Manual page orca(1) line 24 (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "SPEECH OUTPUT: '              When starting orca, use dirname as an  alternate  directory  for",
+     "              the user preferences.",
+     "",
+     "       -e, --enable=speech|braille|braille-monitor",
+     "              When starting orca, force the enabling of the supplied options.",
+     "",
+     "       -d, --disable=speech|braille|braille-monitor",
+     "              When starting orca, force the disabling of the supplied options.",
+     "",
+     "       -l, --list-apps",
+     "              Prints  the  names  of  all  the currently running applications.",
+     "              This is used primarily for debugging purposes to see if orca can",
+     "              talk  to the accessibility infrastructure.  Note that if orca is",
+     "              already running, this will not kill the other orca process.   It",
+     "              will  just list the currently running applications, and you will",
+     "              see orca listed twice: once for the existing orca and  once  for",
+     "              this instance.",
+     "",
+     "       --debug",
+     "              Enables  debug  output  for orca and sends all debug output to a",
+     "              file with a name of the form 'debug-YYYY-MM-DD-HH:MM:SS.out'  in",
+     " Manual page orca(1) line 24 (press h for help or q to quit)'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("b"))
+sequence.append(utils.AssertPresentationAction(
+    "5. b",
+    ["BRAILLE LINE:  ' Manual page orca(1) line 1 (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "SPEECH OUTPUT: 'orca(1)                     General Commands Manual                    orca(1)",
+     "",
+     "NAME",
+     "       orca - a scriptable screen reader",
+     "",
+     "SYNOPSIS",
+     "       orca [option...]",
+     "",
+     "DESCRIPTION",
+     "       orca is a screen reader for people with visual impairments, it provides",
+     "       alternative access  to  the  desktop  by  using  speech  synthesis  and",
+     "       braille.",
+     "",
+     "       orca  works  with  applications and toolkits that support the Assistive",
+     "       Technology Service Provider Interface (AT-SPI), which  is  the  primary",
+     "       assistive technology infrastructure for Linux and Solaris. Applications",
+     "       and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit,  the",
+     "       Java  platform's  Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-",
+     "       SPI support for the KDE Qt toolkit is being pursued.",
+     "",
+     "OPTIONS",
+     "       -s, --setup",
+     "              When starting orca, initiate the GUI-based configuration.",
+     " Manual page orca(1) line 1 (press h for help or q to quit)'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("f"))
+sequence.append(utils.AssertPresentationAction(
+    "6. f",
+    ["BRAILLE LINE:  ' Manual page orca(1) line 24 (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "SPEECH OUTPUT: '              When starting orca, use dirname as an  alternate  directory  for",
+     "              the user preferences.",
+     "",
+     "       -e, --enable=speech|braille|braille-monitor",
+     "              When starting orca, force the enabling of the supplied options.",
+     "",
+     "       -d, --disable=speech|braille|braille-monitor",
+     "              When starting orca, force the disabling of the supplied options.",
+     "",
+     "       -l, --list-apps",
+     "              Prints  the  names  of  all  the currently running applications.",
+     "              This is used primarily for debugging purposes to see if orca can",
+     "              talk  to the accessibility infrastructure.  Note that if orca is",
+     "              already running, this will not kill the other orca process.   It",
+     "              will  just list the currently running applications, and you will",
+     "              see orca listed twice: once for the existing orca and  once  for",
+     "              this instance.",
+     "",
+     "       --debug",
+     "              Enables  debug  output  for orca and sends all debug output to a",
+     "              file with a name of the form 'debug-YYYY-MM-DD-HH:MM:SS.out'  in",
+     " Manual page orca(1) line 24 (press h for help or q to quit)'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("g"))
+sequence.append(utils.AssertPresentationAction(
+    "7. g",
+    ["BRAILLE LINE:  ' Manual page orca(1) line 1 (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "SPEECH OUTPUT: 'orca(1)                     General Commands Manual                    orca(1)",
+     "",
+     "NAME",
+     "       orca - a scriptable screen reader",
+     "",
+     "SYNOPSIS",
+     "       orca [option...]",
+     "",
+     "DESCRIPTION",
+     "       orca is a screen reader for people with visual impairments, it provides",
+     "       alternative access  to  the  desktop  by  using  speech  synthesis  and",
+     "       braille.",
+     "",
+     "       orca  works  with  applications and toolkits that support the Assistive",
+     "       Technology Service Provider Interface (AT-SPI), which  is  the  primary",
+     "       assistive technology infrastructure for Linux and Solaris. Applications",
+     "       and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit,  the",
+     "       Java  platform's  Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-",
+     "       SPI support for the KDE Qt toolkit is being pursued.",
+     "",
+     "OPTIONS",
+     "       -s, --setup",
+     "              When starting orca, initiate the GUI-based configuration.",
+     " Manual page orca(1) line 1 (press h for help or q to quit)'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>g"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Shift+g",
+    ["BRAILLE LINE:  ' Manual page orca(1) line 240/262 (END) (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "SPEECH OUTPUT: '       ~/.local/share/orca/orca-scripts",
+     "              Orca user orca scripts directory",
+     "",
+     "       ~/.local/share/orca/bookmarks",
+     "              Orca user bookmarks directory",
+     "",
+     "       ~/.local/share/orca/app-settings",
+     "              Orca user application specific settings directory",
+     "",
+     "AUTHOR",
+     "       Orca  originated as a community effort led by the Sun Microsystems Inc.",
+     "       Accessibility Program Office and with contributions from many community",
+     "       members.",
+     "",
+     "SEE ALSO",
+     "       For     more     information     please     visit    orca    wiki    at",
+     "       <http://live.gnome.org/Orca> <http://live.gnome.org/Orca>",
+     "",
+     "       The  orca  mailing  list  <http://mail.gnome.org/mailman/listinfo/orca-";,
+     "       list>  To  post  a  message  to  all  orca  list, send a email to orca-",
+     "       list gnome org",
+     "",
+     "GNOME                          20 September 2013                       orca(1)",
+     " Manual page orca(1) line 240/262 (END) (press h for help or q to quit)'"]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gnome-terminal/man_page_flat_review.py 
b/test/keystrokes/gnome-terminal/man_page_flat_review.py
new file mode 100644
index 0000000..4434a7b
--- /dev/null
+++ b/test/keystrokes/gnome-terminal/man_page_flat_review.py
@@ -0,0 +1,291 @@
+#!/usr/bin/python
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(PauseAction(3000))
+sequence.append(TypeAction("man orca"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Review current line",
+    ["BRAILLE LINE:  ' Manual page orca(1) line 1 (press h for help or q to quit) $l'",
+     "     VISIBLE:  '(press h for help or q to quit) ', cursor=32",
+     "SPEECH OUTPUT: ' Manual page orca(1) line 1 (press h for help or q to quit)",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Review previous line",
+    ["BRAILLE LINE:  '              When starting orca, initiate the GUI-based configuration. $l'",
+     "     VISIBLE:  '              When starting orca', cursor=1",
+     "SPEECH OUTPUT: '              When starting orca, initiate the GUI-based configuration.",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Review previous line",
+    ["BRAILLE LINE:  '       -s, --setup $l'",
+     "     VISIBLE:  '       -s, --setup $l', cursor=1",
+     "SPEECH OUTPUT: '       -s, --setup",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Review next line",
+    ["BRAILLE LINE:  '              When starting orca, initiate the GUI-based configuration. $l'",
+     "     VISIBLE:  '              When starting orca', cursor=1",
+     "SPEECH OUTPUT: '              When starting orca, initiate the GUI-based configuration.",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Review first line",
+    ["BRAILLE LINE:  'File Edit View Search Terminal Help $l'",
+     "     VISIBLE:  'File Edit View Search Terminal H', cursor=1",
+     "SPEECH OUTPUT: 'File Edit View Search Terminal Help'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Review next line",
+    ["BRAILLE LINE:  'orca(1)                     General Commands Manual                    orca(1) 
vertical scroll bar 0% $l'",
+     "     VISIBLE:  'orca(1)                     Gene', cursor=1",
+     "SPEECH OUTPUT: 'orca(1)                     General Commands Manual                    orca(1)",
+     " vertical scroll bar 0 percent.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Review next line",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Review next line",
+    ["BRAILLE LINE:  'NAME $l'",
+     "     VISIBLE:  'NAME $l', cursor=1",
+     "SPEECH OUTPUT: 'NAME",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Review next line",
+    ["BRAILLE LINE:  '       orca - a scriptable screen reader $l'",
+     "     VISIBLE:  '       orca - a scriptable scree', cursor=1",
+     "SPEECH OUTPUT: '       orca - a scriptable screen reader",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Forward one page",
+    ["BRAILLE LINE:  ' Manual page orca(1) line 24 (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "BRAILLE LINE:  ' Manual page orca(1) line 24 (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "BRAILLE LINE:  ' Manual page orca(1) line 24 (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "SPEECH OUTPUT: '              When starting orca, use dirname as an  alternate  directory  for",
+     "              the user preferences.",
+     "",
+     "       -e, --enable=speech|braille|braille-monitor",
+     "              When starting orca, force the enabling of the supplied options.",
+     "",
+     "       -d, --disable=speech|braille|braille-monitor",
+     "              When starting orca, force the disabling of the supplied options.",
+     "",
+     "       -l, --list-apps",
+     "              Prints  the  names  of  all  the currently running applications.",
+     "              This is used primarily for debugging purposes to see if orca can",
+     "              talk  to the accessibility infrastructure.  Note that if orca is",
+     "              already running, this will not kill the other orca process.   It",
+     "              will  just list the currently running applications, and you will",
+     "              see orca listed twice: once for the existing orca and  once  for",
+     "              this instance.",
+     "",
+     "       --debug",
+     "              Enables  debug  output  for orca and sends all debug output to a",
+     "              file with a name of the form 'debug-YYYY-MM-DD-HH:MM:SS.out'  in",
+     " Manual page orca(1) line 24 (press h for help or q to quit)'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Review current line",
+    ["KNOWN ISSUE: We currently deliberately exit flat review and return to the bottom of the window",
+    "BRAILLE LINE:  ' Manual page orca(1) line 24 (press h for help or q to quit) $l'",
+     "     VISIBLE:  '(press h for help or q to quit) ', cursor=32",
+     "SPEECH OUTPUT: ' Manual page orca(1) line 24 (press h for help or q to quit)",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Review previous line",
+    ["BRAILLE LINE:  '              file with a name of the form 'debug-YYYY-MM-DD-HH:MM:SS.out'  in $l'",
+     "     VISIBLE:  '              file with a name o', cursor=1",
+     "SPEECH OUTPUT: '              file with a name of the form 'debug-YYYY-MM-DD-HH:MM:SS.out'  in",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "13. Review previous line",
+    ["BRAILLE LINE:  '              Enables  debug  output  for orca and sends all debug output to a $l'",
+     "     VISIBLE:  '              Enables  debug  ou', cursor=1",
+     "SPEECH OUTPUT: '              Enables  debug  output  for orca and sends all debug output to a",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "14. Review first line",
+    ["BRAILLE LINE:  'File Edit View Search Terminal Help $l'",
+     "     VISIBLE:  'File Edit View Search Terminal H', cursor=1",
+     "SPEECH OUTPUT: 'File Edit View Search Terminal Help'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "15. Review next line",
+    ["BRAILLE LINE:  ' vertical scroll bar 0% $l'",
+     "     VISIBLE:  ' vertical scroll bar 0% $l', cursor=1",
+     "SPEECH OUTPUT: '",
+     " vertical scroll bar 0 percent.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "16. Review next line",
+    ["BRAILLE LINE:  '       -u, --user-prefs-dir=dirname $l'",
+     "     VISIBLE:  '       -u, --user-prefs-dir=dirn', cursor=1",
+     "SPEECH OUTPUT: '       -u, --user-prefs-dir=dirname",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Control>b"))
+sequence.append(utils.AssertPresentationAction(
+    "17. Back one page",
+    ["BRAILLE LINE:  ' Manual page orca(1) line 1 (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "BRAILLE LINE:  ' Manual page orca(1) line 1 (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "BRAILLE LINE:  ' Manual page orca(1) line 1 (press h for help or q to quit)'",
+     "     VISIBLE:  '(press h for help or q to quit)', cursor=32",
+     "SPEECH OUTPUT: 'orca(1)                     General Commands Manual                    orca(1)",
+     "",
+     "NAME",
+     "       orca - a scriptable screen reader",
+     "",
+     "SYNOPSIS",
+     "       orca [option...]",
+     "",
+     "DESCRIPTION",
+     "       orca is a screen reader for people with visual impairments, it provides",
+     "       alternative access  to  the  desktop  by  using  speech  synthesis  and",
+     "       braille.",
+     "",
+     "       orca  works  with  applications and toolkits that support the Assistive",
+     "       Technology Service Provider Interface (AT-SPI), which  is  the  primary",
+     "       assistive technology infrastructure for Linux and Solaris. Applications",
+     "       and toolkits supporting the AT-SPI include the GNOME Gtk+ toolkit,  the",
+     "       Java  platform's  Swing toolkit, LibreOffice, Gecko, and WebKitGtk. AT-",
+     "       SPI support for the KDE Qt toolkit is being pursued.",
+     "",
+     "OPTIONS",
+     "       -s, --setup",
+     "              When starting orca, initiate the GUI-based configuration.",
+     " Manual page orca(1) line 1 (press h for help or q to quit)'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "18. Review current line",
+    ["BRAILLE LINE:  ' Manual page orca(1) line 1 (press h for help or q to quit) $l'",
+     "     VISIBLE:  '(press h for help or q to quit) ', cursor=32",
+     "SPEECH OUTPUT: ' Manual page orca(1) line 1 (press h for help or q to quit)",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "19. Review previous line",
+    ["BRAILLE LINE:  '              When starting orca, initiate the GUI-based configuration. $l'",
+     "     VISIBLE:  '              When starting orca', cursor=1",
+     "SPEECH OUTPUT: '              When starting orca, initiate the GUI-based configuration.",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "20. Review previous line",
+    ["BRAILLE LINE:  '       -s, --setup $l'",
+     "     VISIBLE:  '       -s, --setup $l', cursor=1",
+     "SPEECH OUTPUT: '       -s, --setup",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "21. Review first line",
+    ["BRAILLE LINE:  'File Edit View Search Terminal Help $l'",
+     "     VISIBLE:  'File Edit View Search Terminal H', cursor=1",
+     "SPEECH OUTPUT: 'File Edit View Search Terminal Help'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "22. Review next line",
+    ["BRAILLE LINE:  'orca(1)                     General Commands Manual                    orca(1) 
vertical scroll bar 0% $l'",
+     "     VISIBLE:  'orca(1)                     Gene', cursor=1",
+     "SPEECH OUTPUT: 'orca(1)                     General Commands Manual                    orca(1)",
+     " vertical scroll bar 0 percent.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "23. Review next line",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "24. Review next line",
+    ["BRAILLE LINE:  'NAME $l'",
+     "     VISIBLE:  'NAME $l', cursor=1",
+     "SPEECH OUTPUT: 'NAME",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "25. Review next line",
+    ["BRAILLE LINE:  '       orca - a scriptable screen reader $l'",
+     "     VISIBLE:  '       orca - a scriptable scree', cursor=1",
+     "SPEECH OUTPUT: '       orca - a scriptable screen reader",
+     "'"]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gnome-terminal/multiple_tabs.py b/test/keystrokes/gnome-terminal/multiple_tabs.py
new file mode 100644
index 0000000..3db6f0e
--- /dev/null
+++ b/test/keystrokes/gnome-terminal/multiple_tabs.py
@@ -0,0 +1,83 @@
+#!/usr/bin/python
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(TypeAction("ftp"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Return",
+    ["BRAILLE LINE:  'ftp> '",
+     "     VISIBLE:  'ftp> ', cursor=6",
+     "SPEECH OUTPUT: 'ftp> '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Return",
+    ["BRAILLE LINE:  'ftp> '",
+     "     VISIBLE:  'ftp> ', cursor=6",
+     "SPEECH OUTPUT: 'ftp> '"]))
+
+sequence.append(KeyComboAction("<Control><Shift>t"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Return",
+    ["BRAILLE LINE:  '$ '",
+     "     VISIBLE:  '$ ', cursor=3",
+     "SPEECH OUTPUT: '$ '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Return",
+    ["BRAILLE LINE:  '$ '",
+     "     VISIBLE:  '$ ', cursor=3",
+     "SPEECH OUTPUT: '$ '"]))
+
+sequence.append(KeyComboAction("<Alt>1"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Return",
+    ["BRAILLE LINE:  'ftp> '",
+     "     VISIBLE:  'ftp> ', cursor=6",
+     "SPEECH OUTPUT: 'ftp> '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Return",
+    ["BRAILLE LINE:  'ftp> '",
+     "     VISIBLE:  'ftp> ', cursor=6",
+     "SPEECH OUTPUT: 'ftp> '"]))
+
+sequence.append(KeyComboAction("<Alt>2"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Return",
+    ["BRAILLE LINE:  '$ '",
+     "     VISIBLE:  '$ ', cursor=3",
+     "SPEECH OUTPUT: '$ '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Return",
+    ["BRAILLE LINE:  '$ '",
+     "     VISIBLE:  '$ ', cursor=3",
+     "SPEECH OUTPUT: '$ '"]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gnome-terminal/nano.py b/test/keystrokes/gnome-terminal/nano.py
new file mode 100644
index 0000000..0e70b7e
--- /dev/null
+++ b/test/keystrokes/gnome-terminal/nano.py
@@ -0,0 +1,163 @@
+#!/usr/bin/python
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(PauseAction(3000))
+sequence.append(TypeAction("nano"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Launch Nano",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=1",
+     "SPEECH OUTPUT: '  GNU nano 2.5.3                New Buffer                                      ",
+     "",
+     "'"]))
+
+sequence.append(TypeAction("This is a test."))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("So is this."))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(TypeAction("Done."))
+sequence.append(utils.AssertPresentationAction(
+    "2.Typing text",
+    ["KNOWN ISSUE: We should be able to do less braille updating here",
+     "BRAILLE LINE:  'D'",
+     "     VISIBLE:  'D', cursor=2",
+     "BRAILLE LINE:  'D'",
+     "     VISIBLE:  'D', cursor=2",
+     "BRAILLE LINE:  'Do'",
+     "     VISIBLE:  'Do', cursor=3",
+     "BRAILLE LINE:  'Do'",
+     "     VISIBLE:  'Do', cursor=3",
+     "BRAILLE LINE:  'Don'",
+     "     VISIBLE:  'Don', cursor=4",
+     "BRAILLE LINE:  'Don'",
+     "     VISIBLE:  'Don', cursor=4",
+     "BRAILLE LINE:  'Done'",
+     "     VISIBLE:  'Done', cursor=5",
+     "BRAILLE LINE:  'Done'",
+     "     VISIBLE:  'Done', cursor=5",
+     "BRAILLE LINE:  'Done.'",
+     "     VISIBLE:  'Done.', cursor=6",
+     "BRAILLE LINE:  'Done.'",
+     "     VISIBLE:  'Done.', cursor=6"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Return",
+    ["KNOWN ISSUE: We're not speaking anything here",
+     "BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=1"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Up",
+    ["BRAILLE LINE:  'Done.'",
+     "     VISIBLE:  'Done.', cursor=1",
+     "SPEECH OUTPUT: 'Done.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Up",
+    ["BRAILLE LINE:  'So is this.'",
+     "     VISIBLE:  'So is this.', cursor=1",
+     "SPEECH OUTPUT: 'So is this.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Up",
+    ["KNOWN ISSUE: Something is converting the space to a Tab. The Tab is really there, however.",
+     "BRAILLE LINE:  'This is  a test.'",
+     "     VISIBLE:  'This is  a test.', cursor=1",
+     "SPEECH OUTPUT: 'This is  a test.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Up",
+    [""]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Down",
+    ["BRAILLE LINE:  'So is this.'",
+     "     VISIBLE:  'So is this.', cursor=1",
+     "SPEECH OUTPUT: 'So is this.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Down",
+    ["BRAILLE LINE:  'Done.'",
+     "     VISIBLE:  'Done.', cursor=1",
+     "SPEECH OUTPUT: 'Done.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Down",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=1",
+     "SPEECH OUTPUT: 'blank' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Down",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=1",
+     "SPEECH OUTPUT: 'blank' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Down",
+    [""]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "13. Up",
+    ["BRAILLE LINE:  ''",
+     "     VISIBLE:  '', cursor=1",
+     "SPEECH OUTPUT: 'blank' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "14. Up",
+    ["BRAILLE LINE:  'Done.'",
+     "     VISIBLE:  'Done.', cursor=1",
+     "SPEECH OUTPUT: 'Done.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "15. Up",
+    ["BRAILLE LINE:  'So is this.'",
+     "     VISIBLE:  'So is this.', cursor=1",
+     "SPEECH OUTPUT: 'So is this.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "16. Up",
+    ["BRAILLE LINE:  'This is  a test.'",
+     "     VISIBLE:  'This is  a test.', cursor=1",
+     "SPEECH OUTPUT: 'This is  a test.'"]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gnome-terminal/nano_flat_review.py 
b/test/keystrokes/gnome-terminal/nano_flat_review.py
new file mode 100644
index 0000000..1ab56d6
--- /dev/null
+++ b/test/keystrokes/gnome-terminal/nano_flat_review.py
@@ -0,0 +1,140 @@
+#!/usr/bin/python
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(PauseAction(3000))
+sequence.append(TypeAction("nano"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("This is a test."))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("So is this."))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("Done."))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Review current line",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Review previous line",
+    ["BRAILLE LINE:  'Done. $l'",
+     "     VISIBLE:  'Done. $l', cursor=1",
+     "SPEECH OUTPUT: 'Done.",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Review previous line",
+    ["BRAILLE LINE:  'So is this. $l'",
+     "     VISIBLE:  'So is this. $l', cursor=1",
+     "SPEECH OUTPUT: 'So is this.",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Review previous line",
+    ["KNOWN ISSUE: Something is converting the space to a Tab. The Tab is really there, however.",
+     "BRAILLE LINE:  'This is  a test. $l'",
+     "     VISIBLE:  'This is  a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'This is  a test.",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Review previous line",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Review next line",
+    ["BRAILLE LINE:  'This is  a test. $l'",
+     "     VISIBLE:  'This is  a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'This is  a test.",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Review next line",
+    ["BRAILLE LINE:  'So is this. $l'",
+     "     VISIBLE:  'So is this. $l', cursor=1",
+     "SPEECH OUTPUT: 'So is this.",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Review next line",
+    ["BRAILLE LINE:  'Done. $l'",
+     "     VISIBLE:  'Done. $l', cursor=1",
+     "SPEECH OUTPUT: 'Done.",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Review next line",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Review next line",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(KeyComboAction("KP_9"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Review next line",
+    ["BRAILLE LINE:  '^G Get Help  ^O Write Out ^W Where Is  ^K Cut Text  ^J Justify   ^C Cur Pos $l'",
+     "     VISIBLE:  '^G Get Help  ^O Write Out ^W Whe', cursor=1",
+     "SPEECH OUTPUT: '^G Get Help  ^O Write Out ^W Where Is  ^K Cut Text  ^J Justify   ^C Cur Pos",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Review next line",
+    ["BRAILLE LINE:  '^X Exit      ^R Read File ^\ Replace   ^U Uncut Text^T To Spell  ^_ Go To Line $l'",
+     "     VISIBLE:  '^X Exit      ^R Read File ^\ Rep', cursor=1",
+     "SPEECH OUTPUT: '^X Exit      ^R Read File ^\ Replace   ^U Uncut Text^T To Spell  ^_ Go To Line",
+     "'"]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk-demo/learn_mode.py b/test/keystrokes/gtk-demo/learn_mode.py
index aaefb1b..7889177 100644
--- a/test/keystrokes/gtk-demo/learn_mode.py
+++ b/test/keystrokes/gtk-demo/learn_mode.py
@@ -10,10 +10,12 @@ sequence = MacroSequence()
 sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Printing"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
 
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("h"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
diff --git a/test/keystrokes/gtk-demo/role_check_menu_item.py 
b/test/keystrokes/gtk-demo/role_check_menu_item.py
index 23bd830..dcbdb77 100644
--- a/test/keystrokes/gtk-demo/role_check_menu_item.py
+++ b/test/keystrokes/gtk-demo/role_check_menu_item.py
@@ -7,10 +7,12 @@ from macaroon.playback import *
 sequence = MacroSequence()
 import utils
 
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("<Alt>p"))
 sequence.append(KeyComboAction("Down"))
 
diff --git a/test/keystrokes/gtk-demo/role_column_header.py b/test/keystrokes/gtk-demo/role_column_header.py
index 4a148d5..8320d71 100644
--- a/test/keystrokes/gtk-demo/role_column_header.py
+++ b/test/keystrokes/gtk-demo/role_column_header.py
@@ -46,7 +46,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'scrollable notebooks and hidden ', cursor=1",
      "BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Fixed? column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs '",
      "     VISIBLE:  '< > Fixed? 60482 Normal scrollab', cursor=1",
-     "SPEECH OUTPUT: 'Fixed? check box not checked 60482 Normal scrollable notebooks and hidden tabs.'",
+     "SPEECH OUTPUT: 'Fixed?'",
+     "SPEECH OUTPUT: 'check box not checked 60482 Normal scrollable notebooks and hidden tabs.'",
      "SPEECH OUTPUT: 'Fixed? column header check box not checked.'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/gtk-demo/role_icon_flat_review.py 
b/test/keystrokes/gtk-demo/role_icon_flat_review.py
new file mode 100644
index 0000000..1ab3990
--- /dev/null
+++ b/test/keystrokes/gtk-demo/role_icon_flat_review.py
@@ -0,0 +1,147 @@
+#!/usr/bin/python
+
+"""Test of icon output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Images"))
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("<Shift>Right"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "1. bin icon",
+    ["BRAILLE LINE:  'gtk-demo application GtkIconView demo frame bin icon'",
+     "     VISIBLE:  'bin icon', cursor=1",
+     "SPEECH OUTPUT: 'bin icon.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Review current line",
+    ["KNOWN ISSUE: This and all the subsequent assertions are broken due to flat review bugs",
+     "BRAILLE LINE:  '      vertical scroll bar 0% $l'",
+     "     VISIBLE:  '      vertical scroll bar 0% $l', cursor=1",
+     "SPEECH OUTPUT: 'vertical scroll bar 0 percent.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Review current word",
+    ["BRAILLE LINE:  '      vertical scroll bar 0% $l'",
+     "     VISIBLE:  '      vertical scroll bar 0% $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Review next word",
+    ["BRAILLE LINE:  '      vertical scroll bar 0% $l'",
+     "     VISIBLE:  '      vertical scroll bar 0% $l', cursor=2",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_2"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Review current char",
+    ["BRAILLE LINE:  '      vertical scroll bar 0% $l'",
+     "     VISIBLE:  '      vertical scroll bar 0% $l', cursor=2",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Review item below",
+    ["BRAILLE LINE:  '      $l'",
+     "     VISIBLE:  '      $l', cursor=2",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Review item below",
+    ["BRAILLE LINE:  '      $l'",
+     "     VISIBLE:  '      $l', cursor=2",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_4"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Review item above",
+    ["BRAILLE LINE:  '      $l'",
+     "     VISIBLE:  '      $l', cursor=2",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_4"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Review item above",
+    ["BRAILLE LINE:  '      vertical scroll bar 0% $l'",
+     "     VISIBLE:  '      vertical scroll bar 0% $l', cursor=2",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Review next line",
+    ["BRAILLE LINE:  '      $l'",
+     "     VISIBLE:  '      $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Review next word",
+    ["BRAILLE LINE:  '      $l'",
+     "     VISIBLE:  '      $l', cursor=2",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_3"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Review next char",
+    ["BRAILLE LINE:  '      $l'",
+     "     VISIBLE:  '      $l', cursor=3",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "13. Review previous line",
+    ["BRAILLE LINE:  '      vertical scroll bar 0% $l'",
+     "     VISIBLE:  '      vertical scroll bar 0% $l', cursor=1",
+     "SPEECH OUTPUT: 'vertical scroll bar 0 percent.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "14. Review previous line",
+    ["BRAILLE LINE:  'Up Home $l'",
+     "     VISIBLE:  'Up Home $l', cursor=1",
+     "SPEECH OUTPUT: 'Up Home'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "15. Review previous line",
+    [""]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_label.py b/test/keystrokes/gtk-demo/role_label.py
index 16dbd7d..56bf94f 100644
--- a/test/keystrokes/gtk-demo/role_label.py
+++ b/test/keystrokes/gtk-demo/role_label.py
@@ -16,10 +16,12 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
     "1. This message box label",
-    ["BRAILLE LINE:  'number of times:'",
-     "     VISIBLE:  'number of times:', cursor=17",
-     "BRAILLE LINE:  'number of times:'",
-     "     VISIBLE:  'number of times:', cursor=17",
+    ["BRAILLE LINE:  'This message box has been popped up the following",
+     "number of times: number of times:'",
+     "     VISIBLE:  'mber of times: number of times:', cursor=32",
+     "BRAILLE LINE:  'This message box has been popped up the following",
+     "number of times: number of times:'",
+     "     VISIBLE:  'mber of times: number of times:', cursor=32",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
      "number of times: selected label'"]))
 
@@ -27,8 +29,9 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
     "2. This message box label Where Am I",
-    ["BRAILLE LINE:  'number of times:'",
-     "     VISIBLE:  'number of times:', cursor=17",
+    ["BRAILLE LINE:  'This message box has been popped up the following",
+     "number of times: number of times:'",
+     "     VISIBLE:  'mber of times: number of times:', cursor=32",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
      "number of times: selected label'"]))
 
@@ -37,10 +40,12 @@ sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
     "3. This message box label Extended Where Am I",
-    ["BRAILLE LINE:  'number of times:'",
-     "     VISIBLE:  'number of times:', cursor=17",
-     "BRAILLE LINE:  'number of times:'",
-     "     VISIBLE:  'number of times:', cursor=17",
+    ["BRAILLE LINE:  'This message box has been popped up the following",
+     "number of times: number of times:'",
+     "     VISIBLE:  'mber of times: number of times:', cursor=32",
+     "BRAILLE LINE:  'This message box has been popped up the following",
+     "number of times: number of times:'",
+     "     VISIBLE:  'mber of times: number of times:', cursor=32",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
      "number of times: selected label'",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
@@ -50,11 +55,10 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Home"))
 sequence.append(utils.AssertPresentationAction(
     "4. Press Home to unselect the label and move to the first character'",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
-     "     VISIBLE:  'This message box has been popped', cursor=1",
-     "BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
-     "     VISIBLE:  'This message box has been popped', cursor=1",
-     "SPEECH OUTPUT: 'T'",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following",
+     "number of times: This message box has been popped up the following'",
+     "     VISIBLE:  'the following",
+     "number of times: T', cursor=32",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
      "number of times:'",
      "SPEECH OUTPUT: 'unselected' voice=system"]))
@@ -63,16 +67,20 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
     "5. This message box label caret movement to 'h'",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
-     "     VISIBLE:  'This message box has been popped', cursor=2",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following",
+     "number of times: This message box has been popped up the following'",
+     "     VISIBLE:  'he following",
+     "number of times: Th', cursor=32",
      "SPEECH OUTPUT: 'h'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift><Control>Right"))
 sequence.append(utils.AssertPresentationAction(
     "6. This message box label caret select 'his' of 'This'",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
-     "     VISIBLE:  'This message box has been popped', cursor=5",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following",
+     "number of times: This message box has been popped up the following'",
+     "     VISIBLE:  'following",
+     "number of times: This ', cursor=32",
      "SPEECH OUTPUT: 'his'",
      "SPEECH OUTPUT: 'selected' voice=system"]))
 
@@ -80,8 +88,10 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
     "7. This message box label caret selection Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
-     "     VISIBLE:  'This message box has been popped', cursor=5",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following",
+     "number of times: This message box has been popped up the following'",
+     "     VISIBLE:  'following",
+     "number of times: This ', cursor=32",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
      "number of times: selected label'"]))
 
@@ -90,10 +100,14 @@ sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
     "8. This message box label caret selection Extended Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
-     "     VISIBLE:  'This message box has been popped', cursor=5",
-     "BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
-     "     VISIBLE:  'This message box has been popped', cursor=5",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following",
+     "number of times: This message box has been popped up the following'",
+     "     VISIBLE:  'following",
+     "number of times: This ', cursor=32",
+     "BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following",
+     "number of times: This message box has been popped up the following'",
+     "     VISIBLE:  'following",
+     "number of times: This ', cursor=32",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
      "number of times: selected label'",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
@@ -103,11 +117,10 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
     "9. Left Arrow to move to h unselecting his'",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
-     "     VISIBLE:  'This message box has been popped', cursor=2",
-     "BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
-     "     VISIBLE:  'This message box has been popped', cursor=2",
-     "SPEECH OUTPUT: 'h'",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following",
+     "number of times: This message box has been popped up the following'",
+     "     VISIBLE:  'following",
+     "number of times: This ', cursor=29",
      "SPEECH OUTPUT: 'his'",
      "SPEECH OUTPUT: 'unselected' voice=system"]))
 
@@ -115,17 +128,21 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift><Control>Left"))
 sequence.append(utils.AssertPresentationAction(
     "10. This message box label caret select 'T' in 'This'",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
-     "     VISIBLE:  'This message box has been popped', cursor=1",
-     "SPEECH OUTPUT: 'T' voice=uppercase",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following",
+     "number of times: This message box has been popped up the following'",
+     "     VISIBLE:  'following",
+     "number of times: This ', cursor=28",
+     "SPEECH OUTPUT: 'T'",
      "SPEECH OUTPUT: 'selected' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift><Control>Right"))
 sequence.append(utils.AssertPresentationAction(
     "11. This message box label caret unselect 'T' and select rest of 'This'",
-    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following'",
-     "     VISIBLE:  'This message box has been popped', cursor=5",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following",
+     "number of times: This message box has been popped up the following'",
+     "     VISIBLE:  'following",
+     "number of times: This ', cursor=32",
      "SPEECH OUTPUT: 'T'",
      "SPEECH OUTPUT: 'unselected' voice=system",
      "SPEECH OUTPUT: 'his'",
diff --git a/test/keystrokes/gtk-demo/role_menu_flat_review.py 
b/test/keystrokes/gtk-demo/role_menu_flat_review.py
new file mode 100644
index 0000000..e212ae3
--- /dev/null
+++ b/test/keystrokes/gtk-demo/role_menu_flat_review.py
@@ -0,0 +1,138 @@
+#!/usr/bin/python
+
+"""Test of menu and menu item output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Application main window"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Alt>p"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Initial menu and menu item",
+    ["BRAILLE LINE:  'gtk-demo application Application Window frame Preferences menu'",
+     "     VISIBLE:  'Preferences menu', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application Application Window frame Color menu'",
+     "     VISIBLE:  'Color menu', cursor=1",
+     "SPEECH OUTPUT: 'Preferences menu.'",
+     "SPEECH OUTPUT: 'Color menu.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Review current line",
+    ["KNOWN ISSUE: Menu items are not currently reviewable. Thus all the following assertions are wrong.",
+     "BRAILLE LINE:  'File Preferences Help $l'",
+     "     VISIBLE:  'File Preferences Help $l', cursor=1",
+     "SPEECH OUTPUT: 'File Preferences Help'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Review previous line",
+    [""]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Review next line",
+    ["BRAILLE LINE:  'Open & y toggle button Quit panel GTK! $l'",
+     "     VISIBLE:  'Open & y toggle button Quit pane', cursor=1",
+     "SPEECH OUTPUT: 'Open not pressed toggle button Quit panel GTK!'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Review current word",
+    ["BRAILLE LINE:  'Open & y toggle button Quit panel GTK! $l'",
+     "     VISIBLE:  'Open & y toggle button Quit pane', cursor=1",
+     "SPEECH OUTPUT: 'Open'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Review next word",
+    ["BRAILLE LINE:  'Open & y toggle button Quit panel GTK! $l'",
+     "     VISIBLE:  'Open & y toggle button Quit pane', cursor=6",
+     "SPEECH OUTPUT: 'not pressed'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Review next line",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Review current word",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_2"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Review current char",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Review next word",
+    ["BRAILLE LINE:  'Cursor at row 0 column 0 - 0 chars in document $l'",
+     "     VISIBLE:  'Cursor at row 0 column 0 - 0 cha', cursor=1",
+     "SPEECH OUTPUT: 'Cursor'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_3"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Review next char",
+    ["BRAILLE LINE:  'Cursor at row 0 column 0 - 0 chars in document $l'",
+     "     VISIBLE:  'Cursor at row 0 column 0 - 0 cha', cursor=2",
+     "SPEECH OUTPUT: 'u'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_1"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Review previous char",
+    ["BRAILLE LINE:  'Cursor at row 0 column 0 - 0 chars in document $l'",
+     "     VISIBLE:  'Cursor at row 0 column 0 - 0 cha', cursor=1",
+     "SPEECH OUTPUT: 'C'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_1"))
+sequence.append(utils.AssertPresentationAction(
+    "13. Review previous char",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_4"))
+sequence.append(utils.AssertPresentationAction(
+    "14. Review previous word",
+    ["BRAILLE LINE:  'Open & y toggle button Quit panel GTK! $l'",
+     "     VISIBLE:  'l GTK! $l', cursor=3",
+     "SPEECH OUTPUT: 'GTK!'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "15. Review previous line",
+    ["BRAILLE LINE:  'File Preferences Help $l'",
+     "     VISIBLE:  'File Preferences Help $l', cursor=1",
+     "SPEECH OUTPUT: 'File Preferences Help'"]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_page_tab.py b/test/keystrokes/gtk-demo/role_page_tab.py
index 87ea927..eedf9cf 100644
--- a/test/keystrokes/gtk-demo/role_page_tab.py
+++ b/test/keystrokes/gtk-demo/role_page_tab.py
@@ -10,6 +10,7 @@ sequence = MacroSequence()
 sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Printing"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
diff --git a/test/keystrokes/gtk-demo/role_radio_button.py b/test/keystrokes/gtk-demo/role_radio_button.py
index 8574443..fa1cf47 100644
--- a/test/keystrokes/gtk-demo/role_radio_button.py
+++ b/test/keystrokes/gtk-demo/role_radio_button.py
@@ -18,6 +18,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. All Pages radio button",
     ["BRAILLE LINE:  'gtk-demo 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.'",
      "SPEECH OUTPUT: 'selected radio button'"]))
 
diff --git a/test/keystrokes/gtk-demo/role_spin_button.py b/test/keystrokes/gtk-demo/role_spin_button.py
index 9abac6c..fa73e02 100644
--- a/test/keystrokes/gtk-demo/role_spin_button.py
+++ b/test/keystrokes/gtk-demo/role_spin_button.py
@@ -42,8 +42,6 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Copies: 16 $l', cursor=9",
      "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies: 16 $l'",
      "     VISIBLE:  'Copies: 16 $l', cursor=9",
-     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies: 16 $l'",
-     "     VISIBLE:  'Copies: 16 $l', cursor=9",
      "SPEECH OUTPUT: '16'",
      "SPEECH OUTPUT: '16'"]))
 
@@ -53,8 +51,6 @@ sequence.append(utils.AssertPresentationAction(
     "4. Decrement value",
     ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies: 15 $l'",
      "     VISIBLE:  'Copies: 15 $l', cursor=9",
-     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies: 15 $l'",
-     "     VISIBLE:  'Copies: 15 $l', cursor=9",
      "SPEECH OUTPUT: '15'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/gtk-demo/role_split_pane.py b/test/keystrokes/gtk-demo/role_split_pane.py
index 2d7229b..d6f972e 100644
--- a/test/keystrokes/gtk-demo/role_split_pane.py
+++ b/test/keystrokes/gtk-demo/role_split_pane.py
@@ -15,36 +15,34 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("F8"))
 sequence.append(utils.AssertPresentationAction(
-    "1. Split pane",
-    ["BRAILLE LINE:  'gtk-demo application Panes frame 60 split pane'",
-     "     VISIBLE:  '60 split pane', cursor=1",
-     "SPEECH OUTPUT: 'split pane 60'"]))
+    "1. vertical splitter",
+    ["BRAILLE LINE:  'gtk-demo application Panes frame 60 vertical splitter'",
+     "     VISIBLE:  '60 vertical splitter', cursor=1",
+     "SPEECH OUTPUT: 'vertical splitter 60'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "2. Split pane increment value",
-    ["BRAILLE LINE:  'gtk-demo application Panes frame 61 split pane'",
-     "     VISIBLE:  '61 split pane', cursor=1",
+    "2. vertical splitter increment value",
+    ["BRAILLE LINE:  'gtk-demo application Panes frame 61 vertical splitter'",
+     "     VISIBLE:  '61 vertical splitter', cursor=1",
      "SPEECH OUTPUT: '61'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "3. Split pane Where Am I",
-    ["BRAILLE LINE:  'gtk-demo application Panes frame 61 split pane'",
-     "     VISIBLE:  '61 split pane', cursor=1",
-     "SPEECH OUTPUT: 'split pane 61'"]))
+    "3. vertical splitter Where Am I",
+    ["BRAILLE LINE:  'gtk-demo application Panes frame 61 vertical splitter'",
+     "     VISIBLE:  '61 vertical splitter', cursor=1",
+     "SPEECH OUTPUT: 'vertical splitter 61'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
-    "4. Split pane decrement value",
-    ["BRAILLE LINE:  'gtk-demo application Panes frame 60 split pane'",
-     "     VISIBLE:  '60 split pane', cursor=1",
+    "4. vertical splitter decrement value",
+    ["BRAILLE LINE:  'gtk-demo application Panes frame 60 vertical splitter'",
+     "     VISIBLE:  '60 vertical splitter', cursor=1",
      "SPEECH OUTPUT: '60'"]))
 
-sequence.append(KeyComboAction("<Alt>F4"))
-
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_status_bar.py b/test/keystrokes/gtk-demo/role_status_bar.py
index 8181303..4c899fe 100644
--- a/test/keystrokes/gtk-demo/role_status_bar.py
+++ b/test/keystrokes/gtk-demo/role_status_bar.py
@@ -25,8 +25,6 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Open push button', cursor=1",
      "BRAILLE LINE:  'gtk-demo application Application Window frame Open push button'",
      "     VISIBLE:  'Open push button', cursor=1",
-     "BRAILLE LINE:  'Cursor at row 0 column 0 - 0 chars in document'",
-     "     VISIBLE:  'Cursor at row 0 column 0 - 0 cha', cursor=0",
      "SPEECH OUTPUT: 'Application Window'",
      "SPEECH OUTPUT: 'Cursor at row 0 column 0 - 0 chars in document'"]))
 
diff --git a/test/keystrokes/gtk-demo/role_table.py b/test/keystrokes/gtk-demo/role_table.py
index 6ba4e83..36086ec 100644
--- a/test/keystrokes/gtk-demo/role_table.py
+++ b/test/keystrokes/gtk-demo/role_table.py
@@ -7,11 +7,13 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("End"))
 sequence.append(KeyComboAction("Up"))
 sequence.append(KeyComboAction("<Shift>Right"))
 sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
diff --git a/test/keystrokes/gtk-demo/role_text_multiline.py b/test/keystrokes/gtk-demo/role_text_multiline.py
index bebd165..01b6977 100644
--- a/test/keystrokes/gtk-demo/role_text_multiline.py
+++ b/test/keystrokes/gtk-demo/role_text_multiline.py
@@ -7,9 +7,11 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("Tab"))
 
 sequence.append(utils.StartRecordingAction())
@@ -195,9 +197,6 @@ sequence.append(utils.AssertPresentationAction(
     "11. Navigate home",
     ["BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=1",
-     "BRAILLE LINE:  'gtk-demo application Application Window frame This is a test. $l'",
-     "     VISIBLE:  'This is a test. $l', cursor=1",
-     "SPEECH OUTPUT: 'This is a test.'",
      "SPEECH OUTPUT: ' is a test.",
      "Here is another test.'",
      "SPEECH OUTPUT: 'unselected' voice=system"]))
diff --git a/test/keystrokes/gtk-demo/role_text_multiline_flatreview.py 
b/test/keystrokes/gtk-demo/role_text_multiline_flat_review.py
similarity index 98%
rename from test/keystrokes/gtk-demo/role_text_multiline_flatreview.py
rename to test/keystrokes/gtk-demo/role_text_multiline_flat_review.py
index bd8f13c..16445f0 100644
--- a/test/keystrokes/gtk-demo/role_text_multiline_flatreview.py
+++ b/test/keystrokes/gtk-demo/role_text_multiline_flat_review.py
@@ -7,11 +7,13 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
-sequence.append(KeyComboAction("Tab"))
+sequence.append(PauseAction(3000))
 
+sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction("This is a test. "))
 sequence.append(KeyComboAction("Return"))
 sequence.append(TypeAction("This is only a test."))
@@ -33,8 +35,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Entering flat review.', cursor=0",
      "BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
      "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
-     "SPEECH OUTPUT: 'Entering flat review.'",
-     "SPEECH OUTPUT: 'PLEASE' voice=uppercase"]))
+     "SPEECH OUTPUT: 'Entering flat review.' voice=system",
+     "SPEECH OUTPUT: 'PLEASE'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_8"))
@@ -104,7 +106,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'h'",
      "SPEECH OUTPUT: 'i'",
      "SPEECH OUTPUT: 's'",
-     "SPEECH OUTPUT: 'tango' voice=uppercase",
+     "SPEECH OUTPUT: 'tango'",
      "SPEECH OUTPUT: 'hotel'",
      "SPEECH OUTPUT: 'india'",
      "SPEECH OUTPUT: 'sierra'"]))
@@ -186,7 +188,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 't'",
      "SPEECH OUTPUT: 'dot'",
      "SPEECH OUTPUT: 'newline'",
-     "SPEECH OUTPUT: 'tango' voice=uppercase",
+     "SPEECH OUTPUT: 'tango'",
      "SPEECH OUTPUT: 'hotel'",
      "SPEECH OUTPUT: 'india'",
      "SPEECH OUTPUT: 'sierra'",
@@ -227,7 +229,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "SPEECH OUTPUT: 'T'",
-     "SPEECH OUTPUT: 'tango' voice=uppercase"]))
+     "SPEECH OUTPUT: 'tango'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_6"))
diff --git a/test/keystrokes/gtk-demo/role_text_multiline_navigation.py 
b/test/keystrokes/gtk-demo/role_text_multiline_navigation.py
index eeb1905..e7afc12 100644
--- a/test/keystrokes/gtk-demo/role_text_multiline_navigation.py
+++ b/test/keystrokes/gtk-demo/role_text_multiline_navigation.py
@@ -7,11 +7,13 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
-sequence.append(KeyComboAction("Tab"))
+sequence.append(PauseAction(3000))
 
+sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction("This is a test. "))
 sequence.append(KeyComboAction("Return"))
 sequence.append(TypeAction("This is only a test."))
@@ -229,7 +231,7 @@ sequence.append(utils.AssertPresentationAction(
     "24. Back up to 'PLEASE DO NOT PANIC.'",
     ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
      "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
-     "SPEECH OUTPUT: 'PLEASE DO NOT PANIC.' voice=uppercase"]))
+     "SPEECH OUTPUT: 'PLEASE DO NOT PANIC.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
@@ -255,7 +257,7 @@ sequence.append(utils.AssertPresentationAction(
     "27. Insert+f for text attributes",
     ["SPEECH OUTPUT: 'size: 11' voice=system",
      "SPEECH OUTPUT: 'family name: Cantarell' voice=system",
-     "SPEECH OUTPUT: 'foreground color: dark slate gray' voice=system",
+     "SPEECH OUTPUT: 'foreground color: black' voice=system",
      "SPEECH OUTPUT: 'background color: white' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py 
b/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py
index f4b1807..63dac30 100644
--- a/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py
+++ b/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py
@@ -7,11 +7,13 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
-sequence.append(KeyComboAction("Tab"))
+sequence.append(PauseAction(3000))
 
+sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction("This is a test. "))
 sequence.append(KeyComboAction("Return"))
 sequence.append(TypeAction("This is only a test."))
@@ -70,9 +72,6 @@ sequence.append(utils.AssertPresentationAction(
     "5. Ctrl+Page_Up to beginning of line",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
-     "BRAILLE LINE:  'This is only a test. $l'",
-     "     VISIBLE:  'This is only a test. $l', cursor=1",
-     "SPEECH OUTPUT: 'T'",
      "SPEECH OUTPUT: 'is only a test.'",
      "SPEECH OUTPUT: 'unselected' voice=system"]))
 
@@ -80,9 +79,9 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Page_Down"))
 sequence.append(utils.AssertPresentationAction(
     "6. Ctrl+Page_Down to end of line",
-    ["BRAILLE LINE:  'This is only a test. $l'",
-     "     VISIBLE:  'This is only a test. $l', cursor=21",
-     "SPEECH OUTPUT: 'This is only a test.'"]))
+    ["KNOWN ISSUE: We're not saying anything here",
+     "BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=21"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Page_Up"))
@@ -114,10 +113,7 @@ sequence.append(utils.AssertPresentationAction(
     "10. Shift+Page_Down to deselect text",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "BRAILLE LINE:  ' $l'",
-     "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'blank' voice=system",
-     "SPEECH OUTPUT: 'page unselected from cursor position'"]))
+     "SPEECH OUTPUT: 'page unselected from cursor position' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Page_Up"))
diff --git a/test/keystrokes/gtk-demo/role_window.py b/test/keystrokes/gtk-demo/role_window.py
index 56bca42..a1d040a 100644
--- a/test/keystrokes/gtk-demo/role_window.py
+++ b/test/keystrokes/gtk-demo/role_window.py
@@ -7,6 +7,9 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(KeyComboAction("Down"))
+sequence.append(PauseAction(3000))
+
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("KP_Enter"))
diff --git a/test/keystrokes/gtk-demo/spoken_indentation.py b/test/keystrokes/gtk-demo/spoken_indentation.py
index ff9522b..030f264 100644
--- a/test/keystrokes/gtk-demo/spoken_indentation.py
+++ b/test/keystrokes/gtk-demo/spoken_indentation.py
@@ -7,9 +7,11 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Application main window"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("Tab"))
 
 sequence.append(KeyComboAction("Tab"))
diff --git a/test/keystrokes/gtk3-demo/role_alert.py b/test/keystrokes/gtk3-demo/role_alert.py
index 461eb73..5803df0 100644
--- a/test/keystrokes/gtk3-demo/role_alert.py
+++ b/test/keystrokes/gtk3-demo/role_alert.py
@@ -33,7 +33,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'gtk3-demo application Information alert Cancel push button'",
      "     VISIBLE:  'Cancel push button', cursor=1",
      "SPEECH OUTPUT: 'Information alert.'",
-     "SPEECH OUTPUT: '  This message box has been popped up the following",
+     "SPEECH OUTPUT: 'This message box has been popped up the following",
      "number of times: 1'",
      "SPEECH OUTPUT: 'Cancel push button'"]))
 
diff --git a/test/keystrokes/gtk3-demo/role_color_chooser.py b/test/keystrokes/gtk3-demo/role_color_chooser.py
index fd5d620..58d8878 100644
--- a/test/keystrokes/gtk3-demo/role_color_chooser.py
+++ b/test/keystrokes/gtk3-demo/role_color_chooser.py
@@ -38,6 +38,7 @@ sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("Left"))
 sequence.append(KeyComboAction("space"))
 sequence.append(KeyComboAction("Tab"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -69,7 +70,7 @@ sequence.append(utils.AssertPresentationAction(
     "6. Hue Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application Changing color dialog Hue 0.02 color chooser'",
      "     VISIBLE:  'Hue 0.02 color chooser', cursor=1",
-     "SPEECH OUTPUT: 'color chooser 0.02 2 percent.'"]))
+     "SPEECH OUTPUT: 'color chooser 0.02'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -124,7 +125,7 @@ sequence.append(utils.AssertPresentationAction(
     "13. Alpha Where Am I",
     ["BRAILLE LINE:  'gtk3-demo application Changing color dialog Alpha 0.99 color chooser'",
      "     VISIBLE:  'Alpha 0.99 color chooser', cursor=1",
-     "SPEECH OUTPUT: 'color chooser 0.99 99 percent.'"]))
+     "SPEECH OUTPUT: 'color chooser 0.99'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk3-demo/role_column_header.py b/test/keystrokes/gtk3-demo/role_column_header.py
index c5cf6c7..18fde7e 100644
--- a/test/keystrokes/gtk3-demo/role_column_header.py
+++ b/test/keystrokes/gtk3-demo/role_column_header.py
@@ -45,7 +45,8 @@ sequence.append(utils.AssertPresentationAction(
     "4. Enter table",
     ["BRAILLE LINE:  'gtk3-demo application List Store frame table Fixed? column header < > Fixed? 60482 
Normal scrollable notebooks and hidden tabs  '",
      "     VISIBLE:  '< > Fixed? 60482 Normal scrollab', cursor=1",
-     "SPEECH OUTPUT: 'Fixed? check box not checked 60482 Normal scrollable notebooks and hidden tabs 
image.'"]))
+     "SPEECH OUTPUT: 'Fixed?'",
+     "SPEECH OUTPUT: 'check box not checked 60482 Normal scrollable notebooks and hidden tabs image.'"]))
 
 # GtkTreeView swallows this keypress (for all users; not just Orca users).
 sequence.append(KeyComboAction("Left"))
diff --git a/test/keystrokes/gtk3-demo/role_combo_box.py b/test/keystrokes/gtk3-demo/role_combo_box.py
index 8d4eb30..853574a 100644
--- a/test/keystrokes/gtk3-demo/role_combo_box.py
+++ b/test/keystrokes/gtk3-demo/role_combo_box.py
@@ -8,7 +8,7 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(TypeAction("Combo boxes"))
+sequence.append(TypeAction("Combo Boxes"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(PauseAction(3000))
 
@@ -53,6 +53,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: '3 of 5'"]))
 
 sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -60,7 +61,6 @@ sequence.append(utils.AssertPresentationAction(
     "5. Editable text combo box",
     ["BRAILLE LINE:  'gtk3-demo application Combo Boxes frame Editable panel  $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'Editable panel'",
      "SPEECH OUTPUT: 'text.'"]))
 
 sequence.append(TypeAction("Fou"))
@@ -110,13 +110,10 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'text.'",
      "SPEECH OUTPUT: 'Four selected.'"]))
 
-sequence.append(KeyComboAction("Tab"))
-sequence.append(KeyComboAction("Tab"))
-sequence.append(KeyComboAction("Tab"))
-sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
 sequence.append(utils.AssertPresentationAction(
     "11. Combo box with multiple levels",
     ["BRAILLE LINE:  'gtk3-demo application Combo Boxes frame Where are we ? panel Boston combo box'",
diff --git a/test/keystrokes/gtk3-demo/role_dialog.py b/test/keystrokes/gtk3-demo/role_dialog.py
index 376a93d..f904dc8 100644
--- a/test/keystrokes/gtk3-demo/role_dialog.py
+++ b/test/keystrokes/gtk3-demo/role_dialog.py
@@ -20,7 +20,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'gtk3-demo application Error alert & y Details: collapsed toggle button'",
      "     VISIBLE:  '& y Details: collapsed toggle bu', cursor=1",
      "SPEECH OUTPUT: 'Error alert.'",
-     "SPEECH OUTPUT: '  Something went wrong Here are some more details but not the full story.'",
+     "SPEECH OUTPUT: 'Something went wrong Here are some more details but not the full story.'",
      "SPEECH OUTPUT: 'Details: toggle button collapsed'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/gtk3-demo/role_dialog_flat_review.py 
b/test/keystrokes/gtk3-demo/role_dialog_flat_review.py
new file mode 100644
index 0000000..2c97226
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_dialog_flat_review.py
@@ -0,0 +1,295 @@
+#!/usr/bin/python
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Popovers"))
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("<Shift>Right"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Shift+Tab",
+    ["BRAILLE LINE:  'gtk3-demo application Print dialog General page tab'",
+     "     VISIBLE:  'General page tab', cursor=1",
+     "SPEECH OUTPUT: 'General page tab.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Review current line",
+    ["BRAILLE LINE:  'General Page Setup $l'",
+     "     VISIBLE:  'General Page Setup $l', cursor=1",
+     "SPEECH OUTPUT: 'General Page Setup'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Review previous line",
+    ["BRAILLE LINE:  'Cancel Preview Print $l'",
+     "     VISIBLE:  'Cancel Preview Print $l', cursor=1",
+     "SPEECH OUTPUT: 'Cancel Preview Print'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Review next line",
+    ["BRAILLE LINE:  'General Page Setup $l'",
+     "     VISIBLE:  'General Page Setup $l', cursor=1",
+     "SPEECH OUTPUT: 'General Page Setup'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Review next line",
+    ["BRAILLE LINE:  'table column header Printer Location Status $l'",
+     "     VISIBLE:  'table column header Printer Loca', cursor=1",
+     "SPEECH OUTPUT: 'table column header Printer Location Status'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Review next line",
+    ["BRAILLE LINE:  'Print to File $l'",
+     "     VISIBLE:  'Print to File $l', cursor=1",
+     "SPEECH OUTPUT: 'Print to File'"]))
+
+# Skip over personal printer
+sequence.append(KeyComboAction("KP_9"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Review next line",
+    ["BRAILLE LINE:  'File: ~/Documents/gtk-demo.pdf Output format: &=y PDF & y Postscript & y SVG $l'",
+     "     VISIBLE:  'File: ~/Documents/gtk-demo.pdf O', cursor=1",
+     "SPEECH OUTPUT: 'File: ~/Documents/gtk-demo.pdf Output format: selected PDF not selected Postscript not 
selected SVG'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Review next word",
+    ["BRAILLE LINE:  'File: ~/Documents/gtk-demo.pdf Output format: &=y PDF & y Postscript & y SVG $l'",
+     "     VISIBLE:  'File: ~/Documents/gtk-demo.pdf O', cursor=7",
+     "SPEECH OUTPUT: '~/Documents/gtk-demo.pdf'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Review next word",
+    ["BRAILLE LINE:  'File: ~/Documents/gtk-demo.pdf Output format: &=y PDF & y Postscript & y SVG $l'",
+     "     VISIBLE:  'File: ~/Documents/gtk-demo.pdf O', cursor=32",
+     "SPEECH OUTPUT: 'Output'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_3"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Review next char",
+    ["BRAILLE LINE:  'File: ~/Documents/gtk-demo.pdf Output format: &=y PDF & y Postscript & y SVG $l'",
+     "     VISIBLE:  'utput format: &=y PDF & y Postsc', cursor=1",
+     "SPEECH OUTPUT: 'u'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_3"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Review next char",
+    ["BRAILLE LINE:  'File: ~/Documents/gtk-demo.pdf Output format: &=y PDF & y Postscript & y SVG $l'",
+     "     VISIBLE:  'utput format: &=y PDF & y Postsc', cursor=2",
+     "SPEECH OUTPUT: 't'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_3"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Review next char",
+    ["BRAILLE LINE:  'File: ~/Documents/gtk-demo.pdf Output format: &=y PDF & y Postscript & y SVG $l'",
+     "     VISIBLE:  'utput format: &=y PDF & y Postsc', cursor=3",
+     "SPEECH OUTPUT: 'p'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_3"))
+sequence.append(utils.AssertPresentationAction(
+    "13. Review next char",
+    ["BRAILLE LINE:  'File: ~/Documents/gtk-demo.pdf Output format: &=y PDF & y Postscript & y SVG $l'",
+     "     VISIBLE:  'utput format: &=y PDF & y Postsc', cursor=4",
+     "SPEECH OUTPUT: 'u'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_3"))
+sequence.append(utils.AssertPresentationAction(
+    "14. Review next char",
+    ["BRAILLE LINE:  'File: ~/Documents/gtk-demo.pdf Output format: &=y PDF & y Postscript & y SVG $l'",
+     "     VISIBLE:  'utput format: &=y PDF & y Postsc', cursor=5",
+     "SPEECH OUTPUT: 't'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_3"))
+sequence.append(utils.AssertPresentationAction(
+    "15. Review next char",
+    ["BRAILLE LINE:  'File: ~/Documents/gtk-demo.pdf Output format: &=y PDF & y Postscript & y SVG $l'",
+     "     VISIBLE:  'utput format: &=y PDF & y Postsc', cursor=6",
+     "SPEECH OUTPUT: 'space'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_3"))
+sequence.append(utils.AssertPresentationAction(
+    "16. Review next char",
+    ["BRAILLE LINE:  'File: ~/Documents/gtk-demo.pdf Output format: &=y PDF & y Postscript & y SVG $l'",
+     "     VISIBLE:  'utput format: &=y PDF & y Postsc', cursor=7",
+     "SPEECH OUTPUT: 'f'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_1"))
+sequence.append(utils.AssertPresentationAction(
+    "17. Review previous char",
+    ["BRAILLE LINE:  'File: ~/Documents/gtk-demo.pdf Output format: &=y PDF & y Postscript & y SVG $l'",
+     "     VISIBLE:  'utput format: &=y PDF & y Postsc', cursor=6",
+     "SPEECH OUTPUT: 'space'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_1"))
+sequence.append(utils.AssertPresentationAction(
+    "18. Review previous char",
+    ["BRAILLE LINE:  'File: ~/Documents/gtk-demo.pdf Output format: &=y PDF & y Postscript & y SVG $l'",
+     "     VISIBLE:  'utput format: &=y PDF & y Postsc', cursor=5",
+     "SPEECH OUTPUT: 't'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "19. Review next line",
+    ["BRAILLE LINE:  'Range Copies $l'",
+     "     VISIBLE:  'Range Copies $l', cursor=1",
+     "SPEECH OUTPUT: 'Range Copies'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "20. Review next line",
+    ["KNOWN ISSUE: The value is not reviewable",
+     "BRAILLE LINE:  '&=y All Pages Copies: spin button $l'",
+     "     VISIBLE:  '&=y All Pages Copies: spin butto', cursor=1",
+     "SPEECH OUTPUT: 'selected All Pages Copies: spin button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "21. Review current word",
+    ["BRAILLE LINE:  '&=y All Pages Copies: spin button $l'",
+     "     VISIBLE:  '&=y All Pages Copies: spin butto', cursor=1",
+     "SPEECH OUTPUT: 'selected'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_2"))
+sequence.append(utils.AssertPresentationAction(
+    "22. Review current char",
+    ["BRAILLE LINE:  '&=y All Pages Copies: spin button $l'",
+     "     VISIBLE:  '&=y All Pages Copies: spin butto', cursor=1",
+     "SPEECH OUTPUT: 'selected'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "23. Review next word",
+    ["BRAILLE LINE:  '&=y All Pages Copies: spin button $l'",
+     "     VISIBLE:  '&=y All Pages Copies: spin butto', cursor=5",
+     "SPEECH OUTPUT: 'All Pages'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "24. Review next word",
+    ["BRAILLE LINE:  '&=y All Pages Copies: spin button $l'",
+     "     VISIBLE:  '&=y All Pages Copies: spin butto', cursor=15",
+     "SPEECH OUTPUT: 'Copies:'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_3"))
+sequence.append(utils.AssertPresentationAction(
+    "25. Review next char",
+    ["BRAILLE LINE:  '&=y All Pages Copies: spin button $l'",
+     "     VISIBLE:  '&=y All Pages Copies: spin butto', cursor=16",
+     "SPEECH OUTPUT: 'o'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "26. Review next word",
+    ["BRAILLE LINE:  '&=y All Pages Copies: spin button $l'",
+     "     VISIBLE:  '&=y All Pages Copies: spin butto', cursor=23",
+     "SPEECH OUTPUT: 'spin button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "27. Review next line",
+    ["BRAILLE LINE:  '& y Current Page <x> Collate drawing area $l'",
+     "     VISIBLE:  '& y Current Page <x> Collate dra', cursor=1",
+     "SPEECH OUTPUT: 'not selected Current Page checked Collate drawing area'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "28. Review current word",
+    ["BRAILLE LINE:  '& y Current Page <x> Collate drawing area $l'",
+     "     VISIBLE:  '& y Current Page <x> Collate dra', cursor=1",
+     "SPEECH OUTPUT: 'not selected'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "29. Review next word",
+    ["KNOWN ISSUE: These labels don't implement the text interface so it's a single word",
+     "BRAILLE LINE:  '& y Current Page <x> Collate drawing area $l'",
+     "     VISIBLE:  '& y Current Page <x> Collate dra', cursor=5",
+     "SPEECH OUTPUT: 'Current Page'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "30. Review next word",
+    ["BRAILLE LINE:  '& y Current Page <x> Collate drawing area $l'",
+     "     VISIBLE:  '& y Current Page <x> Collate dra', cursor=18",
+     "SPEECH OUTPUT: 'checked'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "31. Review next word",
+    ["BRAILLE LINE:  '& y Current Page <x> Collate drawing area $l'",
+     "     VISIBLE:  '& y Current Page <x> Collate dra', cursor=22",
+     "SPEECH OUTPUT: 'Collate'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "32. Review next word",
+    ["BRAILLE LINE:  '& y Current Page <x> Collate drawing area $l'",
+     "     VISIBLE:  '& y Current Page <x> Collate dra', cursor=30",
+     "SPEECH OUTPUT: 'drawing area'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "33. Review next word",
+    ["BRAILLE LINE:  '& y Pages:  < > Reverse $l'",
+     "     VISIBLE:  '& y Pages:  < > Reverse $l', cursor=1",
+     "SPEECH OUTPUT: 'not selected'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "34. Review next line",
+    [""]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_icon_flat_review.py 
b/test/keystrokes/gtk3-demo/role_icon_flat_review.py
new file mode 100644
index 0000000..07ac8ac
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_icon_flat_review.py
@@ -0,0 +1,147 @@
+#!/usr/bin/python
+
+"""Test of icon output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Images"))
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("<Shift>Right"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "1. bin icon",
+    ["BRAILLE LINE:  'gtk3-demo application Icon View Basics frame bin icon'",
+     "     VISIBLE:  'bin icon', cursor=1",
+     "SPEECH OUTPUT: 'bin icon.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Review current line",
+    ["KNOWN ISSUE: This and all the subsequent assertions are broken due to flat review bugs",
+     "BRAILLE LINE:  '   vertical scroll bar 0% $l'",
+     "     VISIBLE:  '   vertical scroll bar 0% $l', cursor=1",
+     "SPEECH OUTPUT: 'vertical scroll bar 0 percent.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Review current word",
+    ["BRAILLE LINE:  '   vertical scroll bar 0% $l'",
+     "     VISIBLE:  '   vertical scroll bar 0% $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Review next word",
+    ["BRAILLE LINE:  '   vertical scroll bar 0% $l'",
+     "     VISIBLE:  '   vertical scroll bar 0% $l', cursor=2",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_2"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Review current char",
+    ["BRAILLE LINE:  '   vertical scroll bar 0% $l'",
+     "     VISIBLE:  '   vertical scroll bar 0% $l', cursor=2",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Review item below",
+    ["BRAILLE LINE:  '   $l'",
+     "     VISIBLE:  '   $l', cursor=2",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Review item below",
+    ["BRAILLE LINE:  '  $l'",
+     "     VISIBLE:  '  $l', cursor=2",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_4"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Review item above",
+    ["BRAILLE LINE:  '   $l'",
+     "     VISIBLE:  '   $l', cursor=2",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_4"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Review item above",
+    ["BRAILLE LINE:  '   vertical scroll bar 0% $l'",
+     "     VISIBLE:  '   vertical scroll bar 0% $l', cursor=2",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Review next line",
+    ["BRAILLE LINE:  '   $l'",
+     "     VISIBLE:  '   $l', cursor=1",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Review next word",
+    ["BRAILLE LINE:  '   $l'",
+     "     VISIBLE:  '   $l', cursor=2",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_3"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Review next char",
+    ["BRAILLE LINE:  '   $l'",
+     "     VISIBLE:  '   $l', cursor=3",
+     "SPEECH OUTPUT: 'blank'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "13. Review previous line",
+    ["BRAILLE LINE:  '   vertical scroll bar 0% $l'",
+     "     VISIBLE:  '   vertical scroll bar 0% $l', cursor=1",
+     "SPEECH OUTPUT: 'vertical scroll bar 0 percent.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "14. Review previous line",
+    ["BRAILLE LINE:  'Up Home $l'",
+     "     VISIBLE:  'Up Home $l', cursor=1",
+     "SPEECH OUTPUT: 'Up Home'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "15. Review previous line",
+    [""]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_info_bar.py b/test/keystrokes/gtk3-demo/role_info_bar.py
index 2bcca58..d58693d 100644
--- a/test/keystrokes/gtk3-demo/role_info_bar.py
+++ b/test/keystrokes/gtk3-demo/role_info_bar.py
@@ -46,9 +46,9 @@ sequence.append(KeyComboAction("KP_7"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "2. Flat review the home position to read the message",
-    ["BRAILLE LINE:  'This is an info bar with message type GTK_MESSAGE_INFO filler $l'",
-     "     VISIBLE:  'This is an info bar with message', cursor=1",
-     "SPEECH OUTPUT: 'This is an info bar with message type GTK_MESSAGE_INFO filler'"]))
+    ["BRAILLE LINE:  'Info bars This is an info bar with message type GTK_MESSAGE_INFO filler $l'",
+     "     VISIBLE:  'Info bars This is an info bar wi', cursor=1",
+     "SPEECH OUTPUT: 'Info bars This is an info bar with message type GTK_MESSAGE_INFO filler'"]))
 
 sequence.append(KeyComboAction("<Alt>F4"))
 
diff --git a/test/keystrokes/gtk3-demo/role_spin_button.py b/test/keystrokes/gtk3-demo/role_spin_button.py
index e1d251c..d9e4efe 100644
--- a/test/keystrokes/gtk3-demo/role_spin_button.py
+++ b/test/keystrokes/gtk3-demo/role_spin_button.py
@@ -7,6 +7,7 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Popovers"))
 sequence.append(KeyComboAction("Escape"))
@@ -48,8 +49,6 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Copies: 16 $l', cursor=9",
      "BRAILLE LINE:  'gtk3-demo application Print dialog General page tab Copies panel Copies: 16 $l'",
      "     VISIBLE:  'Copies: 16 $l', cursor=9",
-     "BRAILLE LINE:  'gtk3-demo application Print dialog General page tab Copies panel Copies: 16 $l'",
-     "     VISIBLE:  'Copies: 16 $l', cursor=9",
      "SPEECH OUTPUT: '16'",
      "SPEECH OUTPUT: '16'"]))
 
@@ -59,8 +58,6 @@ sequence.append(utils.AssertPresentationAction(
     "4. Decrement value",
     ["BRAILLE LINE:  'gtk3-demo application Print dialog General page tab Copies panel Copies: 15 $l'",
      "     VISIBLE:  'Copies: 15 $l', cursor=9",
-     "BRAILLE LINE:  'gtk3-demo application Print dialog General page tab Copies panel Copies: 15 $l'",
-     "     VISIBLE:  'Copies: 15 $l', cursor=9",
      "SPEECH OUTPUT: '15'"]))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/gtk3-demo/role_split_pane.py b/test/keystrokes/gtk3-demo/role_split_pane.py
index 852d9c6..9d3cfcf 100644
--- a/test/keystrokes/gtk3-demo/role_split_pane.py
+++ b/test/keystrokes/gtk3-demo/role_split_pane.py
@@ -16,36 +16,66 @@ sequence.append(PauseAction(3000))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("F8"))
 sequence.append(utils.AssertPresentationAction(
-    "1. Split pane",
-    ["BRAILLE LINE:  'gtk3-demo application Paned Widgets frame 89 split pane'",
-     "     VISIBLE:  '89 split pane', cursor=1",
-     "SPEECH OUTPUT: 'split pane 89'"]))
+    "1. vertical splitter",
+    ["BRAILLE LINE:  'gtk3-demo application Paned Widgets frame 88 vertical splitter'",
+     "     VISIBLE:  '88 vertical splitter', cursor=1",
+     "SPEECH OUTPUT: 'vertical splitter 88'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "2. Split pane increment value",
-    ["BRAILLE LINE:  'gtk3-demo application Paned Widgets frame 90 split pane'",
-     "     VISIBLE:  '90 split pane', cursor=1",
-     "SPEECH OUTPUT: '90'"]))
+    "2. vertical splitter increment value",
+    ["BRAILLE LINE:  'gtk3-demo application Paned Widgets frame 89 vertical splitter'",
+     "     VISIBLE:  '89 vertical splitter', cursor=1",
+     "SPEECH OUTPUT: '89'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "3. Split pane Where Am I",
-    ["BRAILLE LINE:  'gtk3-demo application Paned Widgets frame 90 split pane'",
-     "     VISIBLE:  '90 split pane', cursor=1",
-     "SPEECH OUTPUT: 'split pane 90'"]))
+    "3. vertical splitter Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo application Paned Widgets frame 89 vertical splitter'",
+     "     VISIBLE:  '89 vertical splitter', cursor=1",
+     "SPEECH OUTPUT: 'vertical splitter 89'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
-    "4. Split pane decrement value",
-    ["BRAILLE LINE:  'gtk3-demo application Paned Widgets frame 89 split pane'",
-     "     VISIBLE:  '89 split pane', cursor=1",
-     "SPEECH OUTPUT: '89'"]))
+    "4. vertical splitter decrement value",
+    ["BRAILLE LINE:  'gtk3-demo application Paned Widgets frame 88 vertical splitter'",
+     "     VISIBLE:  '88 vertical splitter', cursor=1",
+     "SPEECH OUTPUT: '88'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("F8"))
+sequence.append(utils.AssertPresentationAction(
+    "5. horizontal splitter",
+    ["BRAILLE LINE:  'gtk3-demo application Paned Widgets frame 60 horizontal splitter'",
+     "     VISIBLE:  '60 horizontal splitter', cursor=1",
+     "SPEECH OUTPUT: 'horizontal splitter 60'"]))
 
-sequence.append(KeyComboAction("<Alt>F4"))
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "6. horizontal splitter increment value",
+    ["BRAILLE LINE:  'gtk3-demo application Paned Widgets frame 61 horizontal splitter'",
+     "     VISIBLE:  '61 horizontal splitter', cursor=1",
+     "SPEECH OUTPUT: '61'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "7. horizontal splitter Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo application Paned Widgets frame 61 horizontal splitter'",
+     "     VISIBLE:  '61 horizontal splitter', cursor=1",
+     "SPEECH OUTPUT: 'horizontal splitter 61'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "8. horizontal splitter decrement value",
+    ["BRAILLE LINE:  'gtk3-demo application Paned Widgets frame 60 horizontal splitter'",
+     "     VISIBLE:  '60 horizontal splitter', cursor=1",
+     "SPEECH OUTPUT: '60'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_status_bar.py b/test/keystrokes/gtk3-demo/role_status_bar.py
index adcc0e7..46ad5a4 100644
--- a/test/keystrokes/gtk3-demo/role_status_bar.py
+++ b/test/keystrokes/gtk3-demo/role_status_bar.py
@@ -11,6 +11,9 @@ sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Application class"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction("1"))
+sequence.append(KeyComboAction("BackSpace"))
 sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
@@ -26,8 +29,6 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  ' $l', cursor=1",
      "BRAILLE LINE:  'gtk3-demo-application application Application Class frame  $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "BRAILLE LINE:  'Cursor at row 0 column 0 - 0 chars in document'",
-     "     VISIBLE:  'Cursor at row 0 column 0 - 0 cha', cursor=0",
      "SPEECH OUTPUT: 'Application Class'",
      "SPEECH OUTPUT: 'Cursor at row 0 column 0 - 0 chars in document'"]))
 
diff --git a/test/keystrokes/gtk3-demo/role_table_flat_review.py 
b/test/keystrokes/gtk3-demo/role_table_flat_review.py
new file mode 100644
index 0000000..0503dc8
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_table_flat_review.py
@@ -0,0 +1,278 @@
+#!/usr/bin/python
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("End"))
+sequence.append(KeyComboAction("<Shift>Right"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Down",
+    ["BRAILLE LINE:  'gtk3-demo application Editable Cells frame table Number column header 5 packages of 
noodles ",
+     "     VISIBLE:  '5 packages of noodles ', cursor=1",
+     "SPEECH OUTPUT: '5 packages of noodles.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Down",
+    ["BRAILLE LINE:  'gtk3-demo application Editable Cells frame table Number column header 2 packages of 
chocolate chip cookies ",
+     "     VISIBLE:  '2 packages of chocolate chip coo', cursor=1",
+     "SPEECH OUTPUT: '2 packages of chocolate chip cookies.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Subtract"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Enter flat review",
+    ["BRAILLE LINE:  'Entering flat review.'",
+     "     VISIBLE:  'Entering flat review.', cursor=0",
+     "BRAILLE LINE:  '2 packages of chocolate chip cookies $l'",
+     "     VISIBLE:  '2 packages of chocolate chip coo', cursor=1",
+     "SPEECH OUTPUT: 'Entering flat review.' voice=system",
+     "SPEECH OUTPUT: '2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Review current line",
+    ["BRAILLE LINE:  '2 packages of chocolate chip cookies $l'",
+     "     VISIBLE:  '2 packages of chocolate chip coo', cursor=1",
+     "SPEECH OUTPUT: '2 packages of chocolate chip cookies'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Review current word'",
+    ["BRAILLE LINE:  '2 packages of chocolate chip cookies $l'",
+     "     VISIBLE:  '2 packages of chocolate chip coo', cursor=1",
+     "SPEECH OUTPUT: '2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_2"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Review current char'",
+    ["BRAILLE LINE:  '2 packages of chocolate chip cookies $l'",
+     "     VISIBLE:  '2 packages of chocolate chip coo', cursor=1",
+     "SPEECH OUTPUT: '2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Review next word'",
+    ["BRAILLE LINE:  '2 packages of chocolate chip cookies $l'",
+     "     VISIBLE:  '2 packages of chocolate chip coo', cursor=3",
+     "SPEECH OUTPUT: 'packages'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Review next word'",
+    ["BRAILLE LINE:  '2 packages of chocolate chip cookies $l'",
+     "     VISIBLE:  '2 packages of chocolate chip coo', cursor=12",
+     "SPEECH OUTPUT: 'of'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_3"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Review next char'",
+    ["BRAILLE LINE:  '2 packages of chocolate chip cookies $l'",
+     "     VISIBLE:  '2 packages of chocolate chip coo', cursor=13",
+     "SPEECH OUTPUT: 'f'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_3"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Review next char'",
+    ["BRAILLE LINE:  '2 packages of chocolate chip cookies $l'",
+     "     VISIBLE:  '2 packages of chocolate chip coo', cursor=14",
+     "SPEECH OUTPUT: 'space'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_1"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Review previous char'",
+    ["BRAILLE LINE:  '2 packages of chocolate chip cookies $l'",
+     "     VISIBLE:  '2 packages of chocolate chip coo', cursor=13",
+     "SPEECH OUTPUT: 'f'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_1"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Review previous char'",
+    ["BRAILLE LINE:  '2 packages of chocolate chip cookies $l'",
+     "     VISIBLE:  '2 packages of chocolate chip coo', cursor=12",
+     "SPEECH OUTPUT: 'o'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_4"))
+sequence.append(utils.AssertPresentationAction(
+    "13. Review previous word'",
+    ["BRAILLE LINE:  '2 packages of chocolate chip cookies $l'",
+     "     VISIBLE:  '2 packages of chocolate chip coo', cursor=3",
+     "SPEECH OUTPUT: 'packages'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_4"))
+sequence.append(utils.AssertPresentationAction(
+    "14. Review previous word'",
+    ["BRAILLE LINE:  '2 packages of chocolate chip cookies $l'",
+     "     VISIBLE:  '2 packages of chocolate chip coo', cursor=1",
+     "SPEECH OUTPUT: '2'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_4"))
+sequence.append(utils.AssertPresentationAction(
+    "15. Review previous word'",
+    ["BRAILLE LINE:  '5 packages of noodles $l'",
+     "     VISIBLE:  '5 packages of noodles $l', cursor=15",
+     "SPEECH OUTPUT: 'noodles'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "16. Review next line",
+    ["BRAILLE LINE:  '2 packages of chocolate chip cookies $l'",
+     "     VISIBLE:  '2 packages of chocolate chip coo', cursor=1",
+     "SPEECH OUTPUT: '2 packages of chocolate chip cookies'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "17. Review next line",
+    ["BRAILLE LINE:  'horizontal scroll bar 0% 1 can vanilla ice cream $l'",
+     "     VISIBLE:  'horizontal scroll bar 0% 1 can v', cursor=1",
+     "SPEECH OUTPUT: 'horizontal scroll bar 0 percent. 1 can vanilla ice cream'"]))
+
+#sequence.append(utils.StartRecordingAction())
+#sequence.append(KeyComboAction("KP_9"))
+#sequence.append(utils.AssertPresentationAction(
+#    "17. Review next line",
+#    ["BRAILLE LINE:  '1 can vanilla ice cream $l'",
+#     "     VISIBLE:  '1 can vanilla ice cream $l', cursor=1",
+#     "SPEECH OUTPUT: '1 can vanilla ice cream'"]))
+
+#sequence.append(utils.StartRecordingAction())
+#sequence.append(KeyComboAction("KP_9"))
+#sequence.append(utils.AssertPresentationAction(
+#    "18. Review next line",
+#    ["BRAILLE LINE:  'horizontal scroll bar 0% $l'",
+#     "     VISIBLE:  'horizontal scroll bar 0% $l', cursor=1",
+#     "SPEECH OUTPUT: 'horizontal scroll bar 0%'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "18. Review next line",
+    ["BRAILLE LINE:  'Add item Remove item $l'",
+     "     VISIBLE:  'Add item Remove item $l', cursor=1",
+     "SPEECH OUTPUT: 'Add item Remove item"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "19. Review next line",
+    [""]))
+
+#sequence.append(utils.StartRecordingAction())
+#sequence.append(KeyComboAction("KP_7"))
+#sequence.append(utils.AssertPresentationAction(
+#    "20. Review previous line",
+#    ["BRAILLE LINE:  'horizontal scroll bar 0% $l'",
+#     "     VISIBLE:  'horizontal scroll bar 0% $l', cursor=1",
+#     "SPEECH OUTPUT: 'horizontal scroll bar 0%'"]))
+
+#sequence.append(utils.StartRecordingAction())
+#sequence.append(KeyComboAction("KP_7"))
+#sequence.append(utils.AssertPresentationAction(
+#    "22. Review previous line",
+#    ["BRAILLE LINE:  '1 can vanilla ice cream $l'",
+#     "     VISIBLE:  '1 can vanilla ice cream $l', cursor=1",
+#     "SPEECH OUTPUT: '1 can vanilla ice cream'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "20. Review previous line",
+    ["BRAILLE LINE:  'horizontal scroll bar 0% 1 can vanilla ice cream $l'",
+     "     VISIBLE:  'horizontal scroll bar 0% 1 can v', cursor=1",
+     "SPEECH OUTPUT: 'horizontal scroll bar 0 percent. 1 can vanilla ice cream'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "21. Review previous line",
+    ["BRAILLE LINE:  '2 packages of chocolate chip cookies $l'",
+     "     VISIBLE:  '2 packages of chocolate chip coo', cursor=1",
+     "SPEECH OUTPUT: '2 packages of chocolate chip cookies'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "22. Review previous line",
+    ["BRAILLE LINE:  '5 packages of noodles $l'",
+     "     VISIBLE:  '5 packages of noodles $l', cursor=1",
+     "SPEECH OUTPUT: '5 packages of noodles"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "23. Review previous line",
+    ["BRAILLE LINE:  '3 bottles of coke vertical scroll bar 0% $l'",
+     "     VISIBLE:  '3 bottles of coke vertical scrol', cursor=1",
+     "SPEECH OUTPUT: '3 bottles of coke vertical scroll bar 0 percent.'"]))
+
+#sequence.append(utils.StartRecordingAction())
+#sequence.append(KeyComboAction("KP_7"))
+#sequence.append(utils.AssertPresentationAction(
+#    "23. Review previous line",
+#    ["BRAILLE LINE:  '3 bottles of coke $l'",
+#     "     VISIBLE:  '3 bottles of coke $l', cursor=1",
+#     "SPEECH OUTPUT: '3 bottles of coke'"]))
+
+#sequence.append(utils.StartRecordingAction())
+#sequence.append(KeyComboAction("KP_7"))
+#sequence.append(utils.AssertPresentationAction(
+#    "24. Review previous line",
+#    ["BRAILLE LINE:  'vertical scroll bar 0% $l'",
+#     "     VISIBLE:  'vertical scroll bar 0% $l', cursor=1",
+#     "SPEECH OUTPUT: 'vertical scroll bar 0%."]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "24. Review previous line",
+    ["BRAILLE LINE:  'Number Product Yummy $l'",
+     "     VISIBLE:  'Number Product Yummy $l', cursor=1",
+     "SPEECH OUTPUT: 'Number Product Yummy"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "25. Review previous line",
+    ["BRAILLE LINE:  'Shopping list (you can edit the cells!) $l'",
+     "     VISIBLE:  'Shopping list (you can edit the ', cursor=1",
+     "SPEECH OUTPUT: 'Shopping list (you can edit the cells!)'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "26. Review previous line",
+    ["BRAILLE LINE:  '6 eggs $l'",
+     "     VISIBLE:  '6 eggs $l', cursor=1",
+     "SPEECH OUTPUT: '6 eggs'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "27. Review previous line",
+    [""]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_text_multiline.py 
b/test/keystrokes/gtk3-demo/role_text_multiline.py
index 8cf07f7..6091c33 100644
--- a/test/keystrokes/gtk3-demo/role_text_multiline.py
+++ b/test/keystrokes/gtk3-demo/role_text_multiline.py
@@ -11,6 +11,7 @@ sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Application class"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Tab"))
 sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
@@ -196,9 +197,6 @@ sequence.append(utils.AssertPresentationAction(
     "11. Navigate home",
     ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=1",
-     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
-     "     VISIBLE:  'This is a test. $l', cursor=1",
-     "SPEECH OUTPUT: 'This is a test.'",
      "SPEECH OUTPUT: ' is a test.",
      "Here is another test.'",
      "SPEECH OUTPUT: 'unselected' voice=system"]))
diff --git a/test/keystrokes/gtk3-demo/role_text_multiline_flatreview.py 
b/test/keystrokes/gtk3-demo/role_text_multiline_flat_review.py
similarity index 93%
rename from test/keystrokes/gtk3-demo/role_text_multiline_flatreview.py
rename to test/keystrokes/gtk3-demo/role_text_multiline_flat_review.py
index 13e1e08..c0e85a5 100644
--- a/test/keystrokes/gtk3-demo/role_text_multiline_flatreview.py
+++ b/test/keystrokes/gtk3-demo/role_text_multiline_flat_review.py
@@ -11,6 +11,7 @@ sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Application class"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Tab"))
 sequence.append(PauseAction(3000))
 
 sequence.append(TypeAction("This is a test. "))
@@ -34,8 +35,8 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Entering flat review.', cursor=0",
      "BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
      "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
-     "SPEECH OUTPUT: 'Entering flat review.'",
-     "SPEECH OUTPUT: 'PLEASE' voice=uppercase"]))
+     "SPEECH OUTPUT: 'Entering flat review.' voice=system",
+     "SPEECH OUTPUT: 'PLEASE'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_8"))
@@ -105,7 +106,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'h'",
      "SPEECH OUTPUT: 'i'",
      "SPEECH OUTPUT: 's'",
-     "SPEECH OUTPUT: 'tango' voice=uppercase",
+     "SPEECH OUTPUT: 'tango'",
      "SPEECH OUTPUT: 'hotel'",
      "SPEECH OUTPUT: 'india'",
      "SPEECH OUTPUT: 'sierra'"]))
@@ -187,7 +188,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 't'",
      "SPEECH OUTPUT: 'dot'",
      "SPEECH OUTPUT: 'newline'",
-     "SPEECH OUTPUT: 'tango' voice=uppercase",
+     "SPEECH OUTPUT: 'tango'",
      "SPEECH OUTPUT: 'hotel'",
      "SPEECH OUTPUT: 'india'",
      "SPEECH OUTPUT: 'sierra'",
@@ -228,7 +229,7 @@ sequence.append(utils.AssertPresentationAction(
      "BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "SPEECH OUTPUT: 'T'",
-     "SPEECH OUTPUT: 'tango' voice=uppercase"]))
+     "SPEECH OUTPUT: 'tango'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_6"))
@@ -247,6 +248,23 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'This is a test. ",
      " vertical scroll bar 0 percent.'"]))
 
+#sequence.append(utils.StartRecordingAction())
+#sequence.append(KeyComboAction("KP_7"))
+#sequence.append(utils.AssertPresentationAction(
+#    "14. KP_7 to flat review 'This is a test.' and the scrollbar",
+#    ["BRAILLE LINE:  'vertical scroll bar 0% $l'",
+#     "     VISIBLE:  'vertical scroll bar 0% $l', cursor=1",
+#     "SPEECH OUTPUT: 'vertical scroll bar 0%'"]))
+#
+#sequence.append(utils.StartRecordingAction())
+#sequence.append(KeyComboAction("KP_7"))
+#sequence.append(utils.AssertPresentationAction(
+#    "15. KP_7 to flat review 'This is a test.' and the scrollbar",
+#    ["BRAILLE LINE:  'This is a test.  $l'",
+#     "     VISIBLE:  'This is a test.  $l', cursor=1",
+#     "SPEECH OUTPUT: 'This is a test. ",
+#     "'"]))
+
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_7"))
 sequence.append(utils.AssertPresentationAction(
@@ -338,7 +356,5 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "SPEECH OUTPUT: 'Leaving flat review.' voice=system"]))
 
-sequence.append(KeyComboAction("<Alt>F4"))
-
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_text_multiline_navigation.py 
b/test/keystrokes/gtk3-demo/role_text_multiline_navigation.py
index 79a0a23..2518810 100644
--- a/test/keystrokes/gtk3-demo/role_text_multiline_navigation.py
+++ b/test/keystrokes/gtk3-demo/role_text_multiline_navigation.py
@@ -11,6 +11,7 @@ sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Application class"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Tab"))
 sequence.append(PauseAction(3000))
 
 sequence.append(TypeAction("This is a test. "))
@@ -230,7 +231,7 @@ sequence.append(utils.AssertPresentationAction(
     "24. Back up to 'PLEASE DO NOT PANIC.'",
     ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
      "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
-     "SPEECH OUTPUT: 'PLEASE DO NOT PANIC.' voice=uppercase"]))
+     "SPEECH OUTPUT: 'PLEASE DO NOT PANIC.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
@@ -256,8 +257,8 @@ sequence.append(utils.AssertPresentationAction(
     "27. Insert+f for text attributes",
     ["SPEECH OUTPUT: 'size: 11' voice=system",
      "SPEECH OUTPUT: 'family name: Cantarell' voice=system",
-     "SPEECH OUTPUT: 'foreground color: black' voice=system",
-     "SPEECH OUTPUT: 'background color: white' voice=system"]))
+     "SPEECH OUTPUT: 'foreground color: white' voice=system",
+     "SPEECH OUTPUT: 'background color: dark slate gray' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
diff --git a/test/keystrokes/gtk3-demo/role_text_multiline_navigation2.py 
b/test/keystrokes/gtk3-demo/role_text_multiline_navigation2.py
index a7ac5ed..5d37b55 100644
--- a/test/keystrokes/gtk3-demo/role_text_multiline_navigation2.py
+++ b/test/keystrokes/gtk3-demo/role_text_multiline_navigation2.py
@@ -11,6 +11,7 @@ sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Application class"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Tab"))
 sequence.append(PauseAction(3000))
 
 sequence.append(TypeAction("This is a test. "))
@@ -71,9 +72,6 @@ sequence.append(utils.AssertPresentationAction(
     "5. Ctrl+Page_Up to beginning of line",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
-     "BRAILLE LINE:  'This is only a test. $l'",
-     "     VISIBLE:  'This is only a test. $l', cursor=1",
-     "SPEECH OUTPUT: 'T'",
      "SPEECH OUTPUT: 'is only a test.'",
      "SPEECH OUTPUT: 'unselected' voice=system"]))
 
@@ -81,9 +79,9 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Page_Down"))
 sequence.append(utils.AssertPresentationAction(
     "6. Ctrl+Page_Down to end of line",
-    ["BRAILLE LINE:  'This is only a test. $l'",
-     "     VISIBLE:  'This is only a test. $l', cursor=21",
-     "SPEECH OUTPUT: 'This is only a test.'"]))
+    ["KNOWN ISSUE: We say nothing here",
+     "BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=21"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Page_Up"))
@@ -115,10 +113,7 @@ sequence.append(utils.AssertPresentationAction(
     "10. Shift+Page_Down to deselect text",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "BRAILLE LINE:  ' $l'",
-     "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'blank' voice=system",
-     "SPEECH OUTPUT: 'page unselected from cursor position'"]))
+     "SPEECH OUTPUT: 'page unselected from cursor position' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Page_Up"))
diff --git a/test/keystrokes/gtk3-demo/role_text_multiline_selection.py 
b/test/keystrokes/gtk3-demo/role_text_multiline_selection.py
index c2c4938..fcb8609 100644
--- a/test/keystrokes/gtk3-demo/role_text_multiline_selection.py
+++ b/test/keystrokes/gtk3-demo/role_text_multiline_selection.py
@@ -10,6 +10,7 @@ sequence = MacroSequence()
 sequence.append(KeyComboAction("End"))
 sequence.append(KeyComboAction("Up"))
 sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
 sequence.append(KeyComboAction("<Shift><Control>Right"))
 sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("Return"))
@@ -19,7 +20,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>a"))
 sequence.append(utils.AssertPresentationAction(
     "1. Select all'",
-    ["BRAILLE LINE:  'gtk3-demo application Hypertext frame Some text to show that simple hypertext can 
easily be realized  $l'",
+    ["BRAILLE LINE:  'gtk3-demo application Hypertext frame Some text to show that simple hyper text can 
easily be  $l'",
      "     VISIBLE:  'Some text to show that simple hy', cursor=1",
      "SPEECH OUTPUT: 'entire document selected' voice=system"]))
 
diff --git a/test/keystrokes/gtk3-demo/role_toggle_button_flat_review.py 
b/test/keystrokes/gtk3-demo/role_toggle_button_flat_review.py
new file mode 100644
index 0000000..bde7dcb
--- /dev/null
+++ b/test/keystrokes/gtk3-demo/role_toggle_button_flat_review.py
@@ -0,0 +1,162 @@
+#!/usr/bin/python
+
+"""Test of toggle button output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Expander"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Review current line",
+    ["BRAILLE LINE:  'Something went wrong $l'",
+     "     VISIBLE:  'Something went wrong $l', cursor=1",
+     "SPEECH OUTPUT: 'Something went wrong'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Review previous line",
+    [""]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Review next line",
+    ["BRAILLE LINE:  'Here are some more details but not the full story. $l'",
+     "     VISIBLE:  'Here are some more details but n', cursor=1",
+     "SPEECH OUTPUT: 'Here are some more details but not the full story.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Review next line",
+    ["KNOWN ISSUE: We're skipping over the Details expander",
+     "BRAILLE LINE:  'Close $l'",
+     "     VISIBLE:  'Close $l', cursor=1",
+     "SPEECH OUTPUT: 'Close'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Review next line",
+    [""]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "6. Review previous line",
+    ["BRAILLE LINE:  'Here are some more details but not the full story. $l'",
+     "     VISIBLE:  'Here are some more details but n', cursor=1",
+     "SPEECH OUTPUT: 'Here are some more details but not the full story.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "7. Review next word",
+    ["BRAILLE LINE:  'Here are some more details but not the full story. $l'",
+     "     VISIBLE:  'Here are some more details but n', cursor=6",
+     "SPEECH OUTPUT: 'are'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "8. Review next word",
+    ["BRAILLE LINE:  'Here are some more details but not the full story. $l'",
+     "     VISIBLE:  'Here are some more details but n', cursor=10",
+     "SPEECH OUTPUT: 'some'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "9. Review next word",
+    ["BRAILLE LINE:  'Here are some more details but not the full story. $l'",
+     "     VISIBLE:  'Here are some more details but n', cursor=15",
+     "SPEECH OUTPUT: 'more'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "10. Review next word",
+    ["BRAILLE LINE:  'Here are some more details but not the full story. $l'",
+     "     VISIBLE:  'Here are some more details but n', cursor=20",
+     "SPEECH OUTPUT: 'details'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "11. Review next word",
+    ["BRAILLE LINE:  'Here are some more details but not the full story. $l'",
+     "     VISIBLE:  'Here are some more details but n', cursor=28",
+     "SPEECH OUTPUT: 'but'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "12. Review next word",
+    ["BRAILLE LINE:  'Here are some more details but not the full story. $l'",
+     "     VISIBLE:  'Here are some more details but n', cursor=32",
+     "SPEECH OUTPUT: 'not'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "13. Review next word",
+    ["BRAILLE LINE:  'Here are some more details but not the full story. $l'",
+     "     VISIBLE:  'ot the full story. $l', cursor=4",
+     "SPEECH OUTPUT: 'the'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "14. Review next word",
+    ["BRAILLE LINE:  'Here are some more details but not the full story. $l'",
+     "     VISIBLE:  'ot the full story. $l', cursor=8",
+     "SPEECH OUTPUT: 'full'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "15. Review next word",
+    ["BRAILLE LINE:  'Here are some more details but not the full story. $l'",
+     "     VISIBLE:  'ot the full story. $l', cursor=13",
+     "SPEECH OUTPUT: 'story.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "16. Review next word",
+    ["KNOWN ISSUE: We're skipping over the Details expander",
+     "BRAILLE LINE:  'Close $l'",
+     "     VISIBLE:  'Close $l', cursor=1",
+     "SPEECH OUTPUT: 'Close'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "17. Tab to change focus",
+    ["KNOWN ISSUE: This is not on screen. But we don't control focus.",
+     "BRAILLE LINE:  'already ! $l rdonly'",
+     "     VISIBLE:  'already ! $l rdonly', cursor=10",
+     "BRAILLE LINE:  'already ! $l rdonly'",
+     "     VISIBLE:  'already ! $l rdonly', cursor=10",
+     "SPEECH OUTPUT: 'read only text.'",
+     "SPEECH OUTPUT: 'already !'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "18. Review current line",
+    ["BRAILLE LINE:  'Something went wrong $l'",
+     "     VISIBLE:  'Something went wrong $l', cursor=1",
+     "SPEECH OUTPUT: 'Something went wrong'"]))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk3-demo/role_toolbar.py b/test/keystrokes/gtk3-demo/role_toolbar.py
index d83cf43..86cebf9 100644
--- a/test/keystrokes/gtk3-demo/role_toolbar.py
+++ b/test/keystrokes/gtk3-demo/role_toolbar.py
@@ -11,6 +11,7 @@ sequence.append(KeyComboAction("<Control>f"))
 sequence.append(TypeAction("Application class"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Tab"))
 sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
diff --git a/test/keystrokes/gtk3-demo/role_tooltip.py b/test/keystrokes/gtk3-demo/role_tooltip.py
index 8ba65b6..3a71846 100644
--- a/test/keystrokes/gtk3-demo/role_tooltip.py
+++ b/test/keystrokes/gtk3-demo/role_tooltip.py
@@ -25,11 +25,8 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>F1"))
 sequence.append(utils.AssertPresentationAction(
     "1. Show tooltip",
-    ["BRAILLE LINE:  'Specify one or more page ranges,",
-     " e.g. 1–3, 7, 11'",
-     "     VISIBLE:  'Specify one or more page ranges,', cursor=0",
-     "SPEECH OUTPUT: 'Specify one or more page ranges,",
-     " e.g. 1–3, 7, 11'"]))
+    ["KNOWN ISSUE: Now that gnome-shell is used to display tooltips, the content is not accessible",
+     ""]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>F1"))
diff --git a/test/keystrokes/gtk3-demo/spoken_indentation.py b/test/keystrokes/gtk3-demo/spoken_indentation.py
index 47b83e6..a8f4298 100644
--- a/test/keystrokes/gtk3-demo/spoken_indentation.py
+++ b/test/keystrokes/gtk3-demo/spoken_indentation.py
@@ -14,6 +14,7 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(PauseAction(3000))
 
 sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Return"))
 
 sequence.append(KeyComboAction("Tab"))
@@ -119,13 +120,13 @@ sequence.append(TypeAction("  "))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction("foo"))
 sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(utils.AssertPresentationAction(
     "1. 1 Tab",
     ["KNOWN ISSUE: We verbalize AND speak it rather than just verbalizing it",
-     "SPEECH OUTPUT: 'left control '",
      "SPEECH OUTPUT: '1 tab ' voice=system",
      "SPEECH OUTPUT: ' '"]))
 
diff --git a/test/keystrokes/gtk3-demo/spoken_indentation.settings 
b/test/keystrokes/gtk3-demo/spoken_indentation.settings
index 6bc57bf..fbf4726 100644
--- a/test/keystrokes/gtk3-demo/spoken_indentation.settings
+++ b/test/keystrokes/gtk3-demo/spoken_indentation.settings
@@ -72,7 +72,7 @@
         "messageVerbosityLevel": 1, 
         "enableMagLiveUpdating": true, 
         "enableSpeechIndentation": true, 
-        "enableKeyEcho": true, 
+        "enableKeyEcho": false, 
         "magHideCursor": false, 
         "magZoomerBorderColor": "#000000", 
         "magPointerFollowsZoomer": true, 
diff --git a/test/keystrokes/oocalc/coordinate_announcement_off.py 
b/test/keystrokes/oocalc/coordinate_announcement_off.py
index 3b112bd..6eae6a4 100644
--- a/test/keystrokes/oocalc/coordinate_announcement_off.py
+++ b/test/keystrokes/oocalc/coordinate_announcement_off.py
@@ -7,45 +7,32 @@ import utils
 
 sequence = MacroSequence()
 
-sequence.append(PauseAction(2000))
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("<Control>Home"))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyPressAction(0, None, "KP_Insert"))
-sequence.append(KeyComboAction("F11"))
-sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
-sequence.append(utils.AssertPresentationAction(
-    "1. Enable cell reading",
-    ["BRAILLE LINE:  'Speak cell'",
-     "     VISIBLE:  'Speak cell', cursor=0",
-     "SPEECH OUTPUT: 'Speak cell' voice=system"]))
-
-sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "2. Down to A2 - don't speak cell coordinates",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table  A1 Apples B1 Pears C1  D1  E1  F1  G1  H1  I1  J1  K1  L1'",
-     "     VISIBLE:  ' A1 Apples B1 Pears C1  D1  E1  ', cursor=1",
-     "BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table Good in Pies A2'",
+    "1. Down to A2 - don't speak cell coordinates",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table Good in Pies A2'",
      "     VISIBLE:  'Good in Pies A2', cursor=1",
-     "SPEECH OUTPUT: 'Good in Pies'"]))
+     "SPEECH OUTPUT: 'Good in Pies.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "3. Right to B2 - don't speak cell coordinates",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table Yes B2'",
+    "2. Right to B2 - don't speak cell coordinates",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table Yes B2'",
      "     VISIBLE:  'Yes B2', cursor=1",
-     "SPEECH OUTPUT: 'Yes'"]))
+     "SPEECH OUTPUT: 'Yes.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(utils.AssertPresentationAction(
-    "4. Control+Home to A1 - don't speak cell coordinates",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table  A1'",
+    "3. Control+Home to A1 - don't speak cell coordinates",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table  A1'",
      "     VISIBLE:  ' A1', cursor=1",
-     "SPEECH OUTPUT: 'blank'"]))
+     "SPEECH OUTPUT: 'blank.'"]))
 
-sequence.append(KeyComboAction("<Control>w"))
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oocalc/coordinate_announcement_on.py 
b/test/keystrokes/oocalc/coordinate_announcement_on.py
index 760097e..f84f4dd 100644
--- a/test/keystrokes/oocalc/coordinate_announcement_on.py
+++ b/test/keystrokes/oocalc/coordinate_announcement_on.py
@@ -7,45 +7,32 @@ import utils
 
 sequence = MacroSequence()
 
-sequence.append(PauseAction(2000))
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("<Control>Home"))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyPressAction(0, None, "KP_Insert"))
-sequence.append(KeyComboAction("F11"))
-sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
-sequence.append(utils.AssertPresentationAction(
-    "1. Enable cell reading",
-    ["BRAILLE LINE:  'Speak cell'",
-     "     VISIBLE:  'Speak cell', cursor=0",
-     "SPEECH OUTPUT: 'Speak cell' voice=system"]))
-
-sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "2. Down to A2 - don't speak cell coordinates",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table  A1 Apples B1 Pears C1  D1  E1  F1  G1  H1  I1  J1  K1  L1'",
-     "     VISIBLE:  ' A1 Apples B1 Pears C1  D1  E1  ', cursor=1",
-     "BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table Good in Pies A2'",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table Good in Pies A2'",
      "     VISIBLE:  'Good in Pies A2', cursor=1",
-     "SPEECH OUTPUT: 'Good in Pies A2'"]))
+     "SPEECH OUTPUT: 'Good in Pies A2.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
     "3. Right to B2 - don't speak cell coordinates",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table Yes B2'",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table Yes B2'",
      "     VISIBLE:  'Yes B2', cursor=1",
-     "SPEECH OUTPUT: 'Yes B2'"]))
+     "SPEECH OUTPUT: 'Yes B2.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(utils.AssertPresentationAction(
     "4. Control+Home to A1 - don't speak cell coordinates",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table  A1'",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table  A1'",
      "     VISIBLE:  ' A1', cursor=1",
-     "SPEECH OUTPUT: 'blank A1'"]))
+     "SPEECH OUTPUT: 'blank A1.'"]))
 
-sequence.append(KeyComboAction("<Control>w"))
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oocalc/document_enter_text.py b/test/keystrokes/oocalc/document_enter_text.py
index 6da4ea8..f83c85c 100644
--- a/test/keystrokes/oocalc/document_enter_text.py
+++ b/test/keystrokes/oocalc/document_enter_text.py
@@ -7,35 +7,29 @@ import utils
 
 sequence = MacroSequence()
 
-sequence.append(PauseAction(2000))
-
-sequence.append(KeyPressAction(0, None, "KP_Insert"))
-sequence.append(KeyComboAction("F11"))
-sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction("hi"))
 sequence.append(utils.AssertPresentationAction(
     "1. Type 'hi' - keyecho is off",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table  A1  B1  C1  D1  E1  F1  G1  H1  I1  J1  K1  L1  M1'",
-     "     VISIBLE:  ' A1  B1  C1  D1  E1  F1  G1  H1 ', cursor=1",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Document view3 Cell A1 h $l'",
-     "     VISIBLE:  'h $l', cursor=2",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Document view3 Cell A1 hi $l'",
-     "     VISIBLE:  'hi $l', cursor=3",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Document view3 Cell A1 hi $l'",
-     "     VISIBLE:  'hi $l', cursor=3"]))
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Untitled1 - LibreOffice Spreadsheets Cell A1 panel Paragraph 0 hi $l'",
+     "     VISIBLE:  'Paragraph 0 hi $l', cursor=15",
+     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Untitled1 - LibreOffice Spreadsheets Cell A1 panel Paragraph 0 hi $l'",
+     "     VISIBLE:  'Paragraph 0 hi $l', cursor=15",
+     "SPEECH OUTPUT: 'Cell A1 panel'",
+     "SPEECH OUTPUT: 'Paragraph 0 hi'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "2. Press Return",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table hi A1'",
-     "     VISIBLE:  'hi A1', cursor=1",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table  A2'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Untitled1 - LibreOffice Spreadsheets Sheet Sheet1 table  A2'",
      "     VISIBLE:  ' A2', cursor=1",
-     "SPEECH OUTPUT: 'hi A1'",
-     "SPEECH OUTPUT: 'blank A2'"]))
+     "SPEECH OUTPUT: 'Sheet Sheet1.'",
+     "SPEECH OUTPUT: 'table with 1048576 rows 1024 columns'",
+     "SPEECH OUTPUT: 'blank A2.'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oocalc/document_nav_dynamic_headers.py 
b/test/keystrokes/oocalc/document_nav_dynamic_headers.py
index 925580d..3ac1ca6 100644
--- a/test/keystrokes/oocalc/document_nav_dynamic_headers.py
+++ b/test/keystrokes/oocalc/document_nav_dynamic_headers.py
@@ -11,56 +11,47 @@ sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("<Control>Home"))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyPressAction(0, None, "KP_Insert"))
-sequence.append(KeyComboAction("F11"))
-sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
-sequence.append(utils.AssertPresentationAction(
-    "1. Enable cell reading",
-    ["BRAILLE LINE:  'Speak cell'",
-     "     VISIBLE:  'Speak cell', cursor=0",
-     "SPEECH OUTPUT: 'Speak cell' voice=system"]))
-
-sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "2. Down Arrow to cell A2",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table  A1 Apples B1 Pears C1  D1  E1  F1  G1  H1  I1  J1  K1  L1'",
-     "     VISIBLE:  ' A1 Apples B1 Pears C1  D1  E1  ', cursor=1",
-     "BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table Good in Pies A2'",
+    "1. Down Arrow to cell A2",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table Good in Pies A2'",
      "     VISIBLE:  'Good in Pies A2', cursor=1",
-     "SPEECH OUTPUT: 'Good in Pies A2'"]))
+     "SPEECH OUTPUT: 'Good in Pies A2.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "3. Right Arrow to cell B2",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table Yes B2'",
+    "2. Right Arrow to cell B2",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table Yes B2'",
      "     VISIBLE:  'Yes B2', cursor=1",
-     "SPEECH OUTPUT: 'Yes B2'"]))
+     "SPEECH OUTPUT: 'Yes B2.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "4. Down Arrow to cell B3",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table Yes B3'",
+    "3. Down Arrow to cell B3",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table Yes B3'",
      "     VISIBLE:  'Yes B3', cursor=1",
-     "SPEECH OUTPUT: 'Yes B3'"]))
+     "SPEECH OUTPUT: 'Yes B3.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "5. Right Arrow to cell C3",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table Yes C3'",
+    "4. Right Arrow to cell C3",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table Yes C3'",
      "     VISIBLE:  'Yes C3', cursor=1",
-     "SPEECH OUTPUT: 'Yes C3'"]))
+     "SPEECH OUTPUT: 'Yes C3.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "6. Basic where am I with no dynamic headers set",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table Yes C3'",
+    "5. Basic where am I with no dynamic headers set",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table Yes C3'",
      "     VISIBLE:  'Yes C3', cursor=1",
-     "SPEECH OUTPUT: 'table cell column 3 row 3 Yes'"]))
+     "SPEECH OUTPUT: 'table cell.'",
+     "SPEECH OUTPUT: 'column 3.'",
+     "SPEECH OUTPUT: 'row 3.'",
+     "SPEECH OUTPUT: 'Yes.'"]))
 
 sequence.append(KeyComboAction("<Control>Home"))
 
@@ -69,7 +60,7 @@ sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("r"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "7. Set dynamic column headers",
+    "6. Set dynamic column headers",
     ["BRAILLE LINE:  'Dynamic column header set for row 1'",
      "     VISIBLE:  'Dynamic column header set for ro', cursor=0",
      "SPEECH OUTPUT: 'Dynamic column header set for row 1'"]))
@@ -79,9 +70,8 @@ sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("c"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "8. Set dynamic row headers",
-    ["KNOWN ISSUE: Why do we update braille here, but not for column headers",
-     "BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table  A1'",
+    "7. Set dynamic row headers",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table  A1'",
      "     VISIBLE:  ' A1', cursor=1",
      "BRAILLE LINE:  'Dynamic row header set for column A'",
      "     VISIBLE:  'Dynamic row header set for colum', cursor=0",
@@ -90,48 +80,49 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "9. Down Arrow to cell A2",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table  A1'",
+    "8. Down Arrow to cell A2",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table  A1'",
      "     VISIBLE:  ' A1', cursor=1",
-     "BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table Good in Pies A2'",
+     "BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table Good in Pies A2'",
      "     VISIBLE:  'Good in Pies A2', cursor=1",
-     "SPEECH OUTPUT: 'Good in Pies A2'"]))
+     "SPEECH OUTPUT: 'Good in Pies A2.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "10. Right Arrow to cell B2",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table Good in Pies Apples Yes B2'",
+    "9. Right Arrow to cell B2",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table Good in Pies Apples Yes B2'",
      "     VISIBLE:  'Yes B2', cursor=1",
-     "SPEECH OUTPUT: 'Apples Yes B2'"]))
+     "SPEECH OUTPUT: 'Apples Yes B2.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "11. Down Arrow to cell B3",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table Juiceable Apples Yes B3'",
+    "10. Down Arrow to cell B3",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table Juiceable Apples Yes B3'",
      "     VISIBLE:  'Yes B3', cursor=1",
-     "SPEECH OUTPUT: 'Juiceable Yes B3'"]))
+     "SPEECH OUTPUT: 'Juiceable Yes B3.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "12. Right Arrow to cell C3",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table Juiceable Pears Yes C3'",
+    "11. Right Arrow to cell C3",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table Juiceable Pears Yes C3'",
      "     VISIBLE:  'Yes C3', cursor=1",
-     "SPEECH OUTPUT: 'Pears Yes C3'"]))
+     "SPEECH OUTPUT: 'Pears Yes C3.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
-    "13. Basic where am I with dynamic headers set",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table Juiceable Pears Yes C3'",
+    "12. Basic where am I with dynamic headers set",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame fruit.ods - LibreOffice Calc 
root pane Sheet Sheet1 table Juiceable Pears Yes C3'",
      "     VISIBLE:  'Yes C3', cursor=1",
-     "SPEECH OUTPUT: 'table cell column 3'",
-     "SPEECH OUTPUT: 'Pears'",
-     "SPEECH OUTPUT: 'row 3'",
-     "SPEECH OUTPUT: 'Juiceable Yes'"]))
+     "SPEECH OUTPUT: 'table cell.'",
+     "SPEECH OUTPUT: 'column 3.'",
+     "SPEECH OUTPUT: 'Pears.'",
+     "SPEECH OUTPUT: 'row 3.'",
+     "SPEECH OUTPUT: 'Juiceable.'",
+     "SPEECH OUTPUT: 'Yes.'"]))
 
-sequence.append(KeyComboAction("<Control>w"))
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oocalc/document_text_attributes.py 
b/test/keystrokes/oocalc/document_text_attributes.py
index b56a455..ee5865a 100644
--- a/test/keystrokes/oocalc/document_text_attributes.py
+++ b/test/keystrokes/oocalc/document_text_attributes.py
@@ -17,10 +17,10 @@ sequence.append(KeyComboAction("f"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "1. Attributes of cell A2",
-    ["SPEECH OUTPUT: 'size 16' voice=system",
-     "SPEECH OUTPUT: 'family name Arial' voice=system",
+    ["SPEECH OUTPUT: 'size: 16' voice=system",
+     "SPEECH OUTPUT: 'family name: Arial' voice=system",
      "SPEECH OUTPUT: 'bold' voice=system",
-     "SPEECH OUTPUT: 'style italic' voice=system"]))
+     "SPEECH OUTPUT: 'style: italic' voice=system"]))
 
 sequence.append(KeyComboAction("Right"))
 
@@ -30,9 +30,8 @@ sequence.append(KeyComboAction("f"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "2. Attributes of cell B2",
-    ["SPEECH OUTPUT: 'size 10' voice=system",
-     "SPEECH OUTPUT: 'family name Arial' voice=system"]))
+    ["SPEECH OUTPUT: 'size: 10' voice=system",
+     "SPEECH OUTPUT: 'family name: Arial' voice=system"]))
 
-sequence.append(KeyComboAction("<Control>w"))
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oocalc/manage_names_combobox.py b/test/keystrokes/oocalc/manage_names_combobox.py
index faf7a5d..4720b8d 100644
--- a/test/keystrokes/oocalc/manage_names_combobox.py
+++ b/test/keystrokes/oocalc/manage_names_combobox.py
@@ -6,50 +6,47 @@ from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
+sequence.append(PauseAction(5000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift><Control>t"))
 sequence.append(utils.AssertPresentationAction(
     "1. Shift+Ctrl+T",
-    ["KNOWN ISSUE: This is too chatty",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Formula Tool Bar tool bar A1 $l'",
-     "     VISIBLE:  'A1 $l', cursor=1",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Formula Tool Bar tool bar Name Box A1 $l'",
+     "     VISIBLE:  'Name Box A1 $l', cursor=12",
      "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Formula Tool Bar tool bar A1 $l combo box'",
-     "     VISIBLE:  'A1 $l combo box', cursor=1",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Formula Tool Bar tool bar  combo boxA1 $l Manage Names... list item'",
-     "     VISIBLE:  'Manage Names... list item', cursor=1",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Formula Tool Bar tool bar A1 $l'",
-     "     VISIBLE:  'A1 $l', cursor=1",
-     "SPEECH OUTPUT: 'A1 combo box'",
-     "SPEECH OUTPUT: 'text A1'",
-     "SPEECH OUTPUT: 'A1 combo box'",
-     "SPEECH OUTPUT: 'Manage Names...'",
-     "SPEECH OUTPUT: 'text A1'"]))
+     "     VISIBLE:  'tool bar A1 $l combo box', cursor=12",
+     "SPEECH OUTPUT: 'A1'",
+     "SPEECH OUTPUT: 'selected' voice=system",
+     "SPEECH OUTPUT: 'Formula Tool Bar tool bar'",
+     "SPEECH OUTPUT: 'Name Box combo box.'"]))
 
 sequence.append(KeyComboAction("<Control>a"))
 sequence.append(KeyComboAction("BackSpace"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction("C3"))
 sequence.append(utils.AssertPresentationAction(
     "2. Type 'C3' - keyecho is disabled",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Formula Tool Bar tool bar C $l'",
-     "     VISIBLE:  'C $l', cursor=2",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Formula Tool Bar tool bar C $l'",
-     "     VISIBLE:  'C $l', cursor=2",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Formula Tool Bar tool bar C3 $l'",
-     "     VISIBLE:  'C3 $l', cursor=3",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Formula Tool Bar tool bar C3 $l'",
-     "     VISIBLE:  'C3 $l', cursor=3"]))
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Formula Tool Bar tool bar Name Box C $l'",
+     "     VISIBLE:  'Name Box C $l', cursor=11",
+     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Formula Tool Bar tool bar Name Box C $l'",
+     "     VISIBLE:  'Name Box C $l', cursor=11",
+     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Formula Tool Bar tool bar Name Box C3 $l'",
+     "     VISIBLE:  'Name Box C3 $l', cursor=12",
+     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Formula Tool Bar tool bar Name Box C3 $l'",
+     "     VISIBLE:  'Name Box C3 $l', cursor=12"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
 sequence.append(utils.AssertPresentationAction(
     "3. Press Return to jump to C3",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table  A3  B3  C3  D3  E3  F3  G3  H3  I3  J3  K3  L3  M3'",
-     "     VISIBLE:  ' C3  D3  E3  F3  G3  H3  I3  J3 ', cursor=1",
-     "SPEECH OUTPUT: 'Sheet Sheet1 table with 1048576 rows 1024 columns'",
-     "SPEECH OUTPUT: 'blank C3'"]))
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Untitled1 - LibreOffice Spreadsheets Sheet Sheet1 table  C3'",
+     "     VISIBLE:  ' C3', cursor=1",
+     "SPEECH OUTPUT: 'Sheet Sheet1.'",
+     "SPEECH OUTPUT: 'table with 1048576 rows 1024 columns'",
+     "SPEECH OUTPUT: 'blank C3.'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oocalc/messages_dynamic_headers.py 
b/test/keystrokes/oocalc/messages_dynamic_headers.py
index 6162699..5da87cc 100644
--- a/test/keystrokes/oocalc/messages_dynamic_headers.py
+++ b/test/keystrokes/oocalc/messages_dynamic_headers.py
@@ -7,6 +7,7 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("<Control>Home"))
 
 sequence.append(utils.StartRecordingAction())
@@ -26,12 +27,12 @@ sequence.append(KeyComboAction("r"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "2. Clear column headers",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table  A1  B1  C1  D1  E1  F1  G1  H1  I1  J1  K1  L1  M1'",
-     "     VISIBLE:  ' A1  B1  C1  D1  E1  F1  G1  H1 ', cursor=1",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Untitled1 - LibreOffice Spreadsheets Sheet Sheet1 table  A1'",
+     "     VISIBLE:  ' A1', cursor=1",
      "BRAILLE LINE:  'Dynamic column header set for row 1'",
      "     VISIBLE:  'Dynamic column header set for ro', cursor=0",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table  A1  B1  C1  D1  E1  F1  G1  H1  I1  J1  K1  L1  M1'",
-     "     VISIBLE:  ' A1  B1  C1  D1  E1  F1  G1  H1 ', cursor=1",
+     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Untitled1 - LibreOffice Spreadsheets Sheet Sheet1 table  A1'",
+     "     VISIBLE:  ' A1', cursor=1",
      "BRAILLE LINE:  'Dynamic column header cleared.'",
      "     VISIBLE:  'Dynamic column header cleared.', cursor=0",
      "SPEECH OUTPUT: 'Dynamic column header set for row 1' voice=system",
@@ -43,8 +44,8 @@ sequence.append(KeyComboAction("c"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "3. Set row headers",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table  A1  B1  C1  D1  E1  F1  G1  H1  I1  J1  K1  L1  M1'",
-     "     VISIBLE:  ' A1  B1  C1  D1  E1  F1  G1  H1 ', cursor=1",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Untitled1 - LibreOffice Spreadsheets Sheet Sheet1 table  A1'",
+     "     VISIBLE:  ' A1', cursor=1",
      "BRAILLE LINE:  'Dynamic row header set for column A'",
      "     VISIBLE:  'Dynamic row header set for colum', cursor=0",
      "SPEECH OUTPUT: 'Dynamic row header set for column A' voice=system"]))
@@ -56,12 +57,12 @@ sequence.append(KeyComboAction("c"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "4. Clear row headers",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table  A1  B1  C1  D1  E1  F1  G1  H1  I1  J1  K1  L1  M1'",
-     "     VISIBLE:  ' A1  B1  C1  D1  E1  F1  G1  H1 ', cursor=1",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Untitled1 - LibreOffice Spreadsheets Sheet Sheet1 table  A1'",
+     "     VISIBLE:  ' A1', cursor=1",
      "BRAILLE LINE:  'Dynamic row header set for column A'",
      "     VISIBLE:  'Dynamic row header set for colum', cursor=0",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Document view3 Sheet Sheet1 table  A1  B1  C1  D1  E1  F1  G1  H1  I1  J1  K1  L1  M1'",
-     "     VISIBLE:  ' A1  B1  C1  D1  E1  F1  G1  H1 ', cursor=1",
+     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Calc frame Untitled 1 - LibreOffice Calc 
root pane Untitled1 - LibreOffice Spreadsheets Sheet Sheet1 table  A1'",
+     "     VISIBLE:  ' A1', cursor=1",
      "BRAILLE LINE:  'Dynamic row header cleared.'",
      "     VISIBLE:  'Dynamic row header cleared.', cursor=0",
      "SPEECH OUTPUT: 'Dynamic row header set for column A' voice=system",
diff --git a/test/keystrokes/oocalc/ui_role_check_menu_item.py 
b/test/keystrokes/oocalc/ui_role_check_menu_item.py
index 41e5444..62ae134 100644
--- a/test/keystrokes/oocalc/ui_role_check_menu_item.py
+++ b/test/keystrokes/oocalc/ui_role_check_menu_item.py
@@ -8,32 +8,31 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(PauseAction(3000))
-sequence.append(KeyComboAction("<Alt>w"))
+sequence.append(KeyComboAction("<Alt>v"))
 sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("Down"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "1. Arrow to the Freeze menu item (unchecked)",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame (1 dialog) fruit.ods - 
LibreOffice Calc root pane Freeze'",
-     "     VISIBLE:  'Freeze', cursor=1",
-     "SPEECH OUTPUT: 'Freeze'"]))
+    "1. Arrow to the check menu item (checked)",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame <x> Formula Bar check menu 
item'",
+     "     VISIBLE:  '<x> Formula Bar check menu item', cursor=1",
+     "SPEECH OUTPUT: 'Formula Bar check menu item checked.'"]))
 
 sequence.append(KeyComboAction("Return"))
-sequence.append(KeyComboAction("<Alt>w"))
+sequence.append(KeyComboAction("<Alt>v"))
 sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("Down"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "2. Arrow to the Freeze menu item (checked)",
-    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame (1 dialog) fruit.ods - 
LibreOffice Calc root pane <x> Freeze'",
-     "     VISIBLE:  '<x> Freeze', cursor=1",
-     "SPEECH OUTPUT: 'Freeze checked'"]))
+    "2. Arrow to the check menu item (unchecked)",
+    ["BRAILLE LINE:  'soffice application fruit.ods - LibreOffice Calc frame < > Formula Bar check menu 
item'",
+     "     VISIBLE:  '< > Formula Bar check menu item', cursor=1",
+     "SPEECH OUTPUT: 'Formula Bar check menu item not checked.'"]))
 
 sequence.append(KeyComboAction("Return"))
-sequence.append(KeyComboAction("<Control>w"))
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oowriter/document_nav_cell.py b/test/keystrokes/oowriter/document_nav_cell.py
index 251f016..b558f13 100644
--- a/test/keystrokes/oowriter/document_nav_cell.py
+++ b/test/keystrokes/oowriter/document_nav_cell.py
@@ -10,6 +10,7 @@ sequence = MacroSequence()
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("Down"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -17,7 +18,7 @@ sequence.append(utils.AssertPresentationAction(
     "1. Tab to Tue",
     ["BRAILLE LINE:  'Tue $l'",
      "     VISIBLE:  'Tue $l', cursor=1",
-     "SPEECH OUTPUT: 'Tue'"]))
+     "SPEECH OUTPUT: 'Tue C1.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -25,7 +26,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Tab to Wed",
     ["BRAILLE LINE:  'Wed $l'",
      "     VISIBLE:  'Wed $l', cursor=1",
-     "SPEECH OUTPUT: 'Wed'"]))
+     "SPEECH OUTPUT: 'Wed D1.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -33,7 +34,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. Tab to Thu",
     ["BRAILLE LINE:  'Thu $l'",
      "     VISIBLE:  'Thu $l', cursor=1",
-     "SPEECH OUTPUT: 'Thu'"]))
+     "SPEECH OUTPUT: 'Thu E1.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -41,7 +42,7 @@ sequence.append(utils.AssertPresentationAction(
     "4. Tab to Fri",
     ["BRAILLE LINE:  'Fri $l'",
      "     VISIBLE:  'Fri $l', cursor=1",
-     "SPEECH OUTPUT: 'Fri'"]))
+     "SPEECH OUTPUT: 'Fri F1.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -49,7 +50,7 @@ sequence.append(utils.AssertPresentationAction(
     "5. Tab to Sat",
     ["BRAILLE LINE:  'Sat $l'",
      "     VISIBLE:  'Sat $l', cursor=1",
-     "SPEECH OUTPUT: 'Sat'"]))
+     "SPEECH OUTPUT: 'Sat G1.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -57,8 +58,7 @@ sequence.append(utils.AssertPresentationAction(
     "6. Tab to blank cell in next row",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'blank blank blank blank blank 1 2'"]))
+     "SPEECH OUTPUT: 'blank A2.'"]))
 
-sequence.append(KeyComboAction("<Control>w"))
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oowriter/document_nav_line.py b/test/keystrokes/oowriter/document_nav_line.py
index 722b447..f6a3bd9 100644
--- a/test/keystrokes/oowriter/document_nav_line.py
+++ b/test/keystrokes/oowriter/document_nav_line.py
@@ -7,27 +7,26 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
 sequence.append(TypeAction("Line 1"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(TypeAction("Line 2"))
 sequence.append(KeyComboAction("Return"))
-
-sequence.append(PauseAction(20000))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(utils.AssertPresentationAction(
     "1. Return to top of document",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document document text Line 1 $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document Line 1 $l'",
      "     VISIBLE:  'Line 1 $l', cursor=1",
-     "SPEECH OUTPUT: 'Untitled 1 - LibreOffice Writer frame'",
      "SPEECH OUTPUT: 'Line 1'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "2. Arrow down to 'Line 2'",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document document text Line 2 $l'",
+    ["BRAILLE LINE:  'Line 2 $l'",
      "     VISIBLE:  'Line 2 $l', cursor=1",
      "SPEECH OUTPUT: 'Line 2'"]))
 
@@ -35,7 +34,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "3. Arrow down over the empty line",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document document text  $l'",
+    ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'blank'"]))
 
@@ -43,7 +42,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "4. Arrow up to 'Line 2'",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document document text Line 2 $l'",
+    ["BRAILLE LINE:  'Line 2 $l'",
      "     VISIBLE:  'Line 2 $l', cursor=1",
      "SPEECH OUTPUT: 'Line 2'"]))
 
@@ -51,7 +50,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "5. Arrow up to 'Line 1'",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document document text Line 1 $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document Line 1 $l'",
      "     VISIBLE:  'Line 1 $l', cursor=1",
      "SPEECH OUTPUT: 'Line 1'"]))
 
diff --git a/test/keystrokes/oowriter/document_nav_line_bullets.py 
b/test/keystrokes/oowriter/document_nav_line_bullets.py
index 0c4f0c0..118eb2a 100644
--- a/test/keystrokes/oowriter/document_nav_line_bullets.py
+++ b/test/keystrokes/oowriter/document_nav_line_bullets.py
@@ -20,33 +20,33 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "1. Down to next bulleted line",
-    ["BRAILLE LINE:  '•Line 2 $l'",
-     "     VISIBLE:  '•Line 2 $l', cursor=2",
-     "SPEECH OUTPUT: '•Line 2'"]))
+    ["BRAILLE LINE:  '• Line 2 $l'",
+     "     VISIBLE:  '• Line 2 $l', cursor=3",
+     "SPEECH OUTPUT: '• Line 2'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "2. Down to next bulleted line",
-    ["BRAILLE LINE:  '•Line 3 $l'",
-     "     VISIBLE:  '•Line 3 $l', cursor=2",
-     "SPEECH OUTPUT: '•Line 3'"]))
+    ["BRAILLE LINE:  '• Line 3 $l'",
+     "     VISIBLE:  '• Line 3 $l', cursor=3",
+     "SPEECH OUTPUT: '• Line 3'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "3. Up to previous bulleted line",
-    ["BRAILLE LINE:  '•Line 2 $l'",
-     "     VISIBLE:  '•Line 2 $l', cursor=2",
-     "SPEECH OUTPUT: '•Line 2'"]))
+    ["BRAILLE LINE:  '• Line 2 $l'",
+     "     VISIBLE:  '• Line 2 $l', cursor=3",
+     "SPEECH OUTPUT: '• Line 2'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "4. Up to previous bulleted line",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view •Line 1 $l'",
-     "     VISIBLE:  '•Line 1 $l', cursor=2",
-     "SPEECH OUTPUT: '•Line 1'"]))
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document • Line 1 $l'",
+     "     VISIBLE:  '• Line 1 $l', cursor=3",
+     "SPEECH OUTPUT: '• Line 1'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oowriter/document_nav_paragraph.py 
b/test/keystrokes/oowriter/document_nav_paragraph.py
index 05ce81c..b49967c 100644
--- a/test/keystrokes/oowriter/document_nav_paragraph.py
+++ b/test/keystrokes/oowriter/document_nav_paragraph.py
@@ -8,6 +8,7 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Down"))
@@ -81,6 +82,5 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'NOBODY expects the Spanish Inqui', cursor=1",
      "SPEECH OUTPUT: 'NOBODY expects the Spanish Inquisition! Amongst our weaponry are such diverse elements 
as: fear, surprise, ruthless efficiency, an almost fanatical devotion to the Pope, and nice red uniforms - Oh 
damn!'"]))
 
-sequence.append(KeyComboAction("<Control>w"))
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oowriter/document_nav_word.py b/test/keystrokes/oowriter/document_nav_word.py
index 66e25f1..22a4c46 100644
--- a/test/keystrokes/oowriter/document_nav_word.py
+++ b/test/keystrokes/oowriter/document_nav_word.py
@@ -7,17 +7,19 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
 sequence.append(TypeAction("This is a test."))
 sequence.append(KeyComboAction("Return"))
 sequence.append(TypeAction("So is this."))
 sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
 sequence.append(utils.AssertPresentationAction(
     "1. Next Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=6",
      "SPEECH OUTPUT: 'is '"]))
 
@@ -25,7 +27,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
 sequence.append(utils.AssertPresentationAction(
     "2. Next Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=9",
      "SPEECH OUTPUT: 'a '"]))
 
@@ -33,7 +35,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
 sequence.append(utils.AssertPresentationAction(
     "3. Next Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=11",
      "SPEECH OUTPUT: 'test.'"]))
 
@@ -41,50 +43,47 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
 sequence.append(utils.AssertPresentationAction(
     "4. Next Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=15",
-     "SPEECH OUTPUT: 'dot'"]))
+     "SPEECH OUTPUT: '.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
 sequence.append(utils.AssertPresentationAction(
     "5. Next Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
-     "     VISIBLE:  ' This is a test. $l', cursor=1",
-     "BRAILLE LINE:  'So is this. $l'",
-     "     VISIBLE:  'So is this. $l', cursor=1",
-     "SPEECH OUTPUT: 'blank' voice=system",
-     "SPEECH OUTPUT: 'So '"]))
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=16",
+     "SPEECH OUTPUT: 'blank' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
 sequence.append(utils.AssertPresentationAction(
     "6. Next Word",
     ["BRAILLE LINE:  'So is this. $l'",
-     "     VISIBLE:  'So is this. $l', cursor=4",
-     "SPEECH OUTPUT: 'is '"]))
+     "     VISIBLE:  'So is this. $l', cursor=1",
+     "SPEECH OUTPUT: 'So '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
 sequence.append(utils.AssertPresentationAction(
     "7. Previous Word",
-    ["BRAILLE LINE:  'So is this. $l'",
-     "     VISIBLE:  'So is this. $l', cursor=1",
-     "SPEECH OUTPUT: 'So '"]))
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=16",
+     "SPEECH OUTPUT: 'blank' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
 sequence.append(utils.AssertPresentationAction(
     "8. Previous Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=15",
-     "SPEECH OUTPUT: 'dot'"]))
+     "SPEECH OUTPUT: '.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
 sequence.append(utils.AssertPresentationAction(
     "9. Previous Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=11",
      "SPEECH OUTPUT: 'test.'"]))
 
@@ -92,7 +91,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
 sequence.append(utils.AssertPresentationAction(
     "10. Previous Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=9",
      "SPEECH OUTPUT: 'a '"]))
 
@@ -100,7 +99,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
 sequence.append(utils.AssertPresentationAction(
     "11. Previous Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=6",
      "SPEECH OUTPUT: 'is '"]))
 
@@ -108,7 +107,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
 sequence.append(utils.AssertPresentationAction(
     "12. Previous Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=1",
      "SPEECH OUTPUT: 'This '"]))
 
diff --git a/test/keystrokes/oowriter/document_new.py b/test/keystrokes/oowriter/document_new.py
index 775af0e..7897540 100644
--- a/test/keystrokes/oowriter/document_new.py
+++ b/test/keystrokes/oowriter/document_new.py
@@ -6,14 +6,16 @@ from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>N"))
+sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "New text document",
     ["BRAILLE LINE:  'soffice application Untitled 2 - LibreOffice Writer frame'",
      "     VISIBLE:  'Untitled 2 - LibreOffice Writer ', cursor=1",
-     "BRAILLE LINE:  'soffice application Untitled 2 - LibreOffice Writer frame Untitled 2 - LibreOffice 
Writer root pane Document view  $l'",
+     "BRAILLE LINE:  'Untitled 2 - LibreOffice Writer frame Untitled 2 - LibreOffice Writer root pane 
Untitled2 - LibreOffice Document  $l'",
      "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'Untitled 2 - LibreOffice Writer frame'",
      "SPEECH OUTPUT: 'blank'"]))
diff --git a/test/keystrokes/oowriter/flat_review_line.py b/test/keystrokes/oowriter/flat_review_line.py
index 9dd3e69..cbdd204 100644
--- a/test/keystrokes/oowriter/flat_review_line.py
+++ b/test/keystrokes/oowriter/flat_review_line.py
@@ -7,6 +7,17 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(1000))
+sequence.append(KeyComboAction("<Alt>v"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Return"))
+
 sequence.append(TypeAction("Line 1"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(TypeAction("Line 2"))
@@ -17,9 +28,9 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_8"))
 sequence.append(utils.AssertPresentationAction(
     "1. Review current line.",
-    ["BRAILLE LINE:  'ruler Line 1 $l'",
-     "     VISIBLE:  'ruler Line 1 $l', cursor=7",
-     "SPEECH OUTPUT: 'ruler Line 1'"]))
+    ["BRAILLE LINE:  'Line 1 $l'",
+     "     VISIBLE:  'Line 1 $l', cursor=1",
+     "SPEECH OUTPUT: 'Line 1'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_9"))
@@ -65,7 +76,7 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'e'",
      "SPEECH OUTPUT: 'space'",
      "SPEECH OUTPUT: '2'",
-     "SPEECH OUTPUT: 'lima' voice=uppercase",
+     "SPEECH OUTPUT: 'lima'",
      "SPEECH OUTPUT: 'india'",
      "SPEECH OUTPUT: 'november'",
      "SPEECH OUTPUT: 'echo'",
@@ -76,9 +87,9 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_7"))
 sequence.append(utils.AssertPresentationAction(
     "5. Review previous line.",
-    ["BRAILLE LINE:  'ruler Line 1 $l'",
-     "     VISIBLE:  'ruler Line 1 $l', cursor=1",
-     "SPEECH OUTPUT: 'ruler Line 1'"]))
+    ["BRAILLE LINE:  'Line 1 $l'",
+     "     VISIBLE:  'Line 1 $l', cursor=1",
+     "SPEECH OUTPUT: 'Line 1'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oowriter/flat_review_line_columns.py 
b/test/keystrokes/oowriter/flat_review_line_columns.py
index fe53eb4..31088f8 100644
--- a/test/keystrokes/oowriter/flat_review_line_columns.py
+++ b/test/keystrokes/oowriter/flat_review_line_columns.py
@@ -7,22 +7,71 @@ import utils
 
 sequence = MacroSequence()
 
-sequence.append(PauseAction(1000))
+sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>v"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(PauseAction(3000))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "1. Up to menu item",
+    ["BRAILLE LINE:  'soffice application column-example.odt - LibreOffice Writer frame <x> Sidebar check 
menu item'",
+     "     VISIBLE:  '<x> Sidebar check menu item', cursor=1",
+     "SPEECH OUTPUT: 'Sidebar check menu item checked.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Return on menu item",
+    ["KNOWN ISSUE: We're not getting anything other than the window:activate event",
+     "BRAILLE LINE:  'soffice application column-example.odt - LibreOffice Writer frame'",
+     "     VISIBLE:  'column-example.odt - LibreOffice', cursor=1",
+     "SPEECH OUTPUT: 'column-example.odt - LibreOffice Writer frame'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Down in document",
+    ["BRAILLE LINE:  '10, 2006  editor eff org $l'",
+     "     VISIBLE:  '10, 2006  editor eff org $l', cursor=1",
+     "SPEECH OUTPUT: '10, 2006  editor eff org link'"]))
+
+sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "4. Top of file.",
+    ["BRAILLE LINE:  'soffice application column-example.odt - LibreOffice Writer frame column-example.odt - 
LibreOffice Writer root pane column-example - LibreOffice Document EFFector Vol. 19, No. 38  October  $l'",
+     "     VISIBLE:  'EFFector Vol. 19, No. 38  Octobe', cursor=1",
+     "SPEECH OUTPUT: 'EFFector Vol. 19, No. 38  October '"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Review current line.",
+    ["BRAILLE LINE:  'EFFector Vol. 19, No. 38  October  Intercept Personal  $l'",
+     "     VISIBLE:  'EFFector Vol. 19, No. 38  Octobe', cursor=1",
+     "SPEECH OUTPUT: 'EFFector Vol. 19, No. 38  October  Intercept Personal ",
+     "'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_8"))
 sequence.append(utils.AssertPresentationAction(
-    "1. Review current line.",
-    ["BRAILLE LINE:  'ruler EFFector Vol. 19, No. 38  October  Intercept Personal  $l'",
+    "6. Review current line.",
+    ["BRAILLE LINE:  'EFFector Vol. 19, No. 38  October  Intercept Personal  $l'",
      "     VISIBLE:  'EFFector Vol. 19, No. 38  Octobe', cursor=1",
-     "SPEECH OUTPUT: 'ruler EFFector Vol. 19, No. 38  October  Intercept Personal ",
+     "SPEECH OUTPUT: 'EFFector Vol. 19, No. 38  October  Intercept Personal ",
      "'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_9"))
 sequence.append(utils.AssertPresentationAction(
-    "2. Review next line.",
+    "7. Review next line.",
     ["BRAILLE LINE:  '10, 2006  editor eff org Communications $l'",
      "     VISIBLE:  '10, 2006  editor eff org Communi', cursor=1",
      "SPEECH OUTPUT: '10, 2006  editor eff org",
@@ -32,7 +81,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_9"))
 sequence.append(utils.AssertPresentationAction(
-    "3. Review next line.",
+    "8. Review next line.",
     ["BRAILLE LINE:  '  $l'",
      "     VISIBLE:  '  $l', cursor=1",
      "SPEECH OUTPUT: 'white space'"]))
@@ -40,7 +89,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_9"))
 sequence.append(utils.AssertPresentationAction(
-    "4. Review next line.",
+    "9. Review next line.",
     ["BRAILLE LINE:  'A Publication of the Electronic  Washington, D.C. - The FLAG  $l'",
      "     VISIBLE:  'A Publication of the Electronic ', cursor=1",
      "SPEECH OUTPUT: 'A Publication of the Electronic  Washington, D.C. - The FLAG '"]))
@@ -48,7 +97,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_7"))
 sequence.append(utils.AssertPresentationAction(
-    "5. Review previous line.",
+    "10. Review previous line.",
     ["BRAILLE LINE:  '  $l'",
      "     VISIBLE:  '  $l', cursor=1",
      "SPEECH OUTPUT: 'white space'"]))
@@ -56,7 +105,7 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_7"))
 sequence.append(utils.AssertPresentationAction(
-    "6. Review previous line.",
+    "11. Review previous line.",
     ["BRAILLE LINE:  '10, 2006  editor eff org Communications $l'",
      "     VISIBLE:  '10, 2006  editor eff org Communi', cursor=1",
      "SPEECH OUTPUT: '10, 2006  editor eff org",
@@ -66,10 +115,10 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_7"))
 sequence.append(utils.AssertPresentationAction(
-    "7. Review previous line.",
-    ["BRAILLE LINE:  'ruler EFFector Vol. 19, No. 38  October  Intercept Personal  $l'",
-     "     VISIBLE:  'ruler EFFector Vol. 19, No. 38  ', cursor=1",
-     "SPEECH OUTPUT: 'ruler EFFector Vol. 19, No. 38  October  Intercept Personal ",
+    "12. Review previous line.",
+    ["BRAILLE LINE:  'EFFector Vol. 19, No. 38  October  Intercept Personal  $l'",
+     "     VISIBLE:  'EFFector Vol. 19, No. 38  Octobe', cursor=1",
+     "SPEECH OUTPUT: 'EFFector Vol. 19, No. 38  October  Intercept Personal ",
      "'"]))
 
 sequence.append(KeyComboAction("<Control>w"))
diff --git a/test/keystrokes/oowriter/flat_review_platform_menubar.py 
b/test/keystrokes/oowriter/flat_review_platform_menubar.py
index b85c18c..12ed04a 100644
--- a/test/keystrokes/oowriter/flat_review_platform_menubar.py
+++ b/test/keystrokes/oowriter/flat_review_platform_menubar.py
@@ -6,62 +6,65 @@ from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("F6"))
+sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("KP_8"))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_8"))
+sequence.append(KeyComboAction("KP_7"))
 sequence.append(utils.AssertPresentationAction(
     "1. Review current line.",
-    ["BRAILLE LINE:  'File Edit View Insert Format Table Tools Window Help $l'",
-     "     VISIBLE:  'File Edit View Insert Format Tab', cursor=1",
-     "SPEECH OUTPUT: 'File Edit View Insert Format Table Tools Window Help'"]))
+    ["BRAILLE LINE:  'File Edit View Insert Format Styles Table Tools Window Help $l'",
+     "     VISIBLE:  'File Edit View Insert Format Sty', cursor=1",
+     "SPEECH OUTPUT: 'File Edit View Insert Format Styles Table Tools Window Help'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_5"))
 sequence.append(utils.AssertPresentationAction(
     "2. Review current word.",
-    ["BRAILLE LINE:  'File Edit View Insert Format Table Tools Window Help $l'",
-     "     VISIBLE:  'File Edit View Insert Format Tab', cursor=1",
+    ["BRAILLE LINE:  'File Edit View Insert Format Styles Table Tools Window Help $l'",
+     "     VISIBLE:  'File Edit View Insert Format Sty', cursor=1",
      "SPEECH OUTPUT: 'File'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_6"))
 sequence.append(utils.AssertPresentationAction(
     "3. Review next word.",
-    ["BRAILLE LINE:  'File Edit View Insert Format Table Tools Window Help $l'",
-     "     VISIBLE:  'File Edit View Insert Format Tab', cursor=6",
+    ["BRAILLE LINE:  'File Edit View Insert Format Styles Table Tools Window Help $l'",
+     "     VISIBLE:  'File Edit View Insert Format Sty', cursor=6",
      "SPEECH OUTPUT: 'Edit'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_6"))
 sequence.append(utils.AssertPresentationAction(
     "4. Review next word.",
-    ["BRAILLE LINE:  'File Edit View Insert Format Table Tools Window Help $l'",
-     "     VISIBLE:  'File Edit View Insert Format Tab', cursor=11",
+    ["BRAILLE LINE:  'File Edit View Insert Format Styles Table Tools Window Help $l'",
+     "     VISIBLE:  'File Edit View Insert Format Sty', cursor=11",
      "SPEECH OUTPUT: 'View'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_4"))
 sequence.append(utils.AssertPresentationAction(
     "5. Review previous word.",
-    ["BRAILLE LINE:  'File Edit View Insert Format Table Tools Window Help $l'",
-     "     VISIBLE:  'File Edit View Insert Format Tab', cursor=6",
+    ["BRAILLE LINE:  'File Edit View Insert Format Styles Table Tools Window Help $l'",
+     "     VISIBLE:  'File Edit View Insert Format Sty', cursor=6",
      "SPEECH OUTPUT: 'Edit'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_4"))
 sequence.append(utils.AssertPresentationAction(
     "6. Review previous word.",
-    ["BRAILLE LINE:  'File Edit View Insert Format Table Tools Window Help $l'",
-     "     VISIBLE:  'File Edit View Insert Format Tab', cursor=1",
+    ["BRAILLE LINE:  'File Edit View Insert Format Styles Table Tools Window Help $l'",
+     "     VISIBLE:  'File Edit View Insert Format Sty', cursor=1",
      "SPEECH OUTPUT: 'File'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_2"))
 sequence.append(utils.AssertPresentationAction(
     "7. Review current char.",
-    ["BRAILLE LINE:  'File Edit View Insert Format Table Tools Window Help $l'",
-     "     VISIBLE:  'File Edit View Insert Format Tab', cursor=1",
+    ["BRAILLE LINE:  'File Edit View Insert Format Styles Table Tools Window Help $l'",
+     "     VISIBLE:  'File Edit View Insert Format Sty', cursor=1",
      "SPEECH OUTPUT: 'F'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -69,12 +72,12 @@ sequence.append(KeyComboAction("KP_2"))
 sequence.append(KeyComboAction("KP_2"))
 sequence.append(utils.AssertPresentationAction(
     "8. Spell current char.",
-    ["BRAILLE LINE:  'File Edit View Insert Format Table Tools Window Help $l'",
-     "     VISIBLE:  'File Edit View Insert Format Tab', cursor=1",
-     "BRAILLE LINE:  'File Edit View Insert Format Table Tools Window Help $l'",
-     "     VISIBLE:  'File Edit View Insert Format Tab', cursor=1",
+    ["BRAILLE LINE:  'File Edit View Insert Format Styles Table Tools Window Help $l'",
+     "     VISIBLE:  'File Edit View Insert Format Sty', cursor=1",
+     "BRAILLE LINE:  'File Edit View Insert Format Styles Table Tools Window Help $l'",
+     "     VISIBLE:  'File Edit View Insert Format Sty', cursor=1",
      "SPEECH OUTPUT: 'F'",
-     "SPEECH OUTPUT: 'foxtrot' voice=uppercase"]))
+     "SPEECH OUTPUT: 'foxtrot'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_2"))
@@ -82,14 +85,14 @@ sequence.append(KeyComboAction("KP_2"))
 sequence.append(KeyComboAction("KP_2"))
 sequence.append(utils.AssertPresentationAction(
     "9. Unicode for current char.",
-    ["BRAILLE LINE:  'File Edit View Insert Format Table Tools Window Help $l'",
-     "     VISIBLE:  'File Edit View Insert Format Tab', cursor=1",
-     "BRAILLE LINE:  'File Edit View Insert Format Table Tools Window Help $l'",
-     "     VISIBLE:  'File Edit View Insert Format Tab', cursor=1",
-     "BRAILLE LINE:  'File Edit View Insert Format Table Tools Window Help $l'",
-     "     VISIBLE:  'File Edit View Insert Format Tab', cursor=1",
+    ["BRAILLE LINE:  'File Edit View Insert Format Styles Table Tools Window Help $l'",
+     "     VISIBLE:  'File Edit View Insert Format Sty', cursor=1",
+     "BRAILLE LINE:  'File Edit View Insert Format Styles Table Tools Window Help $l'",
+     "     VISIBLE:  'File Edit View Insert Format Sty', cursor=1",
+     "BRAILLE LINE:  'File Edit View Insert Format Styles Table Tools Window Help $l'",
+     "     VISIBLE:  'File Edit View Insert Format Sty', cursor=1",
      "SPEECH OUTPUT: 'F'",
-     "SPEECH OUTPUT: 'foxtrot' voice=uppercase",
+     "SPEECH OUTPUT: 'foxtrot'",
      "SPEECH OUTPUT: 'Unicode 0046'"]))
 
 sequence.append(utils.AssertionSummaryAction())
diff --git a/test/keystrokes/oowriter/flat_review_word.py b/test/keystrokes/oowriter/flat_review_word.py
index 5bc5914..a6089b1 100644
--- a/test/keystrokes/oowriter/flat_review_word.py
+++ b/test/keystrokes/oowriter/flat_review_word.py
@@ -7,6 +7,17 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(1000))
+sequence.append(KeyComboAction("<Alt>v"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("Return"))
+
 sequence.append(TypeAction("Line 1"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(TypeAction("Line 2"))
@@ -17,8 +28,8 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_5"))
 sequence.append(utils.AssertPresentationAction(
     "1. Review current word.",
-    ["BRAILLE LINE:  'ruler Line 1 $l'",
-     "     VISIBLE:  'ruler Line 1 $l', cursor=7",
+    ["BRAILLE LINE:  'Line 1 $l'",
+     "     VISIBLE:  'Line 1 $l', cursor=1",
      "SPEECH OUTPUT: 'Line'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -26,10 +37,10 @@ sequence.append(KeyComboAction("KP_5"))
 sequence.append(KeyComboAction("KP_5"))
 sequence.append(utils.AssertPresentationAction(
     "2. Spell current word.",
-    ["BRAILLE LINE:  'ruler Line 1 $l'",
-     "     VISIBLE:  'ruler Line 1 $l', cursor=7",
-     "BRAILLE LINE:  'ruler Line 1 $l'",
-     "     VISIBLE:  'ruler Line 1 $l', cursor=7",
+    ["BRAILLE LINE:  'Line 1 $l'",
+     "     VISIBLE:  'Line 1 $l', cursor=1",
+     "BRAILLE LINE:  'Line 1 $l'",
+     "     VISIBLE:  'Line 1 $l', cursor=1",
      "SPEECH OUTPUT: 'Line'",
      "SPEECH OUTPUT: 'L'",
      "SPEECH OUTPUT: 'i'",
@@ -42,18 +53,18 @@ sequence.append(KeyComboAction("KP_5"))
 sequence.append(KeyComboAction("KP_5"))
 sequence.append(utils.AssertPresentationAction(
     "3. Phonetic spell current word.",
-    ["BRAILLE LINE:  'ruler Line 1 $l'",
-     "     VISIBLE:  'ruler Line 1 $l', cursor=7",
-     "BRAILLE LINE:  'ruler Line 1 $l'",
-     "     VISIBLE:  'ruler Line 1 $l', cursor=7",
-     "BRAILLE LINE:  'ruler Line 1 $l'",
-     "     VISIBLE:  'ruler Line 1 $l', cursor=7",
+    ["BRAILLE LINE:  'Line 1 $l'",
+     "     VISIBLE:  'Line 1 $l', cursor=1",
+     "BRAILLE LINE:  'Line 1 $l'",
+     "     VISIBLE:  'Line 1 $l', cursor=1",
+     "BRAILLE LINE:  'Line 1 $l'",
+     "     VISIBLE:  'Line 1 $l', cursor=1",
      "SPEECH OUTPUT: 'Line'",
      "SPEECH OUTPUT: 'L'",
      "SPEECH OUTPUT: 'i'",
      "SPEECH OUTPUT: 'n'",
      "SPEECH OUTPUT: 'e'",
-     "SPEECH OUTPUT: 'lima' voice=uppercase",
+     "SPEECH OUTPUT: 'lima'",
      "SPEECH OUTPUT: 'india'",
      "SPEECH OUTPUT: 'november'",
      "SPEECH OUTPUT: 'echo'"]))
@@ -62,8 +73,8 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_6"))
 sequence.append(utils.AssertPresentationAction(
     "4. Review next word.",
-    ["BRAILLE LINE:  'ruler Line 1 $l'",
-     "     VISIBLE:  'ruler Line 1 $l', cursor=12",
+    ["BRAILLE LINE:  'Line 1 $l'",
+     "     VISIBLE:  'Line 1 $l', cursor=6",
      "SPEECH OUTPUT: '1'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -94,16 +105,16 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_4"))
 sequence.append(utils.AssertPresentationAction(
     "8. Review previous word.",
-    ["BRAILLE LINE:  'ruler Line 1 $l'",
-     "     VISIBLE:  'ruler Line 1 $l', cursor=12",
+    ["BRAILLE LINE:  'Line 1 $l'",
+     "     VISIBLE:  'Line 1 $l', cursor=6",
      "SPEECH OUTPUT: '1'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_4"))
 sequence.append(utils.AssertPresentationAction(
     "9. Review previous word.",
-    ["BRAILLE LINE:  'ruler Line 1 $l'",
-     "     VISIBLE:  'ruler Line 1 $l', cursor=7",
+    ["BRAILLE LINE:  'Line 1 $l'",
+     "     VISIBLE:  'Line 1 $l', cursor=1",
      "SPEECH OUTPUT: 'Line'"]))
 
 sequence.append(utils.AssertionSummaryAction())
diff --git a/test/keystrokes/oowriter/messages_table.py b/test/keystrokes/oowriter/messages_table.py
index 0f719aa..a58629d 100644
--- a/test/keystrokes/oowriter/messages_table.py
+++ b/test/keystrokes/oowriter/messages_table.py
@@ -7,12 +7,18 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
 sequence.append(TypeAction("Line 1"))
 sequence.append(KeyComboAction("Return"))
 
 sequence.append(KeyComboAction("<Control>F12"))
+sequence.append(PauseAction(1000))
+
 sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
 sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -20,8 +26,9 @@ sequence.append(utils.AssertPresentationAction(
     "1. Down arrow to enter the table",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'Table1-1 table with 2 rows 2 columns'",
-     "SPEECH OUTPUT: 'blank blank'"]))
+     "SPEECH OUTPUT: 'Table1-1.'",
+     "SPEECH OUTPUT: 'table with 2 rows 2 columns'",
+     "SPEECH OUTPUT: 'A1 B1.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -29,7 +36,7 @@ sequence.append(utils.AssertPresentationAction(
     "2. Down arrow to next row of the table",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'blank blank'"]))
+     "SPEECH OUTPUT: 'A2 B2.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
@@ -46,8 +53,9 @@ sequence.append(utils.AssertPresentationAction(
     "4. Up arrow to enter the table",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'Table1-1 table with 2 rows 2 columns'",
-     "SPEECH OUTPUT: 'blank blank'"]))
+     "SPEECH OUTPUT: 'Table1-1.'",
+     "SPEECH OUTPUT: 'table with 2 rows 2 columns'",
+     "SPEECH OUTPUT: 'A2 B2.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -55,7 +63,8 @@ sequence.append(utils.AssertPresentationAction(
     "5. Tab to move to last cell of the table",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'End of table blank'"]))
+     "SPEECH OUTPUT: 'End of table.'",
+     "SPEECH OUTPUT: 'blank B2.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
@@ -72,10 +81,13 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Z"))
 sequence.append(utils.AssertPresentationAction(
     "7. Ctrl+Z to undo that insertion",
-    ["BRAILLE LINE:  'Last row deleted.'",
+    ["BRAILLE LINE:  'undo'",
+     "     VISIBLE:  'undo', cursor=0",
+     "BRAILLE LINE:  'Last row deleted.'",
      "     VISIBLE:  'Last row deleted.', cursor=0",
      "BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'undo' voice=system",
      "SPEECH OUTPUT: 'Last row deleted.' voice=system",
      "SPEECH OUTPUT: 'blank'"]))
 
diff --git a/test/keystrokes/oowriter/say_all.py b/test/keystrokes/oowriter/say_all.py
index bceb37b..7320ab6 100644
--- a/test/keystrokes/oowriter/say_all.py
+++ b/test/keystrokes/oowriter/say_all.py
@@ -20,7 +20,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(utils.AssertPresentationAction(
     "1. Return to top of document",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view Line 1 $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document Line 1 $l'",
      "     VISIBLE:  'Line 1 $l', cursor=1",
      "SPEECH OUTPUT: 'Line 1'"]))
 
diff --git a/test/keystrokes/oowriter/selection_word.py b/test/keystrokes/oowriter/selection_word.py
index 11dd5a6..288e560 100644
--- a/test/keystrokes/oowriter/selection_word.py
+++ b/test/keystrokes/oowriter/selection_word.py
@@ -17,7 +17,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Right"))
 sequence.append(utils.AssertPresentationAction(
     "1. Select Next Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=6",
      "SPEECH OUTPUT: 'This '",
      "SPEECH OUTPUT: 'selected' voice=system"]))
@@ -26,7 +26,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Right"))
 sequence.append(utils.AssertPresentationAction(
     "2. Select Next Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=9",
      "SPEECH OUTPUT: 'is '",
      "SPEECH OUTPUT: 'selected' voice=system"]))
@@ -35,7 +35,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Right"))
 sequence.append(utils.AssertPresentationAction(
     "3. Select Next Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=11",
      "SPEECH OUTPUT: 'a '",
      "SPEECH OUTPUT: 'selected' voice=system"]))
@@ -44,7 +44,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Right"))
 sequence.append(utils.AssertPresentationAction(
     "4. Select Next Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=15",
      "SPEECH OUTPUT: 'test'",
      "SPEECH OUTPUT: 'selected' voice=system"]))
@@ -53,21 +53,17 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Right"))
 sequence.append(utils.AssertPresentationAction(
     "5. Select Next Word",
-    ["BRAILLE LINE:  'So is this. $l'",
-     "     VISIBLE:  'So is this. $l', cursor=1",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
-     "     VISIBLE:  ' This is a test. $l', cursor=1",
-     "SPEECH OUTPUT: 'blank' voice=system",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=16",
+     "SPEECH OUTPUT: 'dot'",
      "SPEECH OUTPUT: 'selected' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Left"))
 sequence.append(utils.AssertPresentationAction(
     "6. Unselect Previous Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
-     "     VISIBLE:  ' This is a test. $l', cursor=16",
-     "BRAILLE LINE:  'So is this. $l'",
-     "     VISIBLE:  'So is this. $l', cursor=0",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=15",
      "SPEECH OUTPUT: 'dot'",
      "SPEECH OUTPUT: 'unselected' voice=system"]))
 
@@ -75,7 +71,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Left"))
 sequence.append(utils.AssertPresentationAction(
     "7. Unselect Previous Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=11",
      "SPEECH OUTPUT: 'test'",
      "SPEECH OUTPUT: 'unselected' voice=system"]))
@@ -84,7 +80,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Left"))
 sequence.append(utils.AssertPresentationAction(
     "8. Unselect Previous Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=9",
      "SPEECH OUTPUT: 'a '",
      "SPEECH OUTPUT: 'unselected' voice=system"]))
@@ -93,7 +89,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Left"))
 sequence.append(utils.AssertPresentationAction(
     "9. Unselect Previous Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=6",
      "SPEECH OUTPUT: 'is '",
      "SPEECH OUTPUT: 'unselected' voice=system"]))
@@ -102,32 +98,29 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Left"))
 sequence.append(utils.AssertPresentationAction(
     "10. Unselect Previous Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
-     "     VISIBLE:  'This is a test. $l', cursor=1",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=1",
      "SPEECH OUTPUT: 'This '",
-     "SPEECH OUTPUT: 'This '",
      "SPEECH OUTPUT: 'unselected' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>End"))
 sequence.append(utils.AssertPresentationAction(
     "11. Move to end of document",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  ' This is a test. $l', cursor=1",
      "BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'blank'"]))
 
+sequence.append(KeyComboAction("<Control><Shift>Left"))
+
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Left"))
 sequence.append(utils.AssertPresentationAction(
     "12. Select Previous Word",
     ["BRAILLE LINE:  'So is this. $l'",
      "     VISIBLE:  'So is this. $l', cursor=11",
-     "BRAILLE LINE:  ' $l'",
-     "     VISIBLE:  ' $l', cursor=0",
      "SPEECH OUTPUT: 'dot'",
      "SPEECH OUTPUT: 'selected' voice=system"]))
 
@@ -158,11 +151,13 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'So '",
      "SPEECH OUTPUT: 'selected' voice=system"]))
 
+sequence.append(KeyComboAction("<Control><Shift>Left"))
+
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Left"))
 sequence.append(utils.AssertPresentationAction(
     "16. Select Previous Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=15",
      "SPEECH OUTPUT: 'dot'",
      "SPEECH OUTPUT: 'selected' voice=system"]))
@@ -171,7 +166,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Left"))
 sequence.append(utils.AssertPresentationAction(
     "17. Select Previous Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=11",
      "SPEECH OUTPUT: 'test'",
      "SPEECH OUTPUT: 'selected' voice=system"]))
@@ -180,7 +175,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Right"))
 sequence.append(utils.AssertPresentationAction(
     "18. Unselect Next Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=15",
      "SPEECH OUTPUT: 'test'",
      "SPEECH OUTPUT: 'unselected' voice=system"]))
@@ -189,11 +184,13 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Right"))
 sequence.append(utils.AssertPresentationAction(
     "19. Unselect Next Word",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Document view This is a test. $l'",
-     "     VISIBLE:  ' This is a test. $l', cursor=1",
-     "SPEECH OUTPUT: 'blank' voice=system",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Untitled1 - LibreOffice Document This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=16",
+     "SPEECH OUTPUT: 'dot'",
      "SPEECH OUTPUT: 'unselected' voice=system"]))
 
+sequence.append(KeyComboAction("<Control><Shift>Right"))
+
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control><Shift>Right"))
 sequence.append(utils.AssertPresentationAction(
diff --git a/test/keystrokes/oowriter/spellcheck.py b/test/keystrokes/oowriter/spellcheck.py
index b0649e4..9cbfa88 100644
--- a/test/keystrokes/oowriter/spellcheck.py
+++ b/test/keystrokes/oowriter/spellcheck.py
@@ -16,6 +16,7 @@ sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("F7"))
+sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "1. Enter F7 to bring up the spell checking dialog",
     ["KNOWN ISSUE: LibreOffice broke accessibility for multiline text fields so we don't present the error.",
@@ -25,16 +26,11 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt>I"))
+sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "2. Alt I to ignore the first error and present the next",
-    ["KNOWN ISSUE: In addition to the above issue, we are very chatty here.",
-     "SPEECH OUTPUT: 'Ignore Once push button'",
-     "SPEECH OUTPUT: 'Ignore All push button'",
-     "SPEECH OUTPUT: 'Add to Dictionary push button'",
-     "SPEECH OUTPUT: 'Suggestions'",
-     "SPEECH OUTPUT: 'quick'"]))
-
-sequence.append(KeyComboAction("Escape"))
+    ["SPEECH OUTPUT: 'Suggestions'",
+     "SPEECH OUTPUT: 'overt.'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oowriter/spoken_indentation.py b/test/keystrokes/oowriter/spoken_indentation.py
index fb9295d..24fb8e3 100644
--- a/test/keystrokes/oowriter/spoken_indentation.py
+++ b/test/keystrokes/oowriter/spoken_indentation.py
@@ -7,18 +7,19 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction("   This is a test."))
 sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "1. Up Arrow to typed line",
-    ["KNOWN ISSUE: We are failing to announce indentation",
-     "SPEECH OUTPUT: '            This is a test.'"]))
+    ["SPEECH OUTPUT: '2 tabs 3 spaces                     This is a test.'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oowriter/structural_nav_table.py 
b/test/keystrokes/oowriter/structural_nav_table.py
index 0c3155d..812fd91 100644
--- a/test/keystrokes/oowriter/structural_nav_table.py
+++ b/test/keystrokes/oowriter/structural_nav_table.py
@@ -12,6 +12,7 @@ sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("Down"))
 sequence.append(KeyComboAction("Down"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -19,126 +20,198 @@ sequence.append(KeyComboAction("z"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "1. Toggle structural navigation on",
-    ["SPEECH OUTPUT: 'Structural navigation keys on.' voice=system"]))
+    ["BRAILLE LINE:  'Structural navigation keys on.'",
+     "     VISIBLE:  'Structural navigation keys on.', cursor=0",
+     "SPEECH OUTPUT: 'Structural navigation keys on.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt><Shift>Left"))
-sequence.append(WaitForFocus("", acc_role=pyatspi.ROLE_PARAGRAPH))
 sequence.append(utils.AssertPresentationAction(
-    "1. Alt Shift Left.",
-    ["SPEECH OUTPUT: '3'",
-     "SPEECH OUTPUT: 'Row 3, column 1.'"]))
+    "2. Alt Shift Left.",
+    ["BRAILLE LINE:  '4 $l'",
+     "     VISIBLE:  '4 $l', cursor=2",
+     "BRAILLE LINE:  '3 $l'",
+     "     VISIBLE:  '3 $l', cursor=1",
+     "BRAILLE LINE:  'Row 3, column 1.'",
+     "     VISIBLE:  'Row 3, column 1.', cursor=0",
+     "SPEECH OUTPUT: '3.'",
+     "SPEECH OUTPUT: 'Row 3, column 1.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt><Shift>Left"))
 sequence.append(utils.AssertPresentationAction(
-    "2. Alt Shift Left.",
-    ["SPEECH OUTPUT: 'Beginning of row.'"]))
+    "3. Alt Shift Left.",
+    ["BRAILLE LINE:  '3 $l'",
+     "     VISIBLE:  '3 $l', cursor=1",
+     "BRAILLE LINE:  'Beginning of row.'",
+     "     VISIBLE:  'Beginning of row.', cursor=0",
+     "SPEECH OUTPUT: 'Beginning of row.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt><Shift>Right"))
-sequence.append(WaitForFocus("", acc_role=pyatspi.ROLE_PARAGRAPH))
 sequence.append(utils.AssertPresentationAction(
-    "3. Alt Shift Right.",
-    ["SPEECH OUTPUT: '4'",
-     "SPEECH OUTPUT: 'Row 3, column 2.'"]))
+    "4. Alt Shift Right.",
+    ["BRAILLE LINE:  '3 $l'",
+     "     VISIBLE:  '3 $l', cursor=1",
+     "BRAILLE LINE:  '4 $l'",
+     "     VISIBLE:  '4 $l', cursor=1",
+     "BRAILLE LINE:  'Row 3, column 2.'",
+     "     VISIBLE:  'Row 3, column 2.', cursor=0",
+     "SPEECH OUTPUT: '4.'",
+     "SPEECH OUTPUT: 'Row 3, column 2.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt><Shift>Right"))
-sequence.append(WaitForFocus("", acc_role=pyatspi.ROLE_PARAGRAPH))
 sequence.append(utils.AssertPresentationAction(
-    "4. Alt Shift Right.",
-    ["SPEECH OUTPUT: '5'",
-     "SPEECH OUTPUT: 'Row 3, column 3.'"]))
+    "5. Alt Shift Right.",
+    ["BRAILLE LINE:  '4 $l'",
+     "     VISIBLE:  '4 $l', cursor=1",
+     "BRAILLE LINE:  '5 $l'",
+     "     VISIBLE:  '5 $l', cursor=1",
+     "BRAILLE LINE:  'Row 3, column 3.'",
+     "     VISIBLE:  'Row 3, column 3.', cursor=0",
+     "SPEECH OUTPUT: '5.'",
+     "SPEECH OUTPUT: 'Row 3, column 3.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt><Shift>Right"))
-sequence.append(WaitForFocus("", acc_role=pyatspi.ROLE_PARAGRAPH))
 sequence.append(utils.AssertPresentationAction(
-    "5. Alt Shift Right.",
-    ["SPEECH OUTPUT: '6'",
-     "SPEECH OUTPUT: '7'",
-     "SPEECH OUTPUT: 'Row 3, column 4.'",
-     "SPEECH OUTPUT: 'Cell spans 2 columns'"]))
+    "6. Alt Shift Right.",
+    ["BRAILLE LINE:  '5 $l'",
+     "     VISIBLE:  '5 $l', cursor=1",
+     "BRAILLE LINE:  '6 $l'",
+     "     VISIBLE:  '6 $l', cursor=1",
+     "BRAILLE LINE:  'Row 3, column 4.'",
+     "     VISIBLE:  'Row 3, column 4.', cursor=0",
+     "BRAILLE LINE:  'Cell spans 2 columns'",
+     "     VISIBLE:  'Cell spans 2 columns', cursor=0",
+     "SPEECH OUTPUT: '6",
+     "7.'",
+     "SPEECH OUTPUT: 'Row 3, column 4.' voice=system",
+     "SPEECH OUTPUT: 'Cell spans 2 columns' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt><Shift>Up"))
-sequence.append(WaitForFocus("", acc_role=pyatspi.ROLE_PARAGRAPH))
 sequence.append(utils.AssertPresentationAction(
-    "6. Alt Shift Up.",
-    ["KNOWN ISSUE: We should say 'blank' here.",
-     "SPEECH OUTPUT: ''",
+    "7. Alt Shift Up.",
+    ["BRAILLE LINE:  '6 $l'",
+     "     VISIBLE:  '6 $l', cursor=1",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  'Row 2, column 4.'",
+     "     VISIBLE:  'Row 2, column 4.', cursor=0",
+     "SPEECH OUTPUT: 'blank.'",
      "SPEECH OUTPUT: 'Row 2, column 4.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt><Shift>Up"))
-sequence.append(WaitForFocus("", acc_role=pyatspi.ROLE_PARAGRAPH))
 sequence.append(utils.AssertPresentationAction(
-    "7. Alt Shift Up.",
-    ["SPEECH OUTPUT: 'Wed'",
-     "SPEECH OUTPUT: 'Row 1, column 4.'"]))
+    "8. Alt Shift Up.",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  'Wed $l'",
+     "     VISIBLE:  'Wed $l', cursor=1",
+     "BRAILLE LINE:  'Row 1, column 4.'",
+     "     VISIBLE:  'Row 1, column 4.', cursor=0",
+     "SPEECH OUTPUT: 'Wed.'",
+     "SPEECH OUTPUT: 'Row 1, column 4.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt><Shift>Up"))
 sequence.append(utils.AssertPresentationAction(
-    "8. Alt Shift Up.",
-    ["SPEECH OUTPUT: 'Top of column.'"]))
+    "9. Alt Shift Up.",
+    ["BRAILLE LINE:  'Wed $l'",
+     "     VISIBLE:  'Wed $l', cursor=1",
+     "BRAILLE LINE:  'Top of column.'",
+     "     VISIBLE:  'Top of column.', cursor=0",
+     "SPEECH OUTPUT: 'Top of column.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt><Shift>End"))
-sequence.append(WaitForFocus("", acc_role=pyatspi.ROLE_PARAGRAPH))
 sequence.append(utils.AssertPresentationAction(
-    "9. Alt Shift End.",
-    ["KNOWN ISSUE: We should say 'blank' here.",
-     "SPEECH OUTPUT: ''",
+    "10. Alt Shift End.",
+    ["BRAILLE LINE:  'Wed $l'",
+     "     VISIBLE:  'Wed $l', cursor=1",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  'Row 7, column 7.'",
+     "     VISIBLE:  'Row 7, column 7.', cursor=0",
+     "SPEECH OUTPUT: 'blank.'",
      "SPEECH OUTPUT: 'Row 7, column 7.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt><Shift>Down"))
 sequence.append(utils.AssertPresentationAction(
-    "10. Alt Shift Down.",
-    ["SPEECH OUTPUT: 'Bottom of column.'"]))
+    "11. Alt Shift Down.",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  'Bottom of column.'",
+     "     VISIBLE:  'Bottom of column.', cursor=0",
+     "SPEECH OUTPUT: 'Bottom of column.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt><Shift>Right"))
 sequence.append(utils.AssertPresentationAction(
-    "11. Alt Shift Right.",
-    ["SPEECH OUTPUT: 'End of row.'"]))
+    "12. Alt Shift Right.",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  'End of row.'",
+     "     VISIBLE:  'End of row.', cursor=0",
+     "SPEECH OUTPUT: 'End of row.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt><Shift>Home"))
-sequence.append(WaitForFocus("", acc_role=pyatspi.ROLE_PARAGRAPH))
 sequence.append(utils.AssertPresentationAction(
-    "12. Alt Shift Home.",
-    ["SPEECH OUTPUT: 'Sun'",
-     "SPEECH OUTPUT: 'Row 1, column 1.'"]))
+    "13. Alt Shift Home.",
+    ["BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "BRAILLE LINE:  'Sun $l'",
+     "     VISIBLE:  'Sun $l', cursor=1",
+     "BRAILLE LINE:  'Row 1, column 1.'",
+     "     VISIBLE:  'Row 1, column 1.', cursor=0",
+     "SPEECH OUTPUT: 'Sun.'",
+     "SPEECH OUTPUT: 'Row 1, column 1.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt><Shift>Up"))
 sequence.append(utils.AssertPresentationAction(
-    "13. Alt Shift Up.",
-    ["SPEECH OUTPUT: 'Top of column.'"]))
+    "14. Alt Shift Up.",
+    ["BRAILLE LINE:  'Sun $l'",
+     "     VISIBLE:  'Sun $l', cursor=1",
+     "BRAILLE LINE:  'Top of column.'",
+     "     VISIBLE:  'Top of column.', cursor=0",
+     "SPEECH OUTPUT: 'Top of column.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "14. Up Arrow out of table.",
-    ["SPEECH OUTPUT: 'leaving table.'",
+    "15. Up Arrow out of table.",
+    ["BRAILLE LINE:  'Sun $l'",
+     "     VISIBLE:  'Sun $l', cursor=1",
+     "BRAILLE LINE:  'soffice application table-sample2.odt - LibreOffice Writer frame table-sample2.odt - 
LibreOffice Writer root pane table-sample2 - LibreOffice Document This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=16",
+     "SPEECH OUTPUT: 'leaving table.'",
      "SPEECH OUTPUT: 'This is a test.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt><Shift>Up"))
 sequence.append(utils.AssertPresentationAction(
-    "15. Alt Shift Up when not in a table.",
-    ["SPEECH OUTPUT: 'Not in a table.' voice=system"]))
+    "16. Alt Shift Up when not in a table.",
+    ["BRAILLE LINE:  'Not in a table.'",
+     "     VISIBLE:  'Not in a table.', cursor=0",
+     "SPEECH OUTPUT: 'Not in a table.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("z"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "16. Toggle structural navigation off",
-    ["SPEECH OUTPUT: 'Structural navigation keys off.' voice=system"]))
+    "17. Toggle structural navigation off",
+    ["BRAILLE LINE:  'soffice application table-sample2.odt - LibreOffice Writer frame table-sample2.odt - 
LibreOffice Writer root pane table-sample2 - LibreOffice Document This is a test. $l'",
+     "     VISIBLE:  'This is a test. $l', cursor=16",
+     "BRAILLE LINE:  'Structural navigation keys off.'",
+     "     VISIBLE:  'Structural navigation keys off.', cursor=0",
+     "SPEECH OUTPUT: 'Structural navigation keys off.' voice=system"]))
 
 sequence.append(KeyComboAction("<Control>W"))
 sequence.append(utils.AssertionSummaryAction())
diff --git a/test/keystrokes/oowriter/structural_nav_table.settings 
b/test/keystrokes/oowriter/structural_nav_table.settings
index fbf4726..82cf18a 100644
--- a/test/keystrokes/oowriter/structural_nav_table.settings
+++ b/test/keystrokes/oowriter/structural_nav_table.settings
@@ -128,7 +128,7 @@
         "enabledBrailledTextAttributes": "size:; family-name:; weight:400; indent:0; underline:none; 
strikethrough:false; justification:left; style:normal; text-spelling:none;", 
         "speechVerbosityLevel": 1, 
         "enableMagCrossHair": true, 
-        "enableBrailleMonitor": false, 
+        "enableBrailleMonitor": true, 
         "voices": {
             "default": {
                 "established": false
diff --git a/test/keystrokes/oowriter/table_cell_row.py b/test/keystrokes/oowriter/table_cell_row.py
index 09524fc..8a54474 100644
--- a/test/keystrokes/oowriter/table_cell_row.py
+++ b/test/keystrokes/oowriter/table_cell_row.py
@@ -9,6 +9,8 @@ sequence = MacroSequence()
 
 sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(PauseAction(10000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -23,39 +25,49 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "2. Down Arrow to the Mon table column header with cell reading enabled",
-    ["BRAILLE LINE:  'This is a test. $l'",
-     "     VISIBLE:  'This is a test. $l', cursor=16",
-     "BRAILLE LINE:  'Mon $l'",
+    "2. Down Arrow",
+    ["BRAILLE LINE:  'Mon $l'",
      "     VISIBLE:  'Mon $l', cursor=4",
-     "SPEECH OUTPUT: 'Calendar-1 table with 7 rows 7 columns'",
-     "SPEECH OUTPUT: 'Mon'"]))
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank B2.'"]))
 
-sequence.append(KeyComboAction("Up"))
-sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Down Arrow",
+    ["BRAILLE LINE:  '4 $l'",
+     "     VISIBLE:  '4 $l', cursor=2",
+     "SPEECH OUTPUT: '4 B3.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("F11"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
-    "3. Enable row reading",
+    "4. Enable row reading",
     ["BRAILLE LINE:  'Speak row'",
      "     VISIBLE:  'Speak row', cursor=0",
      "SPEECH OUTPUT: 'Speak row' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "5. Up Arrow",
+    ["BRAILLE LINE:  '4 $l'",
+     "     VISIBLE:  '4 $l', cursor=2",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'A2 B2 C2 D2 E2'",
+     "SPEECH OUTPUT: '1 F2 2 G2.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "4. Down Arrow to the Mon table column header with row reading enabled",
-    ["BRAILLE LINE:  'This is a test. $l'",
-     "     VISIBLE:  'This is a test. $l', cursor=16",
-     "BRAILLE LINE:  'Mon $l'",
+    "6. Up Arrow",
+    ["BRAILLE LINE:  'Mon $l'",
      "     VISIBLE:  'Mon $l', cursor=4",
-     "SPEECH OUTPUT: 'Calendar-1 table with 7 rows 7 columns'",
-     "SPEECH OUTPUT: 'Sun Mon Tue Wed Thu Fri Sat'"]))
+     "SPEECH OUTPUT: 'Sun A1 Mon B1 Tue C1 Wed D1 Thu E1 Fri F1 Sat G1.'"]))
 
-sequence.append(KeyComboAction("<Control>w"))
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oowriter/text_attributes.py b/test/keystrokes/oowriter/text_attributes.py
index ec4eaff..f331eb5 100644
--- a/test/keystrokes/oowriter/text_attributes.py
+++ b/test/keystrokes/oowriter/text_attributes.py
@@ -23,10 +23,12 @@ sequence.append(TypeAction ("f"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "1. Font information for bold word",
-    ["SPEECH OUTPUT: 'size 12' voice=system",
-     "SPEECH OUTPUT: 'family name Liberation Serif' voice=system",
+    ["SPEECH OUTPUT: 'size: 12' voice=system",
+     "SPEECH OUTPUT: 'family name: Liberation Serif' voice=system",
      "SPEECH OUTPUT: 'bold' voice=system",
-     "SPEECH OUTPUT: 'paragraph style Default Style' voice=system"]))
+     "SPEECH OUTPUT: 'paragraph style: Default Style' voice=system",
+     "SPEECH OUTPUT: 'foreground color: black' voice=system",
+     "SPEECH OUTPUT: 'background color: white' voice=system"]))
 
 sequence.append(KeyComboAction("<Control>Right"))
 sequence.append(utils.StartRecordingAction())
@@ -35,10 +37,12 @@ sequence.append(TypeAction ("f"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "2. Font information for italic word",
-    ["SPEECH OUTPUT: 'size 12' voice=system",
-     "SPEECH OUTPUT: 'family name Liberation Serif' voice=system",
-     "SPEECH OUTPUT: 'style italic' voice=system",
-     "SPEECH OUTPUT: 'paragraph style Default Style' voice=system"]))
+    ["SPEECH OUTPUT: 'size: 12' voice=system",
+     "SPEECH OUTPUT: 'family name: Liberation Serif' voice=system",
+     "SPEECH OUTPUT: 'style: italic' voice=system",
+     "SPEECH OUTPUT: 'paragraph style: Default Style' voice=system",
+     "SPEECH OUTPUT: 'foreground color: black' voice=system",
+     "SPEECH OUTPUT: 'background color: white' voice=system"]))
 
 sequence.append(KeyComboAction("<Control>Right"))
 sequence.append(utils.StartRecordingAction())
@@ -47,9 +51,11 @@ sequence.append(TypeAction ("f"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "3. Font information for regular word",
-    ["SPEECH OUTPUT: 'size 12' voice=system",
-     "SPEECH OUTPUT: 'family name Liberation Serif' voice=system",
-     "SPEECH OUTPUT: 'paragraph style Default Style' voice=system"]))
+    ["SPEECH OUTPUT: 'size: 12' voice=system",
+     "SPEECH OUTPUT: 'family name: Liberation Serif' voice=system",
+     "SPEECH OUTPUT: 'paragraph style: Default Style' voice=system",
+     "SPEECH OUTPUT: 'foreground color: black' voice=system",
+     "SPEECH OUTPUT: 'background color: white' voice=system"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oowriter/ui_navigator.py b/test/keystrokes/oowriter/ui_navigator.py
index d320d6e..e68ca3f 100644
--- a/test/keystrokes/oowriter/ui_navigator.py
+++ b/test/keystrokes/oowriter/ui_navigator.py
@@ -11,28 +11,37 @@ sequence.append(PauseAction(2000))
 sequence.append(KeyComboAction("F5"))
 sequence.append(PauseAction(2000))
 
+# GNOME Shell seems to steal focus
+sequence.append(KeyComboAction("<Alt>Tab"))
+sequence.append(KeyComboAction("<Alt>Tab"))
+sequence.append(PauseAction(2000))
+
+sequence.append(KeyComboAction("<Alt>F6"))
+sequence.append(PauseAction(2000))
+
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "1. Down arrow to the next item",
-    ["BRAILLE LINE:  'soffice application Navigator frame Navigator frame Navigator panel Content View tree 
Tables'",
-     "     VISIBLE:  ' Tables', cursor=1",
-     "SPEECH OUTPUT: 'Tables collapsed'"]))
+    ["BRAILLE LINE:  'soffice application Navigator frame Navigator frame Navigator panel Content View tree 
Tables collapsed'",
+     "     VISIBLE:  'Tables collapsed', cursor=1",
+     "SPEECH OUTPUT: 'Tables.'",
+     "SPEECH OUTPUT: 'collapsed.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Right"))
 sequence.append(utils.AssertPresentationAction(
     "2. Expand it",
-    ["BRAILLE LINE:  'soffice application Navigator frame Navigator frame Navigator panel Content View tree 
Tables'",
-     "     VISIBLE:  ' Tables', cursor=1",
+    ["BRAILLE LINE:  'soffice application Navigator frame Navigator frame Navigator panel Content View tree 
Tables expanded'",
+     "     VISIBLE:  'Tables expanded', cursor=1",
      "SPEECH OUTPUT: 'expanded'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Left"))
 sequence.append(utils.AssertPresentationAction(
     "3. Collapse it",
-    ["BRAILLE LINE:  'soffice application Navigator frame Navigator frame Navigator panel Content View tree 
Tables'",
-     "     VISIBLE:  ' Tables', cursor=1",
+    ["BRAILLE LINE:  'soffice application Navigator frame Navigator frame Navigator panel Content View tree 
Tables collapsed'",
+     "     VISIBLE:  'Tables collapsed', cursor=1",
      "SPEECH OUTPUT: 'collapsed'"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -40,11 +49,8 @@ sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "4. Down arrow to the next item",
     ["BRAILLE LINE:  'soffice application Navigator frame Navigator frame Navigator panel Content View tree 
Text frames'",
-     "     VISIBLE:  ' Text frames', cursor=1",
-     "SPEECH OUTPUT: 'Text frames'"]))
-
-sequence.append(KeyComboAction("F5"))
-sequence.append(PauseAction(2000))
+     "     VISIBLE:  'Text frames', cursor=1",
+     "SPEECH OUTPUT: 'Text frames.'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oowriter/ui_role_combo_box.py b/test/keystrokes/oowriter/ui_role_combo_box.py
index 42b5e9a..339877f 100644
--- a/test/keystrokes/oowriter/ui_role_combo_box.py
+++ b/test/keystrokes/oowriter/ui_role_combo_box.py
@@ -7,31 +7,47 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
 sequence.append(TypeAction("This is a test."))
 sequence.append(KeyComboAction("Left"))
 sequence.append(KeyComboAction("<Control><Shift>Left"))
 
 sequence.append(KeyComboAction("<Alt>o"))
-sequence.append(TypeAction("h"))
-
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(PauseAction(3000))
+
+sequence.append(KeyComboAction("<Control>Page_Down"))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Tab"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Move to Strikethrough",
-    ["KNOWN ISSUE: Too chatty",
-     "BRAILLE LINE:  'soffice application Character frame Character dialog Font Effects page tab Options 
panel (Without) combo box'",
+    "1. Move to Strikethrough",
+    ["BRAILLE LINE:  'soffice application Character frame Character dialog Font Effects page tab (Without) 
combo box'",
      "     VISIBLE:  '(Without) combo box', cursor=1",
-     "BRAILLE LINE:  'soffice application Character frame Character dialog Font Effects page tab Options 
panel (Without) $l'",
-     "     VISIBLE:  '(Without) $l', cursor=1",
-     "BRAILLE LINE:  'soffice application Character frame Character dialog Font Effects page tab Options 
panel  combo box(Without) (Without) list item'",
+     "SPEECH OUTPUT: '(Without) combo box.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "2. Down Arrow",
+    ["BRAILLE LINE:  'soffice application Character frame Character dialog Font Effects page tab Single list 
item'",
+     "     VISIBLE:  'Single list item', cursor=1",
+     "SPEECH OUTPUT: 'Single.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Up Arrow",
+    ["BRAILLE LINE:  'soffice application Character frame Character dialog Font Effects page tab (Without) 
list item'",
      "     VISIBLE:  '(Without) list item', cursor=1",
-     "SPEECH OUTPUT: '(Without) combo box'",
-     "SPEECH OUTPUT: 'text (Without)'",
-     "SPEECH OUTPUT: '(Without)'"]))
+     "SPEECH OUTPUT: '(Without).'"]))
 
-sequence.append(KeyComboAction("Escape"))
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oowriter/ui_role_label.py b/test/keystrokes/oowriter/ui_role_label.py
index d656571..034e106 100644
--- a/test/keystrokes/oowriter/ui_role_label.py
+++ b/test/keystrokes/oowriter/ui_role_label.py
@@ -11,26 +11,33 @@ sequence.append(KeyComboAction("<Alt>f"))
 sequence.append(TypeAction("w"))
 sequence.append(TypeAction("a"))
 sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>n"))
+sequence.append(KeyComboAction("<Alt>b"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "1. Down arrow to the first item",
     ["BRAILLE LINE:  'soffice application Agenda Wizard frame Agenda Wizard dialog Steps panel General 
information'",
-     "     VISIBLE:  ' General information', cursor=1",
-     "SPEECH OUTPUT: 'Agenda Wizard Please choose the page design for the agenda Page design: This wizard 
helps you to create an agenda template. The template can then be used to create an agenda whenever needed.'",
-     "SPEECH OUTPUT: 'Steps panel'",
-     "SPEECH OUTPUT: 'General information'"]))
+     "     VISIBLE:  'General information', cursor=1",
+     "SPEECH OUTPUT: 'General information.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "2. Down arrow to the next item",
     ["BRAILLE LINE:  'soffice application Agenda Wizard frame Agenda Wizard dialog Steps panel Headings to 
include'",
-     "     VISIBLE:  ' Headings to include', cursor=1",
-     "SPEECH OUTPUT: 'Headings to include'"]))
+     "     VISIBLE:  'Headings to include', cursor=1",
+     "SPEECH OUTPUT: 'Headings to include.'"]))
 
-sequence.append(KeyComboAction("Escape"))
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "3. Down arrow to the next item",
+    ["BRAILLE LINE:  'soffice application Agenda Wizard frame Agenda Wizard dialog Steps panel Names'",
+     "     VISIBLE:  'Names', cursor=1",
+     "SPEECH OUTPUT: 'Names.'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oowriter/ui_role_list_item.py b/test/keystrokes/oowriter/ui_role_list_item.py
index d57f6af..f67d621 100644
--- a/test/keystrokes/oowriter/ui_role_list_item.py
+++ b/test/keystrokes/oowriter/ui_role_list_item.py
@@ -7,23 +7,27 @@ import utils
 
 sequence = MacroSequence()
 
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("<Control><Shift>n"))
+sequence.append(PauseAction(3000))
 sequence.append(KeyComboAction("Tab"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
     "1. Tab to list item",
-    ["KNOWN ISSUE: We are presenting nothing here",
-     ""]))
+    ["BRAILLE LINE:  'soffice application Template Manager frame Template Manager dialog Drawings page tab 
list My Templates list item'",
+     "     VISIBLE:  'My Templates list item', cursor=1",
+     "SPEECH OUTPUT: 'My Templates.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
     "2. Right to next list item",
-    ["BRAILLE LINE:  'soffice application Template Manager frame Template Manager dialog Drawings page tab 
list Presentation Backgrounds list item'",
-     "     VISIBLE:  'Presentation Backgrounds list it', cursor=1",
-     "SPEECH OUTPUT: 'Presentation Backgrounds'"]))
+    ["BRAILLE LINE:  'soffice application Template Manager frame Template Manager dialog Drawings page tab 
list Business Correspondence list item'",
+     "     VISIBLE:  'Business Correspondence list ite', cursor=1",
+     "SPEECH OUTPUT: 'Business Correspondence.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
@@ -31,7 +35,7 @@ sequence.append(utils.AssertPresentationAction(
     "3. Left to previous list item",
     ["BRAILLE LINE:  'soffice application Template Manager frame Template Manager dialog Drawings page tab 
list My Templates list item'",
      "     VISIBLE:  'My Templates list item', cursor=1",
-     "SPEECH OUTPUT: 'My Templates'"]))
+     "SPEECH OUTPUT: 'My Templates.'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oowriter/ui_role_menu.py b/test/keystrokes/oowriter/ui_role_menu.py
index 0470bf5..3523ae4 100644
--- a/test/keystrokes/oowriter/ui_role_menu.py
+++ b/test/keystrokes/oowriter/ui_role_menu.py
@@ -8,25 +8,26 @@ import utils
 sequence = MacroSequence()
 
 sequence.append(KeyComboAction("<Alt>f"))
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction("w"))
 sequence.append(utils.AssertPresentationAction(
     "1. Open the Wizards submenu",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame (1 dialog) Untitled 1 - 
LibreOffice Writer root pane Wizards menu'",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Wizards menu'",
      "     VISIBLE:  'Wizards menu', cursor=1",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame (1 dialog) Untitled 1 - 
LibreOffice Writer root pane File menu Letter...'",
+     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame File menu Letter...'",
      "     VISIBLE:  'Letter...', cursor=1",
-     "SPEECH OUTPUT: 'Wizards menu'",
+     "SPEECH OUTPUT: 'Wizards menu.'",
      "SPEECH OUTPUT: 'Letter...'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Escape"))
 sequence.append(utils.AssertPresentationAction(
-    "2. Exit the Wizards submenu",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame (1 dialog) Untitled 1 - 
LibreOffice Writer root pane Wizards menu'",
-     "     VISIBLE:  'Wizards menu', cursor=1",
-     "SPEECH OUTPUT: 'Wizards menu'"]))
+    "2. Exit the Wizards submenu, which now returns you to the document",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame'",
+     "     VISIBLE:  'Untitled 1 - LibreOffice Writer ', cursor=1",
+     "SPEECH OUTPUT: 'Untitled 1 - LibreOffice Writer frame'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oowriter/ui_role_toolbar.py b/test/keystrokes/oowriter/ui_role_toolbar.py
index 7ee92dc..38372bf 100644
--- a/test/keystrokes/oowriter/ui_role_toolbar.py
+++ b/test/keystrokes/oowriter/ui_role_toolbar.py
@@ -6,35 +6,21 @@ from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
+sequence.append(PauseAction(3000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("F6"))
 sequence.append(utils.AssertPresentationAction(
-    "1. F6 to menu bar",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane File menu'",
-     "     VISIBLE:  'File menu', cursor=1",
-     "SPEECH OUTPUT: 'File menu'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("F6"))
-sequence.append(utils.AssertPresentationAction(
-    "2. F6 to Standard toolbar",
-    ["KNOWN ISSUE: We are not speaking the toolbar name",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Standard tool bar New push button'",
+    "1. F6 to Standard toolbar",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Standard tool bar New push button'",
      "     VISIBLE:  'New push button', cursor=1",
+     "SPEECH OUTPUT: 'Standard tool bar'",
      "SPEECH OUTPUT: 'New push button'"]))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Control>F1"))
-sequence.append(utils.AssertPresentationAction(
-    "3. Control F1 to show Tooltip.",
-    ["KNOWN ISSUE: We are presenting nothing here.",
-     ""]))
-
-sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "4. Right Arrow to Open button",
+    "2. Right Arrow to Open button",
     ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Standard tool bar Open push button'",
      "     VISIBLE:  'Open push button', cursor=1",
      "SPEECH OUTPUT: 'Open push button'"]))
@@ -42,197 +28,206 @@ sequence.append(utils.AssertPresentationAction(
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "5. Right Arrow to Save button",
+    "3. Right Arrow to Save button",
     ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Standard tool bar Save push button'",
      "     VISIBLE:  'Save push button', cursor=1",
-     "SPEECH OUTPUT: 'Save push button grayed'"]))
+     "SPEECH OUTPUT: 'Save push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("F6"))
-sequence.append(KeyComboAction("F6"))
 sequence.append(utils.AssertPresentationAction(
-    "6. F6 to Formatting Toolbar",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Styles and Formatting push button'",
-     "     VISIBLE:  'Styles and Formatting push butto', cursor=1",
-     "SPEECH OUTPUT: 'Styles and Formatting push button'"]))
+    "4. F6 to next toolbar",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Default Style $l combo box'",
+     "     VISIBLE:  'Default Style $l combo box', cursor=1",
+     "SPEECH OUTPUT: 'Formatting tool bar'",
+     "SPEECH OUTPUT: 'Apply Paragraph Style combo box.'"]))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Right"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
-    "7. Right to Apply Style",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Apply Style panel'",
-     "     VISIBLE:  'Apply Style panel', cursor=1",
-     "SPEECH OUTPUT: 'Apply Style panel'"]))
+    "5. Tab to next item",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Update Style push button'",
+     "     VISIBLE:  'Update Style push button', cursor=1",
+     "SPEECH OUTPUT: 'Update Style push button'"]))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "8. Return to activate Apply Style",
-    ["KNOWN ISSUE: Way too chatty here and in the next assertions",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Default Style $l'",
-     "     VISIBLE:  'Default Style $l', cursor=14",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Default Style $l'",
-     "     VISIBLE:  'Default Style $l', cursor=14",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar  combo boxDefault Style $l Clear formatting list item'",
-     "     VISIBLE:  'Clear formatting list item', cursor=1",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Default Style $l'",
-     "     VISIBLE:  'Default Style $l', cursor=14",
-     "SPEECH OUTPUT: 'Default Style combo box'",
-     "SPEECH OUTPUT: 'text Default Style selected'",
-     "SPEECH OUTPUT: 'Clear formatting'",
-     "SPEECH OUTPUT: 'text Default Style selected'"]))
+    "6. Shift+Tab to return to the former widget",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Default Style $l combo box'",
+     "     VISIBLE:  'Default Style $l combo box', cursor=1",
+     "SPEECH OUTPUT: 'Default Style combo box.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "9. Down in Apply Style (Collapsed)",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Text Body $l'",
-     "     VISIBLE:  'Text Body $l', cursor=10",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Text Body $l'",
-     "     VISIBLE:  'Text Body $l', cursor=10",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Text Body $l'",
-     "     VISIBLE:  'Text Body $l', cursor=10",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Text Body $l'",
-     "     VISIBLE:  'Text Body $l', cursor=10",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar  combo boxText Body $l Text Body list item'",
+    "7. Down in Apply Style (Collapsed)",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Text Body list item'",
      "     VISIBLE:  'Text Body list item', cursor=1",
-     "SPEECH OUTPUT: 'Text Body'",
-     "SPEECH OUTPUT: 'unselected' voice=system",
-     "SPEECH OUTPUT: 'Text Body'"]))
+     "SPEECH OUTPUT: 'Text Body.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "10. Down in Apply Style (Collapsed)",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Quotations $l'",
-     "     VISIBLE:  'Quotations $l', cursor=11",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Quotations $l'",
-     "     VISIBLE:  'Quotations $l', cursor=11",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar  combo boxQuotations $l Quotations list item'",
+    "8. Down in Apply Style (Collapsed)",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Quotations list item'",
      "     VISIBLE:  'Quotations list item', cursor=1",
-     "SPEECH OUTPUT: 's'",
-     "SPEECH OUTPUT: 'selected' voice=system",
-     "SPEECH OUTPUT: 'Quotations'"]))
+     "SPEECH OUTPUT: 'Quotations.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Alt>Down"))
 sequence.append(utils.AssertPresentationAction(
-    "11. Alt Down to expand list",
-    ["KNOWN ISSUE: We are presenting nothing here.",
+    "9. Alt Down to expand list",
+    ["KNOWN ISSUE: We say nothing here",
      ""]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "12. Down in Apply Style (Expanded)",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Title $l'",
-     "     VISIBLE:  'Title $l', cursor=6",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Title $l'",
-     "     VISIBLE:  'Title $l', cursor=6",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar  combo boxTitle $l Title list item'",
+    "10. Down in Apply Style (Expanded)",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar  combo boxTitle $l Title list item'",
      "     VISIBLE:  'Title list item', cursor=1",
-     "SPEECH OUTPUT: 'unselected' voice=system",
-     "SPEECH OUTPUT: 'Title'"]))
+     "SPEECH OUTPUT: 'Title.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "13. Down in Apply Style (Expanded)",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Subtitle $l'",
-     "     VISIBLE:  'Subtitle $l', cursor=9",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Subtitle $l'",
-     "     VISIBLE:  'Subtitle $l', cursor=9",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar  combo boxSubtitle $l Subtitle list item'",
+    "11. Down in Apply Style (Expanded)",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar  combo boxSubtitle $l Subtitle list item'",
      "     VISIBLE:  'Subtitle list item', cursor=1",
-     "SPEECH OUTPUT: 'tle'",
-     "SPEECH OUTPUT: 'selected' voice=system",
-     "SPEECH OUTPUT: 'Subtitle'"]))
+     "SPEECH OUTPUT: 'Subtitle.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "14. Up in Apply Style (Expanded)",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Title $l'",
-     "     VISIBLE:  'Title $l', cursor=6",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Title $l'",
-     "     VISIBLE:  'Title $l', cursor=6",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar  combo boxTitle $l Title list item'",
+    "12. Up in Apply Style (Expanded)",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar  combo boxTitle $l Title list item'",
      "     VISIBLE:  'Title list item', cursor=1",
-     "SPEECH OUTPUT: 'unselected' voice=system",
-     "SPEECH OUTPUT: 'Title'"]))
+     "SPEECH OUTPUT: 'Title.'"]))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Up"))
+sequence.append(KeyComboAction("<Alt>Up"))
 sequence.append(utils.AssertPresentationAction(
-    "15. Up in Apply Style (Expanded)",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Quotations $l'",
-     "     VISIBLE:  'Quotations $l', cursor=11",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Quotations $l'",
-     "     VISIBLE:  'Quotations $l', cursor=11",
-     "BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar  combo boxQuotations $l Quotations list item'",
-     "     VISIBLE:  'Quotations list item', cursor=1",
-     "SPEECH OUTPUT: 'tions'",
-     "SPEECH OUTPUT: 'selected' voice=system",
-     "SPEECH OUTPUT: 'Quotations'"]))
+    "13. Alt+Up to collapse list",
+    ["KNOWN ISSUE: We say nothing",
+     ""]))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Alt>Up"))
+sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "16. Alt+Up to collapse list",
-    ["KNOWN ISSUE: We are presenting nothing here.",
-     ""]))
+    "14. Tab to next widget",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Update Style push button'",
+     "     VISIBLE:  'Update Style push button', cursor=1",
+     "SPEECH OUTPUT: 'Update Style push button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "15. Tab to next widget",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar New Style push button'",
+     "     VISIBLE:  'New Style push button', cursor=1",
+     "SPEECH OUTPUT: 'New Style push button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "16. Tab to next widget",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Liberation Sans $l combo box'",
+     "     VISIBLE:  'Liberation Sans $l combo box', cursor=1",
+     "SPEECH OUTPUT: 'Liberation Sans combo box.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "17. Shift+Tab to return to the previous widget",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar New Style push button'",
+     "     VISIBLE:  'New Style push button', cursor=1",
+     "SPEECH OUTPUT: 'New Style push button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "18. Shift+Tab to return to the previous widget",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Update Style push button'",
+     "     VISIBLE:  'Update Style push button', cursor=1",
+     "SPEECH OUTPUT: 'Update Style push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "17. Tab to Font Name",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Font Name panel'",
-     "     VISIBLE:  'Font Name panel', cursor=1",
-     "SPEECH OUTPUT: 'Font Name panel'"]))
+    "19. Tab to next widget",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar New Style push button'",
+     "     VISIBLE:  'New Style push button', cursor=1",
+     "SPEECH OUTPUT: 'New Style push button'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "18. Tab to Font Size",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Font Size panel'",
-     "     VISIBLE:  'Font Size panel', cursor=1",
-     "SPEECH OUTPUT: 'Font Size panel'"]))
+    "20. Tab to next widget",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar Liberation Sans $l combo box'",
+     "     VISIBLE:  'Liberation Sans $l combo box', cursor=1",
+     "SPEECH OUTPUT: 'Liberation Sans combo box.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "19. Tab to Bold",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar & y Bold toggle button'",
-     "     VISIBLE:  '& y Bold toggle button', cursor=1",
-     "SPEECH OUTPUT: 'Bold off'"]))
+    "21. Tab to next widget",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar 28 $l combo box'",
+     "     VISIBLE:  '28 $l combo box', cursor=1",
+     "SPEECH OUTPUT: '28 combo box.'"]))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "20. Toggle Bold on",
-    ["SPEECH OUTPUT: 'Bold on'"]))
+    "22. Tab to next widget",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar &=y Bold toggle button'",
+     "     VISIBLE:  '&=y Bold toggle button', cursor=1",
+     "SPEECH OUTPUT: 'Bold on'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "21. Tab to Italic",
+    "23. Tab to next widget",
     ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar & y Italic toggle button'",
      "     VISIBLE:  '& y Italic toggle button', cursor=1",
      "SPEECH OUTPUT: 'Italic off'"]))
 
 sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "24. Tab to next widget",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar & y Underline toggle button'",
+     "     VISIBLE:  '& y Underline toggle button', cursor=1",
+     "SPEECH OUTPUT: 'Underline off'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "25. Toggle its state",
+    ["SPEECH OUTPUT: 'Underline on'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "26. Tab to next widget",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar & y Strikethrough toggle button'",
+     "     VISIBLE:  '& y Strikethrough toggle button', cursor=1",
+     "SPEECH OUTPUT: 'Strikethrough off'"]))
+
+sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "22. Shift Tab to Bold",
-    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar &=y Bold toggle button'",
-     "     VISIBLE:  '&=y Bold toggle button', cursor=1",
-     "SPEECH OUTPUT: 'Bold on'"]))
+    "27. Shift Tab to previous widget",
+    ["BRAILLE LINE:  'soffice application Untitled 1 - LibreOffice Writer frame Untitled 1 - LibreOffice 
Writer root pane Formatting tool bar &=y Underline toggle button'",
+     "     VISIBLE:  '&=y Underline toggle button', cursor=1",
+     "SPEECH OUTPUT: 'Underline on'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
 sequence.append(utils.AssertPresentationAction(
-    "23. Toggle Bold off",
-    ["SPEECH OUTPUT: 'Bold off'"]))
+    "28. Toggle its state",
+    ["SPEECH OUTPUT: 'Underline off'"]))
 
 sequence.append(utils.AssertionSummaryAction())
 sequence.start()
diff --git a/test/keystrokes/oowriter/where_am_i_document.py b/test/keystrokes/oowriter/where_am_i_document.py
index e3fb0e3..fc4b9ec 100644
--- a/test/keystrokes/oowriter/where_am_i_document.py
+++ b/test/keystrokes/oowriter/where_am_i_document.py
@@ -34,8 +34,7 @@ sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(utils.AssertPresentationAction(
     "2. Basic WhereAmI with multiple paragraphs selected",
-    ["SPEECH OUTPUT: 'Spanish Inquisition! Our chief weapon is surprise. Surprise and fear. Fear and 
surprise. Our two weapons are fear and surprise. And ruthless efficiency. Our three weapons are fear, 
surprise, and ruthless efficiency. And an almost fanatical devotion to the Pope. Our four. No. Amongst our 
weapons. Amongst our weaponry, are such elements as fear, surprise. I'll come in again. NOBODY expects the 
Spanish Inquisition! Amongst our weaponry are such diverse elements as: fear, surprise, ruthless efficiency, 
an almost fanatical devotion to the Pope, and nice red uniforms - Oh damn! Now old lady, you have one last 
chance. Confess the heinous sin of heresy, reject the works of the ungodly. Two last chances. And you shall 
be free. Three last chances. You have three last chances, the nature of which I have divulged in my previous 
utterance. Hm! She is made '",
-     "SPEECH OUTPUT: 'selected'"]))
+    ["SPEECH OUTPUT: 'Spanish Inquisition! Our chief weapon is surprise. Surprise and fear. Fear and 
surprise. Our two weapons are fear and surprise. And ruthless efficiency. Our three weapons are fear, 
surprise, and ruthless efficiency. And an almost fanatical devotion to the Pope. Our four. No. Amongst our 
weapons. Amongst our weaponry, are such elements as fear, surprise. I'll come in again. NOBODY expects the 
Spanish Inquisition! Amongst our weaponry are such diverse elements as: fear, surprise, ruthless efficiency, 
an almost fanatical devotion to the Pope, and nice red uniforms - Oh damn! Now old lady, you have one last 
chance. Confess the heinous sin of heresy, reject the works of the ungodly. Two last chances. And you shall 
be free. Three last chances. You have three last chances, the nature of which I have divulged in my previous 
utterance. Hm! She is made  selected'"]))
 
 sequence.append(KeyComboAction("<Control>w"))
 sequence.append(utils.AssertionSummaryAction())


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