diff --git a/facetapi.admin.js b/facetapi.admin.js
index cf66897..f3e40d5 100644
--- a/facetapi.admin.js
+++ b/facetapi.admin.js
@@ -19,6 +19,23 @@
       }
     });
 
+    // Ensures ALL limit active items checkboxes are updated.
+    // @see http://drupal.org/node/735528
+    $('input[name="limit_active_items"]').change(function() {
+      if ($(this).attr('checked')) {
+        $('input[name="limit_active_items"]').attr('checked', 'checked');
+      }
+      else {
+        $('input[name="limit_active_items"]').removeAttr('checked');
+      }
+    });
+
+    // Ensures ALL maximum active item input fields are updated.
+    // @see http://drupal.org/node/735528
+    $('input[name="max_active_items"]').change(function() {
+      $('input[name="max_active_items"]').val($(this).val());
+    });
+
     // Ensures ALL show expanded checkboxes are updated.
     // @see http://drupal.org/node/735528
     $('input[name="show_expanded"]').change(function() {
diff --git a/facetapi.module b/facetapi.module
index cba631e..cbc56b0 100644
--- a/facetapi.module
+++ b/facetapi.module
@@ -267,6 +267,14 @@
       'arguments' => array('text' => NULL, 'path' => NULL, 'options' => array()),
       'file' => 'facetapi.theme.inc',
     ),
+    'facetapi_disabled_link_inactive' => array(
+      'arguments' => array('text' => NULL, 'path' => NULL, 'options' => array(), 'count' => 0),
+      'file' => 'facetapi.theme.inc',
+    ),
+    'facetapi_disabled_link_active' => array(
+      'arguments' => array('text' => NULL, 'path' => NULL, 'options' => array()),
+      'file' => 'facetapi.theme.inc',
+    ),    
     'facetapi_deactivate_widget' => array(
       'arguments' => array('text' => NULL),
       'file' => 'facetapi.theme.inc',
diff --git a/facetapi.theme.inc b/facetapi.theme.inc
index 8eccab2..b3c1197 100644
--- a/facetapi.theme.inc
+++ b/facetapi.theme.inc
@@ -33,6 +33,41 @@
 }
 
 /**
+ * Returns HTML for a disabled inactive facet item.
+ *
+ * @param $variables
+ *   An associative array containing the keys 'text', 'path', 'options', and
+ *   'count'. See the l() and theme_facetapi_count() functions for information
+ *   about these variables.
+ *
+ * @ingroup themeable
+ */
+function theme_facetapi_disabled_link_inactive($variables) {
+  // Builds accessible markup.
+  // @see http://drupal.org/node/1316580
+  $accessible_vars = array(
+    'text' => $variables['text'],
+    'active' => FALSE,
+  );
+  $accessible_markup = theme('facetapi_accessible_markup', $accessible_vars);
+
+  // Sanitizes the link text if necessary.
+  $sanitize = empty($variables['options']['html']);
+  $variables['text'] = ($sanitize) ? check_plain($variables['text']) : $variables['text'];
+
+  // Adds count to link if one was passed.
+  if (isset($variables['count'])) {
+    $variables['text'] .= ' ' . theme('facetapi_count', $variables);
+  }
+
+  // Resets link text, sets to options to HTML since we already sanitized the
+  // link text and are providing additional markup for accessibility.
+  $variables['text'] .= $accessible_markup;
+  $variables['options']['html'] = TRUE;
+  return $variables['text'];
+}
+
+/**
  * Returns HTML for an active facet item.
  *
  * @param $variables
@@ -114,6 +149,39 @@
 }
 
 /**
+ * Returns HTML for a disabled active facet item.
+ *
+ * @param $variables
+ *   An associative array containing the keys 'text', 'path', and 'options'. See
+ *   the l() function for information about these variables.
+ *
+ * @ingroup themeable
+ */
+function theme_facetapi_disabled_link_active($variables) {
+
+  // Sanitizes the link text if necessary.
+  $sanitize = empty($variables['options']['html']);
+  $link_text = ($sanitize) ? check_plain($variables['text']) : $variables['text'];
+
+  // Theme function variables fro accessible markup.
+  // @see http://drupal.org/node/1316580
+  $accessible_vars = array(
+    'text' => $variables['text'],
+    'active' => TRUE,
+  );
+
+  // Builds link, passes through t() which gives us the ability to change the
+  // position of the widget on a per-language basis.
+  $replacements = array(
+    '!facetapi_deactivate_widget' => theme('facetapi_deactivate_widget'),
+    '!facetapi_accessible_markup' => theme('facetapi_accessible_markup', $accessible_vars),
+  );
+  $variables['text'] = t('!facetapi_deactivate_widget !facetapi_accessible_markup', $replacements);
+  $variables['options']['html'] = TRUE;
+  return theme_link($variables) . $link_text;
+}
+
+/**
  * Returns HTML for the deactivation widget.
  *
  * @param $variables
diff --git a/plugins/facetapi/widget.inc b/plugins/facetapi/widget.inc
index c03c4df..a29a07b 100644
--- a/plugins/facetapi/widget.inc
+++ b/plugins/facetapi/widget.inc
@@ -101,6 +101,7 @@
       '#realm_name' => $this->realm['name'],
       '#facet' => $this->facet->getFacet(),
       '#settings' => $this->settings,
+      '#active_items' => count($this->facet->getAdapter()->getActiveItems($this->facet->getFacet())),
       $this->facet['field alias'] => $this->facet->getBuild(),
       '#attributes' => array(
         'class' => array(
diff --git a/plugins/facetapi/widget_links.inc b/plugins/facetapi/widget_links.inc
index 8c092f5..6fe3aec 100644
--- a/plugins/facetapi/widget_links.inc
+++ b/plugins/facetapi/widget_links.inc
@@ -41,8 +41,14 @@
    *   A render array containing the facet items.
    */
   protected function setThemeHooks(array &$build) {
+    $settings = $this->build['#settings']->settings;
     foreach ($build as $value => &$item) {
-      $item['#theme'] = ($item['#active']) ? 'facetapi_link_active' : 'facetapi_link_inactive';
+      if ($settings['limit_active_items'] && $this->build['#active_items'] >= $settings['max_active_items']) {
+        $item['#theme'] = ($item['#active']) ? 'facetapi_disabled_link_active' : 'facetapi_disabled_link_inactive';
+      }
+      else {
+        $item['#theme'] = ($item['#active']) ? 'facetapi_link_active' : 'facetapi_link_inactive';
+      }      
       if (!empty($item['#item_children'])) {
         $this->setThemeHooks($item['#item_children']);
       }
@@ -161,6 +167,34 @@
       ),
     );
 
+    // @see http://drupal.org/node/1393928
+    $form['widget']['widget_settings']['links'][$this->id]['limit_active_items'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Limit active items'),
+      '#default_value' => !empty($this->settings->settings['limit_active_items']),
+      '#description' => t('Limits the number of simultaneous active facets.'),
+      '#states' => array(
+        'visible' => array(
+          'select[name="widget"]' => array('value' => $this->id),
+        ),
+      ),
+    );
+
+    // @see http://drupal.org/node/1393928
+    $form['widget']['widget_settings']['links'][$this->id]['max_active_items'] = array(
+      '#type' => 'textfield',
+      '#size' => 5,
+      '#title' => t('Active item limit count'),
+      '#default_value' => $this->settings->settings['max_active_items'],
+      '#description' => t('Number of simultaneous active items. Disable <em>Limit active items</em> for infinite selectable items.'),
+      '#states' => array(
+        'visible' => array(
+          'select[name="widget"]' => array('value' => $this->id),
+          'input[name="limit_active_items"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+    
     // @see http://drupal.org/node/735528
     if ($this->facet['hierarchy callback']) {
       $form['widget']['widget_settings']['links'][$this->id]['show_expanded'] = array(
@@ -194,6 +228,8 @@
     return array(
       'soft_limit' => 20,
       'nofollow' => 1,
+      'limit_active_items' => 0,
+      'max_active_items' => 1,      
       'show_expanded' => 0,
     );
   }
