Index: src/orca/scripts/toolkits/Gecko/speech_generator.py
===================================================================
--- src/orca/scripts/toolkits/Gecko/speech_generator.py	(revision 4531)
+++ src/orca/scripts/toolkits/Gecko/speech_generator.py	(working copy)
@@ -108,6 +108,27 @@
 
         return utterances
 
+    def _getSpeechForAlert(self, obj, already_focused):
+        """Gets the speech for an alert.  What we do here is first try
+        to see if the alert contains text via embedded object characters.
+        If it does, we speak that text.  If it doesn't, we defer to the
+        super class.  The prototype alert we're shooting for is the one
+        from http://bugzilla.gnome.org/show_bug.cgi?id=570551
+
+        Arguments:
+        - obj: an Accessible
+        - already_focused: False if object just received focus
+
+        Returns a list of utterances to be spoken for the object.
+        """
+
+        text = self._script.expandEOCs(obj)
+        if text:
+            return [text]
+        else:
+            return speechgenerator.SpeechGenerator.\
+                       _getSpeechForAlert(self, obj, already_focused)
+
     def _getSpeechForDocumentFrame(self, obj, already_focused):
         """Gets the speech for a document frame.
 
Index: src/orca/scripts/toolkits/Gecko/script.py
===================================================================
--- src/orca/scripts/toolkits/Gecko/script.py	(revision 4531)
+++ src/orca/scripts/toolkits/Gecko/script.py	(working copy)
@@ -1679,6 +1679,16 @@
             except:
                 pass
 
+        elif eventSourceRole == pyatspi.ROLE_ALERT:
+            # We'll let the default script handle alerts, but we want to make
+            # sure we set the caret context for the alert so we can arrow
+            # through it.  See also
+            # http://bugzilla.gnome.org/show_bug.cgi?id=570551
+            #
+            [obj, characterOffset] = \
+                self.findFirstCaretContext(event.source, 0)
+            self.setCaretContext(obj, characterOffset)
+
         elif eventSourceRole != pyatspi.ROLE_LINK \
              and self.inDocumentContent(event.source) \
              and not self.isAriaWidget(event.source):
