[orca] Update the Gtk+ regression tests



commit af4c449d6e02c5acf218268c0621a883358dc49f
Author: Joanmarie Diggs <jdiggs igalia com>
Date:   Mon Dec 23 08:15:20 2013 -0500

    Update the Gtk+ regression tests
    
    * To reflect fixed bugs, updated presentation of roles, etc.
    * Adjust for superficial changes and (re)moved widgets in gtk3-demo
    * Remove tests for widgets which no longer exist in Gtk+
    * Add tests for widgets we were not testing
    * Split a ginormous test into two
    * Remove unneeded waits (they slow the run way down)

 test/harness/runone.sh                             |    6 +-
 test/harness/user-settings.conf.in                 |    2 +-
 test/keystrokes/gtk-demo/debug_commands.py         |   35 -
 test/keystrokes/gtk-demo/learn_mode.py             |   59 +-
 test/keystrokes/gtk-demo/role_accel_label.py       |  176 +----
 test/keystrokes/gtk-demo/role_alert.py             |  153 +---
 test/keystrokes/gtk-demo/role_check_box.py         |  269 +------
 test/keystrokes/gtk-demo/role_check_menu_item.py   |   87 +--
 test/keystrokes/gtk-demo/role_color_chooser.py     |  130 ++++
 test/keystrokes/gtk-demo/role_column_header.py     |  240 +-----
 test/keystrokes/gtk-demo/role_combo_box.py         |  212 +-----
 test/keystrokes/gtk-demo/role_combo_box2.py        |   93 +--
 test/keystrokes/gtk-demo/role_dialog.py            |   71 +--
 test/keystrokes/gtk-demo/role_drawing_area.py      |   34 +
 test/keystrokes/gtk-demo/role_icon.py              |  148 +---
 test/keystrokes/gtk-demo/role_info_bar.py          |   63 ++
 test/keystrokes/gtk-demo/role_label.py             |  190 ++----
 test/keystrokes/gtk-demo/role_listbox.py           |   65 ++
 test/keystrokes/gtk-demo/role_menu.py              |  178 ++---
 test/keystrokes/gtk-demo/role_page_tab.py          |   81 +--
 test/keystrokes/gtk-demo/role_push_button.py       |   86 +--
 test/keystrokes/gtk-demo/role_radio_button.py      |  129 +---
 test/keystrokes/gtk-demo/role_radio_menu_item.py   |  120 +---
 test/keystrokes/gtk-demo/role_spin_button.py       |  181 +----
 test/keystrokes/gtk-demo/role_split_pane.py        |   93 +--
 test/keystrokes/gtk-demo/role_status_bar.py        |   56 +--
 test/keystrokes/gtk-demo/role_table.py             |  143 +---
 .../keystrokes/gtk-demo/role_tear_off_menu_item.py |   90 ---
 test/keystrokes/gtk-demo/role_text_multiline.py    |  344 +++------
 .../gtk-demo/role_text_multiline_flatreview.py     |  347 +++++++++
 .../gtk-demo/role_text_multiline_navigation.py     |  814 +-------------------
 .../gtk-demo/role_text_multiline_navigation2.py    |  187 +----
 test/keystrokes/gtk-demo/role_toggle_button.py     |  101 +--
 test/keystrokes/gtk-demo/role_toolbar.py           |  109 +--
 test/keystrokes/gtk-demo/role_tooltip.py           |  111 +---
 test/keystrokes/gtk-demo/role_tree_table.py        |  274 ++------
 test/keystrokes/gtk-demo/role_window.py            |   25 +-
 test/keystrokes/gtk-demo/spoken_indentation.py     |  317 ++------
 .../gtk-demo/spoken_indentation.settings           |    2 +-
 39 files changed, 1560 insertions(+), 4261 deletions(-)
---
diff --git a/test/harness/runone.sh b/test/harness/runone.sh
index 5db931b..83f153a 100755
--- a/test/harness/runone.sh
+++ b/test/harness/runone.sh
@@ -158,9 +158,5 @@ then
     pkill firefox > /dev/null 2>&1
     rm -rf $FF_PROFILE_DIR
 else
-    kill -9 $APP_PID > /dev/null 2>&1
+    pkill $APP_NAME > /dev/null 2>&1
 fi
-
-# Temporary hack to kill gnome-help help if it's running.
-HELP_PID=$(ps -A | grep gnome-help | cut -d' ' -f1)
-kill -9 $HELP_PID > /dev/null 2>&1
diff --git a/test/harness/user-settings.conf.in b/test/harness/user-settings.conf.in
index ea2757b..1877c06 100644
--- a/test/harness/user-settings.conf.in
+++ b/test/harness/user-settings.conf.in
@@ -21,7 +21,7 @@
                     "established": false
                 }, 
                 "hyperlink": {
-                    "established": false
+                    "average-pitch": 3.0
                 }
             }, 
             "speechServerInfo": [
diff --git a/test/keystrokes/gtk-demo/learn_mode.py b/test/keystrokes/gtk-demo/learn_mode.py
index f3fb493..1629dc9 100644
--- a/test/keystrokes/gtk-demo/learn_mode.py
+++ b/test/keystrokes/gtk-demo/learn_mode.py
@@ -1,30 +1,15 @@
 #!/usr/bin/python
 
-"""Test of learn mode.
-"""
+"""Test of learn mode."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, enter learn mode and press some keys.
-#
-sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("h"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
-sequence.append(utils.AssertPresentationAction(
-    "Enter learn mode",
-    ["BRAILLE LINE:  'Learn mode.  Press escape to exit.'",
-     "     VISIBLE:  'Learn mode.  Press escape to exi', cursor=0",
-     "SPEECH OUTPUT: 'Entering learn mode.  Press any key to hear its function.  To exit learn mode, press 
the escape key.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
@@ -32,11 +17,10 @@ sequence.append(TypeAction("f"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "Orca command: check text attributes",
-    ["BRAILLE LINE:  'KP_Insert'",
-     "     VISIBLE:  'KP_Insert', cursor=0",
-     "BRAILLE LINE:  'Reads the attributes associated with the current text character.'",
+    ["BRAILLE LINE:  'Reads the attributes associated with the current text character.'",
      "     VISIBLE:  'Reads the attributes associated ', cursor=0",
-     "SPEECH OUTPUT: 'insert'",
+     "SPEECH OUTPUT: 'insert '",
+     "SPEECH OUTPUT: 'f '",
      "SPEECH OUTPUT: 'Reads the attributes associated with the current text character.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
@@ -45,50 +29,41 @@ sequence.append(TypeAction(" "))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
 sequence.append(utils.AssertPresentationAction(
     "Orca command: bring up preferences",
-    ["BRAILLE LINE:  'KP_Insert'",
-     "     VISIBLE:  'KP_Insert', cursor=0",
-     "BRAILLE LINE:  'KP_Insert'",
-     "     VISIBLE:  'KP_Insert', cursor=0",
+    ["BRAILLE LINE:  'Learn mode.  Press escape to exit.'",
+     "     VISIBLE:  'Learn mode.  Press escape to exi', cursor=0",
      "BRAILLE LINE:  'Displays the preferences configuration dialog.'",
      "     VISIBLE:  'Displays the preferences configu', cursor=0",
-     "SPEECH OUTPUT: 'insert'",
+     "SPEECH OUTPUT: 'insert '",
+     "SPEECH OUTPUT: 'space '",
      "SPEECH OUTPUT: 'Displays the preferences configuration dialog.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_5"))
 sequence.append(utils.AssertPresentationAction(
     "Orca command: flat review current word",
-    ["BRAILLE LINE:  'KP_Insert'",
-     "     VISIBLE:  'KP_Insert', cursor=0",
+    ["BRAILLE LINE:  'Learn mode.  Press escape to exit.'",
+     "     VISIBLE:  'Learn mode.  Press escape to exi', cursor=0",
      "BRAILLE LINE:  'Speaks the current flat review item or word.'",
      "     VISIBLE:  'Speaks the current flat review i', cursor=0",
+     "SPEECH OUTPUT: 'begin '",
      "SPEECH OUTPUT: 'Speaks the current flat review item or word.' voice=system"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction("5"))
 sequence.append(utils.AssertPresentationAction(
     "Regular typing command",
-    ["BRAILLE LINE:  'KP_Insert'",
-     "     VISIBLE:  'KP_Insert', cursor=0",
-     "BRAILLE LINE:  '5'",
-     "     VISIBLE:  '5', cursor=0",
-     "SPEECH OUTPUT: '5'"]))
+    ["BRAILLE LINE:  'Learn mode.  Press escape to exit.'",
+     "     VISIBLE:  'Learn mode.  Press escape to exi', cursor=0",
+     "SPEECH OUTPUT: '5 '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Escape"))
 sequence.append(utils.AssertPresentationAction(
     "Exit learn mode",
-    ["BRAILLE LINE:  'Escape'",
-     "     VISIBLE:  'Escape', cursor=0",
-     "BRAILLE LINE:  'Exiting learn mode.'",
+    ["BRAILLE LINE:  'Exiting learn mode.'",
      "     VISIBLE:  'Exiting learn mode.', cursor=0",
-     "SPEECH OUTPUT: 'escape'",
-     "SPEECH OUTPUT: 'Exiting learn mode.'"]))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+     "SPEECH OUTPUT: 'escape '",
+     "SPEECH OUTPUT: 'Exiting learn mode.' voice=system"]))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_accel_label.py b/test/keystrokes/gtk-demo/role_accel_label.py
index f59f7d6..d4e17e4 100644
--- a/test/keystrokes/gtk-demo/role_accel_label.py
+++ b/test/keystrokes/gtk-demo/role_accel_label.py
@@ -1,172 +1,60 @@
 #!/usr/bin/python
 
-"""Test of menu accelerator label output using the gtk-demo UI Manager
-   demo.
-"""
+"""Test of menu accelerator label output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Now, invoke the UI Manager demo.
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("UI Manager", 1000))
-sequence.append(KeyComboAction("Return", 500))
-
-########################################################################
-# Once the UI Manager window is up (as indicated by the "close" button
-# getting focus), open the File menu via Alt+f
-#
-#sequence.append(WaitForWindowActivate("UI Manager"))
-sequence.append(WaitForFocus("close", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-
-sequence.append(KeyComboAction("<Alt>f"))
-
-# For some reason we're not getting the events we need to present the
-# first item in a menu. This is new to Gtk+ 3, but not to the Gail
-# integration into Gtk+. This Down+Up hack will trigger what we need
-# for this test in the meantime.
-sequence.append(KeyComboAction("Down"))
-sequence.append(KeyComboAction("Up"))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(WaitForFocus("New", acc_role=pyatspi.ROLE_MENU_ITEM))
-sequence.append(utils.AssertPresentationAction(
-    "New menu item",
-    ["KNOWN ISSUE - See Gtk bug 654410."]))
-#    ["BRAILLE LINE:  'gtk-demo Application UI Manager Frame MenuBar New(Control n)'",
-#     "     VISIBLE:  'New(Control n)', cursor=1",
-#     "SPEECH OUTPUT: 'New Control n'"]))
-
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.  The following should be
-# presented in speech and braille:
-#
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
-sequence.append(utils.AssertPresentationAction(
-    "New menu item Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application UI Manager Frame MenuBar New\((Control|Primary) n\)'",
-     "     VISIBLE:  'New\((Control|Primary) n\)', cursor=1",
-     "SPEECH OUTPUT: 'File'",
-     "SPEECH OUTPUT: 'menu'",
-     "SPEECH OUTPUT: 'New'",
-     "SPEECH OUTPUT: '(Control|Primary) n 1 of 5.'",
-     "SPEECH OUTPUT: 'n'"]))
-
-########################################################################
-# Now, continue on down the menu.
-#
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Down"))
-sequence.append(WaitForFocus("Open", acc_role=pyatspi.ROLE_MENU_ITEM))
-sequence.append(utils.AssertPresentationAction(
-    "Open menu item",
-    ["BRAILLE LINE:  'gtk-demo Application UI Manager Frame MenuBar Open\((Control|Primary) o\)'",
-     "     VISIBLE:  'Open\((Control|Primary) o\)', cursor=1",
-     "SPEECH OUTPUT: 'Open (Control|Primary) o'"]))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
 
-########################################################################
-# Now, continue on down the menu.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Down"))
-sequence.append(WaitForFocus("Save", acc_role=pyatspi.ROLE_MENU_ITEM))
+sequence.append(KeyComboAction("<Alt>p"))
 sequence.append(utils.AssertPresentationAction(
-    "Save menu item",
-    ["BRAILLE LINE:  'gtk-demo Application UI Manager Frame MenuBar Save\((Control|Primary) s\)'",
-     "     VISIBLE:  'Save\((Control|Primary) s\)', cursor=1",
-     "SPEECH OUTPUT: 'Save (Control|Primary) s'"]))
+    "Initial menu and menu item",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Preferences menu'",
+     "     VISIBLE:  'Preferences menu', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Prefer Dark Theme check 
menu item'",
+     "     VISIBLE:  '< > Prefer Dark Theme check menu', cursor=1",
+     "SPEECH OUTPUT: 'Preferences menu'",
+     "SPEECH OUTPUT: 'Prefer Dark Theme check menu item not checked'"]))
 
-########################################################################
-# Now, continue on down the menu.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitForFocus("Save As...", acc_role=pyatspi.ROLE_MENU_ITEM))
 sequence.append(utils.AssertPresentationAction(
-    "Save As... menu item",
-    ["BRAILLE LINE:  'gtk-demo Application UI Manager Frame MenuBar Save As...\((Control|Primary) s\)'",
-     "     VISIBLE:  'Save As...\((Control|Primary) s\)', cursor=1",
-     "SPEECH OUTPUT: 'Save As... (Control|Primary) s'"]))
+    "Next menu item",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Hide Titlebar when 
maximized check menu item'",
+     "     VISIBLE:  '< > Hide Titlebar when maximized', cursor=1",
+     "SPEECH OUTPUT: 'Hide Titlebar when maximized check menu item not checked'"]))
 
-########################################################################
-# Now, continue on down the menu.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitForFocus("Quit", acc_role=pyatspi.ROLE_MENU_ITEM))
 sequence.append(utils.AssertPresentationAction(
-    "Quit menu item",
-    ["BRAILLE LINE:  'gtk-demo Application UI Manager Frame MenuBar Quit\((Control|Primary) q\)'",
-     "     VISIBLE:  'Quit\((Control|Primary) q\)', cursor=1",
-     "SPEECH OUTPUT: 'Quit (Control|Primary) q'"]))
+    "Next menu item",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Color menu'",
+     "     VISIBLE:  'Color menu', cursor=1",
+     "SPEECH OUTPUT: 'Color menu'"]))
 
-########################################################################
-# Dismiss the menu once we get to the "Quit" menu item and wait for
-# the "close" button to get focus.
-#
-sequence.append(KeyComboAction("Escape"))
-sequence.append(WaitForFocus("close", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-
-########################################################################
-# Then, when the menu disappears and the "close" button regains focus,
-# Do a "Where Am I" to find the the default button (double
-# KP_Insert+KP_Enter).
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyPressAction(0, None, "KP_Insert"))
-sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
-    "Where Am I default button",
-    ["BRAILLE LINE:  'UI Manager'",
-     "     VISIBLE:  'UI Manager', cursor=0",
-     "BRAILLE LINE:  'gtk-demo Application UI Manager Frame close Button'",
-     "     VISIBLE:  'close Button', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application UI Manager Frame close Button'",
-     "     VISIBLE:  'close Button', cursor=1",
-     "BRAILLE LINE:  'Default button is close'",
-     "     VISIBLE:  'Default button is close', cursor=0",
-     "SPEECH OUTPUT: 'UI Manager'",
-     "SPEECH OUTPUT: 'Default button is close'"]))
-
-########################################################################
-# Activate the "close" button, dismissing the UI Manager demo window.
-#
-sequence.append(TypeAction(" "))
-
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TREE_TABLE,
-                           5000))
+    "Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Color menu'",
+     "     VISIBLE:  'Color menu', cursor=1",
+     "SPEECH OUTPUT: 'Application Class'",
+     "SPEECH OUTPUT: 'frame'",
+     "SPEECH OUTPUT: 'Preferences'",
+     "SPEECH OUTPUT: 'menu'",
+     "SPEECH OUTPUT: 'Color'",
+     "SPEECH OUTPUT: 'menu 3 of 5.'",
+     "SPEECH OUTPUT: 'C'"]))
 
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_alert.py b/test/keystrokes/gtk-demo/role_alert.py
index de383f3..393f885 100644
--- a/test/keystrokes/gtk-demo/role_alert.py
+++ b/test/keystrokes/gtk-demo/role_alert.py
@@ -1,150 +1,79 @@
 #!/usr/bin/python
 
-"""Test of automatic presentation of dialog contents using the
-   gtk-demo Dialog and Message Boxes demo.
-"""
+"""Test of presentation of dialogs and alerts."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Dialog and Message Boxes demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Dialog and Message Boxes", 1000))
-#sequence.append(WaitForWindowActivate("Dialogs",None))
-sequence.append(KeyComboAction("Return", 500))
+sequence.append(TypeAction("Dialog and Message Boxes"))
+sequence.append(KeyComboAction("Return"))
 
-########################################################################
-# Once the demo is up, wait for focus to appear on the "Message Dialog"
-# button and then invoke it.
-#
-sequence.append(WaitForFocus("Message Dialog",
-                             acc_role=pyatspi.ROLE_PUSH_BUTTON))
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Return", 500))
-sequence.append(WaitForFocus("OK", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("space"))
 sequence.append(utils.AssertPresentationAction(
-    "Information Alert automatic presentation",
-    ["BRAILLE LINE:  'gtk-demo Application Dialogs Frame (1 dialog)'",
-     "     VISIBLE:  'Dialogs Frame (1 dialog)', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Dialogs Frame (1 dialog) Dialogs Panel Message Dialog Button'",
-     "     VISIBLE:  'Message Dialog Button', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Information Alert'", 
-     "     VISIBLE:  'Information Alert', cursor=1", 
-     "BRAILLE LINE:  'gtk-demo Application Information Alert OK Button'", 
-     "     VISIBLE:  'OK Button', cursor=1", 
-     "SPEECH OUTPUT: 'Dialogs frame 1 unfocused dialog'",
-     "SPEECH OUTPUT: 'Dialogs panel Message Dialog button'",
-     "SPEECH OUTPUT: 'Information This message box has been popped up the following", 
-     "number of times: 1'", 
-     "SPEECH OUTPUT: 'OK button'"]))
+    "Initial dialog",
+    ["BRAILLE LINE:  'gtk-demo application Dialogs frame'",
+     "     VISIBLE:  'Dialogs frame', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application Dialogs frame Dialogs panel Message Dialog push button'",
+     "     VISIBLE:  'Message Dialog push button', cursor=1",
+     "SPEECH OUTPUT: 'Dialogs frame'",
+     "SPEECH OUTPUT: 'Dialogs panel'",
+     "SPEECH OUTPUT: 'Message Dialog push button'"]))
 
-########################################################################
-# Dismiss the information window by activating the OK button.
-#
-sequence.append(KeyComboAction("Return"))
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("space"))
+sequence.append(utils.AssertPresentationAction(
+    "Information alert",
+    ["BRAILLE LINE:  'gtk-demo application Information alert'",
+     "     VISIBLE:  'Information alert', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application Information alert OK push button'",
+     "     VISIBLE:  'OK push button', cursor=1",
+     "SPEECH OUTPUT: 'Information This message box has been popped up the following",
+     "number of times: 1'",
+     "SPEECH OUTPUT: 'OK push button'"]))
 
-########################################################################
-# Once we're back to the main window of the demo, go to the
-# interactive demo, enter some text in the Entry text areas, and
-# invoke the Interactive Demo button.
-#
-#sequence.append(WaitForWindowActivate("Dialogs",None))
-sequence.append(WaitForFocus("Message Dialog",
-                             acc_role=pyatspi.ROLE_PUSH_BUTTON))
+sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Down"))
 
-sequence.append(WaitForFocus("Interactive Dialog",
-                             acc_role=pyatspi.ROLE_PUSH_BUTTON))
 sequence.append(KeyComboAction("Tab"))
-
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
 sequence.append(TypeAction("Testing"))
-sequence.append(KeyComboAction("Tab", 500))
 
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
+sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction("Again"))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Alt>i", 500))
-#sequence.append(WaitForWindowActivate("Interactive Dialog",None))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
+sequence.append(KeyComboAction("<Alt>i"))
 sequence.append(utils.AssertPresentationAction(
-    "Interactive Dialog no automatic presentation",
-    ["BRAILLE LINE:  'gtk-demo Application Dialogs Frame (1 dialog)'",
-     "     VISIBLE:  'Dialogs Frame (1 dialog)', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Dialogs Frame (1 dialog) Dialogs Panel Entry 2 Again $l'",
-     "     VISIBLE:  'Entry 2 Again $l', cursor=14",
-     "BRAILLE LINE:  'gtk-demo Application Interactive Dialog Dialog'",
-     "     VISIBLE:  'Interactive Dialog Dialog', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Interactive Dialog Dialog Entry 1 Testing $l'",
+    "Entry 1",
+    ["BRAILLE LINE:  'gtk-demo application Interactive Dialog dialog'",
+     "     VISIBLE:  'Interactive Dialog dialog', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application Interactive Dialog dialog Entry 1 Testing $l'",
      "     VISIBLE:  'Entry 1 Testing $l', cursor=16",
-     "SPEECH OUTPUT: 'Dialogs frame 1 unfocused dialog'",
-     "SPEECH OUTPUT: 'Dialogs panel Entry 2 text Again'",
      "SPEECH OUTPUT: 'Interactive Dialog'",
      "SPEECH OUTPUT: 'Entry 1 text Testing selected'"]))
 
-########################################################################
-# Now, do a "Where Am I" in the Interactive Dialog to get the title
-# info via KP_Insert+KP_Enter.
-#
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "Entry 2",
+    ["BRAILLE LINE:  'gtk-demo application Interactive Dialog dialog Entry 2 Again $l'",
+     "     VISIBLE:  'Entry 2 Again $l', cursor=14",
+     "BRAILLE LINE:  'gtk-demo application Interactive Dialog dialog Entry 2 Again $l'",
+     "     VISIBLE:  'Entry 2 Again $l', cursor=14",
+     "SPEECH OUTPUT: 'Entry 2 text Again selected'"]))
+
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
-    "Interactive Dialog Where Am I",
+    "Title bar",
     ["BRAILLE LINE:  'Interactive Dialog'",
      "     VISIBLE:  'Interactive Dialog', cursor=0",
      "SPEECH OUTPUT: 'Interactive Dialog'"]))
 
-########################################################################
-# Tab to the OK button and dismiss the window.
-#
-sequence.append(KeyComboAction("Tab"))
-
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(KeyComboAction("Tab"))
-
-sequence.append(WaitForFocus("OK", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(TypeAction(" "))
-
-########################################################################
-# Close the Dialogs demo window
-#
-#sequence.append(WaitForWindowActivate("Dialogs",None))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(KeyComboAction("<Alt>F4", 500))
-
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TREE_TABLE,
-                           5000))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
-
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_check_box.py b/test/keystrokes/gtk-demo/role_check_box.py
index 5ddbf40..0c2b2c0 100644
--- a/test/keystrokes/gtk-demo/role_check_box.py
+++ b/test/keystrokes/gtk-demo/role_check_box.py
@@ -1,283 +1,76 @@
 #!/usr/bin/python
 
-"""Test of checkbox output using the gtk-demo Paned Widgets demo.
-"""
+"""Test of checkbox output."""
 
 from macaroon.playback import *
 
 sequence = MacroSequence()
 import utils
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Paned Widgets demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Paned Widgets", 1000))
-sequence.append(KeyComboAction("Return", 500))
-
-########################################################################
-# When the demo comes up, interact with a few check boxes
-#
-#sequence.append(WaitForWindowActivate("Panes",None))
-sequence.append(WaitForFocus("Hi there", acc_role=pyatspi.ROLE_PUSH_BUTTON))
+sequence.append(TypeAction("Paned Widgets"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
-sequence.append(WaitForFocus("Resize", acc_role=pyatspi.ROLE_CHECK_BOX))
 sequence.append(utils.AssertPresentationAction(
-    "Left resize check box unchecked plus panel context",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame Horizontal Panel < > Resize CheckBox'",
-     "     VISIBLE:  '< > Resize CheckBox', cursor=1",
-     "SPEECH OUTPUT: 'Horizontal panel Resize check box not checked'"]))
+    "Tab to first checkbox",
+    ["BRAILLE LINE:  'gtk-demo application Panes frame Horizontal panel < > Resize check box'",
+     "     VISIBLE:  '< > Resize check box', cursor=1",
+     "SPEECH OUTPUT: 'Horizontal panel'",
+     "SPEECH OUTPUT: 'Resize check box not checked'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
-    "Left resize check box unchecked Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame Horizontal Panel < > Resize CheckBox'",
-     "     VISIBLE:  '< > Resize CheckBox', cursor=1",
+    "Where Am I",
+    ["BRAILLE LINE:  'gtk-demo application Panes frame Horizontal panel < > Resize check box'",
+     "     VISIBLE:  '< > Resize check box', cursor=1",
      "SPEECH OUTPUT: 'Horizontal Resize'",
      "SPEECH OUTPUT: 'check box not checked.'",
-     "SPEECH OUTPUT: 'Alt r'"]))
+     "SPEECH OUTPUT: 'Alt+R'"]))
 
-########################################################################
-# Now, change its state.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
-sequence.append(WaitAction("object:state-changed:checked",
-                           None,
-                           None,
-                           pyatspi.ROLE_CHECK_BOX,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Left resize check box checked",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame Horizontal Panel <x> Resize CheckBox'",
-     "     VISIBLE:  '<x> Resize CheckBox', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame'",
-     "     VISIBLE:  'gtk-demo Application Panes Frame', cursor=22",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame Horizontal Panel <x> Resize CheckBox'",
-     "     VISIBLE:  '<x> Resize CheckBox', cursor=1",
-     "SPEECH OUTPUT: 'checked'",
-     "SPEECH OUTPUT: 'Panes frame'",
-     "SPEECH OUTPUT: 'Horizontal panel Resize check box checked'"]))
+    "Toggle its state",
+    ["BRAILLE LINE:  'gtk-demo application Panes frame Horizontal panel <x> Resize check box'",
+     "     VISIBLE:  '<x> Resize check box', cursor=1",
+     "SPEECH OUTPUT: 'checked'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
-    "Left resize check box checked Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame Horizontal Panel <x> Resize CheckBox'",
-     "     VISIBLE:  '<x> Resize CheckBox', cursor=1",
+    "Where Am I",
+    ["BRAILLE LINE:  'gtk-demo application Panes frame Horizontal panel <x> Resize check box'",
+     "     VISIBLE:  '<x> Resize check box', cursor=1",
      "SPEECH OUTPUT: 'Horizontal Resize'",
      "SPEECH OUTPUT: 'check box checked.'",
-     "SPEECH OUTPUT: 'Alt r'"]))
+     "SPEECH OUTPUT: 'Alt+R'"]))
 
-########################################################################
-# Change the state back and move on to a few more check boxes.  The
-# presentation in speech and braille should be similar to the above.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
-sequence.append(WaitAction("object:state-changed:checked",
-                           None,
-                           None,
-                           pyatspi.ROLE_CHECK_BOX,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Left resize check box unchecked",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame Horizontal Panel < > Resize CheckBox'",
-     "     VISIBLE:  '< > Resize CheckBox', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame'",
-     "     VISIBLE:  'gtk-demo Application Panes Frame', cursor=22",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame Horizontal Panel < > Resize CheckBox'",
-     "     VISIBLE:  '< > Resize CheckBox', cursor=1",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: 'Panes frame'",
-     "SPEECH OUTPUT: 'Horizontal panel Resize check box not checked'"]))
+    "Toggle its state back",
+    ["BRAILLE LINE:  'gtk-demo application Panes frame Horizontal panel < > Resize check box'",
+     "     VISIBLE:  '< > Resize check box', cursor=1",
+     "SPEECH OUTPUT: 'not checked'"]))
 
-sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
-sequence.append(WaitForFocus("Resize", acc_role=pyatspi.ROLE_CHECK_BOX))
-sequence.append(utils.AssertPresentationAction(
-    "Right resize check box checked",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame Horizontal Panel <x> Resize CheckBox'",
-     "     VISIBLE:  '<x> Resize CheckBox', cursor=1",
-     "SPEECH OUTPUT: 'Resize check box checked'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(TypeAction(" "))
-sequence.append(WaitAction("object:state-changed:checked",
-                           None,
-                           None,
-                           pyatspi.ROLE_CHECK_BOX,
-                           5000))
-sequence.append(utils.AssertPresentationAction(
-    "Right resize check box unchecked",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame Horizontal Panel < > Resize CheckBox'",
-     "     VISIBLE:  '< > Resize CheckBox', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame'",
-     "     VISIBLE:  'gtk-demo Application Panes Frame', cursor=22",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame Horizontal Panel < > Resize CheckBox'",
-     "     VISIBLE:  '< > Resize CheckBox', cursor=1",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: 'Panes frame'",
-     "SPEECH OUTPUT: 'Horizontal panel Resize check box not checked'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(TypeAction(" "))
-sequence.append(WaitAction("object:state-changed:checked",
-                           None,
-                           None,
-                           pyatspi.ROLE_CHECK_BOX,
-                           5000))
-sequence.append(utils.AssertPresentationAction(
-    "Right resize check box checked",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame Horizontal Panel <x> Resize CheckBox'",
-     "     VISIBLE:  '<x> Resize CheckBox', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame'",
-     "     VISIBLE:  'gtk-demo Application Panes Frame', cursor=22",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame Horizontal Panel <x> Resize CheckBox'",
-     "     VISIBLE:  '<x> Resize CheckBox', cursor=1",
-     "SPEECH OUTPUT: 'checked'",
-     "SPEECH OUTPUT: 'Panes frame'",
-     "SPEECH OUTPUT: 'Horizontal panel Resize check box checked'"]))
-
 sequence.append(KeyComboAction("Tab"))
-sequence.append(PauseAction(1000))
 sequence.append(KeyComboAction("Tab"))
-sequence.append(PauseAction(1000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
-sequence.append(WaitForFocus("Resize", acc_role=pyatspi.ROLE_CHECK_BOX))
 sequence.append(utils.AssertPresentationAction(
-    "Top resize check box checked plus panel context",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame Vertical Panel < > Resize CheckBox'",
-     "     VISIBLE:  '< > Resize CheckBox', cursor=1",
-     "SPEECH OUTPUT: 'Vertical panel Resize check box not checked'"]))
+    "Tab to first checkbox in next panel",
+    ["BRAILLE LINE:  'gtk-demo application Panes frame Vertical panel < > Resize check box'",
+     "     VISIBLE:  '< > Resize check box', cursor=1",
+     "SPEECH OUTPUT: 'Vertical panel'",
+     "SPEECH OUTPUT: 'Resize check box not checked'"]))
 
-sequence.append(utils.StartRecordingAction())
-sequence.append(TypeAction(" "))
-sequence.append(WaitAction("object:state-changed:checked",
-                           None,
-                           None,
-                           pyatspi.ROLE_CHECK_BOX,
-                           5000))
-sequence.append(utils.AssertPresentationAction(
-    "Top resize check box unchecked",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame Vertical Panel <x> Resize CheckBox'",
-     "     VISIBLE:  '<x> Resize CheckBox', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame'",
-     "     VISIBLE:  'gtk-demo Application Panes Frame', cursor=22",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame Vertical Panel <x> Resize CheckBox'",
-     "     VISIBLE:  '<x> Resize CheckBox', cursor=1",
-     "SPEECH OUTPUT: 'checked'",
-     "SPEECH OUTPUT: 'Panes frame'",
-     "SPEECH OUTPUT: 'Vertical panel Resize check box checked'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(TypeAction(" "))
-sequence.append(WaitAction("object:state-changed:checked",
-                           None,
-                           None,
-                           pyatspi.ROLE_CHECK_BOX,
-                           5000))
-sequence.append(utils.AssertPresentationAction(
-    "Top resize check box checked",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame Vertical Panel < > Resize CheckBox'",
-     "     VISIBLE:  '< > Resize CheckBox', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame'",
-     "     VISIBLE:  'gtk-demo Application Panes Frame', cursor=22",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame Vertical Panel < > Resize CheckBox'",
-     "     VISIBLE:  '< > Resize CheckBox', cursor=1",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: 'Panes frame'",
-     "SPEECH OUTPUT: 'Vertical panel Resize check box not checked'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Tab"))
-sequence.append(WaitForFocus("Resize", acc_role=pyatspi.ROLE_CHECK_BOX))
-sequence.append(utils.AssertPresentationAction(
-    "Bottom resize check box checked",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame Vertical Panel <x> Resize CheckBox'",
-     "     VISIBLE:  '<x> Resize CheckBox', cursor=1",
-     "SPEECH OUTPUT: 'Resize check box checked'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(TypeAction(" "))
-sequence.append(WaitAction("object:state-changed:checked",
-                           None,
-                           None,
-                           pyatspi.ROLE_CHECK_BOX,
-                           5000))
-sequence.append(utils.AssertPresentationAction(
-    "Bottom resize check box unchecked",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame Vertical Panel < > Resize CheckBox'",
-     "     VISIBLE:  '< > Resize CheckBox', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame'",
-     "     VISIBLE:  'gtk-demo Application Panes Frame', cursor=22",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame Vertical Panel < > Resize CheckBox'",
-     "     VISIBLE:  '< > Resize CheckBox', cursor=1",
-     "SPEECH OUTPUT: 'not checked'",
-     "SPEECH OUTPUT: 'Panes frame'",
-     "SPEECH OUTPUT: 'Vertical panel Resize check box not checked'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(TypeAction(" "))
-sequence.append(WaitAction("object:state-changed:checked",
-                           None,
-                           None,
-                           pyatspi.ROLE_CHECK_BOX,
-                           5000))
-sequence.append(utils.AssertPresentationAction(
-    "Bottom resize check box unchecked",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame Vertical Panel <x> Resize CheckBox'",
-     "     VISIBLE:  '<x> Resize CheckBox', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame'",
-     "     VISIBLE:  'gtk-demo Application Panes Frame', cursor=22",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame Vertical Panel <x> Resize CheckBox'",
-     "     VISIBLE:  '<x> Resize CheckBox', cursor=1",
-     "SPEECH OUTPUT: 'checked'",
-     "SPEECH OUTPUT: 'Panes frame'",
-     "SPEECH OUTPUT: 'Vertical panel Resize check box checked'"]))
-
-########################################################################
-# Close the Panes demo window
-#
-sequence.append(KeyComboAction("<Alt>F4", 500))
-
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TREE_TABLE,
-                           5000))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_check_menu_item.py 
b/test/keystrokes/gtk-demo/role_check_menu_item.py
index 8ed3ec8..a5d8617 100644
--- a/test/keystrokes/gtk-demo/role_check_menu_item.py
+++ b/test/keystrokes/gtk-demo/role_check_menu_item.py
@@ -1,81 +1,52 @@
 #!/usr/bin/python
 
-"""Test of menu checkbox output using the gtk-demo Application Main Window
-   demo.
-"""
+"""Test of check menu item output."""
 
 from macaroon.playback import *
 
 sequence = MacroSequence()
 import utils
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Application Main Window demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Application main window", 1000))
-sequence.append(KeyComboAction("Return", 500))
-
-########################################################################
-# When the demo comes up, go to the Bold check menu item in the
-# Preferences menu.
-#
-#sequence.append(WaitForWindowActivate("Application Window",None))
-sequence.append(WaitForFocus("Open", acc_role=pyatspi.ROLE_PUSH_BUTTON))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("<Alt>p"))
 
-sequence.append(WaitForFocus("Color", acc_role=pyatspi.ROLE_MENU))
-
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Up"))
-sequence.append(WaitForFocus("Bold", acc_role=pyatspi.ROLE_CHECK_MENU_ITEM))
+sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Bold check item",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame MenuBar <x> Bold 
CheckItem\((Control|Primary) b\)'",
-     "     VISIBLE:  '<x> Bold CheckItem\((Control|Primary) b\)', cursor=1",
-     "SPEECH OUTPUT: 'Bold check item checked (Control|Primary) b'"]))
+    "Arrow to first check menu item - not checked",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Hide Titlebar when 
maximized check menu item'",
+     "     VISIBLE:  '< > Hide Titlebar when maximized', cursor=1",
+     "SPEECH OUTPUT: 'Hide Titlebar when maximized check menu item not checked'"]))
+
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("<Alt>p"))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Bold check item Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame MenuBar <x> Bold 
CheckItem\((Control|Primary) b\)'",
-     "     VISIBLE:  '<x> Bold CheckItem\((Control|Primary) b\)', cursor=1",
-     "SPEECH OUTPUT: 'Preferences'",
-     "SPEECH OUTPUT: 'menu'",
-     "SPEECH OUTPUT: 'Bold'",
-     "SPEECH OUTPUT: 'check item checked (Control|Primary) b 4 of 4.'",
-     "SPEECH OUTPUT: 'b'"]))
+    "Arrow to first check menu item - checked",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame <x> Hide Titlebar when 
maximized check menu item'",
+     "     VISIBLE:  '<x> Hide Titlebar when maximized', cursor=1",
+     "SPEECH OUTPUT: 'Hide Titlebar when maximized check menu item checked'"]))
 
-########################################################################
-# Dismiss the menu and close the Application Window demo window
-#
+sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Escape"))
-sequence.append(WaitForFocus("Open", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(KeyComboAction("<Alt>F4", 500))
+sequence.append(KeyComboAction("<Alt>p"))
 
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "Arrow to first check menu item - not checked",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Hide Titlebar when 
maximized check menu item'",
+     "     VISIBLE:  '< > Hide Titlebar when maximized', cursor=1",
+     "SPEECH OUTPUT: 'Hide Titlebar when maximized check menu item not checked'"]))
 
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_color_chooser.py b/test/keystrokes/gtk-demo/role_color_chooser.py
new file mode 100644
index 0000000..cfc6bd5
--- /dev/null
+++ b/test/keystrokes/gtk-demo/role_color_chooser.py
@@ -0,0 +1,130 @@
+#!/usr/bin/python
+
+"""Test of color chooser output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Color Chooser"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("space"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "Arrow to the next swatch",
+    ["BRAILLE LINE:  'gtk-demo application Changing color dialog & y Light Orange radio button'",
+     "     VISIBLE:  '& y Light Orange radio button', cursor=1",
+     "SPEECH OUTPUT: 'Light Orange not selected radio button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("space"))
+sequence.append(utils.AssertPresentationAction(
+    "Space to select the current swatch",
+    ["BRAILLE LINE:  'gtk-demo application Changing color dialog &=y Light Orange radio button'",
+     "     VISIBLE:  '&=y Light Orange radio button', cursor=1",
+     "SPEECH OUTPUT: 'selected'"]))
+
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Left"))
+sequence.append(KeyComboAction("space"))
+sequence.append(KeyComboAction("Tab"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "Focus Hue color chooser",
+    ["BRAILLE LINE:  'gtk-demo application Changing color dialog Hue 0.00 color chooser'",
+     "     VISIBLE:  'Hue 0.00 color chooser', cursor=1",
+     "SPEECH OUTPUT: 'color chooser 0.00'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "Change Hue value",
+    ["BRAILLE LINE:  'gtk-demo application Changing color dialog Hue 0.01 color chooser'",
+     "     VISIBLE:  'Hue 0.01 color chooser', cursor=1",
+     "SPEECH OUTPUT: '0.01'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "Change Hue value",
+    ["BRAILLE LINE:  'gtk-demo application Changing color dialog Hue 0.02 color chooser'",
+     "     VISIBLE:  'Hue 0.02 color chooser', cursor=1",
+     "SPEECH OUTPUT: '0.02'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "Hue Where Am I",
+    ["BRAILLE LINE:  'gtk-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.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "Focus Color Plane color chooser",
+    ["BRAILLE LINE:  'gtk-demo application Changing color dialog Color Plane color chooser'",
+     "     VISIBLE:  'Color Plane color chooser', cursor=1",
+     "SPEECH OUTPUT: 'color chooser'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "Change value in Plane",
+    ["KNOWN ISSUE: We are presenting nothing here.",
+     ""]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "Change value in Plane",
+    ["KNOWN ISSUE: We are presenting nothing here.",
+     ""]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "Plane Where Am I",
+    ["KNOWN ISSUE: We're not presenting the value here.",
+     "BRAILLE LINE:  'gtk-demo application Changing color dialog Color Plane color chooser'",
+     "     VISIBLE:  'Color Plane color chooser', cursor=1",
+     "SPEECH OUTPUT: 'color chooser'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "Focus Alpha color chooser",
+    ["BRAILLE LINE:  'gtk-demo application Changing color dialog Alpha 1.00 color chooser'",
+     "     VISIBLE:  'Alpha 1.00 color chooser', cursor=1",
+     "SPEECH OUTPUT: 'color chooser 1.00'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Up"))
+sequence.append(utils.AssertPresentationAction(
+    "Change Alpha value",
+     ["BRAILLE LINE:  'gtk-demo application Changing color dialog Alpha 0.99 color chooser'",
+      "     VISIBLE:  'Alpha 0.99 color chooser', cursor=1",
+      "SPEECH OUTPUT: '0.99'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "Alpha Where Am I",
+    ["BRAILLE LINE:  'gtk-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.'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_column_header.py b/test/keystrokes/gtk-demo/role_column_header.py
index 9be2469..97b1c2b 100644
--- a/test/keystrokes/gtk-demo/role_column_header.py
+++ b/test/keystrokes/gtk-demo/role_column_header.py
@@ -1,249 +1,95 @@
 #!/usr/bin/python
 
-"""Test of column header output using the gtk-demo List Store demo
-   under the Tree View area.
-"""
+"""Test of column header output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the List Store demo
-#
-sequence.append(KeyComboAction("<Control>f"))
-sequence.append(PauseAction(1000))
-sequence.append(TypeAction("Tree View", 1000))
-sequence.append(KeyComboAction("Return", 500))
+sequence.append(KeyComboAction("End"))
 sequence.append(KeyComboAction("<Shift>Right"))
-sequence.append(WaitAction("object:state-changed:expanded",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE_CELL,
-                           5000))
-
-sequence.append(KeyComboAction("<Control>f"))
-sequence.append(PauseAction(1000))
-sequence.append(TypeAction("List Store", 1000))
-sequence.append(KeyComboAction("Return", 1000))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Return"))
 
-########################################################################
-# When the GtkListStore demo window appears, navigate the table headers.
-#
+sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
-sequence.append(WaitForFocus("Bug number",
-                             acc_role=pyatspi.ROLE_TABLE_COLUMN_HEADER))
-sequence.append(PauseAction(3000))
+sequence.append(utils.AssertPresentationAction(
+    "Bug number column header",
+    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Bug number column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs  '",
+     "     VISIBLE:  '60482 Normal scrollable notebook', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Bug number table column header'",
+     "     VISIBLE:  'Bug number table column header', cursor=1",
+     "SPEECH OUTPUT: 'Bug number column header 60482'",
+     "SPEECH OUTPUT: 'Bug number table column header'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
-sequence.append(WaitForFocus("Severity",
-                             acc_role=pyatspi.ROLE_TABLE_COLUMN_HEADER))
 sequence.append(utils.AssertPresentationAction(
     "Severity column header",
-    ["BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Severity ColumnHeader'",
-     "     VISIBLE:  'Severity ColumnHeader', cursor=1",
-     "SPEECH OUTPUT: 'Severity column header'"]))
+    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Severity table column header'",
+     "     VISIBLE:  'Severity table column header', cursor=1",
+     "SPEECH OUTPUT: 'Severity table column header'"]))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Right", 500))
-sequence.append(WaitForFocus("Description",
-                             acc_role=pyatspi.ROLE_TABLE_COLUMN_HEADER))
+sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
     "Description column header",
-    ["BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Description 
ColumnHeader'",
-     "     VISIBLE:  'Description ColumnHeader', cursor=1",
-     "SPEECH OUTPUT: 'Description column header'"]))
+    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Description table column header'",
+     "     VISIBLE:  'Description table column header', cursor=1",
+     "SPEECH OUTPUT: 'Description table column header'"]))
 
-########################################################################
-# Now go down into the table to see if we read the column headers as we
-# move from column to column.  You should end up in the "scrollable
-# notebooks and hidden tabs" cell.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Down", 500))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TABLE))
+sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "Enter table",
     ["BUG? - For some reason, the VISIBLE braille is not scrolling to the focused cell.",
-     "BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Fixed? ColumnHeader < > 
Fixed? 60482 Normal scrollable notebooks and hidden tabs  '",
-     "     VISIBLE:  'gtk-demo Application GtkListStor', 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? column header Fixed? check box not checked 60482 Normal scrollable notebooks 
and hidden tabs image'"]))
 
-#    ["KNOWN ISSUE -   Currently we are speaking the selected state here. We probably should not be doing 
this.",
-#     "BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table'",
-#     "     VISIBLE:  'Table', cursor=1",
-#     "BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Description 
ColumnHeader < > Fixed? 60482 Normal scrollable notebooks and hidden tabs '",
-#     "     VISIBLE:  'scrollable notebooks and hidden ', cursor=1",
-#     "SPEECH OUTPUT: 'table'",
-#     "SPEECH OUTPUT: 'Description column header Fixed? check box not checked 60482 Normal scrollable 
notebooks and hidden tabs not selected'"]))
+# GtkTreeView swallows this keypress (for all users; not just Orca users).
+sequence.append(KeyComboAction("Left"))
 
-########################################################################
-# Now move to the cell containing the word "Normal".
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Control>Left", 5000))
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE,
-                           5000))
+sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
     "Normal cell",
-    ["BUG? - For some reason, we're not updating our position. This problem is present in both Gtk+ 2 and 
Gtk+ 3, with AT-SPI2. This problem did not used to occur."]))
-#    ["BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Severity ColumnHeader < 
Fixed? 60482 Normal scrollable notebooks and hidden tabs '",
-#     "     VISIBLE:  'Normal scrollable notebooks and ', cursor=1",
-#     "SPEECH OUTPUT: 'Severity column header Normal'"]))
+    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Severity column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs  '",
+     "     VISIBLE:  'Normal scrollable notebooks and ', cursor=1",
+     "SPEECH OUTPUT: 'Severity column header Normal'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Normal cell basic Where Am I",
-    ["BUG? - For some reason, we're not updating our position. This problem is present in both Gtk+ 2 and 
Gtk+ 3, with AT-SPI2. This problem did not used to occur.",
-     "BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Fixed? ColumnHeader < > 
Fixed? 60482 Normal scrollable notebooks and hidden tabs  '",
-     "     VISIBLE:  '< > Fixed? 60482 Normal scrollab', cursor=1",
-     "SPEECH OUTPUT: 'table Fixed? cell check box not checked column 1 of 6 row 1 of 14'"]))
-
-#    ["BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Severity ColumnHeader < 
Fixed? 60482 Normal scrollable notebooks and hidden tabs '",
-#     "     VISIBLE:  'Normal scrollable notebooks and ', cursor=1",
-#     "SPEECH OUTPUT: 'table Severity cell Normal column 3 of 5 row 1 of 14'"]))
+    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Severity column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs  '",
+     "     VISIBLE:  'Normal scrollable notebooks and ', cursor=1",
+     "SPEECH OUTPUT: 'table Severity table cell Normal column 3 of 6 row 1 of 14'"]))
 
-########################################################################
-# Do a detailed "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Normal cell detailed Where Am I",
-    ["BUG? - For some reason, we're not updating our position. This problem is present in both Gtk+ 2 and 
Gtk+ 3, with AT-SPI2. This problem did not used to occur.",
-     "BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Fixed? ColumnHeader < > 
Fixed? 60482 Normal scrollable notebooks and hidden tabs  '",
-     "     VISIBLE:  '< > Fixed? 60482 Normal scrollab', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Fixed? ColumnHeader < > 
Fixed? 60482 Normal scrollable notebooks and hidden tabs  '",
-     "     VISIBLE:  '< > Fixed? 60482 Normal scrollab', cursor=1",
-     "SPEECH OUTPUT: 'table Fixed? cell check box not checked column 1 of 6 row 1 of 14'",
-     "SPEECH OUTPUT: 'table Fixed? cell check box not checked column 1 of 6 row 1 of 14 Fixed? check box not 
checked 60482 Normal'",
+    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Severity column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs  '",
+     "     VISIBLE:  'Normal scrollable notebooks and ', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Severity column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs  '",
+     "     VISIBLE:  'Normal scrollable notebooks and ', cursor=1",
+     "SPEECH OUTPUT: 'table Severity table cell Normal column 3 of 6 row 1 of 14'",
+     "SPEECH OUTPUT: 'table Severity table cell Normal column 3 of 6 row 1 of 14 Fixed? check box not 
checked 60482 Normal'",
      "SPEECH OUTPUT: 'scrollable notebooks and hidden tabs'"]))
 
-
-#    ["BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Severity ColumnHeader < 
Fixed? 60482 Normal scrollable notebooks and hidden tabs '",
-#     "     VISIBLE:  'Normal scrollable notebooks and ', cursor=1",
-#     "BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Severity ColumnHeader < 
Fixed? 60482 Normal scrollable notebooks and hidden tabs '",
-#     "     VISIBLE:  'Normal scrollable notebooks and ', cursor=1",
-#     "SPEECH OUTPUT: 'table Severity cell Normal column 3 of 5 row 1 of 14'",
-#     "SPEECH OUTPUT: 'table Severity cell Normal column 3 of 5 row 1 of 14 Fixed? check box not checked 
60482 Normal scrollable notebooks and hidden tabs'"]))
-
-########################################################################
-# Now move to the cell to the left containing the number "60482".
-#
-sequence.append(KeyComboAction("<Control>Left"))
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Control>Left"))
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE,
-                           5000))
+sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
     "60482 cell",
-    ["BUG? - For some reason, the VISIBLE braille is not scrolling to the focused cell.",
-     "BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Bug number ColumnHeader 
< > Fixed? 60482 Normal scrollable notebooks and hidden tabs  '",
-     "     VISIBLE:  'gtk-demo Application GtkListStor', cursor=1",
-     "SPEECH OUTPUT: 'Bug number column header 60482'"]))
-
-########################################################################
-# Now move to the cell to the left containing the checkbox.
-#
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Control>Left", 500))
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE,
-                           5000))
-sequence.append(utils.AssertPresentationAction(
-    "Checkbox cell",
-    ["BUG? - For some reason, we're not presenting our location. This problem is present in both Gtk+ 2 and 
Gtk+ 3, with AT-SPI2. This problem did not used to occur."]))
-#
-#    ["BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Fixed? ColumnHeader < > 
Fixed? 60482 Normal scrollable notebooks and hidden tabs  '",
-#     "     VISIBLE:  '< > Fixed? 60482 Normal scrollab', cursor=1",
-#     "SPEECH OUTPUT: 'Fixed? column header check box not checked'"]))
-
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
-sequence.append(utils.AssertPresentationAction(
-    "Checkbox cell basic Where Am I",
-    ["BUG? - For some reason, we're not updating our position correctly. This problem is present in both 
Gtk+ 2 and Gtk+ 3, with AT-SPI2. This problem did not used to occur.",
-     "BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Bug number ColumnHeader 
< > Fixed? 60482 Normal scrollable notebooks and hidden tabs  '",
+    ["BRAILLE LINE:  'gtk-demo application GtkListStore demo frame table Bug number column header < > Fixed? 
60482 Normal scrollable notebooks and hidden tabs  '",
      "     VISIBLE:  '60482 Normal scrollable notebook', cursor=1",
-     "SPEECH OUTPUT: 'table Bug number cell 60482 column 2 of 6 row 1 of 14'"]))
-#    ["BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Fixed? ColumnHeader < > 
Fixed? 60482 Normal scrollable notebooks and hidden tabs '",
-#     "     VISIBLE:  '< > Fixed? 60482 Normal scrollab', cursor=1",
-#     "SPEECH OUTPUT: 'table Fixed? cell check box not checked column 1 of 5 row 1 of 14'"]))
-
-########################################################################
-# Do a detailed "Where Am I" via KP_Enter.
-#
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
-sequence.append(utils.AssertPresentationAction(
-    "Checkbox cell detailed Where Am I",
-    ["BUG? - For some reason, we're not updating our position correctly. This problem is present in both 
Gtk+ 2 and Gtk+ 3, with AT-SPI2. This problem did not used to occur.",
-     "BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Bug number ColumnHeader 
< > Fixed? 60482 Normal scrollable notebooks and hidden tabs  '",
-     "     VISIBLE:  '60482 Normal scrollable notebook', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Bug number ColumnHeader 
< > Fixed? 60482 Normal scrollable notebooks and hidden tabs  '",
-     "     VISIBLE:  '60482 Normal scrollable notebook', cursor=1",
-     "SPEECH OUTPUT: 'table Bug number cell 60482 column 2 of 6 row 1 of 14'",
-     "SPEECH OUTPUT: 'table Bug number cell 60482 column 2 of 6 row 1 of 14 Fixed? check box not checked 
60482 Normal'",
-     "SPEECH OUTPUT: 'scrollable notebooks and hidden tabs'"]))
-
-#    ["BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Fixed? ColumnHeader < > 
Fixed? 60482 Normal scrollable notebooks and hidden tabs '",
-#     "     VISIBLE:  '< > Fixed? 60482 Normal scrollab', cursor=1",
-#     "BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Fixed? ColumnHeader < > 
Fixed? 60482 Normal scrollable notebooks and hidden tabs '",
-#     "     VISIBLE:  '< > Fixed? 60482 Normal scrollab', cursor=1",
-#     "SPEECH OUTPUT: 'table Fixed? cell check box not checked column 1 of 5 row 1 of 14'",
-#     "SPEECH OUTPUT: 'table Fixed? cell check box not checked column 1 of 5 row 1 of 14 Fixed? check box 
not checked 60482 Normal scrollable notebooks and hidden tabs'"]))
- 
-########################################################################
-# Close the GtkListStore demo
-#
-sequence.append(KeyComboAction("<Alt>F4", 1000))
-
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TREE_TABLE,
-                           5000))
+     "SPEECH OUTPUT: 'Bug number column header 60482'"]))
 
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_combo_box.py b/test/keystrokes/gtk-demo/role_combo_box.py
index cd9306a..19c40ae 100644
--- a/test/keystrokes/gtk-demo/role_combo_box.py
+++ b/test/keystrokes/gtk-demo/role_combo_box.py
@@ -1,261 +1,121 @@
 #!/usr/bin/python
 
-"""Test of combobox output using the gtk-demo Combo boxes demo.
-"""
+"""Test of combobox output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Combo boxes demo 
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Combo boxes", 1000))
-sequence.append(KeyComboAction("Return", 500))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Return", 500))
-
-########################################################################
-# When the Combo boxes demo window appears, open the combo box.
-#
-#sequence.append(WaitForWindowActivate("Combo boxes",None))
-sequence.append(PauseAction(1000))
+sequence.append(TypeAction("Combo boxes"))
+sequence.append(KeyComboAction("Return"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
 sequence.append(utils.AssertPresentationAction(
     "Warning combo box item",
-    ["BRAILLE LINE:  'gtk-demo Application Combo boxes Frame'",
-     "     VISIBLE:  'Combo boxes Frame', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Some stock icons Panel Warning Combo'",
-     "     VISIBLE:  'Warning Combo', cursor=1",
+    ["BRAILLE LINE:  'gtk-demo application Combo boxes frame'",
+     "     VISIBLE:  'Combo boxes frame', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application Combo boxes frame Items with icons panel Warning combo box'",
+     "     VISIBLE:  'Warning combo box', cursor=1",
      "SPEECH OUTPUT: 'Combo boxes frame'",
-     "SPEECH OUTPUT: 'Some stock icons panel Warning combo box'"]))
+     "SPEECH OUTPUT: 'Items with icons panel'",
+     "SPEECH OUTPUT: 'Warning combo box'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Warning combo box item Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Some stock icons Panel Warning Combo'",
-     "     VISIBLE:  'Warning Combo', cursor=1",
+    ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Items with icons panel Warning combo box'",
+     "     VISIBLE:  'Warning combo box', cursor=1",
      "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'Warning'",
      "SPEECH OUTPUT: '1 of 5'"]))
 
-########################################################################
-# Now arrow down and select the "New" item.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "New combo box item",
-    ["BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Some stock icons Panel New Combo'",
-     "     VISIBLE:  'New Combo', cursor=1",
+    ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Items with icons panel  combo boxNew New'",
+     "     VISIBLE:  'New', cursor=1",
      "SPEECH OUTPUT: 'New'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "New combo box item Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Some stock icons Panel New Combo'",
-     "     VISIBLE:  'New Combo', cursor=1",
+    ["KNOWN ISSUE: We're a bit chatty here and have some spacing issues",
+     "BRAILLE LINE:  'gtk-demo application Combo boxes frame Items with icons panel  combo boxNew New'",
+     "     VISIBLE:  'New', cursor=1",
+     "SPEECH OUTPUT: 'Combo boxes'",
+     "SPEECH OUTPUT: 'frame'",
+     "SPEECH OUTPUT: 'Items with icons'",
+     "SPEECH OUTPUT: 'panel'",
+     "SPEECH OUTPUT: 'New'",
      "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'New'",
      "SPEECH OUTPUT: '3 of 5'"]))
 
-########################################################################
-# Select the "New" entry and tab to the editable text combo box.  Skip
-# the middle combo.  It's bizarre.
-#
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Return"))
-sequence.append(utils.AssertPresentationAction(
-    "New combo box item selection",
-    ["KNOWN ISSUE - We get some additional crap presented due to unexpected/improper window events from 
Gtk+",
-     "BRAILLE LINE:  'gtk-demo Application Combo boxes Frame'",
-     "     VISIBLE:  'Combo boxes Frame', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Some stock icons Panel New Combo'",
-     "     VISIBLE:  'New Combo', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Window'",
-     "     VISIBLE:  'gtk-demo Application Window', cursor=22",
-     "BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Some stock icons Panel  ComboNew New'",
-     "     VISIBLE:  'New', cursor=1",
-     "SPEECH OUTPUT: 'Combo boxes frame'",
-     "SPEECH OUTPUT: 'Some stock icons panel New combo box'",
-     "SPEECH OUTPUT: 'window'",
-     "SPEECH OUTPUT: 'Some stock icons panel New'"]))
-
-sequence.append(KeyComboAction("Escape"))
 sequence.append(KeyComboAction("Tab"))
-sequence.append(WaitForFocus("Boston", acc_role=pyatspi.ROLE_COMBO_BOX))
 
-########################################################################
-# Land on the editable text combo box.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
 sequence.append(utils.AssertPresentationAction(
     "Editable text combo box",
-    ["BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Editable Panel  $l'",
+    ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel  $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'Editable panel text'"]))
+     "SPEECH OUTPUT: 'Editable panel'",
+     "SPEECH OUTPUT: 'text'"]))
 
-########################################################################
-# Type "Four" in the text area. Due to timing issues, we'll only record
-# the last key press.
-#
-sequence.append(TypeAction("Fou", 500))
+sequence.append(TypeAction("Fou"))
 sequence.append(utils.StartRecordingAction())
-sequence.append(TypeAction("r", 500))
+sequence.append(TypeAction("r"))
 sequence.append(utils.AssertPresentationAction(
     "Editable text combo box typing",
-    ["BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Editable Panel Four $l'",
+    ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel Four $l'",
      "     VISIBLE:  'Four $l', cursor=5",
-     "BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Editable Panel Four $l'",
+     "BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel Four $l'",
      "     VISIBLE:  'Four $l', cursor=5"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Editable text combo box Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Editable Panel Four $l'",
+    ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel Four $l'",
      "     VISIBLE:  'Four $l', cursor=5",
      "SPEECH OUTPUT: 'text'",
      "SPEECH OUTPUT: 'Four'"]))
 
-########################################################################
-# Tab to the triangular down arrow of the editable combo box.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
 sequence.append(utils.AssertPresentationAction(
     "Editable text combo box open button",
-    ["BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Editable Panel Four $l Combo'",
-     "     VISIBLE:  'Four $l Combo', cursor=5",
+    ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel Four $l combo box'",
+     "     VISIBLE:  'Four $l combo box', cursor=5",
      "SPEECH OUTPUT: 'Four combo box'"]))
 
-########################################################################
-# When you land on the "Four" combo box, the text should be selected.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
 sequence.append(utils.AssertPresentationAction(
     "Editable text combo box with selected text",
-    ["BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Editable Panel Four $l'",
+    ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel Four $l'",
+     "     VISIBLE:  'Four $l', cursor=5",
+     "BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel Four $l'",
      "     VISIBLE:  'Four $l', cursor=5",
      "SPEECH OUTPUT: 'text Four selected'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Editable text combo box with selected text Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Editable Panel Four $l'",
+    ["BRAILLE LINE:  'gtk-demo application Combo boxes frame Editable panel Four $l'",
      "     VISIBLE:  'Four $l', cursor=5",
      "SPEECH OUTPUT: 'text'",
      "SPEECH OUTPUT: 'Four'",
      "SPEECH OUTPUT: 'selected'"]))
 
-########################################################################
-# Tab to the triangular down arrow of the editable combo box and open
-# the combo box.
-#
-sequence.append(KeyComboAction("Tab"))
-sequence.append(TypeAction(" "))
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Down"))
-sequence.append(utils.AssertPresentationAction(
-    "Editable text combo box menu",
-    ["BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Editable Panel  ComboFour $l One'",
-     "     VISIBLE:  'One', cursor=1",
-     "SPEECH OUTPUT: 'Editable panel One'"]))
-
-########################################################################
-# Now down arrow to the "Two" item.
-#
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Down"))
-sequence.append(utils.AssertPresentationAction(
-    "Editable text combo box One item",
-    ["BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Editable Panel  ComboFour $l Two'",
-     "     VISIBLE:  'Two', cursor=1",
-     "SPEECH OUTPUT: 'Two'"]))
-
-########################################################################
-# Select "Two" and Shift+Tab back to the text area.
-#
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Return"))
-sequence.append(utils.AssertPresentationAction(
-    "Editable text combo box Two selected",
-    ["BRAILLE LINE:  'gtk-demo Application Combo boxes Frame'",
-     "     VISIBLE:  'Combo boxes Frame', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Editable Panel Two $l Combo'",
-     "     VISIBLE:  'Two $l Combo', cursor=1",
-     "SPEECH OUTPUT: 'Combo boxes frame'",
-     "SPEECH OUTPUT: 'Editable panel Two combo box'"]))
-
-sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(KeyComboAction("Tab"))
-sequence.append(WaitForFocus("", acc_role=pyatspi.ROLE_COMBO_BOX))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(utils.AssertPresentationAction(
-    "Editable text combo box Two text selected",
-    ["BRAILLE LINE:  'gtk-demo Application Combo boxes Frame Editable Panel Two $l'",
-     "     VISIBLE:  'Two $l', cursor=4",
-     "SPEECH OUTPUT: 'text Two selected'"]))
-
-########################################################################
-# Close the Combo boxes demo
-#
-sequence.append(KeyComboAction("<Alt>F4", 500))
-
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TREE_TABLE,
-                           5000))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_combo_box2.py b/test/keystrokes/gtk-demo/role_combo_box2.py
index a3b1431..4fd4576 100644
--- a/test/keystrokes/gtk-demo/role_combo_box2.py
+++ b/test/keystrokes/gtk-demo/role_combo_box2.py
@@ -1,109 +1,64 @@
 #!/usr/bin/python
 
-"""Test of combobox output using the gtk-demo Printing demo, which
-gets us a labelled combo box.
-"""
+"""Test of labelled combo box output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Printing demo 
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Printing", 1000))
-sequence.append(KeyComboAction("Return", 500))
+sequence.append(TypeAction("Printing"))
+sequence.append(KeyComboAction("Return"))
 
-########################################################################
-# When the Printing demo window appears, navigate to the "Only print"
-# combo box on the "Page Setup" tab.
-# 
-#sequence.append(WaitForWindowActivate("Print",None))
-sequence.append(WaitForFocus("General", acc_role=pyatspi.ROLE_PAGE_TAB))
 sequence.append(KeyComboAction("Right"))
-
-sequence.append(WaitForFocus("Page Setup", acc_role=pyatspi.ROLE_PAGE_TAB))
-
 sequence.append(KeyComboAction("Tab"))
-sequence.append(PauseAction(1000))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
-sequence.append(WaitForFocus("All sheets", acc_role=pyatspi.ROLE_COMBO_BOX))
 sequence.append(utils.AssertPresentationAction(
-    "All sheets combo box item",
-    ["BRAILLE LINE:  'gtk-demo Application Print Dialog TabList Page Setup Page Layout Filler Only print: 
All sheets Combo'",
-     "     VISIBLE:  'Only print: All sheets Combo', cursor=13",
+    "Combo box",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog Page Setup page tab Layout filler Only print: All 
sheets combo box'",
+     "     VISIBLE:  'Only print: All sheets combo box', cursor=13",
      "SPEECH OUTPUT: 'Only print: All sheets combo box'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
-    "All sheets combo box item Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Print Dialog TabList Page Setup Page Layout Filler Only print: 
All sheets Combo'",
-     "     VISIBLE:  'Only print: All sheets Combo', cursor=13",
+    "Where Am I",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog Page Setup page tab Layout filler Only print: All 
sheets combo box'",
+     "     VISIBLE:  'Only print: All sheets combo box', cursor=13",
      "SPEECH OUTPUT: 'Only print:'",
      "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'All sheets'",
-     "SPEECH OUTPUT: '1 of 3'"]))
+     "SPEECH OUTPUT: '1 of 3.'",
+     "SPEECH OUTPUT: 'Alt+O'"]))
 
-########################################################################
-# Down arrow to select the "Even sheets" item in the combo box.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(PauseAction(1000))
 sequence.append(utils.AssertPresentationAction(
-    "Even sheets combo box item",
-    ["BRAILLE LINE:  'gtk-demo Application Print Dialog TabList Page Setup Page Layout Filler Only print: 
Even sheets Combo'",
-     "     VISIBLE:  'Only print: Even sheets Combo', cursor=13",
+    "Change selection",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog Page Setup page tab Layout filler  combo boxOnly 
print: Even sheets Even sheets'",
+     "     VISIBLE:  'Even sheets', cursor=1",
      "SPEECH OUTPUT: 'Even sheets'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
-    "Even sheets combo box item Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Print Dialog TabList Page Setup Page Layout Filler Only print: 
Even sheets Combo'",
-     "     VISIBLE:  'Only print: Even sheets Combo', cursor=13",
-     "SPEECH OUTPUT: 'Only print:'",
+    "Where Am I",
+    ["KNOWN ISSUE: We're a bit chatty here and the space is off with the combo box",
+     "BRAILLE LINE:  'gtk-demo application Print dialog Page Setup page tab Layout filler  combo boxOnly 
print: Even sheets Even sheets'",
+     "     VISIBLE:  'Even sheets', cursor=1",
+     "SPEECH OUTPUT: 'Print Layout Paper %'",
+     "SPEECH OUTPUT: 'Page Setup'",
+     "SPEECH OUTPUT: 'page tab'",
+     "SPEECH OUTPUT: 'Layout'",
+     "SPEECH OUTPUT: 'Only print: Even sheets'",
      "SPEECH OUTPUT: 'combo box'",
      "SPEECH OUTPUT: 'Even sheets'",
      "SPEECH OUTPUT: '2 of 3'"]))
 
-########################################################################
-# Put things back the way they were and close the demo.
-#
-sequence.append(KeyComboAction("Up"))
-sequence.append(KeyComboAction("<Alt>c", 500))
-
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_dialog.py b/test/keystrokes/gtk-demo/role_dialog.py
index 5f0af45..1df7705 100644
--- a/test/keystrokes/gtk-demo/role_dialog.py
+++ b/test/keystrokes/gtk-demo/role_dialog.py
@@ -1,85 +1,40 @@
 #!/usr/bin/python
 
-"""Test of dialog autoreading using the gtk-demo Expander button demo.
-"""
+"""Test of dialog presentation."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Expander demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
 sequence.append(TypeAction("Expander"))
-sequence.append(PauseAction(1000))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Return", 500))
+sequence.append(KeyComboAction("Return"))
 sequence.append(utils.AssertPresentationAction(
     "Dialog automatic reading",
-    ["KNOWN ISSUE - Sometimes the test present the toggle button; sometimes not. Seems to be a test and 
timing issue.",
-     "BRAILLE LINE:  'gtk-demo Application Window Expander $l'",
-     "     VISIBLE:  'emo Application Window Expander ', cursor=24",
-     "BRAILLE LINE:  'gtk-demo Application Window  $l'",
-     "     VISIBLE:  'gtk-demo Application Window  $l', cursor=29",
-     "BRAILLE LINE:  'gtk-demo Application GTK+ Code Demos Frame TabList Widget (double click for demo) Page 
ScrollPane TreeTable Widget (double click for demo) ColumnHeader Expander TREE LEVEL 1'",
-     "     VISIBLE:  'gtk-demo Application GTK+ Code D', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application GtkExpander Dialog & y Details ToggleButton'",
-     "     VISIBLE:  '& y Details ToggleButton', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application GtkExpander Dialog'",
-     "     VISIBLE:  'GtkExpander Dialog', cursor=1",
-     "SPEECH OUTPUT: 'Widget (double click for demo) page Widget (double click for demo) column header 
Expander tree level 1'",
+    ["KNOWN ISSUE: Depending on timing we present more than just the stuff below",
+     "BRAILLE LINE:  'gtk-demo application GtkExpander dialog'",
+     "     VISIBLE:  'GtkExpander dialog', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application GtkExpander dialog & y Details collapsed toggle button'",
+     "     VISIBLE:  '& y Details collapsed toggle but', cursor=1",
      "SPEECH OUTPUT: 'GtkExpander Expander demo. Click on the triangle for details.'",
-     "SPEECH OUTPUT: 'Details toggle button not pressed'"]))
+     "SPEECH OUTPUT: 'Details toggle button collapsed'"]))
 
-########################################################################
-# Give focus to the toggle button. Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Tab"))
+
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Dialog Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application GtkExpander Dialog & y Details ToggleButton'",
-     "     VISIBLE:  '& y Details ToggleButton', cursor=1",
+    ["BRAILLE LINE:  'gtk-demo application GtkExpander dialog & y Details collapsed toggle button'",
+     "     VISIBLE:  '& y Details collapsed toggle but', cursor=1",
      "SPEECH OUTPUT: 'Details'",
-     "SPEECH OUTPUT: 'toggle button not pressed'"]))
-
-########################################################################
-# Now close the demo and leave.
-#
-sequence.append(KeyComboAction("Tab"))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Return", 500))
+     "SPEECH OUTPUT: 'toggle button collapsed'"]))
 
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TREE_TABLE,
-                           5000))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_drawing_area.py b/test/keystrokes/gtk-demo/role_drawing_area.py
new file mode 100644
index 0000000..8c5f01e
--- /dev/null
+++ b/test/keystrokes/gtk-demo/role_drawing_area.py
@@ -0,0 +1,34 @@
+#!/usr/bin/python
+
+"""Test of drawing area output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Drawing Area"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "Flat review current line",
+    ["BRAILLE LINE:  'Checkerboard pattern $l'",
+     "     VISIBLE:  'Checkerboard pattern $l', cursor=1",
+     "SPEECH OUTPUT: 'Checkerboard pattern'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_9"))
+sequence.append(utils.AssertPresentationAction(
+    "Flat review next line",
+    ["BRAILLE LINE:  'drawing area $l'",
+     "     VISIBLE:  'drawing area $l', cursor=1",
+     "SPEECH OUTPUT: 'drawing area'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_icon.py b/test/keystrokes/gtk-demo/role_icon.py
index 4a25657..3134c5c 100644
--- a/test/keystrokes/gtk-demo/role_icon.py
+++ b/test/keystrokes/gtk-demo/role_icon.py
@@ -1,169 +1,65 @@
 #!/usr/bin/python
 
-"""Test of icon output using the gtk-demo Icon View Basics demo under
-   the Icon View area.
-"""
+"""Test of icon output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Icon View Basics demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(PauseAction(1000))
-sequence.append(TypeAction("Icon View", 1000))
-sequence.append(KeyComboAction("Return", 500))
+sequence.append(TypeAction("Images"))
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("Up"))
 sequence.append(KeyComboAction("<Shift>Right"))
-sequence.append(WaitAction("object:state-changed:expanded",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE_CELL,
-                           5000))
-
-sequence.append(KeyComboAction("<Control>f"))
-sequence.append(PauseAction(1000))
-sequence.append(TypeAction("Icon View Basics", 1000))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Return", 500))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_LAYERED_PANE))
-sequence.append(utils.AssertPresentationAction(
-    "Layered pane focus",
-    ["KNOWN ISSUE - Sometimes we get the 'Icon View Basics' stuff; other times we don't. Probably a timing 
issue.",
-     "BRAILLE LINE:  'gtk-demo Application Window Icon View Basics $l'",
-     "     VISIBLE:  'ication Window Icon View Basics ', cursor=16",
-     "BRAILLE LINE:  'gtk-demo Application Window  $l'",
-     "     VISIBLE:  'gtk-demo Application Window  $l', cursor=29",
-     "BRAILLE LINE:  'gtk-demo Application GTK+ Code Demos Frame TabList Widget (double click for demo) Page 
ScrollPane TreeTable Widget (double click for demo) ColumnHeader Icon View Basics TREE LEVEL 2'",
-     "     VISIBLE:  'gtk-demo Application GTK+ Code D', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application GtkIconView demo Frame'",
-     "     VISIBLE:  'GtkIconView demo Frame', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application GtkIconView demo Frame ScrollPane LayeredPane'",
-     "     VISIBLE:  'LayeredPane', cursor=1",
-     "SPEECH OUTPUT: 'Widget (double click for demo) page Widget (double click for demo) column header Icon 
View Basics tree level 2'",
-     "SPEECH OUTPUT: 'GtkIconView demo frame'",
-     "SPEECH OUTPUT: 'layered pane'"]))
-
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
-sequence.append(utils.AssertPresentationAction(
-    "Layered pane Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application GtkIconView demo Frame ScrollPane LayeredPane'",
-     "     VISIBLE:  'LayeredPane', cursor=1",
-     "SPEECH OUTPUT: 'layered pane 0 of [0-9]+ items selected on 0 of [0-9]+'"]))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Return"))
 
-########################################################################
-# Down into the icon list, finally making something be selected in the
-# view.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Down", 500))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_ICON))
+sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "bin icon",
-    ["BRAILLE LINE:  'gtk-demo Application GtkIconView demo Frame ScrollPane LayeredPane bin Icon'",
-     "     VISIBLE:  'bin Icon', cursor=1",
-     "SPEECH OUTPUT: 'bin icon not selected'"]))
+    ["BRAILLE LINE:  'gtk-demo application GtkIconView demo frame bin icon'",
+     "     VISIBLE:  'bin icon', cursor=1",
+     "SPEECH OUTPUT: 'bin icon'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "bin icon Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application GtkIconView demo Frame ScrollPane LayeredPane bin Icon'",
-     "     VISIBLE:  'bin Icon', cursor=1",
+    ["BRAILLE LINE:  'gtk-demo application GtkIconView demo frame bin icon'",
+     "     VISIBLE:  'bin icon', cursor=1",
      "SPEECH OUTPUT: 'Icon panel'",
      "SPEECH OUTPUT: 'bin'",
      "SPEECH OUTPUT: '1 of 20 items selected on 1 of 20'"]))
 
-########################################################################
-# Arrow right and wait for the next icon to be selected.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_ICON))
 sequence.append(utils.AssertPresentationAction(
     "boot icon",
-    ["BRAILLE LINE:  'gtk-demo Application GtkIconView demo Frame ScrollPane LayeredPane boot Icon'",
-     "     VISIBLE:  'boot Icon', cursor=1",
-     "SPEECH OUTPUT: 'boot icon not selected'"]))
+    ["BRAILLE LINE:  'gtk-demo application GtkIconView demo frame boot icon'",
+     "     VISIBLE:  'boot icon', cursor=1",
+     "SPEECH OUTPUT: 'boot icon'"]))
 
-########################################################################
-# Select more than one icon by doing Shift+Right.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Shift>Left", 500))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_ICON))
+sequence.append(KeyComboAction("<Shift>Left"))
 sequence.append(utils.AssertPresentationAction(
     "icon selection",
-    ["BRAILLE LINE:  'gtk-demo Application GtkIconView demo Frame ScrollPane LayeredPane bin Icon'",
-     "     VISIBLE:  'bin Icon', cursor=1",
-     "SPEECH OUTPUT: 'bin icon not selected'"]))
+    ["BRAILLE LINE:  'gtk-demo application GtkIconView demo frame bin icon'",
+     "     VISIBLE:  'bin icon', cursor=1",
+     "SPEECH OUTPUT: 'bin icon'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "icon selection Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application GtkIconView demo Frame ScrollPane LayeredPane bin Icon'",
-     "     VISIBLE:  'bin Icon', cursor=1",
+    ["BRAILLE LINE:  'gtk-demo application GtkIconView demo frame bin icon'",
+     "     VISIBLE:  'bin icon', cursor=1",
      "SPEECH OUTPUT: 'Icon panel'",
      "SPEECH OUTPUT: 'bin'",
      "SPEECH OUTPUT: '2 of 20 items selected on 1 of 20'"]))
 
-########################################################################
-# Close the GtkIconView demo window
-#
-sequence.append(KeyComboAction("<Alt>F4", 1000))
-
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-
-sequence.append(TypeAction("Icon View", 1000))
-sequence.append(KeyComboAction("Return", 500))
-sequence.append(KeyComboAction("<Shift>Left"))
-sequence.append(WaitAction("object:state-changed:expanded",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE_CELL,
-                           5000))
-
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TREE_TABLE,
-                           5000))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_info_bar.py b/test/keystrokes/gtk-demo/role_info_bar.py
new file mode 100644
index 0000000..7a9863f
--- /dev/null
+++ b/test/keystrokes/gtk-demo/role_info_bar.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+
+"""Test of info bar output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Info bar"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Return"))
+sequence.append(utils.AssertPresentationAction(
+    "Start the demo",
+    ["BRAILLE LINE:  'gtk-demo application Info Bars frame'",
+     "     VISIBLE:  'Info Bars frame', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application Info Bars frame Question info bar OK push button'",
+     "     VISIBLE:  'OK push button', cursor=1",
+     "SPEECH OUTPUT: 'Info Bars frame'",
+     "SPEECH OUTPUT: 'Question This is",
+     "an info bar with message type",
+     "GTK_MESSAGE_QUESTION'",
+     "SPEECH OUTPUT: 'OK push button'"]))
+
+# Dismiss all the showing info bars
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("space"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("space"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("space"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("space"))
+sequence.append(KeyComboAction("Tab"))
+sequence.append(KeyComboAction("space"))
+
+sequence.append(KeyComboAction("Tab"))
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("space"))
+sequence.append(utils.AssertPresentationAction(
+    "Show the Message info bar",
+    ["BRAILLE LINE:  'gtk-demo application Info Bars frame Info bars panel An example of different info bars 
filler &=y Message toggle button'",
+     "     VISIBLE:  '&=y Message toggle button', cursor=1",
+     "SPEECH OUTPUT: 'pressed'"]))
+
+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(
+    "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'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+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 1f6d560..eb7350b 100644
--- a/test/keystrokes/gtk-demo/role_label.py
+++ b/test/keystrokes/gtk-demo/role_label.py
@@ -1,47 +1,21 @@
 #!/usr/bin/python
 
-"""Test of label presentation using the gtk-demo
-   Dialog and Message Boxes demo.
-"""
+"""Test of label presentation."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Dialog and Message Boxes demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Dialog and Message Boxes", 1000))
-sequence.append(KeyComboAction("Return", 500))
-
-########################################################################
-# Once the demo is up, invoke the Message Dialog button.
-#
-#sequence.append(WaitForWindowActivate("Dialogs",None))
-sequence.append(WaitForFocus("Message Dialog",
-                             acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(KeyComboAction("Return", 500))
-
-sequence.append(WaitForFocus("OK", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-
-########################################################################
-# Tab to the "This message box..." label.
-#
+sequence.append(TypeAction("Dialog and Message Boxes"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("space"))
+sequence.append(KeyComboAction("space"))
+
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
-sequence.append(WaitAction("object:state-changed:focused",
-                           None,
-                           None,
-                           pyatspi.ROLE_LABEL,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "This message box label",
     ["BRAILLE LINE:  'number of times: $l'",
@@ -51,12 +25,8 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'This message box has been popped up the following",
      "number of times: selected label'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "This message box label Where Am I",
     ["BRAILLE LINE:  'number of times: $l'",
@@ -65,13 +35,9 @@ sequence.append(utils.AssertPresentationAction(
      "number of times:'",
      "SPEECH OUTPUT: 'selected label'"]))
 
-########################################################################
-# Do an extended "Where Am I" via double KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "This message box label Extended Where Am I",
     ["BRAILLE LINE:  'number of times: $l'",
@@ -82,152 +48,92 @@ sequence.append(utils.AssertPresentationAction(
      "number of times:'",
      "SPEECH OUTPUT: 'selected label'"]))
 
-########################################################################
-# Position the caret at the beginning of the label and move right one
-# character.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Home"))
-sequence.append(KeyComboAction("Right", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_LABEL,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "This message box label caret movement to 'h'",
-    ["BRAILLE LINE:  'gtk-demo Application Information Alert This message box has been popped up the 
following $l'",
+    "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 $l'",
+     "     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 $l'",
      "     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 $l'",
-     "     VISIBLE:  'This message box has been popped', cursor=2",
      "SPEECH OUTPUT: 'T'",
-     "SPEECH OUTPUT: 'unselected' voice=system",
+     "SPEECH OUTPUT: 'This message box has been popped up the following",
+     "number of times:'",
+     "SPEECH OUTPUT: 'unselected' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Right"))
+sequence.append(utils.AssertPresentationAction(
+    "This message box label caret movement to 'h'",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
+     "     VISIBLE:  'This message box has been popped', cursor=2",
      "SPEECH OUTPUT: 'h'"]))
 
-########################################################################
-# Select the rest of the word "This".
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Shift><Control>Right", 500))
-sequence.append(WaitAction("object:text-selection-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_LABEL,
-                           5000))
+sequence.append(KeyComboAction("<Shift><Control>Right"))
 sequence.append(utils.AssertPresentationAction(
     "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 $l'",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
      "     VISIBLE:  'This message box has been popped', cursor=5",
      "SPEECH OUTPUT: 'his'",
      "SPEECH OUTPUT: 'selected' voice=system"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "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 $l'",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
      "     VISIBLE:  'This message box has been popped', cursor=5",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
      "number of times:'",
      "SPEECH OUTPUT: 'selected label'"]))
 
-########################################################################
-# Do an extended "Where Am I" via double KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "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 $l'",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
      "     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 $l'",
+     "BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
      "     VISIBLE:  'This message box has been popped', cursor=5",
      "SPEECH OUTPUT: 'This message box has been popped up the following",
      "number of times:'",
      "SPEECH OUTPUT: 'selected label'"]))
 
-########################################################################
-# Arrow left to clear the selection and then do a Shift+Control+Left to
-# select the beginning of the word "This".
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Left", 500))
-sequence.append(KeyComboAction("<Shift><Control>Left", 500))
-sequence.append(WaitAction("object:text-selection-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_LABEL,
-                           5000))
+sequence.append(KeyComboAction("Left"))
 sequence.append(utils.AssertPresentationAction(
-    "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 $l'",
+    "Left Arrow to move to h unselecting his'",
+    ["BRAILLE LINE:  'gtk-demo application Information alert This message box has been popped up the 
following $l'",
+     "     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 $l'",
      "     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 $l'",
-     "     VISIBLE:  'This message box has been popped', cursor=1",
      "SPEECH OUTPUT: 'h'",
-     "SPEECH OUTPUT: 'unselected' voice=system",
+     "SPEECH OUTPUT: 'his'",
+     "SPEECH OUTPUT: 'unselected' voice=system"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift><Control>Left"))
+sequence.append(utils.AssertPresentationAction(
+    "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 $l'",
+     "     VISIBLE:  'This message box has been popped', cursor=1",
      "SPEECH OUTPUT: 'T' voice=uppercase",
      "SPEECH OUTPUT: 'selected' voice=system"]))
 
-########################################################################
-# Reselect the rest of the word "This".
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Shift><Control>Right", 500))
-sequence.append(WaitAction("object:text-selection-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_LABEL,
-                           5000))
+sequence.append(KeyComboAction("<Shift><Control>Right"))
 sequence.append(utils.AssertPresentationAction(
-    "This message box label caret select rest of 'This'",
-    ["BRAILLE LINE:  'gtk-demo Application Information Alert This message box has been popped up the 
following $l'",
+    "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 $l'",
      "     VISIBLE:  'This message box has been popped', cursor=5",
-     "SPEECH OUTPUT: 'This'",
-     "SPEECH OUTPUT: 'unselected' voice=system"]))
-
-########################################################################
-# Close the demo subwindow.
-#
-sequence.append(KeyComboAction("Tab", 500))
-
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_LABEL))
-sequence.append(KeyComboAction("Tab"))
-
-sequence.append(WaitForFocus("OK", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(KeyComboAction("Return", 500))
-
-########################################################################
-# Close the Dialogs demo window
-#
-#sequence.append(WaitForWindowActivate("Dialogs",None))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(KeyComboAction("<Alt>F4", 500))
-
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TREE_TABLE,
-                           5000))
+     "SPEECH OUTPUT: 'T'",
+     "SPEECH OUTPUT: 'unselected' voice=system",
+     "SPEECH OUTPUT: 'his'",
+     "SPEECH OUTPUT: 'selected' voice=system"]))
 
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_listbox.py b/test/keystrokes/gtk-demo/role_listbox.py
new file mode 100644
index 0000000..ab96abd
--- /dev/null
+++ b/test/keystrokes/gtk-demo/role_listbox.py
@@ -0,0 +1,65 @@
+#!/usr/bin/python
+
+"""Test of listbox output."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("List Box"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "Where Am I",
+    ["KNOWN ISSUE: The order of presentation can vary. Seems to be a timing issue.",
+     "BRAILLE LINE:  'gtk-demo application List Box frame list box 2",
+     "Reshares 4",
+     "Favorites 23:00:00 - 26 Mar 2013 Resent by @GTKtoolkit 26 Mar 13 GTK+ 3.8.0 (STABLE) released: 
wayland, Multi-application Broadway, improved CSS support and more ... http://ur1.ca/d6yms  #gtk #gtk3 
Details push button'",
+     "     VISIBLE:  '2",
+     "Reshares 4",
+     "Favorites 23:00:00 ', cursor=1",
+     "SPEECH OUTPUT: '2",
+     "Reshares 4",
+     "Favorites 23:00:00 - 26 Mar 2013 Resent by @GTKtoolkit 26 Mar 13 GTK+ 3.8.0 (STABLE) released: 
wayland, Multi-application Broadway, improved CSS support and more ... http://ur1.ca/d6yms  #gtk #gtk3'",
+     "SPEECH OUTPUT: '1 of 8'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.AssertPresentationAction(
+    "Next item",
+    ["KNOWN ISSUE: The order of presentation can vary. Seems to be a timing issue.",
+     "BRAILLE LINE:  'gtk-demo application List Box frame list box 0",
+     "Favorites 0",
+     "Reshares 20:20:00 - 11 Oct 2013 @GTKtoolkit 11 Oct 13 GLib 2.34.0 (STABLE) released: 
http://ur1.ca/aj4du  #glib Details push button'",
+     "     VISIBLE:  'Resent by 0",
+     "Favorites 0",
+     "Reshares', cursor=1",
+     "SPEECH OUTPUT: 'Resent by 0",
+     "Favorites 0",
+     "Reshares 20:20:00 - 11 Oct 2013 @GTKtoolkit 11 Oct 13 GLib 2.34.0 (STABLE) released: 
http://ur1.ca/aj4du  #glib Details push button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "Where Am I",
+    ["KNOWN ISSUE: The order of presentation can vary. Seems to be a timing issue.",
+     "BRAILLE LINE:  'gtk-demo application List Box frame list box Resent by 0",
+     "Favorites 0",
+     "Reshares 20:20:00 - 11 Oct 2013 @GTKtoolkit 11 Oct 13 GLib 2.34.0 (STABLE) released: 
http://ur1.ca/aj4du  #glib Details push button'",
+     "     VISIBLE:  'Resent by 0",
+     "Favorites 0",
+     "Reshares', cursor=1",
+     "SPEECH OUTPUT: 'Resent by 0",
+     "Favorites 0",
+     "Reshares 20:20:00 - 11 Oct 2013 @GTKtoolkit 11 Oct 13 GLib 2.34.0 (STABLE) released: 
http://ur1.ca/aj4du  #glib'",
+     "SPEECH OUTPUT: '2 of 8'"]))
+
+sequence.append(KeyComboAction("<Alt>F4"))
+
+sequence.append(utils.AssertionSummaryAction())
+sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_menu.py b/test/keystrokes/gtk-demo/role_menu.py
index 60876ff..8640a01 100644
--- a/test/keystrokes/gtk-demo/role_menu.py
+++ b/test/keystrokes/gtk-demo/role_menu.py
@@ -1,164 +1,92 @@
 #!/usr/bin/python
 
-"""Test of menu, menu navigation, and menu item output using the
-   gtk-demo Application Main Window demo.
-"""
+"""Test of menu and menu item output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Application Main Window demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Application main window", 1000))
-sequence.append(KeyComboAction("Return", 500))
-
-########################################################################
-# When the demo comes up, open the File menu via F10.
-#
-#sequence.append(WaitForWindowActivate("Application Window",None))
-sequence.append(WaitForFocus("Open", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(KeyComboAction("F10"))
-sequence.append(WaitForFocus("File",
-                             acc_role=pyatspi.ROLE_MENU))
-sequence.append(utils.AssertPresentationAction(
-    "File menu",
-    ["KNOWN ISSUE - Gtk+ 3 stopped giving us expected events for the first selected/focused item in a menu 
when the menu is first opened. This is not new to the Gail integration into Gtk+",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame File Menu'",
-     "     VISIBLE:  'File Menu', cursor=1",
-     "SPEECH OUTPUT: 'File menu'"]))
-
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
-sequence.append(utils.AssertPresentationAction(
-    "File menu Where Am I",
-    ["KNOWN ISSUE - Gtk+ 3 stopped giving us expected events for the first selected/focused item in a menu 
when the menu is first opened. This is not new to the Gail integration into Gtk+",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame File Menu'",
-     "     VISIBLE:  'File Menu', cursor=1",
-     "SPEECH OUTPUT: 'menu bar",
-     "SPEECH OUTPUT: 'File'",
-     "SPEECH OUTPUT: 'menu 1 of 3.'",
-     "SPEECH OUTPUT: 'f'"]))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
 
-########################################################################
-# Right arrow to the "Preferences" menu.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Right"))
-sequence.append(WaitForFocus("Preferences",
-                             acc_role=pyatspi.ROLE_MENU))
+sequence.append(KeyComboAction("<Alt>p"))
 sequence.append(utils.AssertPresentationAction(
-    "Preferences menu",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame Preferences Menu'",
-     "     VISIBLE:  'Preferences Menu', cursor=1",
-     "SPEECH OUTPUT: 'Preferences menu'"]))
+    "Initial menu and menu item",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Preferences menu'",
+     "     VISIBLE:  'Preferences menu', cursor=1",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Prefer Dark Theme check 
menu item'",
+     "     VISIBLE:  '< > Prefer Dark Theme check menu', cursor=1",
+     "SPEECH OUTPUT: 'Preferences menu'",
+     "SPEECH OUTPUT: 'Prefer Dark Theme check menu item not checked'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Preferences menu Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame Preferences Menu'",
-     "     VISIBLE:  'Preferences Menu', cursor=1",
-     "SPEECH OUTPUT: 'menu bar",
-     "SPEECH OUTPUT: 'Preferences",
-     "SPEECH OUTPUT: 'menu 2 of 3.",
-     "SPEECH OUTPUT: 'p'"]))
+    "Next menu item",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame < > Hide Titlebar when 
maximized check menu item'",
+     "     VISIBLE:  '< > Hide Titlebar when maximized', cursor=1",
+     "SPEECH OUTPUT: 'Hide Titlebar when maximized check menu item not checked'"]))
 
-########################################################################
-# Go down to the "Color" menu.
-#
-sequence.append(KeyComboAction("Down"))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitForFocus("Color",
-                             acc_role=pyatspi.ROLE_MENU))
 sequence.append(utils.AssertPresentationAction(
-    "Color menu",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame MenuBar Color Menu'",
-     "     VISIBLE:  'Color Menu', cursor=1",
+    "Next menu item",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Color menu'",
+     "     VISIBLE:  'Color menu', cursor=1",
      "SPEECH OUTPUT: 'Color menu'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
-    "Color menu Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame MenuBar Color Menu'",
-     "     VISIBLE:  'Color Menu', cursor=1",
-     "SPEECH OUTPUT: 'Preferences",
+    "Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Color menu'",
+     "     VISIBLE:  'Color menu', cursor=1",
+     "SPEECH OUTPUT: 'Application Class'",
+     "SPEECH OUTPUT: 'frame'",
+     "SPEECH OUTPUT: 'Preferences'",
      "SPEECH OUTPUT: 'menu'",
      "SPEECH OUTPUT: 'Color'",
-     "SPEECH OUTPUT: 'menu 2 of 4.'",
-     "SPEECH OUTPUT: 'c'"]))
+     "SPEECH OUTPUT: 'menu 3 of 5.'",
+     "SPEECH OUTPUT: 'C'"]))
 
-########################################################################
-# Go down to the "Shape" menu.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Down"))
-sequence.append(WaitForFocus("Shape",
-                             acc_role=pyatspi.ROLE_MENU))
+sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Shape menu",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame MenuBar Shape Menu'",
-     "     VISIBLE:  'Shape Menu', cursor=1",
-     "SPEECH OUTPUT: 'Shape menu'"]))
+    "Get into Color menu",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Preferences menu & y Red 
radio menu item(Ctrl+R)'",
+     "     VISIBLE:  '& y Red radio menu item(Ctrl+R)', cursor=1",
+     "SPEECH OUTPUT: 'Red not selected radio menu item Ctrl+R'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
-    "Shape menu Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame MenuBar Shape Menu'",
-     "     VISIBLE:  'Shape Menu', cursor=1",
-     "SPEECH OUTPUT: 'Preferences",
+    "Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Preferences menu & y Red 
radio menu item(Ctrl+R)'",
+     "     VISIBLE:  '& y Red radio menu item(Ctrl+R)', cursor=1",
+     "SPEECH OUTPUT: 'Application Class'",
+     "SPEECH OUTPUT: 'frame'",
+     "SPEECH OUTPUT: 'Preferences'",
      "SPEECH OUTPUT: 'menu'",
-     "SPEECH OUTPUT: 'Shape'",
-     "SPEECH OUTPUT: 'menu 3 of 4.'",
-     "SPEECH OUTPUT: 's'"]))
-
-########################################################################
-# Dismiss the menu and close the Application Window demo window
-#
-sequence.append(KeyComboAction("F10"))
-sequence.append(WaitForFocus("Open", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(KeyComboAction("<Alt>F4", 500))
+     "SPEECH OUTPUT: 'Color'",
+     "SPEECH OUTPUT: 'menu'",
+     "SPEECH OUTPUT: 'Red'",
+     "SPEECH OUTPUT: 'radio menu item not selected Ctrl+R 1 of 3.'",
+     "SPEECH OUTPUT: 'R'"]))
 
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("Left"))
+sequence.append(utils.AssertPresentationAction(
+    "Get out of Color menu",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Color menu'",
+     "     VISIBLE:  'Color menu', cursor=1",
+     "SPEECH OUTPUT: 'Color menu'"]))
 
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 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 34283f5..536c8a7 100644
--- a/test/keystrokes/gtk-demo/role_page_tab.py
+++ b/test/keystrokes/gtk-demo/role_page_tab.py
@@ -1,98 +1,55 @@
 #!/usr/bin/python
 
-"""Test of page tab output using the gtk-demo Printing demo
-"""
+"""Test of page tab output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Printing demo 
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
 sequence.append(TypeAction("Printing"))
-sequence.append(KeyComboAction("Return", 500))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Return", 500))
-sequence.append(PauseAction(1000))
+sequence.append(KeyComboAction("Return"))
 sequence.append(utils.AssertPresentationAction(
     "General page tab",
-    ["BRAILLE LINE:  'gtk-demo Application Print Dialog'",
-     "     VISIBLE:  'Print Dialog', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Print Dialog TabList'",
-     "     VISIBLE:  'TabList', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Print Dialog General Page'",
-     "     VISIBLE:  'General Page', cursor=1",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog'",
+     "     VISIBLE:  'Print dialog', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab'",
+     "     VISIBLE:  'General page tab', cursor=1",
      "SPEECH OUTPUT: 'Print Range Copies'",
-     "SPEECH OUTPUT: 'tab list'",
-     "SPEECH OUTPUT: 'General page'"]))
+     "SPEECH OUTPUT: 'General page tab'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "General page tab Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Print Dialog General Page'",
-     "     VISIBLE:  'General Page', cursor=1",
-     "SPEECH OUTPUT: 'tab list'",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab'",
+     "     VISIBLE:  'General page tab', cursor=1",
+     "SPEECH OUTPUT: 'page tab list'",
      "SPEECH OUTPUT: 'General'",
-     "SPEECH OUTPUT: 'page 1 of 2'"]))
+     "SPEECH OUTPUT: 'page tab 1 of 5'"]))
 
-########################################################################
-# Arrow Right to the "Page Setup" tab.
-# 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
-sequence.append(WaitForFocus("Page Setup", acc_role=pyatspi.ROLE_PAGE_TAB))
 sequence.append(utils.AssertPresentationAction(
     "Page Setup page tab",
-    ["BRAILLE LINE:  'gtk-demo Application Print Dialog Page Setup Page'",
-     "     VISIBLE:  'Page Setup Page', cursor=1",
-     "SPEECH OUTPUT: 'Page Setup page'"]))
+    ["BRAILLE LINE:  'gtk-demo application Print dialog Page Setup page tab'",
+     "     VISIBLE:  'Page Setup page tab', cursor=1",
+     "SPEECH OUTPUT: 'Page Setup page tab'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Page Setup page tab Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Print Dialog Page Setup Page'",
-     "     VISIBLE:  'Page Setup Page', cursor=1",
-     "SPEECH OUTPUT: 'tab list'",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog Page Setup page tab'",
+     "     VISIBLE:  'Page Setup page tab', cursor=1",
+     "SPEECH OUTPUT: 'page tab list'",
      "SPEECH OUTPUT: 'Page Setup'",
-     "SPEECH OUTPUT: 'page 2 of 2'"]))
-
-########################################################################
-# Close the demo
-#
-sequence.append(KeyComboAction         ("<Alt>c"))
+     "SPEECH OUTPUT: 'page tab 2 of 5'"]))
 
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_push_button.py b/test/keystrokes/gtk-demo/role_push_button.py
index 4e540c4..d39ae0c 100644
--- a/test/keystrokes/gtk-demo/role_push_button.py
+++ b/test/keystrokes/gtk-demo/role_push_button.py
@@ -1,96 +1,58 @@
 #!/usr/bin/python
 
-"""Test of page tab output using the gtk-demo Printing demo
-"""
+"""Test of push button output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Printing demo 
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
 sequence.append(TypeAction("Button Boxes"))
-sequence.append(KeyComboAction("Return", 500))
+sequence.append(KeyComboAction("Return"))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Return", 500))
-sequence.append(PauseAction(1000))
+sequence.append(KeyComboAction("Return"))
 sequence.append(utils.AssertPresentationAction(
-    "OK button",
-    ["BRAILLE LINE:  'gtk-demo Application Button Boxes Frame'",
-     "     VISIBLE:  'Button Boxes Frame', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Button Boxes Frame Horizontal Button Boxes Panel Spread Panel OK 
Button'",
-     "     VISIBLE:  'OK Button', cursor=1",
+    "OK push button",
+    ["BRAILLE LINE:  'gtk-demo application Button Boxes frame'",
+     "     VISIBLE:  'Button Boxes frame', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application Button Boxes frame Horizontal Button Boxes panel Spread panel OK 
push button'",
+     "     VISIBLE:  'OK push button', cursor=1",
      "SPEECH OUTPUT: 'Button Boxes frame'",
-     "SPEECH OUTPUT: 'Horizontal Button Boxes panel Spread panel OK button'"]))
+     "SPEECH OUTPUT: 'Horizontal Button Boxes panel'",
+     "SPEECH OUTPUT: 'Spread panel'",
+     "SPEECH OUTPUT: 'OK push button."]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
-    "OK button Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Button Boxes Frame Horizontal Button Boxes Panel Spread Panel OK 
Button'",
-     "     VISIBLE:  'OK Button', cursor=1",
-     "SPEECH OUTPUT: 'OK",
-     "SPEECH OUTPUT: 'button.",
-     "SPEECH OUTPUT: 'Alt o'"]))
+    "OK push button Where Am I",
+    ["BRAILLE LINE:  'gtk-demo application Button Boxes frame Horizontal Button Boxes panel Spread panel OK 
push button'",
+     "     VISIBLE:  'OK push button', cursor=1",
+     "SPEECH OUTPUT: 'OK'",
+     "SPEECH OUTPUT: 'push button"]))
 
-########################################################################
-# Tab to the Cancel button.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
-sequence.append(WaitForFocus("Cancel", acc_role=pyatspi.ROLE_PUSH_BUTTON))
 sequence.append(utils.AssertPresentationAction(
-    "Cancel button",
-    ["BRAILLE LINE:  'gtk-demo Application Button Boxes Frame Horizontal Button Boxes Panel Spread Panel 
Cancel Button'",
-     "     VISIBLE:  'Cancel Button', cursor=1",
-     "SPEECH OUTPUT: 'Cancel button'"]))
+    "Cancel push button",
+    ["BRAILLE LINE:  'gtk-demo application Button Boxes frame Horizontal Button Boxes panel Spread panel 
Cancel push button'",
+     "     VISIBLE:  'Cancel push button', cursor=1",
+     "SPEECH OUTPUT: 'Cancel push button'"]))
 
-########################################################################
-# Tab to the next "OK" button in the "Edge" panel.
-#
 sequence.append(KeyComboAction("Tab"))
-sequence.append(WaitForFocus("Help", acc_role=pyatspi.ROLE_PUSH_BUTTON))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Tab"))
-sequence.append(WaitForFocus("OK", acc_role=pyatspi.ROLE_PUSH_BUTTON))
 sequence.append(utils.AssertPresentationAction(
     "OK Edge button",
-    ["BRAILLE LINE:  'gtk-demo Application Button Boxes Frame Horizontal Button Boxes Panel Edge Panel OK 
Button'",
-     "     VISIBLE:  'OK Button', cursor=1",
-     "SPEECH OUTPUT: 'Edge panel OK button'"]))
+    ["BRAILLE LINE:  'gtk-demo application Button Boxes frame Horizontal Button Boxes panel Edge panel OK 
push button'",
+     "     VISIBLE:  'OK push button', cursor=1",
+     "SPEECH OUTPUT: 'Edge panel'",
+     "SPEECH OUTPUT: 'OK push button'"]))
 
-########################################################################
-# Close the demo
-#
 sequence.append(KeyComboAction("<Alt>F4", 500))
 
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
-
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_radio_button.py b/test/keystrokes/gtk-demo/role_radio_button.py
index a28c2de..5cdb9bc 100644
--- a/test/keystrokes/gtk-demo/role_radio_button.py
+++ b/test/keystrokes/gtk-demo/role_radio_button.py
@@ -1,124 +1,57 @@
 #!/usr/bin/python
 
-"""Test of radio button output using the gtk-demo Printing demo
-"""
+"""Test of radio button output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Printing demo 
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Printing", 1000))
-sequence.append(KeyComboAction("Return", 500))
+sequence.append(TypeAction("Printing"))
+sequence.append(KeyComboAction("Return"))
 
-########################################################################
-# When the Printing demo window appears, navigate to the "All Pages" radio
-# button.
-# 
-#sequence.append(WaitForWindowActivate("Print",None))
-sequence.append(WaitForFocus("General", acc_role=pyatspi.ROLE_PAGE_TAB))
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Alt>a", 500))
-sequence.append(WaitForFocus("All Pages", acc_role=pyatspi.ROLE_RADIO_BUTTON))
+sequence.append(KeyComboAction("<Alt>a"))
 sequence.append(utils.AssertPresentationAction(
     "All Pages radio button",
-    ["BRAILLE LINE:  'gtk-demo Application Print Dialog TabList General Page Range &=y All Pages 
RadioButton'",
-     "     VISIBLE:  '&=y All Pages RadioButton', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Print Dialog'",
-     "     VISIBLE:  'Print Dialog', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Print Dialog TabList General Page Range &=y All Pages 
RadioButton'",
-     "     VISIBLE:  '&=y All Pages RadioButton', cursor=1",
-     "SPEECH OUTPUT: 'Range All Pages selected radio button'",
-     "SPEECH OUTPUT: 'Print Range Copies'",
-     "SPEECH OUTPUT: 'General page Range All Pages selected radio button'"]))
+    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Range &=y All Pages radio button'",
+     "     VISIBLE:  '&=y All Pages radio button', cursor=1",
+     "SPEECH OUTPUT: 'Range'",
+     "SPEECH OUTPUT: 'All Pages selected radio button'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "All Pages radio button Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Print Dialog TabList General Page Range &=y All Pages 
RadioButton'",
-     "     VISIBLE:  '&=y All Pages RadioButton', cursor=1",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Range &=y All Pages radio button'",
+     "     VISIBLE:  '&=y All Pages radio button', cursor=1",
      "SPEECH OUTPUT: 'Range All Pages'",
      "SPEECH OUTPUT: 'radio button selected 1 of 3.'",
-     "SPEECH OUTPUT: 'Alt a'"]))
+     "SPEECH OUTPUT: 'Alt+A'"]))
 
-# WDW - the printing dialog changed for 2.27.x - the pages radio button
-# takes you to the text entry field now.  We'll comment this out for now.
-#
-#########################################################################
-## Down arrow to the "Pages:" radio button.
-## 
-## presented [[[BUG?: when you first arrow to a radio button, we present
-## it as not selected in the tests, but manual testing presents it as
-## selected.  It should be presented as selected.  Something's wrong,
-## but I suspect we're getting a focus event before the state change
-## event.  Because our normal operating mode of Orca is asynchronous,
-## it's likely that the state has already changed by the time we handle
-## the focus event.]]]:
-##
-#sequence.append(utils.StartRecordingAction())
-#sequence.append(KeyComboAction("Down"))
-#sequence.append(WaitForFocus("Pages:", acc_role=pyatspi.ROLE_RADIO_BUTTON))
-#sequence.append(utils.AssertPresentationAction(
-#    "Range radio button",
-#    ["KNOWN ISSUE - the radio button should be presented as selected.",
-#     "BRAILLE LINE:  'gtk-demo Application Print Dialog TabList General Page Range & y Pages: RadioButton'",
-#     "     VISIBLE:  '& y Pages: RadioButton', cursor=1",
-#     "SPEECH OUTPUT: 'Pages: not selected radio button'"]))
-#
-#########################################################################
-## Do a basic "Where Am I" via KP_Enter.
-##
-#sequence.append(utils.StartRecordingAction())
-#sequence.append(KeyComboAction("KP_Enter"))
-#sequence.append(PauseAction(3000))
-#sequence.append(utils.AssertPresentationAction(
-#    "Range radio button Where Am I",
-#    ["BRAILLE LINE:  'gtk-demo Application Print Dialog TabList General Page Range &=y Pages: RadioButton'",
-#     "     VISIBLE:  '&=y Pages: RadioButton', cursor=1",
-#     "SPEECH OUTPUT: 'Range Pages: radio button selected 3 of 3.'",
-#     "SPEECH OUTPUT: 'Alt e'"]))
-#
-#########################################################################
-## Put everything back and close the demo.
-##
-#sequence.append(utils.StartRecordingAction())
-#sequence.append(KeyComboAction("Up"))
-#sequence.append(WaitForFocus("All Pages", acc_role=pyatspi.ROLE_RADIO_BUTTON))
-#sequence.append(utils.AssertPresentationAction(
-#    "All Pages radio button",
-#    ["KNOWN ISSUE - the radio button should be presented as selected.",
-#     "BRAILLE LINE:  'gtk-demo Application Print Dialog TabList General Page Range & y All Pages 
RadioButton'",
-#     "     VISIBLE:  '& y All Pages RadioButton', cursor=1",
-#     "SPEECH OUTPUT: 'All Pages not selected radio button'"]))
+sequence.append(KeyComboAction("Down"))
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
+sequence.append(utils.AssertPresentationAction(
+    "Range radio button",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Range &=y Pages: radio button'",
+     "     VISIBLE:  '&=y Pages: radio button', cursor=1",
+     "SPEECH OUTPUT: 'Pages: selected radio button'"]))
 
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-sequence.append(KeyComboAction("<Alt>c", 500))
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.AssertPresentationAction(
+    "Range radio button Where Am I",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Range &=y Pages: radio button'",
+     "     VISIBLE:  '&=y Pages: radio button', cursor=1",
+     "SPEECH OUTPUT: 'Range Pages:'",
+     "SPEECH OUTPUT: 'radio button selected 3 of 3.'",
+     "SPEECH OUTPUT: 'Alt+E'",
+     "SPEECH OUTPUT: 'Specify one or more page ranges,",
+     " e.g. 1-3,7,11'"]))
 
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_radio_menu_item.py 
b/test/keystrokes/gtk-demo/role_radio_menu_item.py
index bd263f8..f3641d2 100644
--- a/test/keystrokes/gtk-demo/role_radio_menu_item.py
+++ b/test/keystrokes/gtk-demo/role_radio_menu_item.py
@@ -1,125 +1,37 @@
 #!/usr/bin/python
 
-"""Test of radio menu item output using the gtk-demo
-   Application Main Window demo.
-"""
+"""Test of radio menu item output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Application Main Window demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Application main window", 1000))
-sequence.append(KeyComboAction("Return", 500))
-
-########################################################################
-# When the demo comes up, open the Preferences menu and right arrow to
-# the "Red" menu item under the "Color" sub menu.
-#
-#sequence.append(WaitForWindowActivate("Application Window",None))
-sequence.append(WaitForFocus("Open", acc_role=pyatspi.ROLE_PUSH_BUTTON))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("<Alt>p"))
-sequence.append(KeyComboAction("Down"))
-sequence.append(WaitForFocus("Color", acc_role=pyatspi.ROLE_MENU))
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Right"))
-sequence.append(WaitForFocus("Red", acc_role=pyatspi.ROLE_CHECK_MENU_ITEM))
-sequence.append(utils.AssertPresentationAction(
-    "Red button",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame MenuBar Preferences Menu <x> Red 
CheckItem\((Control|Primary) r\)'",
-     "     VISIBLE:  '<x> Red CheckItem\((Control|Primary) r\)', cursor=1",
-     "SPEECH OUTPUT: 'Red check item checked (Control|Primary) r'"]))
+sequence.append(KeyComboAction("C"))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
-# JD to WDW: I'm not sure if this is a regression or not. Now we are
-# speaking a parent menu which we were not before. I *think* that's
-# a bug fix. :-)
-#
-# WDW to JD: I agree -- it looks like a bug fix (yeah!)
-#
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
-sequence.append(utils.AssertPresentationAction(
-    "Red button Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame MenuBar Preferences Menu <x> Red 
CheckItem\((Control|Primary) r\)'",
-     "     VISIBLE:  '<x> Red CheckItem\((Control|Primary) r\)', cursor=1",
-     "SPEECH OUTPUT: 'Preferences'",
-     "SPEECH OUTPUT: 'menu'",
-     "SPEECH OUTPUT: 'Color'",
-     "SPEECH OUTPUT: 'menu'",
-     "SPEECH OUTPUT: 'Red'",
-     "SPEECH OUTPUT: 'check item checked (Control|Primary) r 1 of 3.'",
-     "SPEECH OUTPUT: 'r'"]))
-
-########################################################################
-# Down arrow to the "Green" menu item.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitForFocus("Green",
-                             acc_role=pyatspi.ROLE_CHECK_MENU_ITEM))
 sequence.append(utils.AssertPresentationAction(
-    "Green button",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame MenuBar Preferences Menu < > Green 
CheckItem\((Control|Primary) g\)'",
-     "     VISIBLE:  '< > Green CheckItem\((Control|Primary) g\)', cursor=1",
-     "SPEECH OUTPUT: 'Green check item not checked (Control|Primary) g'"]))
+    "radio menu item - not selected",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Preferences menu & y Green 
radio menu item(Ctrl+G)'",
+     "     VISIBLE:  '& y Green radio menu item(Ctrl+G', cursor=1",
+     "SPEECH OUTPUT: 'Green not selected radio menu item Ctrl+G'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
-# JD to WDW: I'm not sure if this is a regression or not. Now we are
-# speaking a parent menu which we were not before. I *think* that's
-# a bug fix. :-)
-#
-# WDW to JD: I agree -- it looks like a bug fix (yeah!)
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "Green button Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame MenuBar Preferences Menu < > Green 
CheckItem\((Control|Primary) g\)'",
-     "     VISIBLE:  '< > Green CheckItem\((Control|Primary) g\)', cursor=1",
-     "SPEECH OUTPUT: 'Preferences'",
-     "SPEECH OUTPUT: 'menu'",
-     "SPEECH OUTPUT: 'Color'",
-     "SPEECH OUTPUT: 'menu'",
-     "SPEECH OUTPUT: 'Green'",
-     "SPEECH OUTPUT: 'check item not checked (Control|Primary) g 2 of 3.'",
-     "SPEECH OUTPUT: 'g'"]))
-
-########################################################################
-# Dismiss the menu and close the Application Window demo window
-#
-sequence.append(KeyComboAction("F10"))
-sequence.append(WaitForFocus("Open", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(KeyComboAction("<Alt>F4", 500))
+    "radio menu item - selected",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame Preferences menu & y Red 
radio menu item(Ctrl+R)'",
+     "     VISIBLE:  '& y Red radio menu item(Ctrl+R)', cursor=1",
+     "SPEECH OUTPUT: 'Red not selected radio menu item Ctrl+R'"]))
 
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("Escape"))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_spin_button.py b/test/keystrokes/gtk-demo/role_spin_button.py
index 7eeead1..bf27f09 100644
--- a/test/keystrokes/gtk-demo/role_spin_button.py
+++ b/test/keystrokes/gtk-demo/role_spin_button.py
@@ -1,171 +1,74 @@
 #!/usr/bin/python
 
-"""Test of spin button output using the gtk-demo Color Selector demo
-"""
+"""Test of spin button output"""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Color Selector
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Color Selector"))
-sequence.append(KeyComboAction("Return", 500))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Return", 500))
-sequence.append(PauseAction(1000))
-
-########################################################################
-#
-# When the "Changing color" window appears, tab to the "Hue" spin
-# button.
-#
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_UNKNOWN))
-sequence.append(KeyComboAction("Tab", 500))
-sequence.append(KeyComboAction("Tab", 500))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_PUSH_BUTTON))
+sequence.append(TypeAction("Printing"))
+sequence.append(KeyComboAction("Return"))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Tab", 500))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_SPIN_BUTTON))
+sequence.append(KeyComboAction("<Alt>s"))
 sequence.append(utils.AssertPresentationAction(
-    "Hue spin button",
-    ["BRAILLE LINE:  'gtk-demo Application Changing color ColorChooser ColorChooser Hue: 240 $l'",
-     "     VISIBLE:  'Hue: 240 $l', cursor=9",
-     "BRAILLE LINE:  'gtk-demo Application Changing color ColorChooser ColorChooser Hue: 240 $l'",
-     "     VISIBLE:  'Hue: 240 $l', cursor=9",
-     "SPEECH OUTPUT: 'Hue: 240 selected spin button'"]))
+    "Give focus to spin button",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 1 $l'",
+     "     VISIBLE:  'Copies: 1 $l', cursor=10",
+     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 1 $l'",
+     "     VISIBLE:  'Copies: 1 $l', cursor=10",
+     "SPEECH OUTPUT: 'Copies'",
+     "SPEECH OUTPUT: 'Copies: 1 selected spin button'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
-    "Hue spin button Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Changing color ColorChooser ColorChooser Hue: 240 $l'",
-     "     VISIBLE:  'Hue: 240 $l', cursor=9",
-     "SPEECH OUTPUT: 'Hue:'",
+    "Where Am I",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 1 $l'",
+     "     VISIBLE:  'Copies: 1 $l', cursor=10",
+     "SPEECH OUTPUT: 'Copies:'",
      "SPEECH OUTPUT: 'spin button'",
-     "SPEECH OUTPUT: '240'",
+     "SPEECH OUTPUT: '1'",
      "SPEECH OUTPUT: 'selected.'",
-     "SPEECH OUTPUT: 'Alt h'",
-     "SPEECH OUTPUT: 'Position on the color wheel.'"]))
+     "SPEECH OUTPUT: 'Alt+S'"]))
 
-########################################################################
-# Change the value by arrowing down.
-#
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:property-change:accessible-value",
-                           None,
-                           None,
-                           pyatspi.ROLE_SPIN_BUTTON,
-                           5000))
-sequence.append(PauseAction(1000))
-sequence.append(utils.AssertPresentationAction(
-    "Hue spin button decrement value",
-    ["BRAILLE LINE:  'gtk-demo Application Changing color ColorChooser ColorChooser Hue: 240 $l'",
-     "     VISIBLE:  'Hue: 240 $l', cursor=6",
-     "BRAILLE LINE:  'gtk-demo Application Changing color ColorChooser ColorChooser Hue: 239 $l'",
-     "     VISIBLE:  'Hue: 239 $l', cursor=6",
-     "BRAILLE LINE:  'gtk-demo Application Changing color ColorChooser ColorChooser Hue: 239 $l'",
-     "     VISIBLE:  'Hue: 239 $l', cursor=6",
-     "SPEECH OUTPUT: '239'",
-     "SPEECH OUTPUT: '239'"]))
+sequence.append(TypeAction("15"))
 
-########################################################################
-# Change the value by arrowing back up.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Up", 500))
-sequence.append(WaitAction("object:property-change:accessible-value",
-                           None,
-                           None,
-                           pyatspi.ROLE_SPIN_BUTTON,
-                           5000))
-sequence.append(PauseAction(1000))
+sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
-    "Hue spin button increment value",
-    ["BRAILLE LINE:  'gtk-demo Application Changing color ColorChooser ColorChooser Hue: 240 $l'",
-     "     VISIBLE:  'Hue: 240 $l', cursor=6",
-     "BRAILLE LINE:  'gtk-demo Application Changing color ColorChooser ColorChooser Hue: 240 $l'",
-     "     VISIBLE:  'Hue: 240 $l', cursor=6",
-     "SPEECH OUTPUT: '240'"]))
+    "Increment value",
+    ["KNOWN ISSUE: We are double-presenting this",
+     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 16 $l'",
+     "     VISIBLE:  'Copies: 16 $l', cursor=9",
+     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 16 $l'",
+     "     VISIBLE:  'Copies: 16 $l', cursor=9",
+     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 16 $l'",
+     "     VISIBLE:  'Copies: 16 $l', cursor=9",
+     "SPEECH OUTPUT: '16'",
+     "SPEECH OUTPUT: '16'"]))
 
-########################################################################
-# Arrow right to move the caret.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Right", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_SPIN_BUTTON,
-                           5000))
+sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Hue spin button caret navigation",
-    ["BRAILLE LINE:  'gtk-demo Application Changing color ColorChooser ColorChooser Hue: 240 $l'",
-     "     VISIBLE:  'Hue: 240 $l', cursor=7",
-     "SPEECH OUTPUT: '4'"]))
+    "Decrement value",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 15 $l'",
+     "     VISIBLE:  'Copies: 15 $l', cursor=9",
+     "BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 15 $l'",
+     "     VISIBLE:  'Copies: 15 $l', cursor=9",
+     "SPEECH OUTPUT: '15'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
-    "Hue spin button caret navigation",
-    ["BRAILLE LINE:  'gtk-demo Application Changing color ColorChooser ColorChooser Hue: 240 $l'",
-     "     VISIBLE:  'Hue: 240 $l', cursor=7",
-     "SPEECH OUTPUT: 'Hue:'",
-     "SPEECH OUTPUT: 'spin button'",
-     "SPEECH OUTPUT: '240.'",
-     "SPEECH OUTPUT: 'Alt h'",
-     "SPEECH OUTPUT: 'Position on the color wheel.'"]))
-
-########################################################################
-# Close the Color Chooser dialog
-#
-sequence.append(KeyComboAction         ("<Alt>c"))
-
-########################################################################
-# Close the Color Chooser demo
-#
-sequence.append(WaitForFocus("Change the above color",
-                             acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(KeyComboAction("<Alt>F4", 500))
+    "Caret navigation",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Copies filler Copies: 15 $l'",
+     "     VISIBLE:  'Copies: 15 $l', cursor=10",
+     "SPEECH OUTPUT: '5'"]))
 
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TREE_TABLE,
-                           5000))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_split_pane.py b/test/keystrokes/gtk-demo/role_split_pane.py
index eb580fc..9ad0e7c 100644
--- a/test/keystrokes/gtk-demo/role_split_pane.py
+++ b/test/keystrokes/gtk-demo/role_split_pane.py
@@ -1,107 +1,50 @@
 #!/usr/bin/python
 
-"""Test of split pane output using the gtk-demo Paned Widgets demo.
-"""
+"""Test of split pane output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Paned Widgets demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
 sequence.append(TypeAction("Paned Widgets"))
-sequence.append(KeyComboAction("Return", 500))
-
-sequence.append(KeyComboAction("Return", 500))
-sequence.append(PauseAction(1000))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
 
-########################################################################
-# When the demo comes up, go to the split pane.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("F8", 500))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_SPLIT_PANE))
+sequence.append(KeyComboAction("F8"))
 sequence.append(utils.AssertPresentationAction(
     "Split pane",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame 74 SplitPane'",
-     "     VISIBLE:  '74 SplitPane', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Panes Frame 74 SplitPane'",
-     "     VISIBLE:  '74 SplitPane', cursor=1",
-     "SPEECH OUTPUT: 'split pane 74'",
-     "SPEECH OUTPUT: '74'"]))
+    ["BRAILLE LINE:  'gtk-demo application Panes frame 71 split pane'",
+     "     VISIBLE:  '71 split pane', cursor=1",
+     "SPEECH OUTPUT: 'split pane 71'"]))
 
-########################################################################
-# Move the split pane to the right.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Right", 500))
-sequence.append(WaitAction("object:property-change:accessible-value",
-                           None,
-                           None,
-                           pyatspi.ROLE_SPLIT_PANE,
-                           5000))
+sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
     "Split pane increment value",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame 75 SplitPane'",
-     "     VISIBLE:  '75 SplitPane', cursor=1",
-     "SPEECH OUTPUT: '75'"]))
+    ["BRAILLE LINE:  'gtk-demo application Panes frame 72 split pane'",
+     "     VISIBLE:  '72 split pane', cursor=1",
+     "SPEECH OUTPUT: '72'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Split pane Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame 75 SplitPane'",
-     "     VISIBLE:  '75 SplitPane', cursor=1",
-     "SPEECH OUTPUT: 'split pane 75'"]))
+    ["BRAILLE LINE:  'gtk-demo application Panes frame 72 split pane'",
+     "     VISIBLE:  '72 split pane', cursor=1",
+     "SPEECH OUTPUT: 'split pane 72'"]))
 
-########################################################################
-# Put things back the way they were
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
-sequence.append(WaitAction("object:property-change:accessible-value",
-                           None,
-                           None,
-                           pyatspi.ROLE_SPLIT_PANE,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Split pane decrement value",
-    ["BRAILLE LINE:  'gtk-demo Application Panes Frame 74 SplitPane'",
-     "     VISIBLE:  '74 SplitPane', cursor=1",
-     "SPEECH OUTPUT: '74'"]))
-
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-sequence.append(KeyComboAction("<Alt>F4", 500))
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
+    ["BRAILLE LINE:  'gtk-demo application Panes frame 71 split pane'",
+     "     VISIBLE:  '71 split pane', cursor=1",
+     "SPEECH OUTPUT: '71'"]))
 
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TREE_TABLE,
-                           5000))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+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 8e0f458..c5e29a6 100644
--- a/test/keystrokes/gtk-demo/role_status_bar.py
+++ b/test/keystrokes/gtk-demo/role_status_bar.py
@@ -1,70 +1,36 @@
 #!/usr/bin/python
 
-"""Test of status bar output using the gtk-demo Application Main Window
-   demo.
-"""
+"""Test of status bar output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Application Main Window demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Application main window", 1000))
-sequence.append(KeyComboAction("Return", 500))
-
-########################################################################
-# When the demo comes up, do a "Where Am I" to get the status bar info
-# via double KP_Insert+KP_Enter.
-#
-#sequence.append(WaitForWindowActivate("Application Window",None))
-sequence.append(WaitForFocus("Open", acc_role=pyatspi.ROLE_PUSH_BUTTON))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Status bar Where Am I",
-    ["BRAILLE LINE:  'Application Window'",
-     "     VISIBLE:  'Application Window', cursor=0",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ToolBar Open Button'",
-     "     VISIBLE:  'Open Button', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ToolBar Open Button'",
-     "     VISIBLE:  'Open Button', cursor=1",
+    ["BRAILLE LINE:  'Application Class'",
+     "     VISIBLE:  'Application Class', cursor=0",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame  $l'",
+     "     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 Window'",
+     "SPEECH OUTPUT: 'Application Class'",
      "SPEECH OUTPUT: 'Cursor at row 0 column 0 - 0 chars in document'"]))
 
-########################################################################
-# Dismiss the menu and close the Application Window demo window
-#
 sequence.append(KeyComboAction("<Alt>F4"))
 
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
-
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_table.py b/test/keystrokes/gtk-demo/role_table.py
index 8f003b2..863bd82 100644
--- a/test/keystrokes/gtk-demo/role_table.py
+++ b/test/keystrokes/gtk-demo/role_table.py
@@ -1,83 +1,41 @@
 #!/usr/bin/python
 
-"""Test of table output using the gtk-demo Editable Cells demo
-   under the Tree View area.
-"""
+"""Test of table output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Editable Cells demo
-#
-sequence.append(KeyComboAction("<Control>f"))
-sequence.append(PauseAction(1000))
-sequence.append(TypeAction("Tree View", 1000))
-sequence.append(KeyComboAction("Return", 500))
+sequence.append(KeyComboAction("End"))
 sequence.append(KeyComboAction("<Shift>Right"))
-sequence.append(WaitAction("object:state-changed:expanded",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE_CELL,
-                           5000))
-
-sequence.append(KeyComboAction("<Control>f"))
-sequence.append(PauseAction(1000))
-sequence.append(TypeAction("Editable Cells", 1000))
-sequence.append(KeyComboAction("Return", 500))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Return"))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Table Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Shopping list Frame ScrollPane Table Number ColumnHeader 3 
bottles of coke'",
-     "     VISIBLE:  '3 bottles of coke', cursor=1",
-     "SPEECH OUTPUT: 'table Number cell 3 column 1 of 3 row 1 of 5'"]))
+    ["BRAILLE LINE:  'gtk-demo application Shopping list frame table Number column header 3 bottles of coke 
'",
+     "     VISIBLE:  '3 bottles of coke ', cursor=1",
+     "SPEECH OUTPUT: 'table Number table cell 3 column 1 of 3 row 1 of 5'"]))
 
-########################################################################
-# Down arrow to the next line.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
-    "Table down one line",
-    ["BUG? - For some reason, we're not presenting our location. This problem is present in both Gtk+ 2 and 
Gtk+ 3, with AT-SPI2. This problem did not used to occur."]))
-#     "BRAILLE LINE:  'gtk-demo Application Shopping list Frame ScrollPane Table Number ColumnHeader 5 
packages of noodles'",
-#     "     VISIBLE:  '5 packages of noodles', cursor=1",
-#     "SPEECH OUTPUT: '5 packages of noodles'"]))
+    "Next row",
+    ["BRAILLE LINE:  'gtk-demo application Shopping list frame table Number column header 5 packages of 
noodles '",
+     "     VISIBLE:  '5 packages of noodles ', cursor=1",
+     "SPEECH OUTPUT: '5 packages of noodles'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Table Where Am I (again)",
-    ["BUG? - For some reason, we're not updating our position. This problem is present in both Gtk+ 2 and 
Gtk+ 3, with AT-SPI2. This problem did not used to occur.",
-     "BRAILLE LINE:  'gtk-demo Application Shopping list Frame ScrollPane Table Number ColumnHeader 3 
bottles of coke'",
-     "     VISIBLE:  '3 bottles of coke', cursor=1",
-     "SPEECH OUTPUT: 'table Number cell 3 column 1 of 3 row 1 of 5'"]))
+    ["BRAILLE LINE:  'gtk-demo application Shopping list frame table Number column header 5 packages of 
noodles '",
+     "     VISIBLE:  '5 packages of noodles ', cursor=1",
+     "SPEECH OUTPUT: 'table Number table cell 5 column 1 of 3 row 2 of 5'"]))
 
-#    ["BRAILLE LINE:  'gtk-demo Application Shopping list Frame ScrollPane Table Number ColumnHeader 5 
packages of noodles'",
-#     "     VISIBLE:  '5 packages of noodles', cursor=1",
-#     "SPEECH OUTPUT: 'table Number cell 5 column 1 of 3 row 2 of 5'"]))
-
-########################################################################
-# Turn reading of rows off.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("F11"))
@@ -88,76 +46,25 @@ sequence.append(utils.AssertPresentationAction(
      "     VISIBLE:  'Speak cell', cursor=0",
      "SPEECH OUTPUT: 'Speak cell'"]))
 
-########################################################################
-# Move right one cell to the "packages of noodles" cell.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Control>Right", 500))
-sequence.append(PauseAction(3000))
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE,
-                           5000))
+sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
     "Table Right to the Product column in the packages of noodles row",
-    ["BUG? - For some reason, we're not updating our position. Also, we're not speaking anything. This 
problem is present in both Gtk+ 2 and Gtk+ 3, with AT-SPI2. This problem did not used to occur.",
-     "BRAILLE LINE:  'gtk-demo Application Shopping list Frame ScrollPane Table Number ColumnHeader 3 
bottles of coke'",
-     "     VISIBLE:  '3 bottles of coke', cursor=1"]))
-#     "SPEECH OUTPUT: 'table Number cell 3 column 1 of 3 row 1 of 5'"]))
-    
-#    ["BRAILLE LINE:  'gtk-demo Application Shopping list Frame ScrollPane Table Number ColumnHeader 5 
packages of noodles'",
-#     "     VISIBLE:  '5 packages of noodles', cursor=1",
-#     "BRAILLE LINE:  'gtk-demo Application Shopping list Frame ScrollPane Table Product ColumnHeader 
packages of noodles Cell'",
-#     "     VISIBLE:  'packages of noodles Cell', cursor=1",
-#     "SPEECH OUTPUT: 'Product column header packages of noodles'"]))
+    ["BRAILLE LINE:  'gtk-demo application Shopping list frame table Number column header 5 packages of 
noodles '",
+     "     VISIBLE:  '5 packages of noodles ', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application Shopping list frame table Product column header packages of 
noodles table cell'",
+     "     VISIBLE:  'packages of noodles table cell', cursor=1",
+     "SPEECH OUTPUT: 'Product column header packages of noodles'"]))
 
-########################################################################
-# Move up one line to "bottles of coke".
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Up", 500))
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE,
-                           5000))
+sequence.append(KeyComboAction("Up"))
 sequence.append(utils.AssertPresentationAction(
     "Table up to bottles of coke",
-    ["BUG? - For some reason, we're not presenting our location. This problem is present in both Gtk+ 2 and 
Gtk+ 3, with AT-SPI2. This problem did not used to occur."]))
-#    ["BRAILLE LINE:  'gtk-demo Application Shopping list Frame ScrollPane Table Product ColumnHeader 
bottles of coke Cell'",
-#     "     VISIBLE:  'bottles of coke Cell', cursor=1",
-#     "SPEECH OUTPUT: 'bottles of coke'"]))
-
-########################################################################
-# Close the Shopping list demo
-#
-sequence.append(KeyComboAction("<Alt>F4", 1000))
+    ["BRAILLE LINE:  'gtk-demo application Shopping list frame table Product column header bottles of coke 
table cell'",
+     "     VISIBLE:  'bottles of coke table cell', cursor=1",
+     "SPEECH OUTPUT: 'bottles of coke'"]))
 
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("<Control>f"))
-
-sequence.append(PauseAction(1000))
-sequence.append(TypeAction("Tree View", 1000))
-sequence.append(KeyComboAction("Return", 500))
-sequence.append(KeyComboAction("<Shift>Left"))
-sequence.append(WaitAction("object:state-changed:expanded",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE_CELL,
-                           5000))
-
-sequence.append(KeyComboAction("Home"))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_text_multiline.py b/test/keystrokes/gtk-demo/role_text_multiline.py
index 9bca444..33e5bf6 100644
--- a/test/keystrokes/gtk-demo/role_text_multiline.py
+++ b/test/keystrokes/gtk-demo/role_text_multiline.py
@@ -1,168 +1,111 @@
 #!/usr/bin/python
 
-"""Test of multiline editable text using the gtk-demo Application Main Window
-   demo.
-"""
+"""Test of multiline editable text."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TREE_TABLE))
-
-########################################################################
-# Once gtk-demo is running, invoke the Application Main Window demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Application main window", 1000))
-sequence.append(KeyComboAction("Return", 500))
-
-########################################################################
-# When the demo comes up, go to the text area and type.
-#
-#sequence.append(WaitForWindowActivate("Application Window",None))
-sequence.append(WaitForFocus("Open", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(KeyComboAction("Tab"))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
 
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
 sequence.append(utils.StartRecordingAction())
-sequence.append(TypeAction("This is a test.", 500, 500))
-sequence.append(KeyComboAction("Return", 500))
+sequence.append(TypeAction("This is a test."))
+sequence.append(KeyComboAction("Return"))
 sequence.append(utils.AssertPresentationAction(
     "Typing",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane T $l'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame T $l'",
      "     VISIBLE:  'T $l', cursor=2",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane T $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame T $l'",
      "     VISIBLE:  'T $l', cursor=2",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane Th $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame Th $l'",
      "     VISIBLE:  'Th $l', cursor=3",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane Th $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame Th $l'",
      "     VISIBLE:  'Th $l', cursor=3",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane Thi $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame Thi $l'",
      "     VISIBLE:  'Thi $l', cursor=4",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane Thi $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame Thi $l'",
      "     VISIBLE:  'Thi $l', cursor=4",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This $l'",
      "     VISIBLE:  'This $l', cursor=5",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This $l'",
      "     VISIBLE:  'This $l', cursor=5",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This  $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This  $l'",
      "     VISIBLE:  'This  $l', cursor=6",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This  $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This  $l'",
      "     VISIBLE:  'This  $l', cursor=6",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This i $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This i $l'",
      "     VISIBLE:  'This i $l', cursor=7",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This i $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This i $l'",
      "     VISIBLE:  'This i $l', cursor=7",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is $l'",
      "     VISIBLE:  'This is $l', cursor=8",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is $l'",
      "     VISIBLE:  'This is $l', cursor=8",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is  $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is  $l'",
      "     VISIBLE:  'This is  $l', cursor=9",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is  $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is  $l'",
      "     VISIBLE:  'This is  $l', cursor=9",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a $l'",
      "     VISIBLE:  'This is a $l', cursor=10",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a $l'",
      "     VISIBLE:  'This is a $l', cursor=10",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a  $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a  $l'",
      "     VISIBLE:  'This is a  $l', cursor=11",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a  $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a  $l'",
      "     VISIBLE:  'This is a  $l', cursor=11",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a t $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a t $l'",
      "     VISIBLE:  'This is a t $l', cursor=12",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a t $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a t $l'",
      "     VISIBLE:  'This is a t $l', cursor=12",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a te $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a te $l'",
      "     VISIBLE:  'This is a te $l', cursor=13",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a te $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a te $l'",
      "     VISIBLE:  'This is a te $l', cursor=13",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a tes $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a tes $l'",
      "     VISIBLE:  'This is a tes $l', cursor=14",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a tes $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a tes $l'",
      "     VISIBLE:  'This is a tes $l', cursor=14",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test $l'",
      "     VISIBLE:  'This is a test $l', cursor=15",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test $l'",
      "     VISIBLE:  'This is a test $l', cursor=15",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test. $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=16",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test. $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=16",
      "BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
      "BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1"]))
 
-sequence.append(KeyComboAction("Return", 500))
-sequence.append(TypeAction("I am just typing away like a mad little monkey with nothing better to do in my 
life than eat fruit and type.", 500))
-sequence.append(KeyComboAction("Return", 500))
-sequence.append(TypeAction("The keyboard sure can get sticky.", 500))
-sequence.append(KeyComboAction("Return", 500))
-sequence.append(TypeAction("Tis this and thus thou art in Rome.", 500))
-sequence.append(KeyComboAction("Return", 500))
+sequence.append(TypeAction("Here is another test."))
 
-########################################################################
-# Go to the beginning of the text area.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Control>Home", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
+sequence.append(KeyComboAction("<Control>Home"))
 sequence.append(utils.AssertPresentationAction(
     "Navigate home",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test. $l'",
+    ["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.'"]))
 
-########################################################################
-# Now, arrow right to the end of the word "This" and select "is a test"
-# word by word.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Right", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
-sequence.append(KeyComboAction("Right", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
-sequence.append(KeyComboAction("Right", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
-sequence.append(KeyComboAction("Right", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
+sequence.append(KeyComboAction("Right"))
+sequence.append(KeyComboAction("Right"))
+sequence.append(KeyComboAction("Right"))
+sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
     "Arrow to end of 'This'",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test. $l'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=2",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test. $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=3",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test. $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=4",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test. $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=5",
      "SPEECH OUTPUT: 'h'",
      "SPEECH OUTPUT: 'i'",
@@ -170,31 +113,16 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'space'"]))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Shift><Control>Right", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
-sequence.append(KeyComboAction("<Shift><Control>Right", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
-sequence.append(KeyComboAction("<Shift><Control>Right", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
+sequence.append(KeyComboAction("<Shift><Control>Right"))
+sequence.append(KeyComboAction("<Shift><Control>Right"))
+sequence.append(KeyComboAction("<Shift><Control>Right"))
 sequence.append(utils.AssertPresentationAction(
     "Select 'is a test'",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test. $l'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=8",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test. $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=10",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test. $l'",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=15",
      "SPEECH OUTPUT: ' is'",
      "SPEECH OUTPUT: 'selected'",
@@ -203,169 +131,89 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: ' test'",
      "SPEECH OUTPUT: 'selected'"]))
 
-########################################################################
-# Unselect "test".
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Shift><Control>Left", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
+sequence.append(KeyComboAction("<Shift><Control>Left"))
 sequence.append(utils.AssertPresentationAction(
     "Unselect 'test'",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test. $l'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=11",
      "SPEECH OUTPUT: 'test'",
      "SPEECH OUTPUT: 'unselected'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test. $l'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test. $l'",
      "     VISIBLE:  'This is a test. $l', cursor=11",
      "SPEECH OUTPUT: 'text'",
      "SPEECH OUTPUT: ' is a '",
      "SPEECH OUTPUT: 'selected'"]))
 
-########################################################################
-# Press Home to move to the beginning of the line. Arrow down to 
-# "I am typing away..." and use Shift End to select to the end of the 
-# line.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Home", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
-sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
-sequence.append(KeyComboAction("Down", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
-sequence.append(KeyComboAction("<Shift>End", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
+sequence.append(KeyComboAction("<Shift>Down"))
 sequence.append(utils.AssertPresentationAction(
-    "Select to end of line",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test. $l'",
-     "     VISIBLE:  'This is a test. $l', cursor=1",
-     "BRAILLE LINE:  ' $l'",
-     "     VISIBLE:  ' $l', cursor=1",
-     "BRAILLE LINE:  'I am just typing away like a mad little monkey with nothing better to do in my life 
than eat fruit and type. $l'",
-     "     VISIBLE:  'I am just typing away like a mad', cursor=1",
-     "BRAILLE LINE:  'I am just typing away like a mad little monkey with nothing better to do in my life 
than eat fruit and type. $l'",
-     "     VISIBLE:  'y life than eat fruit and type. ', cursor=32",
-     "SPEECH OUTPUT: 'T'",
-     "SPEECH OUTPUT: 'unselected' voice=system",
-     "SPEECH OUTPUT: 'blank' voice=system",
-     "SPEECH OUTPUT: 'I am just typing away like a mad little monkey with nothing better to do in my life 
than eat fruit and type.'",
-     "SPEECH OUTPUT: 'I am just typing away like a mad little monkey with nothing better to do in my life 
than eat fruit and type.'",
+    "Shift Down",
+    ["BRAILLE LINE:  'Here is another test. $l'",
+     "     VISIBLE:  'Here is another test. $l', cursor=10",
+     "SPEECH OUTPUT: 'test.",
+     "Here is a'",
      "SPEECH OUTPUT: 'selected' voice=system"]))
 
-########################################################################
-# Shift Control Right arrow to select the first two words on the next
-# line.
-#
-sequence.append(KeyComboAction("<Shift><Control>Right", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
-sequence.append(KeyComboAction("<Shift><Control>Right", 500))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("<Shift>End"))
+sequence.append(utils.AssertPresentationAction(
+    "Shift End",
+    ["BRAILLE LINE:  'Here is another test. $l'",
+     "     VISIBLE:  'Here is another test. $l', cursor=22",
+     "SPEECH OUTPUT: 'nother test.'",
+     "SPEECH OUTPUT: 'selected' voice=system"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Basic Where Am I multiline selection",
-    ["BRAILLE LINE:  'The keyboard sure can get sticky. $l'",
-     "     VISIBLE:  'The keyboard sure can get sticky', cursor=13",
+    ["BRAILLE LINE:  'Here is another test. $l'",
+     "     VISIBLE:  'Here is another test. $l', cursor=22",
      "SPEECH OUTPUT: 'text'",
-     "SPEECH OUTPUT: 'I am just typing away like a mad little monkey with nothing better to do in my life 
than eat fruit and type.",
-     "The keyboard'",
+     "SPEECH OUTPUT: ' is a test.",
+     "Here is another test.'",
      "SPEECH OUTPUT: 'selected'"]))
 
-########################################################################
-# Do a detailed "Where Am I" via KP_Enter 2x.
-#
-sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
+sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Detailed Where Am I multiline selection",
-    ["BRAILLE LINE:  'The keyboard sure can get sticky. $l'",
-     "     VISIBLE:  'The keyboard sure can get sticky', cursor=13",
-     "BRAILLE LINE:  'The keyboard sure can get sticky. $l'",
-     "     VISIBLE:  'The keyboard sure can get sticky', cursor=13",
+    ["BRAILLE LINE:  'Here is another test. $l'",
+     "     VISIBLE:  'Here is another test. $l', cursor=22",
      "SPEECH OUTPUT: 'text'",
-     "SPEECH OUTPUT: 'I am just typing away like a mad little monkey with nothing better to do in my life 
than eat fruit and type.",
-     "The keyboard'",
-     "SPEECH OUTPUT: 'selected'",
-     "SPEECH OUTPUT: 'text'",
-     "SPEECH OUTPUT: 'I am just typing away like a mad little monkey with nothing better to do in my life 
than eat fruit and type.",
-     "The keyboard'",
+     "SPEECH OUTPUT: ' is a test.",
+     "Here is another test.'",
      "SPEECH OUTPUT: 'selected'"]))
 
-########################################################################
-# Try a "SayAll".
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_Add", 500))
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(utils.AssertPresentationAction(
+    "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"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Add"))
 sequence.append(utils.AssertPresentationAction(
     "SayAll",
-    ["SPEECH OUTPUT: '",
-     "The keyboard sure can get sticky.'",
-     "SPEECH OUTPUT: '",
-     "Tis this and thus thou art in Rome.'",
-     "SPEECH OUTPUT: '",
-     "'"]))
+    ["SPEECH OUTPUT: 'This is a test.",
+     "'",
+     "SPEECH OUTPUT: 'Here is another test.'"]))
 
-########################################################################
-# Dismiss the menu and close the Application Window demo window
-#
 sequence.append(KeyComboAction("<Alt>F4"))
 
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TREE_TABLE))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
-
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_text_multiline_flatreview.py 
b/test/keystrokes/gtk-demo/role_text_multiline_flatreview.py
new file mode 100644
index 0000000..d28c9e1
--- /dev/null
+++ b/test/keystrokes/gtk-demo/role_text_multiline_flatreview.py
@@ -0,0 +1,347 @@
+#!/usr/bin/python
+
+"""Test of flat review of text and a toolbar."""
+
+from macaroon.playback import *
+import utils
+
+sequence = MacroSequence()
+
+sequence.append(KeyComboAction("<Control>f"))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(TypeAction("This is a test. "))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("This is only a test."))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(TypeAction("PLEASE DO NOT PANIC."))
+sequence.append(KeyComboAction("Return"))
+
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Subtract"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Subtract to enter flat review",
+    ["BRAILLE LINE:  'Entering flat review.'",
+     "     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"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_8 to flat review '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.",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_5 to flat review 'PLEASE'",
+    ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
+     "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
+     "SPEECH OUTPUT: 'PLEASE'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_2"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_2 to flat review 'P'",
+    ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
+     "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
+     "SPEECH OUTPUT: 'P'"]))
+
+sequence.append(KeyComboAction("<Control>Home"))
+sequence.append(KeyComboAction("Down"))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_5 to flat review 'This'",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'This'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_5 2X to spell 'This'",
+    ["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: 'This'",
+     "SPEECH OUTPUT: 'T' voice=uppercase",
+     "SPEECH OUTPUT: 'h'",
+     "SPEECH OUTPUT: 'i'",
+     "SPEECH OUTPUT: 's'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_5 3X to military spell 'This'",
+    ["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",
+     "BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'This'",
+     "SPEECH OUTPUT: 'T' voice=uppercase",
+     "SPEECH OUTPUT: 'h'",
+     "SPEECH OUTPUT: 'i'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: 'tango' voice=uppercase",
+     "SPEECH OUTPUT: 'hotel'",
+     "SPEECH OUTPUT: 'india'",
+     "SPEECH OUTPUT: 'sierra'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_8 to flat review 'This is only a test.'",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'This is only a test.",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_8 2X to spell 'This is only a test.'",
+    ["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: 'This is only a test.",
+     "'",
+     "SPEECH OUTPUT: 'T' voice=uppercase",
+     "SPEECH OUTPUT: 'h'",
+     "SPEECH OUTPUT: 'i'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'i'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'o'",
+     "SPEECH OUTPUT: 'n'",
+     "SPEECH OUTPUT: 'l'",
+     "SPEECH OUTPUT: 'y'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'a'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 't'",
+     "SPEECH OUTPUT: 'e'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: 't'",
+     "SPEECH OUTPUT: '.'",
+     "SPEECH OUTPUT: '",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(KeyComboAction("KP_8"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_8 3X to military spell 'This is only a test.'",
+    ["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",
+     "BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'This is only a test.",
+     "'",
+     "SPEECH OUTPUT: 'T' voice=uppercase",
+     "SPEECH OUTPUT: 'h'",
+     "SPEECH OUTPUT: 'i'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'i'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'o'",
+     "SPEECH OUTPUT: 'n'",
+     "SPEECH OUTPUT: 'l'",
+     "SPEECH OUTPUT: 'y'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'a'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 't'",
+     "SPEECH OUTPUT: 'e'",
+     "SPEECH OUTPUT: 's'",
+     "SPEECH OUTPUT: 't'",
+     "SPEECH OUTPUT: '.'",
+     "SPEECH OUTPUT: '",
+     "'",
+     "SPEECH OUTPUT: 'tango' voice=uppercase",
+     "SPEECH OUTPUT: 'hotel'",
+     "SPEECH OUTPUT: 'india'",
+     "SPEECH OUTPUT: 'sierra'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'india'",
+     "SPEECH OUTPUT: 'sierra'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'oscar'",
+     "SPEECH OUTPUT: 'november'",
+     "SPEECH OUTPUT: 'lima'",
+     "SPEECH OUTPUT: 'yankee'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'alpha'",
+     "SPEECH OUTPUT: ' '",
+     "SPEECH OUTPUT: 'tango'",
+     "SPEECH OUTPUT: 'echo'",
+     "SPEECH OUTPUT: 'sierra'",
+     "SPEECH OUTPUT: 'tango'",
+     "SPEECH OUTPUT: '.'",
+     "SPEECH OUTPUT: '",
+     "'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_2"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_2 to flat review 'T'",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=1",
+     "SPEECH OUTPUT: 'T'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_2"))
+sequence.append(KeyComboAction("KP_2"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_2 2X to military spell 'T'",
+    ["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: 'tango' voice=uppercase"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_6 to flat review 'is'",
+    ["BRAILLE LINE:  'This is only a test. $l'",
+     "     VISIBLE:  'This is only a test. $l', cursor=6",
+     "SPEECH OUTPUT: 'is'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_7 to flat review 'This is a test.' and the scrollbar",
+    ["BRAILLE LINE:  'This is a test.  vertical scroll bar 0% $l'",
+     "     VISIBLE:  'This is a test.  vertical scroll', cursor=1",
+     "SPEECH OUTPUT: 'This is a test. ",
+     " vertical scroll bar 0 percent.'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_7 to flat review toolbar",
+    ["KNOWN ISSUE: gtk-demo's toolbar widgets lack names that were present in the past",
+     "BRAILLE LINE:  'push button push button panel push button $l'",
+     "     VISIBLE:  'push button push button panel pu', cursor=1",
+     "SPEECH OUTPUT: 'push button push button panel push button'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_7"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_7 to flat review menu",
+    ["BRAILLE LINE:  'Preferences Help $l'",
+     "     VISIBLE:  'Preferences Help $l', cursor=1",
+     "SPEECH OUTPUT: 'Preferences Help'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_5 to flat review 'Preferences'",
+    ["BRAILLE LINE:  'Preferences Help $l'",
+     "     VISIBLE:  'Preferences Help $l', cursor=1",
+     "SPEECH OUTPUT: 'Preferences'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_6"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_6 to flat review 'Help'",
+    ["BRAILLE LINE:  'Preferences Help $l'",
+     "     VISIBLE:  'Preferences Help $l', cursor=13",
+     "SPEECH OUTPUT: 'Help'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyPressAction(0, None, "KP_Insert"))
+sequence.append(KeyComboAction("KP_5"))
+sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
+sequence.append(utils.AssertPresentationAction(
+    "Insert+KP_5 to flat review 'Help' accessible",
+    ["SPEECH OUTPUT: 'Help'",
+     "SPEECH OUTPUT: 'menu'"]))
+
+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(
+    "Insert+KP_9 to flat review end",
+    ["BRAILLE LINE:  ' Cursor at row 1 column 0 - 60 chars in document $l'",
+     "     VISIBLE:  ' Cursor at row 1 column 0 - 60 c', cursor=2",
+     "SPEECH OUTPUT: 'Cursor at row 1 column 0 - 60 chars in document'"]))
+
+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(
+    "Insert+KP_7 to flat review home",
+    ["BRAILLE LINE:  'Preferences Help $l'",
+     "     VISIBLE:  'Preferences Help $l', cursor=1",
+     "SPEECH OUTPUT: 'Preferences Help'"]))
+
+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(
+    "Insert+KP_6 to flat review below",
+    ["KNOWN ISSUE: gtk-demo's toolbar widgets lack names that were present in the past",
+     "BRAILLE LINE:  'push button push button panel push button $l'",
+     "     VISIBLE:  'push button push button panel pu', cursor=1",
+     "SPEECH OUTPUT: 'push button'"]))
+
+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(
+    "Insert+KP_4 to flat review above",
+    ["BRAILLE LINE:  'Preferences Help $l'",
+     "     VISIBLE:  'Preferences Help $l', cursor=1",
+     "SPEECH OUTPUT: 'Preferences'"]))
+
+sequence.append(utils.StartRecordingAction())
+sequence.append(KeyComboAction("KP_Subtract"))
+sequence.append(utils.AssertPresentationAction(
+    "KP_Subtract to exit flat review",
+    ["BRAILLE LINE:  'Leaving flat review.'",
+     "     VISIBLE:  'Leaving flat review.', cursor=0",
+     "BRAILLE LINE:  'This is only a test. $l'",
+     "     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/gtk-demo/role_text_multiline_navigation.py 
b/test/keystrokes/gtk-demo/role_text_multiline_navigation.py
index 0667011..b70abe5 100644
--- a/test/keystrokes/gtk-demo/role_text_multiline_navigation.py
+++ b/test/keystrokes/gtk-demo/role_text_multiline_navigation.py
@@ -1,35 +1,16 @@
 #!/usr/bin/python
 
-"""Test of general text navigation using caret navigation and flat review 
-techniques.
-"""
+"""Test of text output for caret navigation."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Application Main Window demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Application main window", 1000))
-sequence.append(KeyComboAction("Return", 500))
-
-########################################################################
-# When the demo comes up, go to the text area and type.
-#
-#sequence.append(WaitForWindowActivate("Application Window",None))
-sequence.append(WaitForFocus("Open", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(KeyComboAction("Tab"))
-
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
 
 sequence.append(TypeAction("This is a test. "))
 sequence.append(KeyComboAction("Return"))
@@ -55,34 +36,16 @@ sequence.append(TypeAction("time in the lab and not enough time"))
 sequence.append(KeyComboAction("Return"))
 sequence.append(TypeAction("in the wild."))
 
-sequence.append(PauseAction(3000))
-
-########################################################################
-# Do a bunch of navigation
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Left once from end to '.' after 'wild'",
-    ["KNOWN ISSUE - Sometimes we double update braille here; other times we do not.",
-     "BRAILLE LINE:  'in the wild. $l'",
-     "     VISIBLE:  'in the wild. $l', cursor=12",
-     "BRAILLE LINE:  'in the wild. $l'",
+    ["BRAILLE LINE:  'in the wild. $l'",
      "     VISIBLE:  'in the wild. $l', cursor=12",
      "SPEECH OUTPUT: 'dot'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Left a second time to 'd' in 'wild'",
     ["BRAILLE LINE:  'in the wild. $l'",
@@ -91,11 +54,6 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Left a third time to 'l' in 'wild'",
     ["BRAILLE LINE:  'in the wild. $l'",
@@ -104,11 +62,6 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Left to beginning of 'wild'",
     ["BRAILLE LINE:  'in the wild. $l'",
@@ -117,11 +70,6 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Left to beginning of 'the'",
     ["BRAILLE LINE:  'in the wild. $l'",
@@ -130,11 +78,6 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Left to beginning of 'in'",
     ["BRAILLE LINE:  'in the wild. $l'",
@@ -143,11 +86,6 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Left to beginning of 'time' at end of previous line",
     ["BRAILLE LINE:  'time in the lab and not enough time $l'",
@@ -158,11 +96,6 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Home"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Home to beginning of line",
     ["BRAILLE LINE:  'time in the lab and not enough time $l'",
@@ -171,11 +104,6 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("End"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "End to end of line",
     ["BRAILLE LINE:  'time in the lab and not enough time $l'",
@@ -184,24 +112,14 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Home to beginning of document",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test.  $l'",
+    ["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. '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>End"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+End to end of document",
     ["BRAILLE LINE:  'in the wild. $l'",
@@ -210,103 +128,63 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Home back to beginning of document",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test.  $l'",
+    ["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. '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Right once to 'h' in 'This'",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test.  $l'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=2",
      "SPEECH OUTPUT: 'h'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Right a second time to 'i' in 'This'",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test.  $l'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=3",
      "SPEECH OUTPUT: 'i'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Right a third time to 's' in 'This'",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test.  $l'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=4",
      "SPEECH OUTPUT: 's'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Right to end of 'This'",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test.  $l'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=5",
      "SPEECH OUTPUT: 'newline'",
      "SPEECH OUTPUT: 'This '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Right to end of 'is'",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test.  $l'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=8",
      "SPEECH OUTPUT: 'is '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Right to end of 'a'",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test.  $l'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=10",
      "SPEECH OUTPUT: 'a '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Down a line to 'n' in 'only'",
     ["BRAILLE LINE:  'This is only a test. $l'",
@@ -315,11 +193,6 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("End"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "End of line",
     ["BRAILLE LINE:  'This is only a test. $l'",
@@ -328,11 +201,6 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Right to blank line",
     ["BRAILLE LINE:  ' $l'",
@@ -341,11 +209,6 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Right to beginning of 'PLEASE'",
     ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
@@ -353,116 +216,23 @@ sequence.append(utils.AssertPresentationAction(
      "SPEECH OUTPUT: 'P'"]))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_Subtract"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_Subtract to enter flat review",
-    ["BRAILLE LINE:  'Entering flat review.'",
-     "     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"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_8"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_8 to flat review '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.",
-     "'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_5"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_5 to flat review 'PLEASE'",
-    ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
-     "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
-     "SPEECH OUTPUT: 'PLEASE'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_2"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_2 to flat review 'P'",
-    ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
-     "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
-     "SPEECH OUTPUT: 'P'"]))
-
-sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Down to line with one space",
-    ["BUG? For some reason we are presenting other things here",
-     "BRAILLE LINE:  '  $l'",
-     "     VISIBLE:  '  $l', cursor=1",
-     "BRAILLE LINE:  '  $l'",
-     "     VISIBLE:  '  $l', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame'",
-     "     VISIBLE:  'Application Window Frame', cursor=1",
-     "BRAILLE LINE:  '  $l'",
-     "     VISIBLE:  '  $l', cursor=1",
-     "SPEECH OUTPUT: ' '",
-     "SPEECH OUTPUT: 'Application Window frame'",
-     "SPEECH OUTPUT: 'text  '"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_8"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_8 to flat review ' '",
-    ["BRAILLE LINE:  '  $l'",
-     "     VISIBLE:  '  $l', cursor=1",
-     "SPEECH OUTPUT: 'white space'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_5"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_5 to flat review ' '",
     ["BRAILLE LINE:  '  $l'",
      "     VISIBLE:  '  $l', cursor=1",
-     "SPEECH OUTPUT: 'white space'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_2"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_2 to flat review ' '",
-    ["BRAILLE LINE:  '  $l'",
-     "     VISIBLE:  '  $l', cursor=1",
-     "SPEECH OUTPUT: 'space'"]))
+     "SPEECH OUTPUT: ' '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Back up to 'PLEASE DO NOT PANIC.'",
-    ["BUG? For some reason we are presenting other things here",
-     "BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
-     "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
-     "BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
-     "     VISIBLE:  'PLEASE DO NOT PANIC. $l', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame'",
-     "     VISIBLE:  'Application Window Frame', cursor=1",
-     "BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
+    ["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: 'Application Window frame'",
-     "SPEECH OUTPUT: 'text PLEASE DO NOT PANIC.'"]))
+     "SPEECH OUTPUT: 'PLEASE DO NOT PANIC.' voice=uppercase"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Right"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Right over PLEASE",
     ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
@@ -471,11 +241,6 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Left over PLEASE",
     ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
@@ -493,11 +258,6 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Left"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Left to blank line",
     ["BRAILLE LINE:  ' $l'",
@@ -506,11 +266,6 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Right to beginning of 'PLEASE' again",
     ["BRAILLE LINE:  'PLEASE DO NOT PANIC. $l'",
@@ -519,11 +274,6 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Up"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Up to blank line",
     ["BRAILLE LINE:  ' $l'",
@@ -532,14 +282,9 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Home to beginning of document",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test.  $l'",
+    ["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. '"]))
 
@@ -551,14 +296,9 @@ sequence.append(utils.AssertPresentationAction(
 #
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Delete"))
-sequence.append(WaitAction("object:text-changed:delete",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Delete right 'T' in 'This'",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane his is a test.  $l'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame his is a test.  $l'",
      "     VISIBLE:  'his is a test.  $l', cursor=1",
      "SPEECH OUTPUT: 'h'"]))
 
@@ -570,14 +310,9 @@ sequence.append(utils.AssertPresentationAction(
 #
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Delete"))
-sequence.append(WaitAction("object:text-changed:delete",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Delete right 'h' in 'his'",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane is is a test.  $l'",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame is is a test.  $l'",
      "     VISIBLE:  'is is a test.  $l', cursor=1",
      "SPEECH OUTPUT: 'i'"]))
 
@@ -589,16 +324,11 @@ sequence.append(utils.AssertPresentationAction(
 #
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Delete"))
-sequence.append(WaitAction("object:text-changed:delete",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Delete right remaining 'is' of 'This'",
-    ["BUG? - We update braille but not speech",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane  is a test.  $l'",
-     "     VISIBLE:  ' is a test.  $l', cursor=1"]))
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame  is a test.  $l'",
+     "     VISIBLE:  ' is a test.  $l', cursor=1",
+     "SPEECH OUTPUT: 'space'"]))
 
 # [[[NOTE: WDW - with orca.settings.asyncMode=False, which is what
 # the regression tests use, the Delete will not give the same output
@@ -608,37 +338,22 @@ sequence.append(utils.AssertPresentationAction(
 #
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Delete"))
-sequence.append(WaitAction("object:text-changed:delete",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Delete right 'is'",
-    ["BUG? - We update braille but not speech",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane  a test.  $l'",
-     "     VISIBLE:  ' a test.  $l', cursor=1"]))
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame  a test.  $l'",
+     "     VISIBLE:  ' a test.  $l', cursor=1",
+     "SPEECH OUTPUT: 'space'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Down a line",
-    [     "BRAILLE LINE:  'This is only a test. $l'",
+    ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
      "SPEECH OUTPUT: 'This is only a test.'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("End"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "End of line",
     ["BRAILLE LINE:  'This is only a test. $l'",
@@ -647,17 +362,10 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("BackSpace"))
-sequence.append(WaitAction("object:text-changed:delete",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "BackSpace '.' after 'test'",
     ["BRAILLE LINE:  'This is only a test $l'",
      "     VISIBLE:  'This is only a test $l', cursor=20",
-     "BRAILLE LINE:  'This is only a test $l'",
-     "     VISIBLE:  'This is only a test $l', cursor=20",
      "SPEECH OUTPUT: 'dot'"]))
 
 # [[[NOTE: WDW - with orca.settings.asyncMode=False, which is what
@@ -668,18 +376,13 @@ sequence.append(utils.AssertPresentationAction(
 #
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>BackSpace"))
-sequence.append(WaitAction("object:text-changed:delete",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+BackSpace to delete 'this'",
-    ["BUG? - We update braille but not speech",
-     "BRAILLE LINE:  'This is only a  $l'",
+    ["BRAILLE LINE:  'This is only a  $l'",
      "     VISIBLE:  'This is only a  $l', cursor=16",
      "BRAILLE LINE:  'This is only a  $l'",
-     "     VISIBLE:  'This is only a  $l', cursor=16"]))
+     "     VISIBLE:  'This is only a  $l', cursor=16",
+     "SPEECH OUTPUT: 'test'"]))
 
 # [[[NOTE: WDW - with orca.settings.asyncMode=False, which is what
 # the regression tests use, the BackSpace will not give the same output
@@ -689,26 +392,14 @@ sequence.append(utils.AssertPresentationAction(
 #
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>BackSpace"))
-sequence.append(WaitAction("object:text-changed:delete",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+BackSpace to delete 'a'",
-    ["BUG? - We update braille but not speech",
-     "BRAILLE LINE:  'This is only  $l'",
+    ["BRAILLE LINE:  'This is only  $l'",
      "     VISIBLE:  'This is only  $l', cursor=14",
-     "BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=14"]))
+     "SPEECH OUTPUT: 'a '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Left to beginning of 'only'",
     ["BRAILLE LINE:  'This is only  $l'",
@@ -720,456 +411,13 @@ sequence.append(utils.AssertPresentationAction(
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Left"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Ctrl+Left to beginning of 'is'",
     ["BRAILLE LINE:  'This is only  $l'",
      "     VISIBLE:  'This is only  $l', cursor=6",
      "SPEECH OUTPUT: 'is '"]))
 
-########################################################################
-# Do a bunch of flat review
-#
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_5"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_5 to flat review 'is'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "SPEECH OUTPUT: 'is'"]))
-
-sequence.append(PauseAction(1000))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_5"))
-sequence.append(KeyComboAction("KP_5"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_5 2X to spell 'is'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "SPEECH OUTPUT: 'is'",
-     "SPEECH OUTPUT: 'i'",
-     "SPEECH OUTPUT: 's'"]))
-
-sequence.append(PauseAction(1000))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_5"))
-sequence.append(KeyComboAction("KP_5"))
-sequence.append(KeyComboAction("KP_5"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_5 3X to military spell 'is'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "SPEECH OUTPUT: 'is'",
-     "SPEECH OUTPUT: 'i'",
-     "SPEECH OUTPUT: 's'",
-     "SPEECH OUTPUT: 'india'",
-     "SPEECH OUTPUT: 'sierra'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_8"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_8 to flat review 'This is only'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "SPEECH OUTPUT: 'This is only ",
-     "'"]))
-
-sequence.append(PauseAction(1000))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_8"))
-sequence.append(KeyComboAction("KP_8"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_8 2X to spell 'This is only'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "SPEECH OUTPUT: 'This is only ",
-     "'",
-     "SPEECH OUTPUT: 'T'",
-     "SPEECH OUTPUT: 'h'",
-     "SPEECH OUTPUT: 'i'",
-     "SPEECH OUTPUT: 's'",
-     "SPEECH OUTPUT: ' '",
-     "SPEECH OUTPUT: 'i'",
-     "SPEECH OUTPUT: 's'",
-     "SPEECH OUTPUT: ' '",
-     "SPEECH OUTPUT: 'o'",
-     "SPEECH OUTPUT: 'n'",
-     "SPEECH OUTPUT: 'l'",
-     "SPEECH OUTPUT: 'y'",
-     "SPEECH OUTPUT: ' '",
-     "SPEECH OUTPUT: '",
-     "'"]))
-
-sequence.append(PauseAction(1000))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_8"))
-sequence.append(KeyComboAction("KP_8"))
-sequence.append(KeyComboAction("KP_8"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_8 3X to military spell 'This is only'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "SPEECH OUTPUT: 'This is only ",
-     "'",
-     "SPEECH OUTPUT: 'T'",
-     "SPEECH OUTPUT: 'h'",
-     "SPEECH OUTPUT: 'i'",
-     "SPEECH OUTPUT: 's'",
-     "SPEECH OUTPUT: ' '",
-     "SPEECH OUTPUT: 'i'",
-     "SPEECH OUTPUT: 's'",
-     "SPEECH OUTPUT: ' '",
-     "SPEECH OUTPUT: 'o'",
-     "SPEECH OUTPUT: 'n'",
-     "SPEECH OUTPUT: 'l'",
-     "SPEECH OUTPUT: 'y'",
-     "SPEECH OUTPUT: ' '",
-     "SPEECH OUTPUT: '",
-     "'",
-     "SPEECH OUTPUT: 'tango'",
-     "SPEECH OUTPUT: 'hotel'",
-     "SPEECH OUTPUT: 'india'",
-     "SPEECH OUTPUT: 'sierra'",
-     "SPEECH OUTPUT: ' '",
-     "SPEECH OUTPUT: 'india'",
-     "SPEECH OUTPUT: 'sierra'",
-     "SPEECH OUTPUT: ' '",
-     "SPEECH OUTPUT: 'oscar'",
-     "SPEECH OUTPUT: 'november'",
-     "SPEECH OUTPUT: 'lima'",
-     "SPEECH OUTPUT: 'yankee'",
-     "SPEECH OUTPUT: ' '",
-     "SPEECH OUTPUT: '",
-     "'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_2"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_2 to flat review 'i'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "SPEECH OUTPUT: 'i'"]))
-
-sequence.append(PauseAction(1000))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_2"))
-sequence.append(KeyComboAction("KP_2"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_2 2X to military spell 'i'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "SPEECH OUTPUT: 'i'",
-     "SPEECH OUTPUT: 'india'"]))
-
-sequence.append(PauseAction(1000))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_1"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_1 to flat review space",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=5",
-     "SPEECH OUTPUT: 'space'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_1"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_1 to flat review 's'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=4",
-     "SPEECH OUTPUT: 's'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_3"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_3 to flat review space",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=5",
-     "SPEECH OUTPUT: 'space'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_5"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_5 to flat review whitespace",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=5",
-     "SPEECH OUTPUT: 'white space'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_4"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_4 to flat review 'This'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=1",
-     "SPEECH OUTPUT: 'This'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_6"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_6 to flat review 'is'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "SPEECH OUTPUT: 'is'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_7"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_7 to flat review 'a test' and scrollbar",
-    ["BRAILLE LINE:  ' a test.  vertical ScrollBar 0% $l'",
-     "     VISIBLE:  ' a test.  vertical ScrollBar 0% ', cursor=1",
-     "SPEECH OUTPUT: ' a test. ",
-     " vertical scroll bar 0 percent.'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_6"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_6 to flat review 'a'",
-    ["BRAILLE LINE:  ' a test.  vertical ScrollBar 0% $l'",
-     "     VISIBLE:  ' a test.  vertical ScrollBar 0% ', cursor=2",
-     "SPEECH OUTPUT: 'a'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_6"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_6 to flat review 'test.'",
-    ["BRAILLE LINE:  ' a test.  vertical ScrollBar 0% $l'",
-     "     VISIBLE:  ' a test.  vertical ScrollBar 0% ', cursor=4",
-     "SPEECH OUTPUT: 'test.'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_6"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_6 to flat review scrollbar",
-    ["BRAILLE LINE:  ' a test.  vertical ScrollBar 0% $l'",
-     "     VISIBLE:  ' a test.  vertical ScrollBar 0% ', cursor=11",
-     "SPEECH OUTPUT: 'vertical scroll bar 0 percent.'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_7"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_7 to flat review toolbar",
-    ["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(
-    "KP_5 to flat review 'open'",
-    ["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(
-    "KP_6 to flat review toggle button indicator",
-    ["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_6"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_6 to flat review toggle button",
-    ["BRAILLE LINE:  'Open & y toggle button Quit panel GTK! $l'",
-     "     VISIBLE:  'Open & y toggle button Quit pane', cursor=10",
-     "SPEECH OUTPUT: 'toggle button'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_7"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_7 to flat review menu",
-    ["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_5"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_5 to flat review 'File'",
-    ["BRAILLE LINE:  'File Preferences Help $l'",
-     "     VISIBLE:  'File Preferences Help $l', cursor=1",
-     "SPEECH OUTPUT: 'File'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_6"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_6 to flat review 'Preferences'",
-    ["BRAILLE LINE:  'File Preferences Help $l'",
-     "     VISIBLE:  'File Preferences Help $l', cursor=6",
-     "SPEECH OUTPUT: 'Preferences'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyPressAction(0, None, "KP_Insert"))
-sequence.append(KeyComboAction("KP_5"))
-sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
-sequence.append(utils.AssertPresentationAction(
-    "Insert+KP_5 to flat review 'Preferences' accessible",
-    ["SPEECH OUTPUT: 'Preferences'",
-     "SPEECH OUTPUT: 'menu'"]))
-
-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(
-    "Insert+KP_9 to flat review end",
-    ["BRAILLE LINE:  'Cursor at row 1 column 5 - 243 chars in document $l'",
-     "     VISIBLE:  'Cursor at row 1 column 5 - 243 c', cursor=1",
-     "SPEECH OUTPUT: 'Cursor at row 1 column 5 - 243 chars in document'"]))
-
-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(
-    "Insert+KP_7 to flat review home",
-    ["BRAILLE LINE:  'File Preferences Help $l'",
-     "     VISIBLE:  'File Preferences Help $l', cursor=1",
-     "SPEECH OUTPUT: 'File Preferences Help'"]))
-
-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(
-    "Insert+KP_6 to flat review below",
-    ["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(KeyPressAction(0, None, "KP_Insert"))
-sequence.append(KeyComboAction("KP_4"))
-sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
-sequence.append(utils.AssertPresentationAction(
-    "Insert+KP_4 to flat review above",
-    ["BRAILLE LINE:  'File Preferences Help $l'",
-     "     VISIBLE:  'File Preferences Help $l', cursor=1",
-     "SPEECH OUTPUT: 'File'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_9"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_9 to flat 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(KeyPressAction(0, None, "KP_Insert"))
-sequence.append(KeyComboAction("KP_1"))
-sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
-sequence.append(utils.AssertPresentationAction(
-    "Insert+KP_1 to flat review end of line",
-    ["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_Subtract"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_Subtract to exit flat review",
-    ["BUG? - Extra stuff here",
-     "BRAILLE LINE:  'Leaving flat review.'",
-     "     VISIBLE:  'Leaving flat review.', cursor=0",
-     "BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame'",
-     "     VISIBLE:  'Application Window Frame', cursor=1",
-     "BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "SPEECH OUTPUT: 'Leaving flat review.' voice=system",
-     "SPEECH OUTPUT: 'Application Window frame'",
-     "SPEECH OUTPUT: 'text This is only '"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_5"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_5 to flat review 'is'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=6",
-     "SPEECH OUTPUT: 'is'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_6"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_6 to flat review 'only'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=9",
-     "SPEECH OUTPUT: 'only'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_3"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_3 to flat review 'n'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=10",
-     "SPEECH OUTPUT: 'n'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_3"))
-sequence.append(utils.AssertPresentationAction(
-    "KP_3 to flat review 'l'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=11",
-     "SPEECH OUTPUT: 'l'"]))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("KP_Divide"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
-sequence.append(utils.AssertPresentationAction(
-    "KP_Divide to left click on 'l'",
-    ["BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=11",
-     "BRAILLE LINE:  'This is only  $l'",
-     "     VISIBLE:  'This is only  $l', cursor=11"]))
-
-########################################################################
-# Dismiss the menu and close the Application Window demo window
-#
 sequence.append(KeyComboAction("<Alt>F4"))
 
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
-
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py 
b/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py
index e6b842e..2e42411 100644
--- a/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py
+++ b/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py
@@ -1,46 +1,22 @@
 #!/usr/bin/python
 
-"""Test of general text navigation using caret navigation and flat review 
-techniques.
-"""
+"""Test of text output for caret navigation and flat review."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Application Main Window demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Application main window", 1000))
-sequence.append(KeyComboAction("Return", 500))
-
-########################################################################
-# When the demo comes up, go to the text area and type.
-#
-#sequence.append(WaitForWindowActivate("Application Window",None))
-sequence.append(WaitForFocus("Open", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(KeyComboAction("Tab"))
-
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
 
 sequence.append(TypeAction("This is a test. "))
 sequence.append(KeyComboAction("Return"))
 sequence.append(TypeAction("This is only a test."))
 sequence.append(KeyComboAction("Return"))
 
-sequence.append(PauseAction(3000))
-
-########################################################################
-# Position the cursor on the second line, just after the first space.
-#
 sequence.append(KeyComboAction("Up"))
 sequence.append(KeyComboAction("Right"))
 sequence.append(KeyComboAction("Right"))
@@ -48,226 +24,119 @@ sequence.append(KeyComboAction("Right"))
 sequence.append(KeyComboAction("Right"))
 sequence.append(KeyComboAction("Right"))
 
-########################################################################
-# Test #1 - Shift+Ctrl+Page_Up to select text to beginning of line.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift><Control>Page_Up"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Shift+Ctrl+Page_Up to select text to beginning of line",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=1",
-     "SPEECH OUTPUT: 'This '",
      "SPEECH OUTPUT: 'line selected from start to previous cursor position'"]))
 
-########################################################################
-# Test #2 - Shift+Ctrl+Page_Down to select text to end of line.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift><Control>Page_Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Shift+Ctrl+Page_Down to select text 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.'",
      "SPEECH OUTPUT: 'line selected to end from previous cursor position'"]))
 
-########################################################################
-# Test #3 - Shift+Up to select text.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Up"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Shift+Up to select text",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test.  $l'",
+    "Shift+Up to deselect some text and select some text above",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame This is a test.  $l'",
      "     VISIBLE:  'This is a test.  $l', cursor=17",
+     "SPEECH OUTPUT: 'is only a test.'",
+     "SPEECH OUTPUT: 'unselected' voice=system",
      "SPEECH OUTPUT: '",
-     "This is only a test.'",
-     "SPEECH OUTPUT: 'unselected' voice=system"]))
+     "This '",
+     "SPEECH OUTPUT: 'selected' voice=system"]))
 
-########################################################################
-# Test #4 - Shift+Down to deselect text.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Shift+Down to deselect text",
+    "Shift+Down to deselect some text and select some text below",
     ["BRAILLE LINE:  'This is only a test. $l'",
      "     VISIBLE:  'This is only a test. $l', cursor=21",
      "SPEECH OUTPUT: '",
-     "This is only a test.'",
-     "SPEECH OUTPUT: 'unselected'"]))
+     "This '",
+     "SPEECH OUTPUT: 'unselected' voice=system",
+     "SPEECH OUTPUT: 'is only a test.'",
+     "SPEECH OUTPUT: 'selected' voice=system"]))
 
-########################################################################
-# Test #5 - Ctrl+Page_Up to beginning of line.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Page_Up"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "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: 'unselected'"]))
+     "SPEECH OUTPUT: 'is only a test.'",
+     "SPEECH OUTPUT: 'unselected' voice=system"]))
 
-########################################################################
-# Test #6 - Ctrl+Page_Down to end of line.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Page_Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "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.'"]))
 
-########################################################################
-# Test #7 - Page up.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Page_Up"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Page up",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test.  $l'",
+    ["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. '"]))
 
-########################################################################
-# Test #8 - Page down.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Page_Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Page down",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
      "SPEECH OUTPUT: 'blank'"]))
 
-########################################################################
-# Test #9 - Shift+Page_Up to select text.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Page_Up"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Shift+Page_Up to select text",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test.  $l'",
+    ["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: 'page selected to cursor position'"]))
 
-########################################################################
-# Test #10 - Shift+Page_Down to deselect text.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Page_Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Shift+Page_Down to deselect text",
     ["BRAILLE LINE:  ' $l'",
      "     VISIBLE:  ' $l', cursor=1",
-     "SPEECH OUTPUT: 'blank'",
+     "BRAILLE LINE:  ' $l'",
+     "     VISIBLE:  ' $l', cursor=1",
+     "SPEECH OUTPUT: 'blank' voice=system",
      "SPEECH OUTPUT: 'page unselected from cursor position'"]))
 
-########################################################################
-# Test #11 - Page_Up.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Page_Up"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Page_Up",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane This is a test.  $l'",
+    ["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. '"]))
 
-########################################################################
-# Test #12 - KP_Add to do a SayAll.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Add"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "KP_Add to do a SayAll",
-    ["SPEECH OUTPUT: 'This is a test.'",
-     "SPEECH OUTPUT: ' ",
-     "This is only a test.'",
-     "SPEECH OUTPUT: '",
+    ["SPEECH OUTPUT: 'This is a test. ",
+     "'",
+     "SPEECH OUTPUT: 'This is only a test.",
      "'"]))
 
-########################################################################
-# Dismiss the menu and close the Application Window demo window
-#
 sequence.append(KeyComboAction("<Alt>F4"))
 
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
-
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_toggle_button.py b/test/keystrokes/gtk-demo/role_toggle_button.py
index faa5f6f..9e2cb39 100644
--- a/test/keystrokes/gtk-demo/role_toggle_button.py
+++ b/test/keystrokes/gtk-demo/role_toggle_button.py
@@ -1,113 +1,62 @@
 #!/usr/bin/python
 
-"""Test of toggle button output using the gtk-demo Expander button demo.
-"""
+"""Test of toggle button output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Expander demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
 sequence.append(TypeAction("Expander"))
 sequence.append(KeyComboAction("Return"))
 
-########################################################################
-# Give focus to the toggle button. Do a basic "Where Am I" via KP_Enter.
-#
-sequence.append(PauseAction(1000))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Tab"))
+
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Toggle button Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application GtkExpander Dialog & y Details ToggleButton'",
-     "     VISIBLE:  '& y Details ToggleButton', cursor=1",
+    ["BRAILLE LINE:  'gtk-demo application GtkExpander dialog & y Details collapsed toggle button'",
+     "     VISIBLE:  '& y Details collapsed toggle but', cursor=1",
      "SPEECH OUTPUT: 'Details'",
-     "SPEECH OUTPUT: 'toggle button not pressed'"]))
+     "SPEECH OUTPUT: 'toggle button collapsed'"]))
 
-########################################################################
-# Toggle the state of the "Details" button.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
-sequence.append(WaitAction("object:state-changed:expanded",
-                           "Details",
-                           None,
-                           pyatspi.ROLE_TOGGLE_BUTTON,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Toggle button pressed",
-    ["BRAILLE LINE:  'gtk-demo Application GtkExpander Dialog &=y Details ToggleButton'",
-     "     VISIBLE:  '&=y Details ToggleButton', cursor=1",
-     "SPEECH OUTPUT: 'pressed'"]))
+    "Toggle button state changed to expanded",
+    ["KNOWN ISSUE: Here we are presenting both the former and new state",
+     "BRAILLE LINE:  'gtk-demo application GtkExpander dialog &=y Details collapsed toggle button'",
+     "     VISIBLE:  '&=y Details collapsed toggle but', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application GtkExpander dialog &=y Details expanded toggle button'",
+     "     VISIBLE:  '&=y Details expanded toggle butt', cursor=1",
+     "SPEECH OUTPUT: 'collapsed'",
+     "SPEECH OUTPUT: 'expanded'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Toggle button pressed Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application GtkExpander Dialog &=y Details ToggleButton'",
-     "     VISIBLE:  '&=y Details ToggleButton', cursor=1",
+    ["BRAILLE LINE:  'gtk-demo application GtkExpander dialog &=y Details expanded toggle button'",
+     "     VISIBLE:  '&=y Details expanded toggle butt', cursor=1",
      "SPEECH OUTPUT: 'Details'",
-     "SPEECH OUTPUT: 'toggle button pressed'"]))
+     "SPEECH OUTPUT: 'toggle button expanded'"]))
 
-########################################################################
-# Toggle the state of the "Details" button.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Return"))
-sequence.append(WaitAction("object:state-changed:expanded",
-                           "Details",
-                           None,
-                           pyatspi.ROLE_TOGGLE_BUTTON,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Toggle button not pressed",
-    ["BRAILLE LINE:  'gtk-demo Application GtkExpander Dialog & y Details ToggleButton'",
-     "     VISIBLE:  '& y Details ToggleButton', cursor=1",
-     "SPEECH OUTPUT: 'not pressed'"]))
-
-########################################################################
-# Close the demo.
-#
-sequence.append(KeyComboAction("Tab"))
+    "Toggle button state changed to collapsed",
+    ["KNOWN ISSUE: Here we are presenting both the former and new state",
+     "BRAILLE LINE:  'gtk-demo application GtkExpander dialog & y Details expanded toggle button'",
+     "     VISIBLE:  '& y Details expanded toggle butt', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application GtkExpander dialog & y Details collapsed toggle button'",
+     "     VISIBLE:  '& y Details collapsed toggle but', cursor=1",
+     "SPEECH OUTPUT: 'expanded'",
+     "SPEECH OUTPUT: 'collapsed'"]))
 
-sequence.append(WaitForFocus("Close", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(KeyComboAction("Return", 500))
-
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TREE_TABLE,
-                           5000))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_toolbar.py b/test/keystrokes/gtk-demo/role_toolbar.py
index acc5721..d734919 100644
--- a/test/keystrokes/gtk-demo/role_toolbar.py
+++ b/test/keystrokes/gtk-demo/role_toolbar.py
@@ -1,120 +1,69 @@
 #!/usr/bin/python
 
-"""Test of toolbar output using the gtk-demo Application Main Window
-   demo.
-"""
+"""Test of toolbar output using."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Application Main Window demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Application main window"))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Return"))
-sequence.append(PauseAction(1000))
 
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Return"))
-sequence.append(WaitForFocus("Open", acc_role=pyatspi.ROLE_PUSH_BUTTON))
+sequence.append(KeyComboAction("<Control>Tab"))
 sequence.append(utils.AssertPresentationAction(
-    "Open button initial focus",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame'",
-     "     VISIBLE:  'Application Window Frame', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Application Window Frame ToolBar Open Button'",
-     "     VISIBLE:  'Open Button', cursor=1",
-     "SPEECH OUTPUT: 'Application Window frame'",
-     "SPEECH OUTPUT: 'Open button'"]))
+    "Push button initial focus",
+    ["KNOWN ISSUE: The widgets on the toolbar no longer have accessible names, so Orca cannot present them.",
+     "BRAILLE LINE:  'gtk3-demo-application application Application Class frame push button'",
+     "     VISIBLE:  'push button', cursor=1",
+     "SPEECH OUTPUT: 'push button'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
-    "Open button Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ToolBar Open Button'",
-     "     VISIBLE:  'Open Button', cursor=1",
-     "SPEECH OUTPUT: 'tool bar'",
-     "SPEECH OUTPUT: 'Open'",
-     "SPEECH OUTPUT: 'button'"]))
+    "Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame push button'",
+     "     VISIBLE:  'push button', cursor=1",
+     "SPEECH OUTPUT: 'tool bar push button'"]))
 
-########################################################################
-# Arrow Right to the triangular button next to the "Open" button.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
-sequence.append(PauseAction(1000))
 sequence.append(utils.AssertPresentationAction(
     "Open triangle toggle button",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ToolBar & y ToggleButton'",
-     "     VISIBLE:  '& y ToggleButton', cursor=1",
-     "SPEECH OUTPUT: 'toggle button not pressed'"]))
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame & y Menu toggle button'",
+     "     VISIBLE:  '& y Menu toggle button', cursor=1",
+     "SPEECH OUTPUT: 'Menu toggle button not pressed'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Open triangle toggle button Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ToolBar & y ToggleButton'",
-     "     VISIBLE:  '& y ToggleButton', cursor=1",
-     "SPEECH OUTPUT: 'tool bar toggle button not pressed'"]))
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame & y Menu toggle button'",
+     "     VISIBLE:  '& y Menu toggle button', cursor=1",
+     "SPEECH OUTPUT: 'tool bar'",
+     "SPEECH OUTPUT: 'Menu'",
+     "SPEECH OUTPUT: 'toggle button not pressed'"]))
 
-########################################################################
-# Arrow Right to the the "Quit" button.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Right"))
-sequence.append(PauseAction(1000))
 sequence.append(utils.AssertPresentationAction(
-    "Quit button",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ToolBar Quit Button'",
-     "     VISIBLE:  'Quit Button', cursor=1",
-     "SPEECH OUTPUT: 'Quit button'"]))
+    "Next push button",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame push button'",
+     "     VISIBLE:  'push button', cursor=1",
+     "SPEECH OUTPUT: 'push button'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
-    "Quit button Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ToolBar Quit Button'",
-     "     VISIBLE:  'Quit Button', cursor=1",
-     "SPEECH OUTPUT: 'tool bar'",
-     "SPEECH OUTPUT: 'Quit'",
-     "SPEECH OUTPUT: 'button'"]))
+    "Where Am I",
+    ["BRAILLE LINE:  'gtk3-demo-application application Application Class frame push button'",
+     "     VISIBLE:  'push button', cursor=1",
+     "SPEECH OUTPUT: 'tool bar push button'"]))
 
-########################################################################
-# Close the Application Window demo window
-#
 sequence.append(KeyComboAction("<Alt>F4"))
 
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
-
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_tooltip.py b/test/keystrokes/gtk-demo/role_tooltip.py
index 1a567ad..930f315 100644
--- a/test/keystrokes/gtk-demo/role_tooltip.py
+++ b/test/keystrokes/gtk-demo/role_tooltip.py
@@ -1,116 +1,39 @@
 #!/usr/bin/python
 
-"""Test of tooltips using the gtk-demo Application Main Window demo.
-"""
+"""Test of tooltips."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table.
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Application Main Window demo.
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Application main window", 1000))
-sequence.append(KeyComboAction("Return", 500))
-
-########################################################################
-# When the demo comes up, press Ctrl+F1 to pop up the tooltip.
-#
-#sequence.append(WaitForWindowActivate("Application Window",None))
-sequence.append(WaitForFocus("Open", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Control>F1"))
-sequence.append(utils.AssertPresentationAction(
-    "Show Open tooltip",
-    ["BRAILLE LINE:  'Open a file'",
-     "     VISIBLE:  'Open a file', cursor=0",
-     "SPEECH OUTPUT: 'Open a file'"]))
-
-########################################################################
-# Dismiss the tooltip.
-#
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Control>F1"))
-sequence.append(utils.AssertPresentationAction(
-    "Hide Open tooltip",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ToolBar Open Button'",
-     "     VISIBLE:  'Open Button', cursor=1",
-     "SPEECH OUTPUT: 'Open'",
-     "SPEECH OUTPUT: 'button'"]))
-
-########################################################################
-# Move on to the Quit button.  Check its tooltip.
-#
-sequence.append(KeyComboAction("Right"))
-sequence.append(WaitForFocus("", acc_role=pyatspi.ROLE_TOGGLE_BUTTON))
-sequence.append(KeyComboAction("Right"))
-sequence.append(WaitForFocus("Quit", acc_role=pyatspi.ROLE_PUSH_BUTTON))
+sequence.append(TypeAction("Printing"))
+sequence.append(KeyComboAction("Return"))
 
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Control>F1"))
-sequence.append(utils.AssertPresentationAction(
-    "Show Quit tooltip",
-    ["BRAILLE LINE:  'Quit'",
-     "     VISIBLE:  'Quit', cursor=0",
-     "SPEECH OUTPUT: 'Quit'"]))
-
-########################################################################
-# Dismiss the tooltip.
-#
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Control>F1"))
-sequence.append(utils.AssertPresentationAction(
-    "Hide Quit tooltip",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ToolBar Quit Button'",
-     "     VISIBLE:  'Quit Button', cursor=1",
-     "SPEECH OUTPUT: 'Quit'",
-     "SPEECH OUTPUT: 'button'"]))
-
-########################################################################
-# Move on to the GTK! button.  Check its tooltip.
-#
-sequence.append(KeyComboAction("Right"))
-sequence.append(WaitForFocus("GTK!", acc_role=pyatspi.ROLE_PUSH_BUTTON))
+sequence.append(KeyComboAction("<Alt>e"))
+sequence.append(KeyComboAction("<Shift>ISO_Left_Tab"))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>F1"))
 sequence.append(utils.AssertPresentationAction(
-    "Show GTK+ tooltip",
-    ["BRAILLE LINE:  'GTK+'",
-     "     VISIBLE:  'GTK+', cursor=0",
-     "SPEECH OUTPUT: 'GTK+'"]))
+    "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'"]))
 
-########################################################################
-# Dismiss the tooltip.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>F1"))
 sequence.append(utils.AssertPresentationAction(
-    "Hide GTK+ tooltip",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ToolBar GTK! Button'",
-     "     VISIBLE:  'GTK! Button', cursor=1",
-     "SPEECH OUTPUT: 'GTK!'",
-     "SPEECH OUTPUT: 'button'"]))
+    "Hide tooltip",
+    ["BRAILLE LINE:  'gtk-demo application Print dialog General page tab Range &=y Pages: radio button'",
+     "     VISIBLE:  '&=y Pages: radio button', cursor=1",
+     "SPEECH OUTPUT: 'Pages:'",
+     "SPEECH OUTPUT: 'selected radio button'"]))
 
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-sequence.append(KeyComboAction("<Alt>F4", 500))
-sequence.append(PauseAction(1000))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_tree_table.py b/test/keystrokes/gtk-demo/role_tree_table.py
index 00f8344..d65718c 100644
--- a/test/keystrokes/gtk-demo/role_tree_table.py
+++ b/test/keystrokes/gtk-demo/role_tree_table.py
@@ -1,313 +1,137 @@
 #!/usr/bin/python
 
-"""Test of tree table output using the gtk-demo Tree Store demo
-   under the Tree View area.
-"""
+"""Test of tree table output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Tree Store demo
-#
-sequence.append(KeyComboAction("<Control>f"))
-sequence.append(PauseAction(1000))
-sequence.append(TypeAction("Tree View", 1000))
-sequence.append(KeyComboAction("Return", 500))
+sequence.append(KeyComboAction("End"))
 sequence.append(KeyComboAction("<Shift>Right"))
-sequence.append(WaitAction("object:state-changed:expanded",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE_CELL,
-                           5000))
-
-sequence.append(KeyComboAction("<Control>f"))
-sequence.append(PauseAction(1000))
-sequence.append(TypeAction("Tree Store", 1000))
-
-sequence.append(KeyComboAction("Return", 500))
-sequence.append(PauseAction(3000))
-
-sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Shift>ISO_Left_Tab", 500))
-
-#sequence.append(WaitForWindowActivate("Card planning sheet",None))
-sequence.append(WaitForFocus("Holiday",
-                             acc_role=pyatspi.ROLE_TABLE_COLUMN_HEADER))
-sequence.append(utils.AssertPresentationAction(
-    "Tree table initial focus",
-    ["BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Holiday 
ColumnHeader'",
-     "     VISIBLE:  'Holiday ColumnHeader', cursor=1",
-     "SPEECH OUTPUT: 'Holiday column header'"]))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Down"))
+sequence.append(KeyComboAction("Return"))
 
-########################################################################
-# Down arrow twice to select the "January" cell.
-#
-sequence.append(KeyComboAction("Down", 500))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TREE_TABLE))
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:state-changed:selected",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE_CELL,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "January cell focus",
-    ["KNOWN ISSUE - For some reason during the test, we say nothing here; when performed manually, we speak 
selected state."]))
-#     "SPEECH OUTPUT: 'selected'"]))
+    ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
+     "SPEECH OUTPUT: 'tree table'",
+     "SPEECH OUTPUT: 'Holiday column header January expanded 3 items Alex check box not checked Havoc check 
box not checked Tim check box not checked Owen check box not checked Dave check box not checked tree level 
1'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "January cell basic Where Am I",
-    ["KNOWN ISSUE - We're not updating our position; we used to.",
-     "BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable'",
-     "     VISIBLE:  'TreeTable', cursor=1",
-     "SPEECH OUTPUT: 'tree table'"]))
-    
-#    ["BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Holiday 
ColumnHeader January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
-#     "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
-#     "SPEECH OUTPUT: 'tree table Holiday cell January column 1 of 6 row 1 of 53 expanded tree level 1'"]))
+    ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
+     "SPEECH OUTPUT: 'tree table Holiday table cell January column 1 of 6 row 1 of 53 expanded tree level 
1'"]))
 
-########################################################################
-# Do a detailed "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "January cell detailed Where Am I",
-    ["KNOWN ISSUE - We're not updating our position; we used to.",
-     "BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable'",
-     "     VISIBLE:  'TreeTable', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable'",
-     "     VISIBLE:  'TreeTable', cursor=1",
-     "SPEECH OUTPUT: 'tree table'"]))
-    
-#    ["KNOWN ISSUE - We used to speak that there were three items in the second speech output line; now we 
do not. Need to investigate.",
-#     "BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Holiday 
ColumnHeader January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
-#     "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
-#     "BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Holiday 
ColumnHeader January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
-#     "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
-#     "SPEECH OUTPUT: 'tree table Holiday cell January column 1 of 6 row 1 of 53 expanded tree level 1'",
-#     "SPEECH OUTPUT: 'tree table Holiday cell January column 1 of 6 row 1 of 53 January expanded Alex check 
box not checked Havoc check box not checked Tim check box not checked Owen check box not checked Dave check 
box not checked expanded tree level 1'"]))
+    ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
+     "SPEECH OUTPUT: 'tree table Holiday table cell January column 1 of 6 row 1 of 53 expanded tree level 
1'",
+     "SPEECH OUTPUT: 'tree table Holiday table cell January column 1 of 6 row 1 of 53 January expanded 3 
items Alex check box not checked Havoc check box not checked Tim check box not checked Owen check box not 
checked Dave check box not checked expanded tree level 1'"]))
 
-########################################################################
-# Collapse the cell.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Shift>Left", 500))
-sequence.append(WaitAction("object:state-changed:expanded",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE_CELL,
-                           5000))
+sequence.append(KeyComboAction("<Shift>Left"))
 sequence.append(utils.AssertPresentationAction(
     "January cell collapsed",
-   ["KNOWN ISSUE - When the tests are run, we present nothing here."]))
-#    ["BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Holiday 
ColumnHeader January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
-#     "     VISIBLE:  'January collapsed < > Alex < > H', cursor=1",
-#     "SPEECH OUTPUT: 'collapsed'"]))
+    ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January collapsed < > Alex < > H', cursor=1",
+     "SPEECH OUTPUT: 'collapsed'"]))
 
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "January cell collapsed basic Where Am I",
-    ["KNOWN ISSUE - We're not updating our position; we used to.",
-     "BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable'",
-     "     VISIBLE:  'TreeTable', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable'",
-     "     VISIBLE:  'TreeTable', cursor=1",
-     "SPEECH OUTPUT: 'tree table'"]))
-#
-#    ["BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Holiday 
ColumnHeader January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
-#     "     VISIBLE:  'January collapsed < > Alex < > H', cursor=1",
-#     "SPEECH OUTPUT: 'tree table Holiday cell January column 1 of 6 row 1 of 50 collapsed tree level 1'"]))
+    ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January collapsed < > Alex < > H', cursor=1",
+     "SPEECH OUTPUT: 'tree table Holiday table cell January column 1 of 6 row 1 of 50 collapsed tree level 
1'"]))
 
-########################################################################
-# Do a detailed "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "January cell collapsed detailed Where Am I",
-    ["KNOWN ISSUE - We're not updating our position; we used to.",
-     "BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable'",
-     "     VISIBLE:  'TreeTable', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable'",
-     "     VISIBLE:  'TreeTable', cursor=1",
-     "SPEECH OUTPUT: 'tree table'"]))
-
-#    ["BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Holiday 
ColumnHeader January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
-#     "     VISIBLE:  'January collapsed < > Alex < > H', cursor=1",
-#     "BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Holiday 
ColumnHeader January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
-#     "     VISIBLE:  'January collapsed < > Alex < > H', cursor=1",
-#     "SPEECH OUTPUT: 'tree table Holiday cell January column 1 of 6 row 1 of 50 collapsed tree level 1'",
-#     "SPEECH OUTPUT: 'tree table Holiday cell January column 1 of 6 row 1 of 50 January collapsed Alex 
check box not checked Havoc check box not checked Tim check box not checked Owen check box not checked Dave 
check box not checked collapsed tree level 1'"]))
+    ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January collapsed < > Alex < > H', cursor=1",
+     "BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header 
January collapsed < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+     "     VISIBLE:  'January collapsed < > Alex < > H', cursor=1",
+     "SPEECH OUTPUT: 'tree table Holiday table cell January column 1 of 6 row 1 of 50 collapsed tree level 
1'",
+     "SPEECH OUTPUT: 'tree table Holiday table cell January column 1 of 6 row 1 of 50 January collapsed Alex 
check box not checked Havoc check box not checked Tim check box not checked Owen check box not checked Dave 
check box not checked collapsed tree level 1'"]))
 
-########################################################################
-# Expand the cell again.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Shift>Right"))
-sequence.append(WaitAction("object:state-changed:expanded",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE_CELL,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "January cell expanded",
-   ["KNOWN ISSUE - When the tests are run, we present nothing here."]))
-#    ["KNOWN ISSUE - We used to speak that there were three items in the second speech output line; now we 
do not. Need to investigate.",
-#     "BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Holiday 
ColumnHeader January expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
-#     "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
-#     "SPEECH OUTPUT: 'expanded'"]))
+   ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header January 
expanded < > Alex < > Havoc < > Tim < > Owen < > Dave TREE LEVEL 1'",
+    "     VISIBLE:  'January expanded < > Alex < > Ha', cursor=1",
+    "SPEECH OUTPUT: 'expanded 2 items'"]))
 
-########################################################################
-# Arrow down a row.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("Down", 500))
-sequence.append(WaitAction("object:state-changed:selected",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE_CELL,
-                           5000))
+sequence.append(KeyComboAction("Down"))
 sequence.append(utils.AssertPresentationAction(
     "New Year's Day cell",
-    ["BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Holiday 
ColumnHeader New Years Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave TREE LEVEL 2'",
+    ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Holiday column header New 
Years Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave TREE LEVEL 2'",
      "     VISIBLE:  'New Years Day <x> Alex <x> Havoc', cursor=1",
-     "SPEECH OUTPUT: 'Holiday column header New Years Day Alex check box checked Havoc check box checked Tim 
check box checked Owen check box checked Dave check box not checked tree level 2'"]))
+     "SPEECH OUTPUT: 'New Years Day Alex check box checked Havoc check box checked Tim check box checked 
Owen check box checked Dave check box not checked tree level 2'"]))
 
-########################################################################
-# Arrow right to a column.
-#
 sequence.append(utils.StartRecordingAction())
-sequence.append(KeyComboAction("<Control>Right", 500))
-sequence.append(WaitAction("object:active-descendant-changed",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE,
-                           5000))
+sequence.append(KeyComboAction("Right"))
 sequence.append(utils.AssertPresentationAction(
     "Alex checkbox cell",
-    ["BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Alex ColumnHeader 
New Years Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
+    ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Alex column header New Years 
Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
      "     VISIBLE:  '<x> Alex <x> Havoc <x> Tim <x> O', cursor=1",
      "SPEECH OUTPUT: 'Alex column header check box checked'"]))
 
-#
-# [[[BUG?: Somewhere around here, the demo flakes out.]]]
-#
-
-########################################################################
-# Do a basic "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Alex checkbox cell basic Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Alex ColumnHeader 
New Years Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
+    ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Alex column header New Years 
Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
      "     VISIBLE:  '<x> Alex <x> Havoc <x> Tim <x> O', cursor=1",
-     "SPEECH OUTPUT: 'tree table Alex cell check box checked column 2 of 6 row 2 of 53'"]))
+     "SPEECH OUTPUT: 'tree table Alex table cell check box checked column 2 of 6 row 2 of 53'"]))
 
-########################################################################
-# Do a detailed "Where Am I" via KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyComboAction("KP_Enter"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Alex checkbox cell detailed Where Am I",
-    ["BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Alex ColumnHeader 
New Years Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
+    ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Alex column header New Years 
Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
      "     VISIBLE:  '<x> Alex <x> Havoc <x> Tim <x> O', cursor=1",
-     "BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Alex ColumnHeader 
New Years Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
+     "BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Alex column header New Years 
Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
      "     VISIBLE:  '<x> Alex <x> Havoc <x> Tim <x> O', cursor=1",
-     "SPEECH OUTPUT: 'tree table Alex cell check box checked column 2 of 6 row 2 of 53'",
-     "SPEECH OUTPUT: 'tree table Alex cell check box checked column 2 of 6 row 2 of 53 New Years Day Alex 
check box checked Havoc check box checked Tim check box checked Owen check box checked Dave check box not 
checked'"]))
+     "SPEECH OUTPUT: 'tree table Alex table cell check box checked column 2 of 6 row 2 of 53'",
+     "SPEECH OUTPUT: 'tree table Alex table cell check box checked column 2 of 6 row 2 of 53 New Years Day 
Alex check box checked Havoc check box checked Tim check box checked Owen check box checked Dave check box 
not checked'"]))
 
-########################################################################
-# Change the state of the checkbox.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
-sequence.append(WaitAction("object:state-changed:checked",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE_CELL,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Alex checkbox cell unchecked",
-    ["BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Alex ColumnHeader 
New Years Day < > Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
+    ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Alex column header New Years 
Day < > Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
      "     VISIBLE:  '< > Alex <x> Havoc <x> Tim <x> O', cursor=1",
      "SPEECH OUTPUT: 'not checked'"]))
 
-########################################################################
-# Change the state of the checkbox.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(TypeAction(" "))
-sequence.append(WaitAction("object:state-changed:checked",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE_CELL,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
     "Alex checkbox cell checked",
-    ["BRAILLE LINE:  'gtk-demo Application Card planning sheet Frame ScrollPane TreeTable Alex ColumnHeader 
New Years Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
+    ["BRAILLE LINE:  'gtk-demo application Card planning sheet frame tree table Alex column header New Years 
Day <x> Alex <x> Havoc <x> Tim <x> Owen < > Dave'",
      "     VISIBLE:  '<x> Alex <x> Havoc <x> Tim <x> O', cursor=1",
      "SPEECH OUTPUT: 'checked'"]))
 
-########################################################################
-# Close the Card planning sheet demo
-#
-sequence.append(KeyComboAction("<Alt>F4", 1000))
-
-########################################################################
-# Go back to the main gtk-demo window and reselect the
-# "Application main window" menu.  Let the harness kill the app.
-#
-#sequence.append(WaitForWindowActivate("GTK+ Code Demos",None))
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("<Control>f"))
-
-sequence.append(PauseAction(1000))
-sequence.append(TypeAction("Tree View", 1000))
-sequence.append(KeyComboAction("Return", 500))
-sequence.append(KeyComboAction("<Shift>Left"))
-sequence.append(WaitAction("object:state-changed:expanded",
-                           None,
-                           None,
-                           pyatspi.ROLE_TABLE_CELL,
-                           5000))
-
-sequence.append(PauseAction(1000))
-sequence.append(KeyComboAction("Home"))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+sequence.append(KeyComboAction("<Alt>F4"))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/role_window.py b/test/keystrokes/gtk-demo/role_window.py
index dbd7b33..9256feb 100644
--- a/test/keystrokes/gtk-demo/role_window.py
+++ b/test/keystrokes/gtk-demo/role_window.py
@@ -1,38 +1,21 @@
 #!/usr/bin/python
 
-"""Test of window title output using gtk-demo.
-"""
+"""Test of window title output."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-# The following should be presented:
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, do a "Where Am I" to get the title info via
-# KP_Insert+KP_Enter.
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyPressAction(0, None, "KP_Insert"))
 sequence.append(KeyComboAction("KP_Enter"))
 sequence.append(KeyReleaseAction(0, None, "KP_Insert"))
-sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Window Where Am I",
-    ["BRAILLE LINE:  'GTK+ Code Demos'",
-     "     VISIBLE:  'GTK+ Code Demos', cursor=0",
-     "SPEECH OUTPUT: 'GTK+ Code Demos'"]))
-
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
+    ["BRAILLE LINE:  'Application Class'",
+     "     VISIBLE:  'Application Class', cursor=0",
+     "SPEECH OUTPUT: 'Application Class'"]))
 
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/spoken_indentation.py b/test/keystrokes/gtk-demo/spoken_indentation.py
index 967374f..98fec6f 100644
--- a/test/keystrokes/gtk-demo/spoken_indentation.py
+++ b/test/keystrokes/gtk-demo/spoken_indentation.py
@@ -1,38 +1,20 @@
 #!/usr/bin/python
 
-"""Test of general text navigation using caret navigation and flat review 
-techniques.
-"""
+"""Test of presentation of whitespace with braille disabled."""
 
 from macaroon.playback import *
 import utils
 
 sequence = MacroSequence()
 
-########################################################################
-# We wait for the demo to come up and for focus to be on the tree table
-#
-sequence.append(WaitForWindowActivate("GTK+ Code Demos"))
-
-########################################################################
-# Once gtk-demo is running, invoke the Application Main Window demo
-#
 sequence.append(KeyComboAction("<Control>f"))
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
-sequence.append(TypeAction("Application main window", 1000))
-sequence.append(KeyComboAction("Return", 500))
-
-########################################################################
-# When the demo comes up, go to the text area and type.
-#
-#sequence.append(WaitForWindowActivate("Application Window",None))
-sequence.append(WaitForFocus("Open", acc_role=pyatspi.ROLE_PUSH_BUTTON))
-sequence.append(KeyComboAction("Tab"))
-
-sequence.append(WaitForFocus(acc_role=pyatspi.ROLE_TEXT))
+sequence.append(TypeAction("Application class"))
+sequence.append(KeyComboAction("Return"))
+sequence.append(KeyComboAction("Return"))
 
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Return"))
+
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction("foo"))
 sequence.append(KeyComboAction("Return"))
@@ -40,6 +22,7 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Return"))
+
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction("foo"))
@@ -47,17 +30,20 @@ sequence.append(KeyComboAction("Return"))
 
 sequence.append(TypeAction(" "))
 sequence.append(KeyComboAction("Return"))
+
 sequence.append(TypeAction(" foo"))
 sequence.append(KeyComboAction("Return"))
 
 sequence.append(TypeAction("  "))
 sequence.append(KeyComboAction("Return"))
+
 sequence.append(TypeAction("  foo"))
 sequence.append(KeyComboAction("Return"))
 
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction(" "))
 sequence.append(KeyComboAction("Return"))
+
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction(" foo"))
 sequence.append(KeyComboAction("Return"))
@@ -65,6 +51,7 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction("  "))
 sequence.append(KeyComboAction("Return"))
+
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction("  foo"))
 sequence.append(KeyComboAction("Return"))
@@ -73,6 +60,7 @@ sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction(" "))
 sequence.append(KeyComboAction("Return"))
+
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction(" foo"))
@@ -82,6 +70,7 @@ sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction("  "))
 sequence.append(KeyComboAction("Return"))
+
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction("  foo"))
@@ -91,6 +80,7 @@ sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction(" "))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Return"))
+
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction(" "))
 sequence.append(KeyComboAction("Tab"))
@@ -102,6 +92,7 @@ sequence.append(TypeAction(" "))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction(" "))
 sequence.append(KeyComboAction("Return"))
+
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction(" "))
 sequence.append(KeyComboAction("Tab"))
@@ -112,6 +103,7 @@ sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction("  "))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Return"))
+
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction("  "))
 sequence.append(KeyComboAction("Tab"))
@@ -121,363 +113,182 @@ sequence.append(KeyComboAction("Return"))
 sequence.append(TypeAction("  "))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(KeyComboAction("Return"))
+
 sequence.append(TypeAction("  "))
 sequence.append(KeyComboAction("Tab"))
 sequence.append(TypeAction("foo"))
 sequence.append(KeyComboAction("Return"))
 
-sequence.append(PauseAction(3000))
-
-########################################################################
-# Do a bunch of navigation
-#
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("<Control>Home"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Home to 1 tab",
-    ["BRAILLE LINE:  'gtk-demo Application Application Window Frame ScrollPane          $l'",
-     "     VISIBLE:  '  $l', cursor=1",
-     "SPEECH OUTPUT: 'left control'",
-     "SPEECH OUTPUT: 'home'",
+    "1 Tab",
+    ["SPEECH OUTPUT: 'left control '",
      "SPEECH OUTPUT: '1 tab ' voice=system",
      "SPEECH OUTPUT: ' '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 1 tab and foo",
-    ["BRAILLE LINE:  ' foo $l'",
-     "     VISIBLE:  ' foo $l', cursor=1",
-     "SPEECH OUTPUT: '1 tab '",
+    "1 Tab and the word 'foo'",
+    ["SPEECH OUTPUT: '1 tab ' voice=system",
      "SPEECH OUTPUT: ' foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 2 tabs",
-    ["BRAILLE LINE:  '          $l'",
-     "     VISIBLE:  '          $l', cursor=1",
-     "SPEECH OUTPUT: '2 tabs '",
+    "2 Tabs",
+    ["SPEECH OUTPUT: '2 tabs ' voice=system",
      "SPEECH OUTPUT: '         '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 2 tabs and foo",
-    ["BRAILLE LINE:  '         foo $l'",
-     "     VISIBLE:  '         foo $l', cursor=1",
-     "SPEECH OUTPUT: '2 tabs '",
+    "2 Tabs and the word 'foo'",
+    ["SPEECH OUTPUT: '2 tabs ' voice=system",
      "SPEECH OUTPUT: '         foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 1 space",
-    ["BRAILLE LINE:  '  $l'",
-     "     VISIBLE:  '  $l', cursor=1",
-     "SPEECH OUTPUT: '1 space '",
+    "1 space",
+    ["SPEECH OUTPUT: '1 space ' voice=system",
      "SPEECH OUTPUT: ' '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 1 space and foo",
-    ["BRAILLE LINE:  ' foo $l'",
-     "     VISIBLE:  ' foo $l', cursor=1",
-     "SPEECH OUTPUT: '1 space '",
+    "1 space and the word 'foo'",
+    ["SPEECH OUTPUT: '1 space ' voice=system",
      "SPEECH OUTPUT: ' foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 2 spaces",
-    ["BRAILLE LINE:  '   $l'",
-     "     VISIBLE:  '   $l', cursor=1",
-     "SPEECH OUTPUT: '2 spaces '",
+    "2 spaces",
+    ["SPEECH OUTPUT: '2 spaces ' voice=system",
      "SPEECH OUTPUT: '  '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 2 spaces and foo",
-    ["BRAILLE LINE:  '  foo $l'",
-     "     VISIBLE:  '  foo $l', cursor=1",
-     "SPEECH OUTPUT: '2 spaces '",
+    "2 spaces and the word 'foo'",
+    ["SPEECH OUTPUT: '2 spaces ' voice=system",
      "SPEECH OUTPUT: '  foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 1 tab 1 space",
-    ["BRAILLE LINE:  '   $l'",
-     "     VISIBLE:  '   $l', cursor=1",
-     "SPEECH OUTPUT: '1 tab 1 space '",
+    "1 Tab and 1 space",
+    ["SPEECH OUTPUT: '1 tab 1 space ' voice=system",
      "SPEECH OUTPUT: '  '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 1 tab 1 space and foo",
-    ["BRAILLE LINE:  '  foo $l'",
-     "     VISIBLE:  '  foo $l', cursor=1",
-     "SPEECH OUTPUT: '1 tab 1 space '",
+    "1 Tab, 1 space, and the word 'foo'",
+    ["SPEECH OUTPUT: '1 tab 1 space ' voice=system",
      "SPEECH OUTPUT: '  foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 1 tab 2 spaces",
-    ["BRAILLE LINE:  '    $l'",
-     "     VISIBLE:  '    $l', cursor=1",
-     "SPEECH OUTPUT: '1 tab 2 spaces '",
+    "1 Tab and 2 spaces",
+    ["SPEECH OUTPUT: '1 tab 2 spaces ' voice=system",
      "SPEECH OUTPUT: '   '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 1 tab 2 spaces and foo",
-    ["BRAILLE LINE:  '   foo $l'",
-     "     VISIBLE:  '   foo $l', cursor=1",
-     "SPEECH OUTPUT: '1 tab 2 spaces '",
+    "1 Tab, 2 spaces, and the word 'foo'",
+    ["SPEECH OUTPUT: '1 tab 2 spaces ' voice=system",
      "SPEECH OUTPUT: '   foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 2 tabs 1 space",
-    ["BRAILLE LINE:  '           $l'",
-     "     VISIBLE:  '           $l', cursor=1",
-     "SPEECH OUTPUT: '2 tabs 1 space '",
+    "2 Tabs and 1 space",
+    ["SPEECH OUTPUT: '2 tabs 1 space ' voice=system",
      "SPEECH OUTPUT: '          '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 2 tabs 1 space and foo",
-    ["BRAILLE LINE:  '          foo $l'",
-     "     VISIBLE:  '          foo $l', cursor=1",
-     "SPEECH OUTPUT: '2 tabs 1 space '",
+    "2 Tabs, 1 space, and the word 'foo'",
+    ["SPEECH OUTPUT: '2 tabs 1 space ' voice=system",
      "SPEECH OUTPUT: '          foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 2 tabs 2 spaces",
-    ["BRAILLE LINE:  '            $l'",
-     "     VISIBLE:  '            $l', cursor=1",
-     "SPEECH OUTPUT: '2 tabs 2 spaces '",
+    "2 Tabs and 2 spaces",
+    ["SPEECH OUTPUT: '2 tabs 2 spaces ' voice=system",
      "SPEECH OUTPUT: '           '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 2 tabs 2 spaces and foo",
-    ["BRAILLE LINE:  '           foo $l'",
-     "     VISIBLE:  '           foo $l', cursor=1",
-     "SPEECH OUTPUT: '2 tabs 2 spaces '",
+    "2 Tabs, 2 spaces, and the word 'foo'",
+    ["SPEECH OUTPUT: '2 tabs 2 spaces ' voice=system",
      "SPEECH OUTPUT: '           foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 1 tab 1 space 1 tab",
-    ["BRAILLE LINE:  '          $l'",
-     "     VISIBLE:  '          $l', cursor=1",
-     "SPEECH OUTPUT: '1 tab 1 space 1 tab '",
+    "1 Tab, 1 space, and 1 Tab",
+    ["SPEECH OUTPUT: '1 tab 1 space 1 tab ' voice=system",
      "SPEECH OUTPUT: '         '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 1 tab 1 space 1 tab and foo",
-    ["BRAILLE LINE:  '         foo $l'",
-     "     VISIBLE:  '         foo $l', cursor=1",
-     "SPEECH OUTPUT: '1 tab 1 space 1 tab '",
+    "1 Tab, 1 space, 1 Tab, and the word 'foo'",
+    ["SPEECH OUTPUT: '1 tab 1 space 1 tab ' voice=system",
      "SPEECH OUTPUT: '         foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 1 tab 1 space 1 tab 1 space",
-    ["BRAILLE LINE:  '           $l'",
-     "     VISIBLE:  '           $l', cursor=1",
-     "SPEECH OUTPUT: '1 tab 1 space 1 tab 1 space '",
+    "1 Tab, 1 space, 1 Tab, and 1 space",
+    ["SPEECH OUTPUT: '1 tab 1 space 1 tab 1 space ' voice=system",
      "SPEECH OUTPUT: '          '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 1 tab 1 space 1 tab 1 space and foo",
-    ["BRAILLE LINE:  '          foo $l'",
-     "     VISIBLE:  '          foo $l', cursor=1",
-     "SPEECH OUTPUT: '1 tab 1 space 1 tab 1 space '",
+    "1 Tab, 1 space, 1 Tab, 1 space, and the word 'foo'",
+    ["SPEECH OUTPUT: '1 tab 1 space 1 tab 1 space ' voice=system",
      "SPEECH OUTPUT: '          foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 1 tab 2 spaces 1 tab",
-    ["BRAILLE LINE:  '          $l'",
-     "     VISIBLE:  '          $l', cursor=1",
-     "SPEECH OUTPUT: '1 tab 2 spaces 1 tab '",
+    "1 Tab, 2 spaces, and 1 Tab",
+    ["SPEECH OUTPUT: '1 tab 2 spaces 1 tab ' voice=system",
      "SPEECH OUTPUT: '         '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 1 tab 2 spaces 1 tab and foo",
-    ["BRAILLE LINE:  '         foo $l'",
-     "     VISIBLE:  '         foo $l', cursor=1",
-     "SPEECH OUTPUT: '1 tab 2 spaces 1 tab '",
+    "1 Tab, 2 spaces, 1 Tab, and the word 'foo'",
+    ["SPEECH OUTPUT: '1 tab 2 spaces 1 tab ' voice=system",
      "SPEECH OUTPUT: '         foo'"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 2 spaces 1 tab",
-    ["BRAILLE LINE:  '          $l'",
-     "     VISIBLE:  '          $l', cursor=1",
-     "SPEECH OUTPUT: '2 spaces 1 tab '",
+    "2 spaces and 1 Tab",
+    ["SPEECH OUTPUT: '2 spaces 1 tab ' voice=system",
      "SPEECH OUTPUT: '         '"]))
 
 sequence.append(utils.StartRecordingAction())
 sequence.append(KeyComboAction("Down"))
-sequence.append(WaitAction("object:text-caret-moved",
-                           None,
-                           None,
-                           pyatspi.ROLE_TEXT,
-                           5000))
 sequence.append(utils.AssertPresentationAction(
-    "Down to 2 spaces 1 tab and foo",
-    ["BRAILLE LINE:  '         foo $l'",
-     "     VISIBLE:  '         foo $l', cursor=1",
-     "SPEECH OUTPUT: '2 spaces 1 tab '",
+    "2 spaces, 1 Tab, and the word 'foo'",
+    ["SPEECH OUTPUT: '2 spaces 1 tab ' voice=system",
      "SPEECH OUTPUT: '         foo'"]))
 
-########################################################################
-# Dismiss the menu and close the Application Window demo window
-#
 sequence.append(KeyComboAction("<Alt>F4"))
 
-# Just a little extra wait to let some events get through.
-#
-sequence.append(PauseAction(3000))
-
 sequence.append(utils.AssertionSummaryAction())
-
 sequence.start()
diff --git a/test/keystrokes/gtk-demo/spoken_indentation.settings 
b/test/keystrokes/gtk-demo/spoken_indentation.settings
index 8e0fb01..6bc57bf 100644
--- a/test/keystrokes/gtk-demo/spoken_indentation.settings
+++ b/test/keystrokes/gtk-demo/spoken_indentation.settings
@@ -21,7 +21,7 @@
                     "established": false
                 }, 
                 "hyperlink": {
-                    "established": false
+                    "average-pitch": 3.0
                 }
             }, 
             "speechServerInfo": [


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