diff --git a/google_appliance.admin.inc b/google_appliance.admin.inc
index 6dc4c25..b306896 100644
--- a/google_appliance.admin.inc
+++ b/google_appliance.admin.inc
@@ -75,8 +75,13 @@ function google_appliance_admin_settings($form) {
   );
   if (module_exists('locale')) {
     $form['query_param']['google_appliance_language_filter_toggle'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Enable Language Filtering'),
+      '#type' => 'radios',
+      '#title' => t('Language Filtering'),
+      '#options' => array(
+        'no_filter' => t('No language filtering'),
+        'filter_specified' => t('Filter by specified languages'),
+        'filter_exposed' => t('Expose language filter in a block'),
+      ),
       '#default_value' => $settings['language_filter_toggle'],
     );
     $form['query_param']['google_appliance_language_filter_options'] = array(
@@ -89,7 +94,7 @@ function google_appliance_admin_settings($form) {
       ) + locale_language_list(),
       '#states' => array(
         'visible' => array(
-          ':input[name=google_appliance_language_filter_toggle]' => array('checked' => TRUE),
+          ':input[name=google_appliance_language_filter_toggle]' => array('value' => 'filter_specified'),
         ),
       ),
       '#description' => t('If there are no results in the specified language, the search appliance is expected to return results in all languages.'),
diff --git a/google_appliance.helpers.inc b/google_appliance.helpers.inc
index 2fd2115..4d443ee 100644
--- a/google_appliance.helpers.inc
+++ b/google_appliance.helpers.inc
@@ -14,7 +14,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_LANGUAGE_FILTER_TOGGLE', 'no_filter');
 define('SGA_DEFAULT_QUERY_INSPECTION', 0);
 define('SGA_DEFAULT_SEARCH_TITLE', 'Search this site');
 define('SGA_DEFAULT_RESULTS_PER_PAGE', 10);
@@ -196,15 +196,24 @@ 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) {
+function _google_appliance_get_lr() {
+  $settings = _google_appliance_get_settings();
+  switch ($settings['language_filter_toggle']) {
+    case 'filter_specified': // Filter by specified languages.
+      $options = array_filter($settings['language_filter_options']);
+      break;
+    case 'filter_exposed': // Expose language filter in a block.
+      $parameters = drupal_get_query_parameters();
+      $options = empty($parameters['language']) ? array() : explode('|', $parameters['language']);
+      break;
+    default: // No language filtering.
+      $options = array();
+  }
+
   $langcodes = array();
-  $options = array_filter($options);
   foreach ($options as $option) {
     switch ($option) {
       case '***CURRENT_LANGUAGE***':
diff --git a/google_appliance.install b/google_appliance.install
index c5cfbf9..bcf8ac2 100644
--- a/google_appliance.install
+++ b/google_appliance.install
@@ -32,3 +32,12 @@ function google_appliance_uninstall() {
     variable_del('google_appliance_' . $field);
   }
 }
+
+/**
+ * Reset variable given that there is a 3rd option for language filtering.
+ */
+function google_appliance_update_7001() {
+  $old_value = variable_get('google_appliance_language_filter_toggle', FALSE);
+  $new_value = $old_value ? 'filter_specified' : 'no_filter';
+  variable_set('google_appliance_language_filter_toggle', $new_value);
+}
diff --git a/google_appliance.module b/google_appliance.module
index 90d51ba..26ec193 100644
--- a/google_appliance.module
+++ b/google_appliance.module
@@ -169,6 +169,15 @@ function google_appliance_block_info() {
     'pages' => 'gsearch*',
   );
 
+  // Language filter block.
+  if (module_exists('locale') && ($settings['language_filter_toggle'] == 'filter_exposed')) {
+    $blocks['filter_language'] = array(
+      'info' => t('Google Appliance: Filter by language'),
+      'visibility' => 1,
+      'pages' => 'gsearch*',
+    );
+  }
+
   return $blocks;
 }
 
@@ -190,6 +199,11 @@ function google_appliance_block_view($delta = '') {
         $block['subject'] = 'Related Searches';
         $block['content'] = google_appliance_get_clusters(); // related search links
         break;
+
+      case 'filter_language':
+        $block['subject'] = t('Filter by language');
+        $block['content'] = drupal_get_form('google_appliance_filter_language_form');
+        break;
     }
 
     $results = drupal_static('google_appliance_parse_device_response_xml');
@@ -253,6 +267,35 @@ function google_appliance_block_form_submit($form, &$form_state) {
   // search execution happens in page callback
 }
 
+/**
+ * Form builder outputs the language filter.
+ */
+function google_appliance_filter_language_form($form, &$form_state) {
+  $parameters = drupal_get_query_parameters();
+
+  if (empty($parameters['language'])) {
+    $form['languages'] = array(
+      '#type' => 'checkboxes',
+      '#options' => locale_language_list(),
+      '#attributes' => array(
+        'onclick' => 'window.location.href="?language="+this.value;',
+      ),
+    );
+  }
+  else {
+    $form['languages'] = array(
+      '#type' => 'checkboxes',
+      '#options' => array($parameters['language'] => locale_language_name($parameters['language'])),
+      '#attributes' => array(
+        'onclick' => 'window.location.href="?";',
+      ),
+      '#default_value' => array($parameters['language']),
+    );
+  }
+
+  return $form;
+}
+
 
 /**
  * Implements hook_form_FORM_ID_alter().
@@ -505,8 +548,9 @@ function google_appliance_search_view($query = '', $sort = NULL) {
     );
 
     // 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']);
+    $lr = _google_appliance_get_lr();
+    if (module_exists('locale') && !empty($lr)) {
+      $search_query_data['gsa_query_params']['lr'] = $lr;
     }
 
     // allow implementation of hook_google_appliance_query_alter() by other modules
@@ -741,8 +785,9 @@ function google_appliance_get_clusters() {
   );
 
   // 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']);
+  $lr = _google_appliance_get_lr();
+  if (module_exists('locale') && !empty($lr)) {
+    $clusterQueryParams['lr'] = $lr;
   }
 
   // cURL request for the clusters produces JSON result
