Index: src/orca/speechgenerator.py
===================================================================
--- src/orca/speechgenerator.py	(revision 3199)
+++ src/orca/speechgenerator.py	(working copy)
@@ -1139,41 +1139,8 @@
         Returns a list of utterances to be spoken for the object.
         """
 
-        value = obj.queryValue()
+        valueString = self._script.getTextForValue(obj)
 
-        # OK, this craziness is all about trying to figure out the most
-        # meaningful formatting string for the floating point values.
-        # The number of places to the right of the decimal point should
-        # be set by the minimumIncrement, but the minimumIncrement isn't
-        # always set.  So...we'll default the minimumIncrement to 1/100
-        # of the range.  But, if max == min, then we'll just go for showing
-        # them off to two meaningful digits.
-        #
-        try:
-            minimumIncrement = value.minimumIncrement
-        except:
-            minimumIncrement = 0.0
-
-        if minimumIncrement == 0.0:
-            minimumIncrement = (value.maximumValue - value.minimumValue) \
-                               / 100.0
-
-        try:
-            decimalPlaces = max(0, -math.log10(minimumIncrement))
-        except:
-            try:
-                decimalPlaces = max(0, -math.log10(value.minimumValue))
-            except:
-                try:
-                    decimalPlaces = max(0, -math.log10(value.maximumValue))
-                except:
-                    decimalPlaces = 0
-
-        formatter = "%%.%df" % decimalPlaces
-        valueString = formatter % value.currentValue
-        #minString   = formatter % value.minimumValue
-        #maxString   = formatter % value.maximumValue
-
         if already_focused:
             utterances = [valueString]
         else:
@@ -1235,8 +1202,19 @@
         Returns a list of utterances to be spoken for the object.
         """
 
-        utterances = self._getDefaultSpeech(obj, already_focused)
+        valueString = self._script.getTextForValue(obj)
 
+        if already_focused:
+            utterances = [valueString]
+        else:
+            utterances = []
+            utterances.extend(self._getSpeechForObjectLabel(obj))
+            if not utterances:
+                utterances.extend(self._getSpeechForObjectName(obj))
+            utterances.extend(self._getSpeechForObjectRole(obj))
+            utterances.append(valueString)
+            utterances.extend(self._getSpeechForObjectAvailability(obj))
+
         self._debugGenerator("_getSpeechForSplitPane",
                              obj,
                              already_focused,
Index: src/orca/default.py
===================================================================
--- src/orca/default.py	(revision 3199)
+++ src/orca/default.py	(working copy)
@@ -3063,7 +3063,8 @@
             return
 
         orca.visualAppearanceChanged(event, event.source)
-        self.pointOfReference["oldValue"] = value.currentValue
+        if event.source.getState().contains(pyatspi.STATE_FOCUSED):
+            self.pointOfReference["oldValue"] = value.currentValue
 
     def onWindowActivated(self, event):
         """Called whenever a toplevel window is activated.
@@ -4711,6 +4712,58 @@
 
         return displayedText
 
+    def getTextForValue(self, obj):
+        """Returns the text to be displayed for the object's current value.
+
+        Arguments:
+        - obj: the Accessible object that may or may not have a value.
+
+        Returns a string representing the value.
+        """
+
+        try:
+            value = obj.queryValue()
+        except NotImplementedError:
+            return ""
+
+        # OK, this craziness is all about trying to figure out the most
+        # meaningful formatting string for the floating point values.
+        # The number of places to the right of the decimal point should
+        # be set by the minimumIncrement, but the minimumIncrement isn't
+        # always set.  So...we'll default the minimumIncrement to 1/100
+        # of the range.  But, if max == min, then we'll just go for showing
+        # them off to two meaningful digits.
+        #
+        try:
+            minimumIncrement = value.minimumIncrement
+        except:
+            minimumIncrement = 0.0
+
+        if minimumIncrement == 0.0:
+            minimumIncrement = (value.maximumValue - value.minimumValue) \
+                               / 100.0
+
+        try:
+            decimalPlaces = max(0, -math.log10(minimumIncrement))
+        except:
+            try:
+                decimalPlaces = max(0, -math.log10(value.minimumValue))
+            except:
+                try:
+                    decimalPlaces = max(0, -math.log10(value.maximumValue))
+                except:
+                    decimalPlaces = 0
+
+        formatter = "%%.%df" % decimalPlaces
+        valueString = formatter % value.currentValue
+        #minString   = formatter % value.minimumValue
+        #maxString   = formatter % value.maximumValue
+
+        # [[[TODO: WDW - probably want to do this as a percentage at some
+        # point?  Logged as bugzilla bug 319743.]]]
+        #
+        return valueString
+
     def findFocusedObject(self, root):
         """Returns the accessible that has focus under or including the
         given root.
Index: src/orca/Gecko.py
===================================================================
--- src/orca/Gecko.py	(revision 3199)
+++ src/orca/Gecko.py	(working copy)
@@ -539,7 +539,8 @@
         elif link:
             text = self._script.appendString(text, self._getTextForRole(link))
 
-        text = self._script.appendString(text, self._getTextForValue(obj))
+        text = self._script.appendString(text,
+                                         self._script.getTextForValue(obj))
         text = self._script.appendString(text, self._getTextForRole(obj))
 
         regions = []
@@ -583,7 +584,8 @@
             if basename:
                 text = basename
 
-        text = self._script.appendString(text, self._getTextForValue(obj))
+        text = self._script.appendString(text,
+                                         self._script.getTextForValue(obj))
         text = self._script.appendString(text, self._getTextForRole(obj))
 
         regions = []
Index: src/orca/braillegenerator.py
===================================================================
--- src/orca/braillegenerator.py	(revision 3199)
+++ src/orca/braillegenerator.py	(working copy)
@@ -204,58 +204,6 @@
         else:
             return None
 
-    def _getTextForValue(self, obj):
-        """Returns the text to be displayed for the object's current value.
-
-        Arguments:
-        - obj: the Accessible object that may or may not have a value.
-
-        Returns a string representing the value.
-        """
-
-        try:
-            value = obj.queryValue()
-        except NotImplementedError:
-            return ""
-
-        # OK, this craziness is all about trying to figure out the most
-        # meaningful formatting string for the floating point values.
-        # The number of places to the right of the decimal point should
-        # be set by the minimumIncrement, but the minimumIncrement isn't
-        # always set.  So...we'll default the minimumIncrement to 1/100
-        # of the range.  But, if max == min, then we'll just go for showing
-        # them off to two meaningful digits.
-        #
-        try:
-            minimumIncrement = value.minimumIncrement
-        except:
-            minimumIncrement = 0.0
-
-        if minimumIncrement == 0.0:
-            minimumIncrement = (value.maximumValue - value.minimumValue) \
-                               / 100.0
-
-        try:
-            decimalPlaces = max(0, -math.log10(minimumIncrement))
-        except:
-            try:
-                decimalPlaces = max(0, -math.log10(value.minimumValue))
-            except:
-                try:
-                    decimalPlaces = max(0, -math.log10(value.maximumValue))
-                except:
-                    decimalPlaces = 0
-
-        formatter = "%%.%df" % decimalPlaces
-        valueString = formatter % value.currentValue
-        #minString   = formatter % value.minimumValue
-        #maxString   = formatter % value.maximumValue
-
-        # [[[TODO: WDW - probably want to do this as a percentage at some
-        # point?  Logged as bugzilla bug 319743.]]]
-        #
-        return valueString
-
     def _getTextForRole(self, obj, role=None):
         if (settings.brailleVerbosityLevel \
             == settings.VERBOSITY_LEVEL_VERBOSE)\
@@ -304,7 +252,8 @@
             text, self._script.getDisplayedLabel(obj))
         text = self._script.appendString(
             text, self._script.getDisplayedText(obj))
-        text = self._script.appendString(text, self._getTextForValue(obj))
+        text = self._script.appendString(text, 
+                                         self._script.getTextForValue(obj))
         text = self._script.appendString(text, self._getTextForRole(obj, role))
 
         regions = []
@@ -1114,7 +1063,8 @@
         # Ignore the text on the slider.
         #text = self._script.appendString(
         #    text, self._script.getDisplayedText(obj))
-        text = self._script.appendString(text, self._getTextForValue(obj))
+        text = self._script.appendString(text,
+                                         self._script.getTextForValue(obj))
         text = self._script.appendString(text, self._getTextForRole(obj))
 
         regions = []
