Index: src/orca/settings.py
===================================================================
--- src/orca/settings.py	(revision 2800)
+++ src/orca/settings.py	(working copy)
@@ -134,7 +134,8 @@
     "enabledBrailledTextAttributes",
     "textAttributesBrailleIndicator",
     "enableProgressBarUpdates",
-    "progressBarUpdateInterval"
+    "progressBarUpdateInterval",
+    "brailleLayoutStyle"
 ]
 
 # The name of the module that hold the user interface for the main window
@@ -204,6 +205,12 @@
 BRAILLE_SEL_BOTH = '\xc0' # 11000000
 brailleSelectorIndicator = BRAILLE_SEL_BOTH
 
+# Braille Layout Style (see brailleLayoutStyle).
+#
+BRAILLE_LAYOUT_STYLE_LOGICAL = 0
+BRAILLE_LAYOUT_STYLE_WINDOW  = 1
+brailleLayoutStyle = BRAILLE_LAYOUT_STYLE_LOGICAL
+
 # Speech punctuation levels (see verbalizePunctuationStyle).
 #
 PUNCTUATION_STYLE_NONE = 3
Index: src/orca/orca-setup.glade
===================================================================
--- src/orca/orca-setup.glade	(revision 2800)
+++ src/orca/orca-setup.glade	(working copy)
@@ -1765,6 +1766,106 @@
 		      <property name="fill">False</property>
 		    </packing>
 		  </child>
+
+		  <child>
+		    <widget class="GtkFrame" id="brailleLayoutFrame">
+		      <property name="visible">True</property>
+		      <property name="label_xalign">0</property>
+		      <property name="label_yalign">0.5</property>
+		      <property name="shadow_type">GTK_SHADOW_NONE</property>
+
+		      <child>
+			<widget class="GtkAlignment" id="alignment59">
+			  <property name="visible">True</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xscale">1</property>
+			  <property name="yscale">1</property>
+			  <property name="top_padding">0</property>
+			  <property name="bottom_padding">0</property>
+			  <property name="left_padding">12</property>
+			  <property name="right_padding">0</property>
+
+			  <child>
+			    <widget class="GtkVBox" id="vbox30">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">0</property>
+
+			      <child>
+				<widget class="GtkRadioButton" id="brailleLayoutLogicalButton">
+				  <property name="visible">True</property>
+				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">_Logical</property>
+				  <property name="use_underline">True</property>
+				  <property name="relief">GTK_RELIEF_NORMAL</property>
+				  <property name="focus_on_click">True</property>
+				  <property name="active">False</property>
+				  <property name="inconsistent">False</property>
+				  <property name="draw_indicator">True</property>
+				  <signal name="toggled" handler="brailleLayoutChanged" last_modification_time="Fri, 07 Sep 2007 16:21:45 GMT"/>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkRadioButton" id="brailleLayoutWindowButton">
+				  <property name="visible">True</property>
+				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">_Window</property>
+				  <property name="use_underline">True</property>
+				  <property name="relief">GTK_RELIEF_NORMAL</property>
+				  <property name="focus_on_click">True</property>
+				  <property name="active">False</property>
+				  <property name="inconsistent">False</property>
+				  <property name="draw_indicator">True</property>
+				  <property name="group">brailleLayoutLogicalButton</property>
+				  <signal name="toggled" handler="brailleLayoutChanged" last_modification_time="Fri, 07 Sep 2007 16:22:02 GMT"/>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+			    </widget>
+			  </child>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label29">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">&lt;b&gt;Layout&lt;/b&gt;</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">True</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="type">label_item</property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
 		</widget>
 		<packing>
 		  <property name="tab_expand">False</property>
Index: src/orca/orca_prefs.py
===================================================================
--- src/orca/orca_prefs.py	(revision 2800)
+++ src/orca/orca_prefs.py	(working copy)
@@ -274,6 +274,15 @@
         else:
             return "orca.settings.BRAILLE_SEL_NONE"
 
+    def _getBrailleLayoutIndicatorString(selg, layoutIndicator):
+        """Returns a string that represents the braille layout indicator
+        value passed in."""
+
+        if layoutIndicator == settings.BRAILLE_LAYOUT_STYLE_WINDOW:
+            return "orca.settings.BRAILLE_LAYOUT_STYLE_WINDOW"
+        else:
+            return "orca.settings.BRAILLE_LAYOUT_STYLE_LOGICAL"
+
     def _getVerbosityString(self, verbosityLevel):
         """Returns a string that represents the verbosity level passed in."""
 
@@ -543,6 +552,8 @@
                 value = self._getBrailleRolenameStyleString(prefsDict[key])
             elif key == "brailleSelectorIndicator":
                 value = self._getBrailleSelectionIndicatorString(prefsDict[key])
+            elif key == "brailleLayoutStyle":
+                value = self._getBrailleLayoutIndicatorString(prefsDict[key])
             elif key == "verbalizePunctuationStyle":
                 value = self._getVerbalizePunctuationStyleString(prefsDict[key])
             elif key == "sayAllStyle":
Index: src/orca/orca_gui_prefs.py
===================================================================
--- src/orca/orca_gui_prefs.py	(revision 2800)
+++ src/orca/orca_gui_prefs.py	(working copy)
@@ -1217,6 +1217,12 @@
         else:
             self.brailleSelectionNoneButton.set_active(True)
 
+        layoutStyle = prefs["brailleLayoutStyle"]
+        if layoutStyle == settings.BRAILLE_LAYOUT_STYLE_WINDOW:
+            self.brailleLayoutWindowButton.set_active(True)
+        else:
+            self.brailleLayoutLogicalButton.set_active(True)
+
         # Key Echo pane.
         #
         self.keyEchoCheckbutton.set_active(prefs["enableKeyEcho"])
@@ -2109,6 +2115,34 @@
                 self.prefsDict["textAttributesBrailleIndicator"] = \
                     settings.TEXT_ATTR_BRAILLE_NONE
 
+    def brailleLayoutChanged(self, widget):
+        """Signal handler for the "toggled" signal for the
+           brailleLayoutLogicalButton or brailleLayoutWindowButton
+           GtkRadioButton widgets. The user has toggled the braille layout 
+           style indicator value. If this signal was generated as the result 
+           of a radio button getting selected (as opposed to a radio button 
+           losing the selection), set the 'brailleLayoutStyle' preference 
+           to the new value.
+
+        Arguments:
+        - widget: the component that generated the signal.
+        """
+
+        if widget.get_active():
+            # Translators: Braille layout with Orca on a refreshable
+            # braille display can be done in two modes. 
+            # Logical mode consists of the graphical item with focus 
+            # as well as relevant contextual information. 
+            # Window mode will try to accurately convey the actual layout 
+            # of the window of the application that currently has focus.
+            #
+            if widget.get_label() == _("_Window"):
+                self.prefsDict["brailleLayoutStyle"] = \
+                    settings.BRAILLE_LAYOUT_STYLE_WINDOW
+            else:
+                self.prefsDict["brailleLayoutStyle"] = \
+                    settings.BRAILLE_LAYOUT_STYLE_LOGICAL
+
     def punctuationLevelChanged(self, widget):
         """Signal handler for the "toggled" signal for the noneButton,
            someButton or allButton GtkRadioButton widgets. The user has
