Index: src/orca/speechgenerator.py
===================================================================
--- src/orca/speechgenerator.py	(revision 2795)
+++ src/orca/speechgenerator.py	(working copy)
@@ -1272,21 +1272,6 @@
 
         utterances = []
 
-        # Check to see if this table cell contains an icon (image).
-        # If yes:
-        #   1/ Try to get a description for it and speak that.
-        #   2/ Treat the object of role type ROLE_IMAGE and speak
-        #      the role name.
-        # See bug #465989 for more details.
-        #
-        if obj.image:
-            if obj.image.imageDescription:
-                utterances.append(obj.image.imageDescription)
-            obj.role = rolenames.ROLE_IMAGE
-            utterances.extend(self._getSpeechForImage(obj, already_focused))
-            obj.role = rolenames.ROLE_TABLE_CELL
-            return utterances
-
         # If this table cell has 2 children and one of them has a 
         # 'toggle' action and the other does not, then present this 
         # as a checkbox where:
@@ -1340,9 +1325,24 @@
                     obj.role = rolenames.ROLE_TABLE_CELL
                     break
 
-        utterances.append(self._script.getDisplayedText(\
-                          self._script.getRealActiveDescendant(obj)))
+        displayedText = self._script.getDisplayedText( \
+                          self._script.getRealActiveDescendant(obj))
+        utterances.append(displayedText)
 
+        # If there is no displayed text, check to see if this table cell 
+        # contains an icon (image). If yes:
+        #   1/ Try to get a description for it and speak that.
+        #   2/ Treat the object of role type ROLE_IMAGE and speak
+        #      the role name.
+        # See bug #465989 for more details.
+        #
+        if (not displayedText or len(displayedText) == 0) and obj.image:
+            if obj.image.imageDescription:
+                utterances.append(obj.image.imageDescription)
+            obj.role = rolenames.ROLE_IMAGE
+            utterances.extend(self._getSpeechForImage(obj, already_focused))
+            obj.role = rolenames.ROLE_TABLE_CELL
+
         if obj.state.count(atspi.Accessibility.STATE_EXPANDABLE):
             if obj.state.count(atspi.Accessibility.STATE_EXPANDED):
                 # Translators: this represents the state of a node in a tree.
Index: src/orca/braillegenerator.py
===================================================================
--- src/orca/braillegenerator.py	(revision 2795)
+++ src/orca/braillegenerator.py	(working copy)
@@ -1140,21 +1140,6 @@
 
         regions = []
 
-        # Check to see if this table cell contains an icon (image).
-        # If yes:
-        #   1/ Try to get a description for it and speak that.
-        #   2/ Treat the object of role type ROLE_IMAGE and speak
-        #      the role name.
-        # See bug #465989 for more details.
-        #
-        if obj.image:
-            if obj.image.imageDescription:
-                regions.append(obj.image.imageDescription)
-            obj.role = rolenames.ROLE_IMAGE
-            regions.extend(self._getBrailleRegionsForImage(obj))
-            obj.role = rolenames.ROLE_TABLE_CELL
-            return regions
-
         # If this table cell has 2 children and one of them has a
         # 'toggle' action and the other does not, then present this
         # as a checkbox where:
@@ -1229,6 +1214,23 @@
                 self._script.getRealActiveDescendant(obj))
             regions[0].extend(cellRegions)
 
+        # Check to see if this table cell contains an icon (image).
+        # If yes:
+        #   1/ Try to get a description for it and speak that.
+        #   2/ Treat the object of role type ROLE_IMAGE and speak
+        #      the role name.
+        # See bug #465989 for more details.
+        #
+        displayedText = self._script.getDisplayedText( \
+                          self._script.getRealActiveDescendant(obj))
+        if (not displayedText or len(displayedText) == 0) and obj.image:
+            if obj.image.imageDescription:
+                regions[0].append(obj.image.imageDescription)
+            obj.role = rolenames.ROLE_IMAGE
+            [cellRegions, focusRegion] = self._getBrailleRegionsForImage(obj)
+            regions[0].extend(cellRegions)
+            obj.role = rolenames.ROLE_TABLE_CELL
+
         # [[[TODO: WDW - HACK attempt to determine if this is a node;
         # if so, describe its state.]]]
         #
