diff --git a/google_appliance.admin.inc b/google_appliance.admin.inc
index 88a061a..9a1851f 100644
--- a/google_appliance.admin.inc
+++ b/google_appliance.admin.inc
@@ -75,6 +75,28 @@ function google_appliance_admin_settings($form) {
     ),
     '#description' => t('Learn more about GSA auto-filtering <a href="@gsa-doc-af">here</a>. In general, employing both filters enhances results, but sites with smaller indexes may suffer from over-filtered results.', array('@gsa-doc-af' => 'http://code.google.com/apis/searchappliance/documentation/68/xml_reference.html#request_filter_auto') ),
   );
+  if (module_exists('locale')) {
+    $form['query_param']['google_appliance_language_filter_toggle'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Enable Language Filtering'),
+      '#default_value' => $settings['language_filter_toggle'],
+    );
+    $form['query_param']['google_appliance_language_filter_options'] = array(
+      '#type' => 'checkboxes',
+      '#title' => t('Restrict searches to specified languages'),
+      '#default_value' => $settings['language_filter_options'],
+      '#options' => array(
+        '***CURRENT_LANGUAGE***' => t("Current user's language"),
+        '***DEFAULT_LANGUAGE***' => t("Default site language"),
+      ) + locale_language_list(),
+      '#states' => array(
+        'visible' => array(
+          ':input[name=google_appliance_language_filter_toggle]' => array('checked' => TRUE),
+        ),
+      ),
+      '#description' => t('If there are no results in the specified language, the search appliance is expected to return results in all languages.'),
+    );
+  }
   $form['query_param']['query_inspection'] = array(
     '#type' => 'checkbox',
     '#title' => t('Enable Query Inspection'),
diff --git a/google_appliance.helpers.inc b/google_appliance.helpers.inc
index 790838c..a207b4d 100644
--- a/google_appliance.helpers.inc
+++ b/google_appliance.helpers.inc
@@ -17,6 +17,7 @@ define('SGA_DEFAULT_COLLECTION', 'default_collection');
 define('SGA_DEFAULT_FRONTEND', 'default_frontend');
 define('SGA_DEFAULT_TIMEOUT', 10);
 define('SGA_DEFAULT_AUTOFILTER', 1);
+define('SGA_DEFAULT_LANGUAGE_FILTER_TOGGLE', FALSE);
 define('SGA_DEFAULT_QUERY_INSPECTION', 0);
 define('SGA_DEFAULT_SEARCH_TITLE', 'Search this site');
 define('SGA_DEFAULT_RESULTS_PER_PAGE', 10);
@@ -44,6 +45,7 @@ function _google_appliance_get_settings($refresh = FALSE) {
     'frontend',
     'timeout',
     'autofilter',
+    'language_filter_toggle',
     'query_inspection',
     'search_title',
     'results_per_page',
@@ -60,6 +62,13 @@ function _google_appliance_get_settings($refresh = FALSE) {
       );
     }
 
+    // The default value of language_filter_options is an array, which
+    // cannot be used as a PHP constant. We set it here.
+    $settings['language_filter_options'] = variable_get(
+      'google_appliance_language_filter_options',
+      array('***CURRENT_LANGUAGE***')
+    );
+
     // The empty string in the define block above for block visibility 
     // settings is really just a flag that nothing has been set yet. 
     // Using an empty string is problematic, so we just set it to an 
@@ -175,3 +184,32 @@ function _google_appliance_get_googleonoff() {
     ),
   );
 }
+
+/**
+ * Format the value of the 'lr' parameter appropriately.
+ *
+ * @param $options
+ *   Array of languages to filter, as defined by the config
+ *   variable google_appliance_language_filter_options.
+ * @return
+ *   String to be passed to the GSA using the 'lr' parameter.
+ */
+function _google_appliance_get_lr($options) {
+  $langcodes = array();
+  $options = array_filter($options);
+  foreach ($options as $option) {
+    switch ($option) {
+      case '***CURRENT_LANGUAGE***':
+        global $language;
+        $langcode = $language->language;
+        break;
+      case '***DEFAULT_LANGUAGE***':
+        $langcode = language_default('language');
+        break;
+      default:
+        $langcode = $option;
+    }
+    $langcodes[$langcode] = "lang_$langcode";
+  }
+  return implode('|', $langcodes);
+}
diff --git a/google_appliance.install b/google_appliance.install
index 8c32e13..9bd37b2 100644
--- a/google_appliance.install
+++ b/google_appliance.install
@@ -20,6 +20,8 @@ function google_appliance_uninstall() {
     'frontend',
     'timeout',
     'autofilter',
+    'language_filter_toggle',
+    'language_filter_options',
     'query_inspection',
     'search_title',
     'results_per_page',
@@ -29,4 +31,4 @@ function google_appliance_uninstall() {
   foreach ($field_keys as $field) {
     variable_del('google_appliance_' . $field);
   }
-}
\ No newline at end of file
+}
diff --git a/google_appliance.module b/google_appliance.module
index ff01769..97488b1 100644
--- a/google_appliance.module
+++ b/google_appliance.module
@@ -470,6 +470,11 @@ function google_appliance_search_view($query = '', $sort = NULL) {
       'access' => 'p',
       //'requiredfields' => $filter_param
     );
+
+    // Alter request according to language filter settings.
+    if (module_exists('locale') && $settings['language_filter_toggle']) {
+      $search_query_data['gsa_query_params']['lr'] = _google_appliance_get_lr($settings['language_filter_options']);
+    }
     
     // allow implementation of hook_google_appliance_query_alter() by other modules
     drupal_alter('google_appliance_query', $search_query_data);
@@ -668,6 +673,11 @@ function google_appliance_get_clusters() {
     'site' => check_plain($settings['collection']),
     'client' => check_plain($settings['frontend']),
   );
+
+  // Alter request according to language filter settings.
+  if (module_exists('locale') && $settings['language_filter_toggle']) {
+    $clusterQueryParams['lr'] = _google_appliance_get_lr($settings['language_filter_options']);
+  }
   
   // cURL request for the clusters produces JSON result
   $gsa_clusters_json = _curl_post($clusterQueryURL, $clusterQueryParams);
