diff --git a/collapsible_widget.inc b/collapsible_widget.inc
index 62700f1..e8837aa 100644
--- a/collapsible_widget.inc
+++ b/collapsible_widget.inc
@@ -20,6 +20,7 @@ class FacetapiCollapsible extends FacetapiWidgetLinks {
     $settings = $this->settings->settings;
     $keep_open = isset($settings['keep_open']) ? $settings['keep_open'] : 0;
     $expand_first = isset($settings['expand_first']) ? $settings['expand_first'] : 1;
+    $collapsible_children = isset($settings['collapsible_children']) ? $settings['collapsible_children'] : 0;
     $element = array(
       '#theme' => 'item_list',
       '#items' => $this->buildListItems($element),
@@ -34,7 +35,8 @@ class FacetapiCollapsible extends FacetapiWidgetLinks {
               'facetapi_collapsible' => array(
                 $this->facet['field alias'] => array(
                   'keep_open' => $keep_open,
-                  'expand_first' => $expand_first))), 'type' => 'setting'),
+                  'expand_first' => $expand_first,
+                  'collapsible_children' => $collapsible_children))), 'type' => 'setting'),
           ),
         'css' => array(drupal_get_path('module', 'facetapi_collapsible') .'/facetapi_collapsible.css'),
       ),
@@ -69,7 +71,18 @@ class FacetapiCollapsible extends FacetapiWidgetLinks {
             'select[name="widget"]' => array('value' => $this->id),
           ),
         ),
-      )
+      ),
+      'collapsible_children' => array(
+        '#type' => 'checkbox',
+        '#title' => t('Collapsible children'),
+        '#default_value' => isset($settings['collapsible_children']) ? $settings['collapsible_children'] : 0,
+        '#description' => t('If checked, this facet\'s children will be collapsible as well.'),
+        '#states' => array(
+          'visible' => array(
+            'select[name="widget"]' => array('value' => $this->id),
+          ),
+        ),
+      ),
     );
   }
 }
diff --git a/facetapi_collapsible.css b/facetapi_collapsible.css
index eecf1ab..658a157 100644
--- a/facetapi_collapsible.css
+++ b/facetapi_collapsible.css
@@ -54,7 +54,7 @@ ul.facetapi-collapsible li a.facetapi-active:hover {
   background-color: #018FE2;
 }
 
-ul.facetapi-collapsible li a span {
+ul.facetapi-collapsible li a span.count {
   position: absolute;
   right: 5px;
   top: 3px;
@@ -82,3 +82,15 @@ ul.facetapi-collapsible li a span {
   right: 3px;
 }
 
+.facetapi-collapsible ul.facetapi-collapsible ul {
+  display:none;
+}
+
+.facetapi-collapsible ul.facetapi-collapsible ul.expanded {
+  display:block
+}
+
+a.collapselink {
+  font-weight:bold;
+}
+
diff --git a/facetapi_collapsible.js b/facetapi_collapsible.js
index 62b0209..3910d7e 100644
--- a/facetapi_collapsible.js
+++ b/facetapi_collapsible.js
@@ -51,6 +51,84 @@ Drupal.behaviors.facetapiCollapsible = {
           });
         });
       }
+
+      // check cookie
+      var cookie = $.cookie('Facetapi.collapsible.expanded');
+      cookie = $.parseJSON(cookie);
+      if (!cookie) {
+        cookie = {}
+      }
+      $('.facetapi-collapsible ul.facetapi-collapsible .item-list').once(function() {
+        var $list = $(this);
+        var parentwrapper = $list.closest('.facet-collapsible-wrapper')
+        if (parentwrapper) {
+          var parentfacetId = parentwrapper.attr('id');
+          parentfacetId = parentfacetId.replace('facet-collapsible-', '');
+          parentfacetId = parentfacetId.replace(/-/g, '_');
+          if (Drupal.settings.facetapi_collapsible[parentfacetId] && Drupal.settings.facetapi_collapsible[parentfacetId].collapsible_children) {
+            var $parentfacet = $($list.siblings('.facetapi-facet').get(0));
+
+            $('a', $parentfacet).each(function() {
+              if (!cookie || !cookie[parentfacetId] || (cookie[parentfacetId].indexOf($(this).attr('href')) < 0)) {
+                $(this).html('<span class="facetapi-collapsible-handle">+</span>&nbsp;' + $(this).html());
+                $('ul', $(this).closest('.facetapi-facet').siblings('.item-list')).first().removeClass('expanded');
+              }
+              else {
+                $(this).html('<span class="facetapi-collapsible-handle">-</span>&nbsp;' + $(this).html());
+                $(this).closest('.block-facetapi.facetapi-collapsible').addClass('expanded');
+              }
+            }).addClass('collapselink');
+
+            // expand facet with active childs
+            if ($('a.facetapi-active', $(this)).length) {
+              $('ul', $(this).closest('div')).first().addClass('expanded');
+            }
+
+            $('a .facetapi-collapsible-handle', $parentfacet).click(function (event) {
+              var $clickedlist = $('ul', $parentfacet.siblings('.item-list')).first();
+              var $clickedlink = $(this).closest('a');
+              $clickedlist.toggleClass("expanded");
+              if (!cookie) {
+                cookie = {};
+              }
+              if (!cookie[parentfacetId]) {
+                cookie[parentfacetId] = new Array();
+              }
+              if ($clickedlist.hasClass('expanded')) {
+                $(this).html('-&nbsp;');
+                cookie[parentfacetId].push($clickedlink.attr('href'));
+              }
+              else {
+                $(this).html('+&nbsp;');
+                var index = cookie[parentfacetId].indexOf($clickedlink.attr('href'));
+                if (index != -1) {
+                  cookie[parentfacetId].splice(index, 1);
+                }
+              }
+
+              if (Drupal.settings.facetapi_collapsible[parentfacetId].keep_open == false) {
+                $('ul', $list.closest('li').siblings('li')).each(function() {
+                  $(this).removeClass("expanded");
+                  $('a .facetapi-collapsible-handle', $(this).closest('li')).html('+&nbsp;');
+                  var index = cookie[parentfacetId].indexOf($('a', $(this).closest('li')).attr('href'));
+                  if (index != -1) {
+                    cookie[parentfacetId].splice(index, 1);
+                  }
+                });
+              }
+              $.cookie(
+                'Facetapi.collapsible.expanded',
+                JSON.stringify(cookie),
+                {
+                  path: Drupal.settings.basePath,
+                  expires: 1
+                }
+              );
+              event.preventDefault();
+            });
+          }
+        }
+      });
       i++;
     });
   }
