diff --git a/paragraphs.css b/paragraphs.css
new file mode 100644
index 0000000..666a799
--- /dev/null
+++ b/paragraphs.css
@@ -0,0 +1,7 @@
+/**
+ * Admin CSS styles for the paragraphs module.
+ */
+
+td.paragraph-bundle-content {
+  cursor: pointer;
+}
diff --git a/paragraphs.field_widget.inc b/paragraphs.field_widget.inc
index 921843c..3ee1845 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;
 }
 
diff --git a/paragraphs.js b/paragraphs.js
index 33c0c33..98116a1 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(:first), fieldset');
+    }
+    else {
+      elements = $item.children('div:not(:first), 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,57 @@
     }
   };
 
-})(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', context).once("paragraphs").click(function(event) {
+        // Prevent the default click event.
+        event.preventDefault();
+        var action = $(this).hasClass('expanded') ? 'collapse' : 'expand';
+        showhideParagraph(this, 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('collapse')) {
+          showhideParagraphs(this, 'collapse');
+          $.each($triggers, function(index, $trigger) {
+            if ($trigger.length) {
+              $trigger.removeClass('collapse').addClass('expand');
+              $trigger.text(Drupal.t('Collapse All'));
+            }
+          });
+        }
+        else {
+          showhideParagraphs(this, 'expand');
+          $.each($triggers, function(index, $trigger) {
+            if ($trigger.length) {
+              $trigger.removeClass('expand').addClass('collapse');
+              $trigger.text(Drupal.t('Expand All'));
+            }
+          });
+        }
+      });
+    }
+  };
+
+})(jQuery, Drupal);
diff --git a/paragraphs.module b/paragraphs.module
index 47093b6..f6f9d89 100644
--- a/paragraphs.module
+++ b/paragraphs.module
@@ -1156,8 +1156,13 @@ function theme_paragraphs_field_multiple_value_form($variables) {
   }
 
   $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) : '';
+  $expand_collapse = '';
+  if ($default_edit_mode == 'open') {
+    $expand_collapse = '<span style="float: right" class="paragraphs-collapsible collapse">' . l('Collapse All', '#', array('external' => TRUE)) . '</span>';
+  }
 
   // Sort items according to '_weight' (needed when the form comes back after
   // preview or failed validation)
@@ -1184,7 +1189,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 +1203,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 +1459,4 @@ function paragraphs_modules_uninstalled($modules) {
   if (in_array('entitycache', $modules)) {
     paragraphs_remove_entitycache_table();
   }
-}
\ No newline at end of file
+}
