diff --git a/src/Entity/Paragraph.php b/src/Entity/Paragraph.php
index d44bd63..6718733 100644
--- a/src/Entity/Paragraph.php
+++ b/src/Entity/Paragraph.php
@@ -87,6 +87,13 @@ class Paragraph extends ContentEntityBase implements ParagraphInterface, EntityN
   protected $unserializedBehaviorSettings;
 
   /**
+   * Number of summaries.
+   *
+   * @var int
+   */
+  protected $summaryCount;
+
+  /**
    * {@inheritdoc}
    */
   public function getParentEntity() {
@@ -434,24 +441,35 @@ class Paragraph extends ContentEntityBase implements ParagraphInterface, EntityN
   /**
    * {@inheritdoc}
    */
-  public function getSummary() {
+  public function getSummary($options = []) {
+    $allowed_bundles = isset($options['allowed_bundles']) ? $options['allowed_bundles'] : NULL;
+    $show_behavior_summary = isset ($options['show_behavior_summary']) ? $options['show_behavior_summary'] : TRUE;
     $summary = [];
+    $this->summaryCount = 0;
+
+    if ($this->bundle() !== NULL && (is_array($allowed_bundles) && !in_array($this->bundle(), $allowed_bundles))) {
+      return '';
+    }
+
     foreach ($this->getFieldDefinitions() as $field_name => $field_definition) {
       if ($field_definition->getType() == 'image' || $field_definition->getType() == 'file') {
         $file_summary = $this->getFileSummary($field_name);
         if ($file_summary != '') {
+          $this->summaryCount++;
           $summary[] = $file_summary;
         }
       }
 
       $text_summary = $this->getTextSummary($field_name, $field_definition);
       if ($text_summary != '') {
+        $this->summaryCount++;
         $summary[] = $text_summary;
       }
 
       if ($field_definition->getType() == 'entity_reference_revisions') {
-        $nested_summary = $this->getNestedSummary($field_name);
+        $nested_summary = $this->getNestedSummary($field_name, $options);
         if ($nested_summary != '') {
+          $this->summaryCount++;
           $summary[] = $nested_summary;
         }
       }
@@ -459,6 +477,7 @@ class Paragraph extends ContentEntityBase implements ParagraphInterface, EntityN
       if ($field_type = $field_definition->getType() == 'entity_reference') {
         if (!in_array($field_name, ['type', 'uid', 'revision_uid'])) {
           if ($this->get($field_name)->entity) {
+            $this->summaryCount++;
             $summary[] = $this->get($field_name)->entity->label();
           }
         }
@@ -466,10 +485,12 @@ class Paragraph extends ContentEntityBase implements ParagraphInterface, EntityN
 
     }
 
-    $paragraphs_type = $this->getParagraphType();
-    foreach ($paragraphs_type->getEnabledBehaviorPlugins() as $plugin_id => $plugin) {
-      if ($plugin_summary = $plugin->settingsSummary($this)) {
-        $summary = array_merge($summary, $plugin_summary);
+    if ($show_behavior_summary) {
+      $paragraphs_type = $this->getParagraphType();
+      foreach ($paragraphs_type->getEnabledBehaviorPlugins() as $plugin_id => $plugin) {
+        if ($plugin_summary = $plugin->settingsSummary($this)) {
+          $summary = array_merge($summary, $plugin_summary);
+        }
       }
     }
 
@@ -478,6 +499,20 @@ class Paragraph extends ContentEntityBase implements ParagraphInterface, EntityN
   }
 
   /**
+   * Gets the number of summaries.
+   *
+   * @return int
+   *   The number of summaries.
+   */
+  protected function getSummaryCount() {
+    if ($this->summaryCount !== NULL) {
+      return $this->summaryCount;
+    }
+
+    return 0;
+  }
+
+  /**
    * Returns summary for file paragraph.
    *
    * @param string $field_name
@@ -521,20 +556,56 @@ class Paragraph extends ContentEntityBase implements ParagraphInterface, EntityN
    *
    * @param string $field_name
    *   Field definition id for paragraph.
+   * @param array $options
+   *   Array of paragraph options.
    *
    * @return string
    *   Short summary for nested paragraphs type.
    */
-  protected function getNestedSummary($field_name) {
-    $summary = '';
-    if ($this->get($field_name)->entity) {
-      $paragraph_entity = $this->get($field_name)->entity;
-      if ($paragraph_entity instanceof ParagraphInterface) {
-        $summary = $paragraph_entity->getSummary();
+  protected function getNestedSummary($field_name, $options) {
+    $summary = [];
+    $summary_count = 0;
+    foreach ($this->{$field_name}->getValue() as $value) {
+      if (isset($value['entity'])) {
+        $paragraph_entity = $value['entity'];
+        if ($paragraph_entity instanceof ParagraphInterface) {
+          $summary[] = $paragraph_entity->getSummary($options);
+          $summary_count += $paragraph_entity->getSummaryCount();
+        }
+      }
+
+      // If we start with the closed summary the $value['entity'] is not
+      // calculated so we load the entity ourselves.
+      elseif (isset($value['target_id']) && isset($value['target_revision_id'])) {
+        $paragraph_entity = $this->entityTypeManager()
+          ->getStorage('paragraph')
+          ->loadRevision($value['target_revision_id']);
+        if ($paragraph_entity) {
+          $summary[] = $paragraph_entity->getSummary($options);
+          $summary_count += $paragraph_entity->getSummaryCount();
+        }
       }
     }
 
-    return trim($summary);
+    // Checks if it is an empty nested paragraph.
+    if ($summary_count === 0) {
+      $paragraph_summary = 'Empty paragraph';
+      $paragraph_summary .= !empty($summary) ? ' | ' . implode(', ', $summary) : '';
+      return t('@summary', ['@summary' => $paragraph_summary]);
+    }
+
+    if (isset($options['count_limit']) && $summary_count > $options['count_limit']) {
+      return t('More then @count_limit children @summary', [
+        '@count_limit' => $options['count_limit'],
+        '@summary' => implode(', ', array_slice($summary, 0, $options['count_limit'])),
+      ]);
+    }
+
+    return \Drupal::translation()
+      ->formatPlural($summary_count, '1 child | @summary', '@count children | @summary', [
+        '@count' => $summary_count,
+        '@summary' => implode(', ', $summary),
+      ]);
   }
 
   /**
diff --git a/src/ParagraphInterface.php b/src/ParagraphInterface.php
index de534b0..937df01 100644
--- a/src/ParagraphInterface.php
+++ b/src/ParagraphInterface.php
@@ -24,9 +24,12 @@ interface ParagraphInterface extends ContentEntityInterface, EntityOwnerInterfac
   /**
    * Returns short summary for paragraph.
    *
+   * @param array|null $options
+   *   Array of paragraph options.
+   *
    * @return string
    *   The text without tags.
    */
-  public function getSummary();
+  public function getSummary($options = []);
 
 }
diff --git a/src/Tests/Experimental/ParagraphsExperimentalBehaviorsTest.php b/src/Tests/Experimental/ParagraphsExperimentalBehaviorsTest.php
index 639202a..4242de1 100644
--- a/src/Tests/Experimental/ParagraphsExperimentalBehaviorsTest.php
+++ b/src/Tests/Experimental/ParagraphsExperimentalBehaviorsTest.php
@@ -190,7 +190,19 @@ class ParagraphsExperimentalBehaviorsTest extends ParagraphsExperimentalTestBase
     // Assert that the summary includes the text of the behavior plugins.
     $this->clickLink('Edit');
     $this->assertRaw('class="paragraphs-collapsed-description">first_paragraph, Text color: blue, Bold: Yes');
-    $this->assertRaw('class="paragraphs-collapsed-description">nested_paragraph, Text color: blue, Bold: No, Bold: Yes');
+    $this->assertRaw('class="paragraphs-collapsed-description">1 child | nested_paragraph, Text color: blue, Bold: No, Bold: Yes');
+
+    // Add an empty nested paragraph.
+    $this->drupalPostAjaxForm('node/add/paragraphed_test', [], 'field_paragraphs_nested_paragraph_add_more');
+    $edit = [
+      'title[0][value]' => 'collapsed_test',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save and publish'));
+
+    // Check an empty nested paragraph summary.
+    $this->clickLink('Edit');
+    $this->assertRaw('class="paragraphs-collapsed-description">Empty paragraph');
+
   }
 
   /**
