diff --git a/paragraphs.collapsible.css b/paragraphs.collapsible.css
new file mode 100644
index 0000000..26686e7
--- /dev/null
+++ b/paragraphs.collapsible.css
@@ -0,0 +1,7 @@
+/**
+ * Admin CSS styles for the paragraphs module.
+ */
+
+td.paragraph-bundle-content-collapsible .paragraph-bundle-title {
+  cursor: pointer;
+}
diff --git a/paragraphs.collapsible.js b/paragraphs.collapsible.js
new file mode 100644
index 0000000..71e2a01
--- /dev/null
+++ b/paragraphs.collapsible.js
@@ -0,0 +1,145 @@
+/**
+ * @file
+ * Provides JavaScript for Paragraphs.
+ */
+
+(function ($, Drupal) {
+
+  // Collapse effects.
+  var toggleEffects = {
+    expand : function(elements) {
+      elements.slideDown();
+    },
+    collapse : function(elements) {
+      elements.slideUp();
+    }
+  };
+
+  /**
+   * Show / Hide a single paragraph.
+   */
+  var toggleParagraph = function(item, action) {
+    var $item = $(item);
+    var elements;
+
+    // Except the first div, show/hide others.
+    var $ajax_content = $item.children('div.ajax-new-content');
+    if ($ajax_content.length > 0) {
+      elements = $ajax_content.children('div:not(.paragraph-bundle-title, .paragraph-bundle-preview), fieldset');
+    }
+    else {
+      elements = $item.children('div:not(.paragraph-bundle-title, .paragraph-bundle-preview), fieldset');
+    }
+
+    // Invoke collapse action.
+    toggleEffects[action](elements);
+
+    // Add class to item row.
+    if (action == 'collapse') {
+      $item.removeClass('expanded').addClass('collapsed');
+    }
+    else {
+      $item.removeClass('collapsed').addClass('expanded');
+    }
+  };
+
+  /**
+   * Show / Hide all paragraphs.
+   */
+  var toggleParagraphs = function(element, action) {
+    // Fetch all paragraph bundles.
+    var $form_item = $(element).closest('.form-item');
+    if ($form_item.length > 0) {
+      var paragraph_bundles = $form_item.children('table.field-multiple-table').find('td.paragraph-bundle-content-collapsible');
+      paragraph_bundles.each(function () {
+        toggleParagraph(this, action);
+      });
+    }
+  };
+
+  /**
+   * Trigger show / hide for given trigger element.
+   */
+  var toggleAll = function(triggerElement) {
+    var $t = $(triggerElement);
+
+    // Build triggers.
+    var $triggers = [$t];
+
+    // Add other trigger.
+    var $parent_table = $t.closest('table');
+    if ($parent_table.length > 0) {
+      if ($parent_table.hasClass('field-multiple-table')) {
+        // Items table click, add sticky header trigger.
+        $triggers.push($parent_table.siblings('table.sticky-header').find('span.paragraphs-collapsible a'));
+      }
+      else if ($parent_table.hasClass('sticky-header')) {
+        // Sticky header click, add items table click.
+        $triggers.push($parent_table.siblings('table.field-multiple-table').find('span.paragraphs-collapsible a'));
+      }
+    }
+
+    if ($t.hasClass('collapsed')) {
+      // Expand.
+      toggleParagraphs(triggerElement, 'expand');
+      $.each($triggers, function(index, $trigger) {
+        if ($trigger.length > 0) {
+          $trigger.removeClass('collapsed').addClass('expanded');
+          $trigger.text(Drupal.t('Collapse All'));
+        }
+      });
+    }
+    else {
+      // Collapse.
+      toggleParagraphs(triggerElement, 'collapse');
+      $.each($triggers, function(index, $trigger) {
+        if ($trigger.length) {
+          $trigger.removeClass('expanded').addClass('collapsed');
+          $trigger.text(Drupal.t('Expand All'));
+        }
+      });
+    }
+  };
+
+  /**
+   * Enable Expand/Collapse feature for paragraph bundles.
+   * Show the name & type of each bundle and hide contents inside those.
+   */
+  Drupal.behaviors.paragraphsCollapsible = {
+    attach: function (context, settings) {
+      // Trigger for single paragaph.
+      $('td.paragraph-bundle-content-collapsible > .paragraph-bundle-title', context).once("paragraphs").click(function(event) {
+        // Prevent the default click event.
+        event.preventDefault();
+        var $row = $(this).parent('td.paragraph-bundle-content-collapsible');
+        if ($row.length) {
+          var action = $row.hasClass('collapsed') ? 'expand' : 'collapse';
+          toggleParagraph($row, action);
+        }
+      });
+
+      // Trigger for all paragaphs.
+      $('span.paragraphs-collapsible a', context).once("paragraphs")
+        .click(function(event) {
+          // Prevent the default click event.
+          event.preventDefault();
+          toggleAll(this);
+        })
+        .each(function() {
+          // Initial collapse processing.
+          var $t = $(this);
+
+          // If trigger is flagged as expanded
+          // AND parent is set to collapse initially
+          // AND is not in the sticky header.
+          if ($t.hasClass('expanded')) {
+            if ($t.parent('.paragraphs-collapsible-init-collapsed').length > 0 &&
+                $t.closest('table').filter('.field-multiple-table').length > 0) {
+              toggleAll($t);
+            }
+          }
+        });
+    }
+  };
+
+})(jQuery, Drupal);
diff --git a/paragraphs.field_widget.inc b/paragraphs.field_widget.inc
index 921843c..617c26f 100644
--- a/paragraphs.field_widget.inc
+++ b/paragraphs.field_widget.inc
@@ -345,6 +345,14 @@ function paragraphs_field_widget_form_build(&$form, &$form_state, $field, $insta
     $instance['settings']['title_multiple'] = PARAGRAPHS_DEFAULT_TITLE_MULTIPLE;
   }
 
+  if (!isset($instance['settings']['open_collapsible'])) {
+    $instance['settings']['open_collapsible'] = PARAGRAPHS_DEFAULT_OPEN_COLLAPSIBLE;
+  }
+
+  if (!isset($instance['settings']['open_collapsible_preview'])) {
+    $instance['settings']['open_collapsible_preview'] = PARAGRAPHS_DEFAULT_OPEN_COLLAPSIBLE_PREVIEW;
+  }
+
   // If the paragraph item form contains another paragraph,
   // we might ran into a recursive loop. Prevent that.
   if ($recursion++ > PARAGRAPHS_RECURSION_LIMIT) {
@@ -445,6 +453,7 @@ function paragraphs_field_widget_form_build(&$form, &$form_state, $field, $insta
       $element['paragraph_bundle_title'] = array(
         '#type' => 'container',
         '#weight' => -100,
+        '#attributes' => array('class' => array('paragraph-bundle-title')),
       );
       $element['paragraph_bundle_title']['info'] = array(
         '#markup' => t('!title type: %bundle', array('!title' => t($instance['settings']['title']), '%bundle' => $bundle_info->name)),
@@ -503,6 +512,7 @@ function paragraphs_field_widget_form_build(&$form, &$form_state, $field, $insta
         if($default_edit_mode === 'preview' && entity_access('view', 'paragraphs_item', $paragraph_item)) {
           $element['paragraph_bundle_preview'] = array(
             '#type' => 'container',
+            '#attributes' => array('class' => array('paragraph-bundle-preview')),
           );
           $preview = $paragraph_item->view('paragraphs_editor_preview');
           $element['paragraph_bundle_preview']['preview'] = $preview;
@@ -542,6 +552,24 @@ function paragraphs_field_widget_form_build(&$form, &$form_state, $field, $insta
         );
       }
 
+      // Collapsible open paragraphs.
+      if ($default_edit_mode == 'open' && !empty($instance['settings']['open_collapsible'])) {
+        // Attach js and css.
+        $element['#attached']['js'][] = drupal_get_path('module', 'paragraphs') . '/paragraphs.collapsible.js';
+        $element['#attached']['css'][] = drupal_get_path('module', 'paragraphs') . '/paragraphs.collapsible.css';
+
+        // Build preview.
+        if (!empty($instance['settings']['open_collapsible_preview']) &&
+            !isset($element['paragraph_bundle_preview']) &&
+            isset($paragraph_item) && entity_access('view', 'paragraphs_item', $paragraph_item)) {
+          $element['paragraph_bundle_preview'] = array(
+            '#type' => 'container',
+            '#attributes' => array('class' => array('paragraph-bundle-preview')),
+          );
+          $preview = $paragraph_item->view('paragraphs_editor_preview');
+          $element['paragraph_bundle_preview']['preview'] = $preview;
+        }
+      }
 
       if (isset($paragraph_item)) {
         $element['actions']['remove_button'] = array(
diff --git a/paragraphs.module b/paragraphs.module
index 47093b6..54f3c87 100644
--- a/paragraphs.module
+++ b/paragraphs.module
@@ -11,6 +11,9 @@ define('PARAGRAPHS_DEFAULT_TITLE_MULTIPLE', 'Paragraphs');
 define('PARAGRAPHS_DEFAULT_EDIT_MODE', 'open');
 define('PARAGRAPHS_DEFAULT_EDIT_MODE_OVERRIDE', 1);
 define('PARAGRAPHS_DEFAULT_ADD_MODE', 'select');
+define('PARAGRAPHS_DEFAULT_OPEN_COLLAPSIBLE', TRUE);
+define('PARAGRAPHS_DEFAULT_OPEN_COLLAPSIBLE_COLLAPSED', TRUE);
+define('PARAGRAPHS_DEFAULT_OPEN_COLLAPSIBLE_PREVIEW', FALSE);
 
 /**
  * Modules should return this value from hook_paragraphs_item_access() to allow access to a paragraphs item.
@@ -431,6 +434,9 @@ function paragraphs_field_info() {
       'title_multiple' => PARAGRAPHS_DEFAULT_TITLE_MULTIPLE,
       'allowed_bundles' => array(),
       'bundle_weights' => array(),
+      'open_collapsible' => PARAGRAPHS_DEFAULT_OPEN_COLLAPSIBLE,
+      'open_collapsible_collapsed' => PARAGRAPHS_DEFAULT_OPEN_COLLAPSIBLE_COLLAPSED,
+      'open_collapsible_preview' => PARAGRAPHS_DEFAULT_OPEN_COLLAPSIBLE_PREVIEW,
     ),
     'default_widget' => 'paragraphs_hidden',
     'default_formatter' => 'paragraphs_view',
@@ -593,6 +599,48 @@ function paragraphs_field_instance_settings_form($field, $instance) {
     '#required' => TRUE,
   );
 
+  $element['open_collapsible'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Enable collapsible form items'),
+    '#description' => t('Provides client-side collapsible paragraphs via JavaScript.'),
+    '#default_value' => isset($settings['open_collapsible']) ? $settings['open_collapsible'] : PARAGRAPHS_DEFAULT_OPEN_COLLAPSIBLE,
+    '#states' => array(
+      // Show the settings when the default edit mode is set to "Open".
+      'visible' => array(
+        ':input[name="instance[settings][default_edit_mode]"]' => array('value' => 'open'),
+      ),
+    ),
+  );
+
+  $element['open_collapsible_collapsed'] = array(
+    '#type' => 'checkbox',
+    '#field_prefix' => '<span>&nbsp;&nbsp;&nbsp; </span>',
+    '#title' => t('Collapse all paragraphs initially'),
+    '#default_value' => isset($settings['open_collapsible_collapsed']) ? $settings['open_collapsible_collapsed'] : PARAGRAPHS_DEFAULT_OPEN_COLLAPSIBLE_COLLAPSED,
+    '#states' => array(
+      // Show the settings when open_collapsible is enabled.
+      'visible' => array(
+        ':input[name="instance[settings][default_edit_mode]"]' => array('value' => 'open'),
+        ':input[name="instance[settings][open_collapsible]"]' => array('checked' => TRUE),
+      ),
+    ),
+  );
+
+  $element['open_collapsible_preview'] = array(
+    '#type' => 'checkbox',
+    '#field_prefix' => '<span>&nbsp;&nbsp;&nbsp; </span>',
+    '#title' => t('Display paragraphs preview view mode for collapsible items'),
+    '#description' => t('This will display the rendered preview with the stored values when the form is built.  This does not attempt to update the preview as values are changed.'),
+    '#default_value' => isset($settings['open_collapsible_preview']) ? $settings['open_collapsible_preview'] : PARAGRAPHS_DEFAULT_OPEN_COLLAPSIBLE_PREVIEW,
+    '#states' => array(
+      // Show the settings when open_collapsible is enabled.
+      'visible' => array(
+        ':input[name="instance[settings][default_edit_mode]"]' => array('value' => 'open'),
+        ':input[name="instance[settings][open_collapsible]"]' => array('checked' => TRUE),
+      ),
+    ),
+  );
+
   if (!count($bundles)) {
     $element['allowed_bundles_explain'] = array(
       '#type' => 'markup',
@@ -1154,11 +1202,36 @@ function theme_paragraphs_field_multiple_value_form($variables) {
   if (!isset($instance['settings']['title_multiple'])) {
     $instance['settings']['title_multiple'] = PARAGRAPHS_DEFAULT_TITLE_MULTIPLE;
   }
+  if (!isset($instance['settings']['open_collapsible'])) {
+    $instance['settings']['open_collapsible'] = PARAGRAPHS_DEFAULT_OPEN_COLLAPSIBLE;
+  }
+  if (!isset($instance['settings']['open_collapsible_collapsed'])) {
+    $instance['settings']['open_collapsible_collapsed'] = PARAGRAPHS_DEFAULT_OPEN_COLLAPSIBLE_COLLAPSED;
+  }
 
   $add_mode = (isset($instance['settings']['add_mode']) ? $instance['settings']['add_mode'] : PARAGRAPHS_DEFAULT_ADD_MODE);
+  $default_edit_mode = isset($instance['settings']['default_edit_mode']) ? $instance['settings']['default_edit_mode'] : PARAGRAPHS_DEFAULT_EDIT_MODE;
 
   $required = !empty($element['#required']) ? theme('form_required_marker', $variables) : '';
 
+  // Open collapsible processing.
+  $open_collapsible_enabled = FALSE;
+  $expand_collapse = '';
+  if ($default_edit_mode == 'open' && !empty($instance['settings']['open_collapsible'])) {
+    $open_collapsible_enabled = TRUE;
+    $expand_collapse_classes = 'paragraphs-collapsible';
+    if (!empty($instance['settings']['open_collapsible_collapsed'])) {
+      $expand_collapse_classes .= ' paragraphs-collapsible-init-collapsed';
+    }
+
+    $expand_collapse = '<span style="float: right" class="' . $expand_collapse_classes . '">';
+    $expand_collapse .= l(t('Collapse All'), '#', array(
+      'external' => TRUE,
+      'attributes' => array('class' => array('expanded')),
+    ));
+    $expand_collapse .= '</span>';
+  }
+
   // Sort items according to '_weight' (needed when the form comes back after
   // preview or failed validation)
   $items = array();
@@ -1182,9 +1255,23 @@ function theme_paragraphs_field_multiple_value_form($variables) {
     $table_id = drupal_html_id($element['#field_name'] . '_values');
     $order_class = $element['#field_name'] . '-delta-order';
 
+    if ($open_collapsible_enabled) {
+      $header_text = t('!title !required !collapsible', array(
+        '!collapsible' => $expand_collapse,
+        '!title' => $element['#title'],
+        '!required' => $required,
+      ));
+    }
+    else {
+      $header_text = t('!title !required', array(
+        '!title' => $element['#title'],
+        '!required' => $required,
+      ));
+    }
+
     $header = array(
       array(
-        'data' => '<label>' . t('!title !required', array('!title' => $element['#title'], '!required' => $required)) . '</label>',
+        'data' => '<label>' . $header_text . '</label>',
         'colspan' => 2,
         'class' => array('field-label'),
       ),
@@ -1193,12 +1280,17 @@ function theme_paragraphs_field_multiple_value_form($variables) {
     $rows = array();
 
     // Add the items as table rows.
+    $item_classes = array('paragraph-bundle-content');
+    if ($open_collapsible_enabled) {
+      $item_classes[] = 'paragraph-bundle-content-collapsible';
+      $item_classes[] = 'expanded';
+    }
     foreach ($items as $key => $item) {
       $item['_weight']['#attributes']['class'] = array($order_class);
       $delta_element = drupal_render($item['_weight']);
       $cells = array(
         array('data' => '', 'class' => array('field-multiple-drag')),
-        drupal_render($item),
+        array('data' => drupal_render($item), 'class' => $item_classes),
         array('data' => $delta_element, 'class' => array('delta-order')),
       );
       $rows[] = array(
@@ -1454,4 +1546,4 @@ function paragraphs_modules_uninstalled($modules) {
   if (in_array('entitycache', $modules)) {
     paragraphs_remove_entitycache_table();
   }
-}
\ No newline at end of file
+}
