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..97a1110 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 
diff --git a/google_appliance.module b/google_appliance.module
index ff01769..cfd55b1 100644
--- a/google_appliance.module
+++ b/google_appliance.module
@@ -470,6 +470,27 @@ 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']) {
+      $langcodes = array();
+      $options = array_filter($settings['language_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";
+      }
+      $search_query_data['gsa_query_params']['lr'] = implode('|', $langcodes);
+    }
     
     // allow implementation of hook_google_appliance_query_alter() by other modules
     drupal_alter('google_appliance_query', $search_query_data);
@@ -668,6 +689,27 @@ 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']) {
+    $langcodes = array();
+    $options = array_filter($settings['language_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";
+    }
+    $clusterQueryParams['lr'] = implode('|', $langcodes);
+  }
   
   // cURL request for the clusters produces JSON result
   $gsa_clusters_json = _curl_post($clusterQueryURL, $clusterQueryParams);
