Index: src/orca/speech.py
===================================================================
--- src/orca/speech.py	(revision 4492)
+++ src/orca/speech.py	(working copy)
@@ -378,3 +378,25 @@
     string = multiCaseReg2.sub('\\1 \\2', string)
     string = multiCaseReg3.sub('\\1 \\2', string)    
     return string
+
+def setRate(rate):
+    """Sets the rate to an absolute value."""
+    acss = settings.voices[settings.DEFAULT_VOICE]
+    acss[ACSS.RATE] = rate
+    debug.println(debug.LEVEL_CONFIGURATION,
+                  "Speech rate is now %d" % rate)
+    
+def setPitch(pitch):
+    """Sets the pitch to an absolute value."""
+    acss = settings.voices[settings.DEFAULT_VOICE]
+    acss[ACSS.AVERAGE_PITCH] = pitch
+    debug.println(debug.LEVEL_CONFIGURATION,
+                  "Speech pitch is now %d" % pitch)
+    
+def setGain(gain):
+    """Sets the gain to an absolute value."""
+    acss = settings.voices[settings.DEFAULT_VOICE]
+    acss[ACSS.GAIN] = gain
+    debug.println(debug.LEVEL_CONFIGURATION,
+                  "Speech gain is now %d" % gain) 
+
Index: src/orca/orca_gui_prefs.py
===================================================================
--- src/orca/orca_gui_prefs.py	(revision 4492)
+++ src/orca/orca_gui_prefs.py	(working copy)
@@ -152,6 +152,14 @@
         accordingly.
         """
 
+        # storing the old default voice,
+        # so that we can revert back to the default
+        # when the user presses cancel.
+        defaultAcss = settings.voices[settings.DEFAULT_VOICE]
+        self.speechGain = defaultAcss[acss.ACSS.GAIN]
+        self.speechRate = defaultAcss[acss.ACSS.RATE]
+        self.speechPitch = defaultAcss[acss.ACSS.AVERAGE_PITCH]
+
         # ***** Key Bindings treeview initialization *****
 
         self.keyBindView = self.widgets.get_widget("keyBindingsTreeview")
@@ -2426,6 +2434,7 @@
         rate = widget.get_value()
         voiceType = self.get_widget("voiceTypes").get_active_text()
         self._setRateForVoiceType(voiceType, rate)
+        speech.setRate(rate)
 
     def pitchValueChanged(self, widget):
         """Signal handler for the "value_changed" signal for the pitchScale
@@ -2440,6 +2449,7 @@
         pitch = widget.get_value()
         voiceType = self.get_widget("voiceTypes").get_active_text()
         self._setPitchForVoiceType(voiceType, pitch)
+        speech.setPitch(pitch)
 
     def volumeValueChanged(self, widget):
         """Signal handler for the "value_changed" signal for the voiceScale
@@ -2454,6 +2464,7 @@
         volume = widget.get_value()
         voiceType = self.get_widget("voiceTypes").get_active_text()
         self._setVolumeForVoiceType(voiceType, volume)
+        speech.setGain(volume)
 
     def speechIndentationChecked(self, widget):
         """Signal handler for the "toggled" signal for the
@@ -4066,6 +4077,12 @@
         self._cleanupSpeechServers()
         self.get_widget("orcaSetupWindow").destroy()
 
+        # Restore the default rate/pitch/gain,
+        # in case the user played with the sliders.
+        speech.setRate(self.speechRate)
+        speech.setPitch(self.speechPitch)
+        speech.setGain(self.speechGain)
+
     def okButtonClicked(self, widget):
         """Signal handler for the "clicked" signal for the okButton
            GtkButton widget. The user has clicked the OK button.
