Index: test/keystrokes/gtk-demo/role_column_header.py
===================================================================
--- test/keystrokes/gtk-demo/role_column_header.py	(revision 3440)
+++ test/keystrokes/gtk-demo/role_column_header.py	(working copy)
@@ -76,15 +76,12 @@
     "Enter table for first time",
     ["BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table'",
      "     VISIBLE:  'Table', cursor=1",
-     "BUG? - the ColumnHeader should be Description",
-     "BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Fixed? ColumnHeader < > Fixed? 60482 Normal scrollable notebooks and hidden tabs'",
-     "     VISIBLE:  'scrollable notebooks and hidden tabs', 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: ''",
      "SPEECH OUTPUT: 'table'",
      "SPEECH OUTPUT: ''",
-     "BUG? - the column header should be Description",
-     "SPEECH OUTPUT: 'Fixed? column header'",
-     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: 'Description column header'",
      "SPEECH OUTPUT: 'Fixed? check box not checked  60482 Normal scrollable notebooks and hidden tabs'"]))
 
 ########################################################################
@@ -113,13 +110,11 @@
 sequence.append(PauseAction(3000))
 sequence.append(utils.AssertPresentationAction(
     "Normal cell Where Am I",
-    ["BUG? - should we present column and/or row header?",
-     "BRAILLE LINE:  'gtk-demo Application GtkListStore demo Frame ScrollPane Table Severity ColumnHeader < > Fixed? 60482 Normal 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",
      "SPEECH OUTPUT: ''",
-     "BUG? - the following should contain the checkbox state'",
      "SPEECH OUTPUT: 'cell'",
-     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: 'check box not checked'",
      "SPEECH OUTPUT: '60482'",
      "SPEECH OUTPUT: 'Normal'",
      "SPEECH OUTPUT: 'scrollable notebooks and hidden tabs'",
@@ -172,9 +167,8 @@
     ["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: ''",
-     "BUG? - the following should contain the checkbox state'",
      "SPEECH OUTPUT: 'cell'",
-     "SPEECH OUTPUT: ''",
+     "SPEECH OUTPUT: 'check box not checked'",
      "SPEECH OUTPUT: '60482'",
      "SPEECH OUTPUT: 'Normal'",
      "SPEECH OUTPUT: 'scrollable notebooks and hidden tabs'",
Index: src/orca/default.py
===================================================================
--- src/orca/default.py	(revision 3440)
+++ src/orca/default.py	(working copy)
@@ -2663,24 +2663,25 @@
                     pyatspi.ROLE_TREE_TABLE,
                     pyatspi.ROLE_TREE):
             if event.source.childCount:
-                # Well...we'll first see if there is a selection.  If there
-                # is, we'll use it.
+                # We might have tucked away some information for this 
+                # thing in the onActiveDescendantChanged method.
                 #
-                try:
-                    selection = event.source.querySelection()
-                except NotImplementedError:
-                    selection = None
-                if selection and selection.nSelectedChildren > 0:
-                    newFocus = selection.getSelectedChild(0)
-
-                # Otherwise, we might have tucked away some information
-                # for this thing in the onActiveDescendantChanged method.
-                #
-                elif self.pointOfReference.has_key("activeDescendantInfo"):
+                if self.pointOfReference.has_key("activeDescendantInfo"):
                     [parent, index] = \
                         self.pointOfReference['activeDescendantInfo']
                     newFocus = parent[index]
 
+                else:
+                    # Well...we'll first see if there is a selection.  If there
+                    # is, we'll use it.
+                    #
+                    try:
+                        selection = event.source.querySelection()
+                    except NotImplementedError:
+                        selection = None
+                    if selection and selection.nSelectedChildren > 0:
+                        newFocus = selection.getSelectedChild(0)
+
         orca.setLocusOfFocus(event, newFocus)
 
     def onNameChanged(self, event):
@@ -3078,6 +3079,7 @@
         #
         child = event.any_data
         if child:
+            speech.stop()
             orca.setLocusOfFocus(event, child)
         else:
             orca.setLocusOfFocus(event, event.source)
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 3440)
+++ ChangeLog	(working copy)
@@ -1,3 +1,10 @@
+2008-01-10  Rich Burridge <rich.burridge@sun.com>
+
+        * src/orca/default.py:
+          test/keystrokes/gtk-demo/role_column_header.py:
+          Fix for bug #486895 - Arrowing down from column header to 
+          table presents wrong column header.
+
 2008-01-10  Joanmarie Diggs <joanmarie.diggs@gmail.com>
 
         * src/orca/Gecko.py: 
