Index: src/orca/liveregions.py
===================================================================
--- src/orca/liveregions.py	(revision 3496)
+++ src/orca/liveregions.py	(working copy)
@@ -1,10 +1,12 @@
 import bisect
+import copy
 import gobject
+import pyatspi
 import time
-import pyatspi
+
+import orca_state
 import speech
 import settings
-import copy
 
 from orca_i18n import _
 
@@ -181,7 +183,7 @@
         message = self._getMessage(event)
         if message:
             if len(self.msg_queue) == 0:
-                gobject.idle_add(self.pumpMessages)
+                gobject.timeout_add(100, self.pumpMessages)
             self.msg_queue.enqueue(message, politeness, event.source)
 
     def pumpMessages(self):
@@ -196,7 +198,9 @@
         # Note: isSpeaking() returns False way too early.  A strategy using
         # a message length (in secs) could be used but don't forget many 
         # parameters such as rate,expanded text and others must be considered.
-        if len(self.msg_queue) > 0 and not speech.isSpeaking():
+        if len(self.msg_queue) > 0 \
+                  and not speech.isSpeaking() \
+                  and time.time() - orca_state.lastInputEvent.time > 1:
             # House cleaning on the message queue.  
             # First we will purge the queue of old messages
             self.msg_queue.purgeByKeepAlive()
