diff --git a/paragraphs.css b/paragraphs.css
new file mode 100644
index 0000000..577154e
--- /dev/null
+++ b/paragraphs.css
@@ -0,0 +1,7 @@
+/**
+ * Admin CSS styles for the paragraphs module.
+ */
+
+td.paragraph-bundle-content .paragraph-bundle-title {
+  cursor: pointer;
+}
diff --git a/paragraphs.field_widget.inc b/paragraphs.field_widget.inc
index 921843c..d1d3571 100644
--- a/paragraphs.field_widget.inc
+++ b/paragraphs.field_widget.inc
@@ -312,11 +312,16 @@ function paragraphs_field_multiple_value_form($field, $instance, $langcode, $ite
     // file.js triggers uploads when the main Submit button is clicked.
     $field_elements['#attached']['js'] = array(
       drupal_get_path('module', 'file') . '/file.js',
-      array('data' => drupal_get_path('module', 'paragraphs') . '/paragraphs.js', 'type' => 'file', 'weight' => 9999),
     );
     $form_state['has_file_element'] = TRUE;
   }
 
+  // Add custom js and css.
+  $field_elements['#attached']['js'][] = array(
+    'data' => drupal_get_path('module', 'paragraphs') . '/paragraphs.js', 'type' => 'file', 'weight' => 9999,
+  );
+  $field_elements['#attached']['css'][] = drupal_get_path('module', 'paragraphs') . '/paragraphs.css';
+
   return $field_elements;
 }
 
@@ -345,6 +350,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 +458,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)),
@@ -498,11 +512,22 @@ function paragraphs_field_widget_form_build(&$form, &$form_state, $field, $insta
             '#weight' => 999,
           );
         }
+        elseif (!empty($instance['settings']['open_collapsible']) &&
+                !empty($instance['settings']['open_collapsible_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;
+        }
       }
       else {
         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;
diff --git a/paragraphs.js b/paragraphs.js
index 33c0c33..33c53bf 100644
--- a/paragraphs.js
+++ b/paragraphs.js
@@ -3,7 +3,60 @@
  * Provides JavaScript for Paragraphs.
  */
 
-(function ($) {
+(function ($, Drupal) {
+
+  // Collapse effects.
+  var collapsefuncs = {
+    expand : function(elements) {
+      elements.slideUp();
+    },
+    collapse : function(elements) {
+      elements.slideDown();
+    }
+  };
+
+  /**
+   * Show / Hide all paragraphs.
+   */
+  var showhideParagraphs = function(element, action) {
+    // Fetch all paragraph bundles.
+    var $form_item = $(element).closest('.form-item');
+    if ($form_item.length) {
+      var paragraph_bundles = $form_item.children('table.field-multiple-table').find('td.paragraph-bundle-content');
+      paragraph_bundles.each(function () {
+        showhideParagraph(this, action);
+      });
+    }
+  };
+
+  /**
+   * Show / Hide a single paragraph.
+   */
+  var showhideParagraph = 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) {
+      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.
+    collapsefuncs[action](elements);
+
+    // Add class to item row.
+    if (action == 'collapse') {
+      $item.removeClass('expanded');
+    }
+    else {
+      $item.addClass('expanded');
+    }
+  };
+
 
   /**
    * Allows submit buttons in entity forms to trigger uploads by undoing
@@ -22,4 +75,62 @@
     }
   };
 
-})(jQuery);
+  /**
+   * Enable Expand/Collapse feature for paragraph bundles.
+   * Show the name & type of each bundle and hide contents inside those.
+   */
+  Drupal.behaviors.paragraphsCollapse = {
+    attach: function (context, settings) {
+      // Trigger for single paragaph.
+      $('td.paragraph-bundle-content > .paragraph-bundle-title', context).once("paragraphs").click(function(event) {
+        // Prevent the default click event.
+        event.preventDefault();
+        var $row = $(this).parent('td.paragraph-bundle-content');
+        if ($row.length) {
+          var action = $row.hasClass('expanded') ? 'collapse' : 'expand';
+          showhideParagraph($row, action);
+        }
+      });
+
+      // Trigger for all paragaphs.
+      $('span.paragraphs-collapsible a', context).once("paragraphs")
+        .click(function(event) {
+          // Prevent the default click event.
+          event.preventDefault();
+          var $t = $(this);
+          var $triggers = [$t];
+
+          var $items_table = $t.closest('table.field-multiple-table');
+          if ($items_table.length) {
+            // Items table click.
+            $triggers.push($items_table.siblings('table.sticky-header').find('span.paragraphs-collapsible a'));
+          }
+          else {
+            // Sticky header click.
+            $triggers.push($t.closest('table.sticky-header').siblings('table.field-multiple-table').find('span.paragraphs-collapsible a'));
+          }
+
+          if ($t.hasClass('collapsed')) {
+            showhideParagraphs(this, 'expand');
+            $.each($triggers, function(index, $trigger) {
+              if ($trigger.length) {
+                $trigger.removeClass('collapsed').addClass('expanded');
+                $trigger.text(Drupal.t('Expand All'));
+              }
+            });
+          }
+          else {
+            showhideParagraphs(this, 'collapse');
+            $.each($triggers, function(index, $trigger) {
+              if ($trigger.length) {
+                $trigger.removeClass('expanded').addClass('collapsed');
+                $trigger.text(Drupal.t('Collapse All'));
+              }
+            });
+          }
+        })
+        .parent('.paragraphs-collapsible-init-collapsed').find('a.expanded').click();
+    }
+  };
+
+})(jQuery, Drupal);
diff --git a/paragraphs.module b/paragraphs.module
index 47093b6..714cca1 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', TRUE);
 
 /**
  * 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,46 @@ 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][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][open_collapsible]"]' => array('checked' => TRUE),
+      ),
+    ),
+  );
+
   if (!count($bundles)) {
     $element['allowed_bundles_explain'] = array(
       '#type' => 'markup',
@@ -1154,11 +1200,34 @@ 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.
+  $expand_collapse = '';
+  if ($default_edit_mode == 'open' && !empty($instance['settings']['open_collapsible'])) {
+    $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();
@@ -1184,7 +1253,7 @@ function theme_paragraphs_field_multiple_value_form($variables) {
 
     $header = array(
       array(
-        'data' => '<label>' . t('!title !required', array('!title' => $element['#title'], '!required' => $required)) . '</label>',
+        'data' => '<label>' . t('!title !required !collapsible', array('!collapsible' => $expand_collapse, '!title' => $element['#title'], '!required' => $required)) . "</label>",
         'colspan' => 2,
         'class' => array('field-label'),
       ),
@@ -1198,7 +1267,7 @@ function theme_paragraphs_field_multiple_value_form($variables) {
       $delta_element = drupal_render($item['_weight']);
       $cells = array(
         array('data' => '', 'class' => array('field-multiple-drag')),
-        drupal_render($item),
+        array('data' => drupal_render($item), 'class' => array('paragraph-bundle-content')),
         array('data' => $delta_element, 'class' => array('delta-order')),
       );
       $rows[] = array(
@@ -1454,4 +1523,4 @@ function paragraphs_modules_uninstalled($modules) {
   if (in_array('entitycache', $modules)) {
     paragraphs_remove_entitycache_table();
   }
-}
\ No newline at end of file
+}
