diff --git a/views_lang_switch.module b/views_lang_switch.module
index 5b0e1de..92d4a42 100644
--- a/views_lang_switch.module
+++ b/views_lang_switch.module
@@ -16,23 +16,61 @@ require_once(drupal_get_path('module', 'views_lang_switch') . '/theme/views_lang
 function views_lang_switch_menu() {
   $items = array();
 
-  $items['admin/config/development/vls-cache-clear'] = array(
-    'title' => 'Clear Views Language Switcher cache',
-    'description' => 'Clear the views language switcher cache table.',
-    'page callback' => 'views_lang_switch_cache_clear_page',
+  $items['admin/config/development/vls'] = array(
+    'title' => 'Views Language Switcher',
+    'description' => 'Views Language Switcher Administration',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('views_lang_switch_configuration'),
     'access arguments' => array('administer site configuration'),
   );
 
   return $items;
 }
 
+function views_lang_switch_configuration($form, &$form_state) {
+  $form['clear_cache'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Clear cache'),
+  );
+
+  $form['clear_cache']['clear'] = array(
+    '#type' => 'submit',
+    '#value' => t('Clear all caches'),
+    '#submit' => array('views_lang_switch_cache_clear_page'),
+  );
+
+  $form['caching'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Caching'),
+  );
+
+  $period = drupal_map_assoc(array(-1, 60, 180, 300, 600, 900, 1800, 2700, 3600, 10800, 21600, 32400, 43200, 86400), 'format_interval');
+  $period[-1] = '<' . t('Do not cache') . '>';
+  $form['caching']['vls_cache_lifetime'] = array(
+    '#type' => 'select',
+    '#title' => t('Minimum cache lifetime'),
+    '#default_value' => variable_get('vls_cache_lifetime', -1),
+    '#options' => $period,
+    '#description' => t('Cached views language switcher results will not be re-created until the lesser of global cache expiry time or vls cache expiry time.')
+  );
+
+  $form['caching']['vls_always_link'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Always link the selected filter languages'),
+    '#description' => t('Always provide a link to the filter languages irrespective of total result count.'),
+    '#default_value' => variable_get('vls_always_link', FALSE),
+  );
+
+  $form['#submit'][] = 'views_lang_switch_cache_clear_page';
+  return system_settings_form($form);;
+}
+
 /**
  * Clear the cache.
  */
-function views_lang_switch_cache_clear_page() {
+function views_lang_switch_cache_clear_page($form, &$form_state) {
   $result = db_query('UPDATE cache_views_lang_switch SET expire = 1')->execute();
   drupal_set_message('All items set to be expired.');
-  return t('Cache clear');
 }
 
 /**
@@ -89,7 +127,7 @@ function _views_lang_switch_fetch_counts($view, $display) {
   $lock = 'lang_switch_fetch_counts';
 
   // Cache for 3 hours.
-  $expire = REQUEST_TIME + 10800;
+  $expire = REQUEST_TIME + variable_get('vls_cache_lifetime', -1);
 
   $counts = cache_get($cid, $bin);
 
@@ -133,6 +171,11 @@ function _views_lang_switch_compute_counts($view, $display) {
  * Given a view and language code, return the count of nodes for that language.
  */
 function _views_lang_switch_compute_one_count($view, $langcode, $display) {
+  // Return a count for any requested language.
+  if (variable_get('vls_always_link', FALSE)) {
+    return 1;
+  }
+
   if (isset($_GET['language'])) {
     $prev_lang = $_GET['language'];
   }
