Index: src/orca/scripts/toolkits/Gecko/script.py
===================================================================
--- src/orca/scripts/toolkits/Gecko/script.py	(revision 4273)
+++ src/orca/scripts/toolkits/Gecko/script.py	(working copy)
@@ -1520,6 +1520,16 @@
             except:
                 pass
 
+        elif self.inDocumentContent(event.source) and not self.isAriaWidget():
+            [obj, characterOffset] = \
+                self.findFirstCaretContext(event.source, 0)
+            self.setCaretContext(obj, characterOffset)
+            if not self.isSameObject(event.source, obj):
+                if not self.isSameObject(obj, orca_state.locusOfFocus):
+                    orca.setLocusOfFocus(event, obj, False)
+                    self.presentLine(obj, characterOffset)
+                return
+
         default.Script.onFocus(self, event)
 
     def onLinkSelected(self, event):
@@ -4195,6 +4205,13 @@
                     return self.findFirstCaretContext(obj, characterOffset + 1)
                 else:
                     return [obj, characterOffset]
+        elif obj.getRole() == pyatspi.ROLE_TABLE:
+            if obj[0] and obj[0].getRole() in [pyatspi.ROLE_CAPTION,
+                                               pyatspi.ROLE_LIST]:
+                obj = obj[0]
+            else:
+                obj = obj.queryTable().getAccessibleAt(0, 0)
+            return self.findFirstCaretContext(obj, 0)
         else:
             return [obj, -1]
 
