Index: src/orca/settings.py
===================================================================
--- src/orca/settings.py	(revision 3258)
+++ src/orca/settings.py	(working copy)
@@ -289,7 +289,7 @@
 
 # Strings used to indicate checkbox/radio button states in braille:
 #
-brailleCheckBoxIndicators = ["< >", "<x>"]
+brailleCheckBoxIndicators = ["< >", "<x>", "<->"]
 brailleRadioButtonIndicators = ["& y", "&=y"]
 
 # If True, enable magnification.
Index: src/orca/flat_review.py
===================================================================
--- src/orca/flat_review.py	(revision 3258)
+++ src/orca/flat_review.py	(working copy)
@@ -299,16 +299,22 @@
         if attr in ["string", "length", "brailleString"]:
             # stateCount is used as a boolean and as an index
             stateset = self.accessible.getState()
-            if stateset.contains(pyatspi.STATE_CHECKED):
+            if stateset.contains(pyatspi.STATE_INDETERMINATE):
+                stateCount = 2
+            elif stateset.contains(pyatspi.STATE_CHECKED):
                 stateCount = 1
             else:
                 stateCount = 0
             if self.role in [pyatspi.ROLE_CHECK_BOX,
                              pyatspi.ROLE_CHECK_MENU_ITEM,
                              pyatspi.ROLE_TABLE_CELL]:
-                if stateCount:
+                if stateCount == 2:
                     # Translators: this represents the state of a checkbox.
                     #
+                    speechState = _("partially checked")
+                elif stateCount == 1:
+                    # Translators: this represents the state of a checkbox.
+                    #
                     speechState = _("checked")
                 else:
                     # Translators: this represents the state of a checkbox.
Index: src/orca/speechgenerator.py
===================================================================
--- src/orca/speechgenerator.py	(revision 3258)
+++ src/orca/speechgenerator.py	(working copy)
@@ -402,9 +402,13 @@
 
         utterances = []
         state = obj.getState()
-        if state.contains(pyatspi.STATE_CHECKED):
+        if state.contains(pyatspi.STATE_INDETERMINATE):
             # Translators: this represents the state of a checkbox.
             #
+            checkedState = _("partially checked")
+        elif state.contains(pyatspi.STATE_CHECKED):
+            # Translators: this represents the state of a checkbox.
+            #
             checkedState = _("checked")
         else:
             # Translators: this represents the state of a checkbox.
Index: src/orca/braillegenerator.py
===================================================================
--- src/orca/braillegenerator.py	(revision 3258)
+++ src/orca/braillegenerator.py	(working copy)
@@ -332,12 +332,19 @@
 
         self._debugGenerator("_getBrailleRegionsForCheckBox", obj)
 
+        state = obj.getState()
+        if state.contains(pyatspi.STATE_INDETERMINATE):
+            indicatorindex = 2
+        elif state.contains(pyatspi.STATE_CHECKED):
+            indicatorindex = 1
+        else:
+            indicatorindex = 0
+
         text = ""
         state = obj.getState()
         text = self._script.appendString(
             text,
-            settings.brailleCheckBoxIndicators[
-                int(state.contains(pyatspi.STATE_CHECKED))])
+            settings.brailleCheckBoxIndicators[indicatorindex])
 
         text = self._script.appendString(
             text, self._script.getDisplayedLabel(obj))
@@ -366,12 +373,19 @@
 
         self._debugGenerator("_getBrailleRegionsForCheckMenuItem", obj)
 
+        state = obj.getState()
+        if state.contains(pyatspi.STATE_INDETERMINATE):
+            indicatorindex = 2
+        elif state.contains(pyatspi.STATE_CHECKED):
+            indicatorindex = 1
+        else:
+            indicatorindex = 0
+
         text = ""
         state = obj.getState()
         text = self._script.appendString(
             text,
-            settings.brailleCheckBoxIndicators[
-                int(state.contains(pyatspi.STATE_CHECKED))])
+            settings.brailleCheckBoxIndicators[indicatorindex])
 
         text = self._script.appendString(
             text, self._script.getDisplayedLabel(obj))
