diff --git a/src/orca/orca.py b/src/orca/orca.py
index 62539e7..52e26b5 100644
--- a/src/orca/orca.py
+++ b/src/orca/orca.py
@@ -111,6 +111,13 @@ _debugSwitch = False
 #
 _debugFile = None
 
+# SYSTEM AT PREFERENCE KEYS
+#
+SYSTEM_AT_PREFS_DIR = "/desktop/gnome/interface"
+SPEECH_KEY = SYSTEM_AT_PREFS_DIR + "/speech"
+MAGNIFIER_KEY = SYSTEM_AT_PREFS_DIR + "/magnifier"
+BRAILLE_KEY = SYSTEM_AT_PREFS_DIR + "/braille"
+
 ########################################################################
 #                                                                      #
 # METHODS FOR HANDLING PRESENTATION MANAGERS                           #
@@ -939,6 +946,64 @@ def _processBrailleEvent(event):
 
 ########################################################################
 #                                                                      #
+# METHODS FOR HANDLING GCONF INTERACTION                               #
+#                                                                      #
+########################################################################
+
+def systemATPreferencesChanged(client, cnxn_id, entry, user_data):
+    """Listens for changes to system preferences for speech, braille, and
+    magnification."""
+
+    if entry.key == SPEECH_KEY:
+        if not settings.enableSpeech:
+            try:
+                speech.init()
+                # Translators: this is a spoken prompt letting the user know
+                # that speech synthesis has been turned back on.
+                #
+                speech.speak(_("Speech enabled."))
+                debug.println(debug.LEVEL_CONFIGURATION,
+                              "Speech module has been initialized.")
+            except:
+                debug.printException(debug.LEVEL_SEVERE)
+                debug.println(debug.LEVEL_SEVERE,
+                              "Could not initialize connection to speech.")
+        else:
+            speech.shutdown()
+            debug.println(debug.LEVEL_CONFIGURATION,
+                          "Speech module has been shutdown.")
+        settings.enableSpeech = settings.gconfClient.get_bool(SPEECH_KEY)
+    elif entry.key == MAGNIFIER_KEY:
+        if not settings.enableMagnifier:
+            try:
+                mag.init()
+                debug.println(debug.LEVEL_CONFIGURATION,
+                              "Magnification module has been initialized.")
+            except:
+                debug.printException(debug.LEVEL_SEVERE)
+                debug.println(debug.LEVEL_SEVERE,
+                              "Could not initialize connection to magnifier.")
+        else:
+            mag.shutdown()
+            debug.println(debug.LEVEL_CONFIGURATION,
+                          "Magnification module has been shutdown.")
+        settings.enableMagnifier = settings.gconfClient.get_bool(MAGNIFIER_KEY)
+    elif entry.key == BRAILLE_KEY:
+        if not settings.enableBraille:
+            try:
+                braille.init(_processBrailleEvent, settings.tty)
+            except:
+                debug.printException(debug.LEVEL_WARNING)
+                debug.println(debug.LEVEL_WARNING,
+                              "Could not initialize connection to braille.")
+        else:
+            braille.shutdown()
+            debug.println(debug.LEVEL_CONFIGURATION,
+                          "Braille module has been shutdown.")
+        settings.enableBraille = settings.gconfClient.get_bool(BRAILLE_KEY)
+
+########################################################################
+#                                                                      #
 # METHODS FOR HANDLING INITIALIZATION, SHUTDOWN, AND USE.              #
 #                                                                      #
 ########################################################################
@@ -1012,6 +1077,18 @@ def loadUserSettings(script=None, inputEvent=None):
         except:
             debug.printException(debug.LEVEL_SEVERE)
 
+    # Get system preferences.  These take precedence over user preferences,
+    # but only if the system preference is True.  [[[WDW - kind of a hack
+    # for now to allow us to deal with dual places for holding speech,
+    # braille, and magnification preferences.]]]
+    #
+    settings.enableSpeech = settings.enableSpeech \
+        or settings.gconfClient.get_bool(SPEECH_KEY)
+    settings.enableMagnifier = settings.enableMagnifier \
+        or settings.gconfClient.get_bool(MAGNIFIER_KEY)
+    settings.enableBraille = settings.enableBraille \
+        or settings.gconfClient.get_bool(BRAILLE_KEY)
+
     # If any settings were added to the command line, they take
     # precedence over everything else.
     #
@@ -1267,6 +1344,24 @@ def init(registry):
     registry.registerEventListener(_onMouseButton,
                                    "mouse:button")
 
+    # Load system service preferences for speech, magnification, and
+    # braille and then listen for changes to them.
+    #
+    settings.gconfClient.add_dir(SYSTEM_AT_PREFS_DIR,
+                                 settings.gconf.CLIENT_PRELOAD_NONE)
+
+    settings.gconfClient.notify_add(SPEECH_KEY,
+                                    systemATPreferencesChanged,
+                                    None)
+
+    settings.gconfClient.notify_add(MAGNIFIER_KEY,
+                                    systemATPreferencesChanged,
+                                    None)
+
+    settings.gconfClient.notify_add(BRAILLE_KEY,
+                                    systemATPreferencesChanged,
+                                    None)
+
     loadUserSettings()
 
     masks = []
