Index: src/orca/scripts/gedit.py
===================================================================
--- src/orca/scripts/gedit.py	(revision 3336)
+++ src/orca/scripts/gedit.py	(working copy)
@@ -110,6 +110,16 @@
         """
         return SpeechGenerator(self)
 
+    def getListeners(self):
+        """Sets up the AT-SPI event listeners for this script.
+        """
+        listeners = default.Script.getListeners(self)
+
+        listeners["object:state-changed:focused"]           = \
+            self.onStateChanged
+
+        return listeners
+
     def __sayAllProgressCallback(self, context, progressType):
         """Provide feedback during the sayAll operation.
         """
Index: src/orca/scripts/gnome-panel.py
===================================================================
--- src/orca/scripts/gnome-panel.py	(revision 3336)
+++ src/orca/scripts/gnome-panel.py	(working copy)
@@ -59,6 +59,18 @@
         """
         debug.println(self.debugLevel, "gnome-panel.py: "+msg)
 
+    def getListeners(self):
+        """Sets up the AT-SPI event listeners for this script.
+        """
+        listeners = default.Script.getListeners(self)
+        
+        listeners["object:state-changed:focused"]           = \
+            self.onStateChanged
+        listeners["object:state-changed:showing"]           = \
+            self.onStateChanged
+        
+        return listeners
+
     def onStateChanged(self, event):
         """Called whenever an object's state changes.
 
Index: src/orca/scripts/metacity.py
===================================================================
--- src/orca/scripts/metacity.py	(revision 3336)
+++ src/orca/scripts/metacity.py	(working copy)
@@ -49,6 +49,16 @@
 
         default.Script.__init__(self, app)
 
+    def getListeners(self):
+        """Sets up the AT-SPI event listeners for this script.
+        """
+        listeners = default.Script.getListeners(self)
+
+        listeners["object:state-changed:showing"]           = \
+            self.onStateChanged
+
+        return listeners
+
     def presentStatusBar(self, obj):
         """Presents information about the metacity status bar."""
 
Index: src/orca/scripts/acroread.py
===================================================================
--- src/orca/scripts/acroread.py	(revision 3336)
+++ src/orca/scripts/acroread.py	(working copy)
@@ -114,6 +114,18 @@
                 Script.sayAll,
                 _("Speaks entire document."))
 
+    def getListeners(self):
+        """Sets up the AT-SPI event listeners for this script.
+        """
+        listeners = default.Script.getListeners(self)
+
+        listeners["object:state-changed:checked"]           = \
+            self.onStateChanged
+        listeners["object:state-changed:focused"]           = \
+            self.onStateChanged
+      
+        return listeners
+
     def getDocument(self, locusOfFocus):
         """ Obtains the Document object that contains the locusOfFocus.
 
Index: src/orca/scripts/gnome-search-tool.py
===================================================================
--- src/orca/scripts/gnome-search-tool.py	(revision 3336)
+++ src/orca/scripts/gnome-search-tool.py	(working copy)
@@ -76,6 +76,16 @@
         #
         self.searchInterval = 5.0
 
+    def getListeners(self):
+        """Sets up the AT-SPI event listeners for this script.
+        """
+        listeners = default.Script.getListeners(self)
+
+        listeners["object:state-changed:showing"]           = \
+            self.onStateChanged
+
+        return listeners
+
     def _speakSearching(self):
         """If we are still searching, let the user know. Then start another
         timer to go off again and repeat this process.
Index: src/orca/scripts/Evolution.py
===================================================================
--- src/orca/scripts/Evolution.py	(revision 3336)
+++ src/orca/scripts/Evolution.py	(working copy)
@@ -354,6 +354,16 @@
                 self.inputEventHandlers["toggleReadMailHandler"]))
         return keyBindings
 
+    def getListeners(self):
+        """Sets up the AT-SPI event listeners for this script.
+        """
+        listeners = default.Script.getListeners(self)
+
+        listeners["object:state-changed:showing"]           = \
+            self.onStateChanged
+
+        return listeners
+
     def toggleReadMail(self, inputEvent):
         """ Toggle whether we present new mail if we not not the active script.+
         Arguments:
Index: src/orca/scripts/StarOffice.py
===================================================================
--- src/orca/scripts/StarOffice.py	(revision 3336)
+++ src/orca/scripts/StarOffice.py	(working copy)
@@ -830,6 +830,22 @@
         settings.enabledSpokenTextAttributes = \
             self.savedEnabledSpokenTextAttributes
 
+    def getListeners(self):
+        """Sets up the AT-SPI event listeners for this script.
+        """
+        listeners = default.Script.getListeners(self)
+
+        listeners["object:state-changed:focused"]           = \
+            self.onStateChanged
+        listeners["object:state-changed:sensitive"]         = \
+            self.onStateChanged
+        listeners["object:state-changed:active"]            = \
+            self.onStateChanged
+        listeners["object:state-changed:checked"]           = \
+            self.onStateChanged
+
+        return listeners
+
     def getBrailleGenerator(self):
         """Returns the braille generator for this script.
         """
Index: src/orca/settings.py
===================================================================
--- src/orca/settings.py	(revision 3336)
+++ src/orca/settings.py	(working copy)
@@ -774,3 +774,12 @@
 # maximize on caching.
 #
 focusHistoryLength = 5
+
+# Listen to all AT-SPI events, regardless to if we are using them or not.
+# This is useful for development and debugging.
+#
+listenAllEvents = False
+
+# This is a list of events that Orca should immidiately drop and never look at.
+#
+ignoredEventsList = ['object:bounds-changed']
Index: src/orca/default.py
===================================================================
--- src/orca/default.py	(revision 3336)
+++ src/orca/default.py	(working copy)
@@ -754,46 +754,28 @@
             self.onTextDeleted
         listeners["object:text-changed:insert"]             = \
             self.onTextInserted
-        listeners["object:text-selection-changed"]          = \
-            self.noOp
         listeners["object:active-descendant-changed"]       = \
             self.onActiveDescendantChanged
-        listeners["object:children-changed"]               = \
-            self.noOp
         listeners["object:link-selected"]                   = \
             self.onLinkSelected
-        listeners["object:state-changed:"]                  = \
+        listeners["object:state-changed:active"]            = \
             self.onStateChanged
+        listeners["object:state-changed:focused"]           = \
+            self.onStateChanged
+        listeners["object:state-changed:showing"]           = \
+            self.onStateChanged
+        listeners["object:state-changed:checked"]           = \
+            self.onStateChanged
+        listeners["object:state-changed:expanded"]           = \
+            self.onStateChanged
         listeners["object:selection-changed"]               = \
             self.onSelectionChanged
         listeners["object:property-change:accessible-value"] = \
             self.onValueChanged
-        listeners["object:property-change"]                 = \
-            self.noOp
-        listeners["object:value-changed:"]                  = \
+        listeners["object:value-changed"]                  = \
             self.onValueChanged
-        listeners["object:visible-changed"]                 = \
-            self.noOp
         listeners["window:activate"]                        = \
             self.onWindowActivated
-        listeners["window:create"]                          = \
-            self.noOp
-        listeners["window:deactivate"]                      = \
-            self.onWindowDeactivated
-        listeners["window:destroy"]                         = \
-            self.noOp
-        listeners["window:maximize"]                        = \
-            self.noOp
-        listeners["window:minimize"]                        = \
-            self.noOp
-        listeners["window:rename"]                          = \
-            self.noOp
-        listeners["window:restore"]                         = \
-            self.noOp
-        listeners["window:switch"]                          = \
-            self.noOp
-        listeners["window:titlelize"]                       = \
-            self.noOp
 
         return listeners
 
Index: src/orca/focus_tracking_presenter.py
===================================================================
--- src/orca/focus_tracking_presenter.py	(revision 3336)
+++ src/orca/focus_tracking_presenter.py	(working copy)
@@ -81,6 +81,10 @@
         self._appStateInfo = None
         self._listenerCounts = None
 
+        if settings.listenAllEvents:
+            # Just listen to everything, always.
+            self._registerAllEvents()
+
         if settings.debugEventQueue:
             self._enqueueEventCount = 0
             self._dequeueEventCount = 0
@@ -118,6 +122,19 @@
                                                   eventType)
             del self._listenerCounts[eventType]
 
+    def _registerAllEvents(self):
+        """Register all top-level event types except for "mouse".
+        """
+        topLevelEvents = filter(lambda et: ':' not in et and 'mouse' not in et,
+                                pyatspi.EVENT_TREE)
+        self.registry.registerEventListener(self._enqueueEvent, *topLevelEvents)
+
+    def _deregisterAllEvents(self):
+        topLevelEvents = filter(lambda et: ':' not in et and 'mouse' not in et,
+                                pyatspi.EVENT_TREE)
+        self.registry.deregisterEventListener(self._enqueueEvent, 
+                                              *topLevelEvents)
+
     def _registerEventListeners(self, script):
         """Tells the FocusTrackingPresenter to listen for all
         the event types of interest to the script.
@@ -126,6 +143,10 @@
         - script: the script.
         """
 
+        if settings.listenAllEvents: 
+            # We are always listening to everything.
+            return
+
         for eventType in script.listeners.keys():
             self._registerEventListener(eventType)
 
@@ -136,6 +157,9 @@
         Arguments:
         - script: the script.
         """
+        if settings.listenAllEvents: 
+            # We are always listening to everything.
+            return
 
         for eventType in script.listeners.keys():
             self._deregisterEventListener(eventType)
@@ -655,6 +679,10 @@
                           "----------> QUEUEING BRAILLE COMMAND %d" % e.event)
             event = e
         else:
+            if e.type in settings.ignoredEventsList:
+                if settings.debugEventQueue:
+                    self._enqueueEventCount -= 1
+                return
             # We ignore defunct objects.
             #
             if e.type.startswith("object:state-changed:defunct"):
Index: src/orca/Gecko.py
===================================================================
--- src/orca/Gecko.py	(revision 3336)
+++ src/orca/Gecko.py	(working copy)
@@ -2334,6 +2334,12 @@
             self.onDocumentLoadStopped
         listeners["object:visible-data-changed"]            = \
             self.onVisibleDataChanged
+        listeners["object:state-changed:showing"]           = \
+            self.onStateChanged
+        listeners["object:state-changed:checked"]           = \
+            self.onStateChanged
+        listeners["object:state-changed:busy"]              = \
+            self.onStateChanged
         listeners["object:children-changed"]                = \
             self.onChildrenChanged
 
