Index: src/orca/flat_review.py
===================================================================
--- src/orca/flat_review.py	(revision 2088)
+++ src/orca/flat_review.py	(working copy)
@@ -1008,7 +1008,7 @@
                     debug.println(debug.LEVEL_WARNING,
                                   "flat_review.getShowingZones: " +
                                   "WARNING CHILD.PARENT != PARENT!!!")
-                elif child.state.count(atspi.Accessibility.STATE_SHOWING):
+                elif self.script.pursueForFlatReview(child):
                     zones.extend(self.getShowingZones(child))
 
         return zones
Index: src/orca/default.py
===================================================================
--- src/orca/default.py	(revision 2088)
+++ src/orca/default.py	(working copy)
@@ -2336,8 +2336,8 @@
         #   and (orca_state.locusOfFocus.app == event.source.app):
         #    orca.setLocusOfFocus(event, event.source)
         orca.setLocusOfFocus(event, event.source)
-        
 
+
     def onStateChanged(self, event):
         """Called whenever an object's state changes.
 
@@ -2743,6 +2743,11 @@
         self.whereAmI(None)
         return True
 
+    def pursueForFlatReview(self, obj):
+        """Determines if we should look any further at the object
+        for flat review."""
+        return obj.state.count(atspi.Accessibility.STATE_SHOWING)
+
     def getFlatReviewContext(self):
         """Returns the flat review context, creating one if necessary."""
 
Index: src/orca/Gecko.py
===================================================================
--- src/orca/Gecko.py	(revision 2088)
+++ src/orca/Gecko.py	(working copy)
@@ -2352,6 +2352,28 @@
         else:
             return default.Script.isLayoutOnly(self, obj)
 
+    def pursueForFlatReview(self, obj):
+        """Determines if we should look any further at the object
+        for flat review."""
+
+        # [[[TODO: HACK - WDW Gecko has issues about the SHOWING
+        # state of objects, especially those in document frames.
+        # It tells us the content in tabs that are not showing
+        # is actually showing.  See:
+        #
+        # http://bugzilla.gnome.org/show_bug.cgi?id=408071
+        #
+        # To work around this, we do a little extra check.  If
+        # the obj is a document, and it's not the one that
+        # Firefox is currently showing the user, we skip it.
+        #
+        pursue = default.Script.pursueForFlatReview(self, obj)
+        if pursue and (obj.role == rolenames.ROLE_DOCUMENT_FRAME):
+            documentFrame = self.getDocumentFrame()
+            pursue = obj == documentFrame
+
+        return pursue
+
     ####################################################################
     #                                                                  #
     # Methods to find previous and next objects.                       #
