diff --git a/src/orca/Makefile.am b/src/orca/Makefile.am
index 5bf182d..f9f3086 100644
--- a/src/orca/Makefile.am
+++ b/src/orca/Makefile.am
@@ -60,6 +60,7 @@ orca_python_PYTHON = \
 	script_utilities.py \
 	settings.py \
 	settings_manager.py \
+	sound_utils.py \
 	speech.py \
 	spellcheck.py \
 	speechdispatcherfactory.py \
diff --git a/src/orca/orca-setup.ui b/src/orca/orca-setup.ui
index ad8c4a6..6f5b68f 100644
--- a/src/orca/orca-setup.ui
+++ b/src/orca/orca-setup.ui
@@ -1784,46 +1784,25 @@
                                 <property name="can_focus">False</property>
                                 <property name="left_padding">12</property>
                                 <child>
-                                  <object class="GtkGrid" id="progressBarUpdatesGrid">
+               <object class="GtkGrid" id="progressBarUpdatesGrid">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
                                     <child>
-                                      <object class="GtkCheckButton" id="speechProgressBarCheckButton">
-                                        <property name="label" translatable="yes" context="ProgressBarUpdates" comments="Translators: This is an option in the Preferences dialog box related to the speaking of progress bar information. If checked, Orca will speak progress bar information.">Enable_d</property>
-                                        <property name="use_action_appearance">False</property>
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="receives_default">False</property>
-                                        <property name="valign">start</property>
-                                        <property name="hexpand">True</property>
-                                        <property name="use_action_appearance">False</property>
-                                        <property name="use_underline">True</property>
-                                        <property name="active">True</property>
-                                        <property name="draw_indicator">True</property>
-                                        <signal name="toggled" handler="speechProgressBarChecked" swapped="no"/>
-                                      </object>
-                                      <packing>
-                                        <property name="left_attach">0</property>
-                                        <property name="top_attach">0</property>
-                                        <property name="width">1</property>
-                                        <property name="height">1</property>
-                                      </packing>
-                                    </child>
-                                    <child>
                                       <object class="GtkGrid" id="progressBarUpdatesOptionsGrid">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
                                         <child>
-                                          <object class="GtkLabel" id="speakProgressBarLabel">
+                                          <object class="GtkSpinButton" id="speakProgressBarSpinButton">
                                             <property name="visible">True</property>
-                                            <property name="can_focus">False</property>
-                                            <property name="xalign">0</property>
-                                            <property name="label" translatable="yes" context="ProgressBar" comments="Translators: Here this is a label for a spin button through which a user can customize the frequency in seconds an announcement should be made regarding the current value of a progress bar.">Frequency (secs):</property>
-                                            <property name="use_underline">True</property>
-                                            <property name="mnemonic_widget">speakProgressBarSpinButton</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="invisible_char">●</property>
+                                            <property name="adjustment">adjustment4</property>
+                                            <property name="climb_rate">1</property>
+                                            <property name="numeric">True</property>
+                                            <signal name="value-changed" handler="speakProgressBarValueChanged" swapped="no"/>
                                           </object>
                                           <packing>
-                                            <property name="left_attach">0</property>
+                                            <property name="left_attach">1</property>
                                             <property name="top_attach">0</property>
                                             <property name="width">1</property>
                                             <property name="height">1</property>
@@ -1866,18 +1845,16 @@
                                           </packing>
                                         </child>
                                         <child>
-                                          <object class="GtkSpinButton" id="speakProgressBarSpinButton">
+                                          <object class="GtkLabel" id="speakProgressBarLabel">
                                             <property name="visible">True</property>
-                                            <property name="can_focus">True</property>
-                                            <property name="invisible_char">●</property>
-                                            <property name="invisible_char_set">True</property>
-                                            <property name="adjustment">adjustment4</property>
-                                            <property name="climb_rate">1</property>
-                                            <property name="numeric">True</property>
-                                            <signal name="value-changed" handler="speakProgressBarValueChanged" swapped="no"/>
+                                            <property name="can_focus">False</property>
+                                            <property name="label" translatable="yes" context="ProgressBar" comments="Translators: Here this is a label for a spin button through which a user can customize the frequency in seconds an announcement should be made regarding the current value of a progress bar.">Frequency (secs):</property>
+                                            <property name="use_underline">True</property>
+                                            <property name="mnemonic_widget">speakProgressBarSpinButton</property>
+                                            <property name="xalign">0</property>
                                           </object>
                                           <packing>
-                                            <property name="left_attach">1</property>
+                                            <property name="left_attach">0</property>
                                             <property name="top_attach">0</property>
                                             <property name="width">1</property>
                                             <property name="height">1</property>
@@ -1886,9 +1863,67 @@
                                       </object>
                                       <packing>
                                         <property name="left_attach">0</property>
+                                        <property name="top_attach">3</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="beepProgressBarCheckButton">
+                                        <property name="label" translatable="yes" context="ProgressBarUpdates" comments="Translators: This is an option in the Preferences dialog box related to the speaking of progress bar information. If checked, Orca will speak progress bar information.">Be_ll a Peep per Percent</property>
+                                        <property name="use_action_appearance">False</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <property name="valign">start</property>
+                                        <property name="hexpand">True</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="xalign">0.5</property>
+                                        <property name="active">True</property>
+                                        <property name="draw_indicator">True</property>
+                                        <signal name="toggled" handler="beepProgressBarChecked" swapped="no"/>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
                                         <property name="top_attach">1</property>
-                                        <property name="width">1</property>
-                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="speechProgressBarCheckButton">
+                                        <property name="label" translatable="yes" context="ProgressBarUpdates" comments="Translators: This is an option in the Preferences dialog box related to the speaking of progress bar information. If checked, Orca will speak progress bar information.">Enable_d</property>
+                                        <property name="use_action_appearance">False</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <property name="valign">start</property>
+                                        <property name="hexpand">True</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="xalign">0</property>
+                                        <property name="active">True</property>
+                                        <property name="draw_indicator">True</property>
+                                        <signal name="toggled" handler="speechProgressBarChecked" swapped="no"/>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="speakProgressBarCheckButton">
+                                        <property name="label" translatable="yes" context="ProgressBarUpdates" comments="Translators: This is an option in the Preferences dialog box related to the speaking of progress bar information. If checked, Orca will speak progress bar information.">Announce per_cent every frequency</property>
+                                        <property name="use_action_appearance">False</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <property name="valign">start</property>
+                                        <property name="hexpand">True</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="xalign">0</property>
+                                        <property name="active">True</property>
+                                        <property name="draw_indicator">True</property>
+                                        <signal name="toggled" handler="speakProgressBarChecked" swapped="no"/>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">2</property>
                                       </packing>
                                     </child>
                                   </object>
diff --git a/src/orca/orca_gui_prefs.py b/src/orca/orca_gui_prefs.py
index aaa68fb..d55c711 100644
--- a/src/orca/orca_gui_prefs.py
+++ b/src/orca/orca_gui_prefs.py
@@ -1424,7 +1424,9 @@ class OrcaSetupGUI(orca_gtkbuilder.GtkBuilderWrapper):
         #
         enable = prefs["enableProgressBarUpdates"]
         self.get_widget("speechProgressBarCheckButton").set_active(enable)
-        self.get_widget("progressBarUpdatesOptionsGrid").set_sensitive(enable)
+        self.get_widget("speakProgressBarCheckButton").set_active(prefs["progressBarSpeak"])
+        self.get_widget("beepProgressBarCheckButton").set_active(prefs["progressBarBeep"])
+        self.get_widget("progressBarUpdatesOptionsGrid").set_sensitive(prefs["progressBarSpeak"])
 
         interval = prefs["progressBarUpdateInterval"]
         self.get_widget("speakProgressBarSpinButton").set_value(interval)
@@ -2521,6 +2523,26 @@ class OrcaSetupGUI(orca_gtkbuilder.GtkBuilderWrapper):
         self.prefsDict["enableProgressBarUpdates"] = enable
         self.get_widget("progressBarUpdatesOptionsGrid").set_sensitive(enable)
 
+    def speakProgressBarChecked(self, widget):
+        """Signal handler for the "toggled" signal for the
+           speakProgressBarCheckButton GtkCheckButton widget.
+           The user has [un]checked the "Speak progress bar updates" checkbox.
+           Set the 'progressBarSpeak' preference to the new value.
+        Arguments:
+        - widget: the component that generated the signal.
+        """
+        self.prefsDict["progressBarSpeak"] = widget.get_active()
+
+    def beepProgressBarChecked(self, widget):
+        """Signal handler for the "toggled" signal for the
+           speakProgressBarCheckButton GtkCheckButton widget.
+           The user has [un]checked the "Speak progress bar updates" checkbox.
+           Set the 'progressBarBeep' preference to the new value.
+        Arguments:
+        - widget: the component that generated the signal.
+        """
+        self.prefsDict["progressBarBeep"] = widget.get_active()
+
     def speakProgressBarValueChanged(self, widget):
         """Signal handler for the "value_changed" signal for the
            speakProgressBarSpinButton GtkSpinButton widget.
diff --git a/src/orca/scripts/default.py b/src/orca/scripts/default.py
index 815c135..2858a7a 100644
--- a/src/orca/scripts/default.py
+++ b/src/orca/scripts/default.py
@@ -50,6 +50,7 @@ import orca.orca as orca
 import orca.orca_gui_commandlist as commandlist
 import orca.orca_state as orca_state
 import orca.phonnames as phonnames
+import orca.sound_utils as sound_utils
 import orca.script as script
 import orca.settings as settings
 import orca.settings_manager as settings_manager
@@ -92,6 +93,9 @@ class Script(script.Script):
         self.windowActivateTime = None
         self.targetCursorCell = None
 
+        self.sound = sound_utils.SoundUtils()
+        self.sound.createSimpePipeline()
+
         self.justEnteredFlatReviewMode = False
 
         self.digits = '0123456789'
@@ -3279,36 +3283,49 @@ class Script(script.Script):
                 percentValue = int((value.currentValue / \
                     (value.maximumValue - value.minimumValue)) * 100.0)
 
-                if (currentTime - lastProgressBarTime) > \
+                if _settingsManager.getSetting('progressBarBeep'):
+                    if self.lastProgressBarValue != percentValue:
+                        if percentValue < 7:
+                            self.sound.source_set_property('freq', int((98 + percentValue * 4 * 1.35)))
+                            self.sound._threadSound (0.075)
+                        else:
+                            self.sound.source_set_property('freq', int(19 * percentValue * 1.15))
+                            self.sound.source_set_property('volume', 1 - (percentValue / 130))
+                            if percentValue >= 99:
+                                self.sound._threadSound (1)
+                            else:
+                                self.sound._threadSound (0.075)
+                if _settingsManager.getSetting('progressBarSpeak'):
+                    if (currentTime - lastProgressBarTime) > \
                       _settingsManager.getSetting('progressBarUpdateInterval') \
-                   or percentValue == 100:
-                    if lastProgressBarValue != percentValue:
-                        utterances = []
-
-                        # There may be cases when more than one progress
-                        # bar is updating at the same time in a window.
-                        # If this is the case, then speak the index of this
-                        # progress bar in the dictionary of known progress
-                        # bars, as well as the value. But only speak the
-                        # index if this progress bar was not the most
-                        # recently updated to prevent chattiness.
-                        #
-                        if len(self.lastProgressBarTime) > 1:
-                            index = 0
-                            for key in list(self.lastProgressBarTime.keys()):
-                                if key == obj and key != mostRecentUpdate[0]:
-                                    label = messages.PROGRESS_BAR_NUMBER % (index + 1)
-                                    utterances.append(label)
-                                else:
-                                    index += 1
-
-                        utterances.extend(self.speechGenerator.generateSpeech(
-                            obj, alreadyFocused=True))
-
-                        speech.speak(utterances)
-
-                        self.lastProgressBarTime[obj] = currentTime
-                        self.lastProgressBarValue[obj] = percentValue
+                      or (percentValue == 100):
+                        if lastProgressBarValue != percentValue:
+                            utterances = []
+
+                            # There may be cases when more than one progress
+                            # bar is updating at the same time in a window.
+                            # If this is the case, then speak the index of this
+                            # progress bar in the dictionary of known progress
+                            # bars, as well as the value. But only speak the
+                            # index if this progress bar was not the most
+                            # recently updated to prevent chattiness.
+                            if len(self.lastProgressBarTime) > 1:
+                                index = 0
+                                for key in list(self.lastProgressBarTime.keys()):
+                                    if key == obj and key != mostRecentUpdate[0]:
+                                        label = messages.PROGRESS_BAR_NUMBER % (index + 1)
+                                        utterances.append(label)
+                                    else:
+                                        index += 1
+
+                            utterances.extend(self.speechGenerator.generateSpeech(
+                                obj, alreadyFocused=True))
+
+                            speech.speak(utterances)
+                            self.lastProgressBarTime[obj] = currentTime
+
+                if lastProgressBarValue != percentValue:
+                    self.lastProgressBarValue[obj] = percentValue
 
     def presentToolTip(self, obj):
         """
diff --git a/src/orca/settings.py b/src/orca/settings.py
index 46db573..f88b2de 100644
--- a/src/orca/settings.py
+++ b/src/orca/settings.py
@@ -117,7 +117,10 @@ userCustomizableSettings = [
     "caretNavTriggersFocusMode",
     "layoutMode",
     "rewindAndFastForwardInSayAll",
-    "structNavInSayAll"
+    "structNavInSayAll",
+    "progressBarSpeak",
+    "progressBarBeep",
+    "beepVolume"
 ]
 
 GENERAL_KEYBOARD_LAYOUT_DESKTOP = 1
@@ -263,6 +266,8 @@ mouseDwellMaxDrift         = 3
 
 # Progressbars
 enableProgressBarUpdates   = True
+progressBarBeep            = False
+progressBarSpeak           = True
 progressBarUpdateInterval  = 10
 progressBarVerbosity       = PROGRESS_BAR_APPLICATION
 
diff --git a/src/orca/sound_utils.py b/src/orca/sound_utils.py
new file mode 100644
index 0000000..2242d03
--- /dev/null
+++ b/src/orca/sound_utils.py
@@ -0,0 +1,54 @@
+'''
+Utilities for generating sound.
+'''
+
+__id__        = "$Id$"
+__version__   = "$Revision$"
+__date__      = "$Date$"
+__license__   = "LGPL"
+
+try:
+    from gi.repository import Gst
+    import time, _thread
+    gstreamerAvailable = True
+except:
+    gstreamerAvailable = False
+
+class SoundUtils:
+
+    def __init__(self):
+        if not gstreamerAvailable:
+            return
+        Gst.init_check()
+
+    def createSimpePipeline(self):
+        if not gstreamerAvailable:
+            return
+        self._pipeline = Gst.Pipeline(name='orca-pipeline')
+        self._source = Gst.ElementFactory.make('audiotestsrc', 'src')
+        self._sink = Gst.ElementFactory.make('autoaudiosink', 'output')
+        self._pipeline.add(self._source)
+        self._pipeline.add(self._sink)
+        self._source.link(self._sink)
+
+    def source_set_property(self,prop, value):
+        if not gstreamerAvailable:
+            return
+        self._source.set_property(prop, value)
+
+    def play_sound(self,duration):
+        if not gstreamerAvailable:
+            return
+        self._pipeline.set_state(Gst.State.PLAYING)
+        time.sleep(duration)
+        self.pipeline_stop()
+
+    def _threadSound(self, duration):
+        if not gstreamerAvailable:
+            return
+        _thread.start_new_thread( self.play_sound, (duration , ) )
+
+    def pipeline_stop(self):
+        if not gstreamerAvailable:
+            return
+        self._pipeline.set_state(Gst.State.PAUSED)
