Index: src/orca/where_am_I.py
===================================================================
--- src/orca/where_am_I.py	(revision 3235)
+++ src/orca/where_am_I.py	(working copy)
@@ -140,6 +140,9 @@
         else:
             self._speakGenericObject(obj, doubleClick)
 
+        if not (doubleClick or titleOrStatus):
+            self._speakObjDescription(obj)
+
         return True
 
     def _speakCheckBox(self, obj, doubleClick):
@@ -1557,3 +1560,29 @@
         debug.println(self._debugLevel, "default button utterances=%s" % \
                       utterances)
         speech.speakUtterances(utterances)
+
+    def _speakObjDescription(self, obj):
+        """Speaks the object's description if it is not the same as
+        the object's name or label.
+        """
+
+        # A bit of defensive coding to deal with a potential pyatspi
+        # bug.  See bug #487189.
+        #
+        try:
+            description = obj.description
+        except:
+            debug.println(debug.LEVEL_SEVERE,
+                          "where_am_i._speakObjDescription() failed.")
+            try:
+                description = obj.description
+            except:
+                debug.println(debug.LEVEL_SEVERE,
+                             "where_am_i._speakObjDescription() failed again.")
+                return
+
+        name = self._getObjName(obj)
+        label = self._getObjLabel(obj)
+
+        if description and not description in [name, label]:
+            speech.speak(description)
