diff --git a/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
old mode 100644
new mode 100755
index cfdb189..81baef3
--- a/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
+++ b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
@@ -742,30 +742,33 @@ class InlineParagraphsWidget extends WidgetBase {
       }
     }
 
+    $elements += array(
+        '#element_validate' => array(array($this, 'multipleElementValidate')),
+        '#required' => $this->fieldDefinition->isRequired(),
+        '#title' => $title,
+        '#field_name' => $field_name,
+        '#cardinality' => $cardinality,
+        '#max_delta' => $max-1,
+      );
+
     if ($real_item_count > 0) {
       $elements += array(
         '#theme' => 'field_multiple_value_form',
-        '#field_name' => $field_name,
-        '#cardinality' => $cardinality,
         '#cardinality_multiple' => $is_multiple,
-        '#required' => $this->fieldDefinition->isRequired(),
-        '#title' => $title,
         '#description' => $description,
-        '#max_delta' => $max-1,
       );
     }
     else {
+      $require_class = $this->fieldDefinition->isRequired() ? 'form-required' : '';
       $elements += [
         '#type' => 'container',
         '#theme_wrappers' => ['container'],
-        '#field_name' => $field_name,
-        '#cardinality' => $cardinality,
         '#cardinality_multiple' => TRUE,
-        '#max_delta' => $max-1,
         'title' => [
           '#type' => 'html_tag',
           '#tag' => 'strong',
           '#value' => $title,
+          '#attributes' => array('class' => $require_class),
         ],
         'text' => [
           '#type' => 'container',
@@ -1051,6 +1054,20 @@ class InlineParagraphsWidget extends WidgetBase {
   }
 
   /**
+   * Validate multiple element items.
+   */
+  public function multipleElementValidate($element, FormStateInterface $form_state, $form) {
+    $field_name = $this->fieldDefinition->getName();
+    $widget_state = static::getWidgetState($element['#field_parents'], $field_name, $form_state);
+
+    if ($element['#required'] && $widget_state['real_item_count'] < 1) {
+      $form_state->setError($element, t('@name field is required.', array('@name' => $element['#title'])));
+    }
+
+    static::setWidgetState($element['#field_parents'], $field_name, $form_state, $widget_state);
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function massageFormValues(array $values, array $form, FormStateInterface $form_state) {
diff --git a/src/Tests/ParagraphsAccessTest.php b/src/Tests/ParagraphsAccessTest.php
index 3a2a6d2..0a872b7 100644
--- a/src/Tests/ParagraphsAccessTest.php
+++ b/src/Tests/ParagraphsAccessTest.php
@@ -159,4 +159,39 @@ class ParagraphsAccessTest extends WebTestBase {
     $node = $this->getNodeByTitle('delete_permissions');
     $this->assertUrl('node/' . $node->id());
   }
+
+  /**
+   * Tests displaying error message on empty paragraph required field.
+   */
+  public function testEmptyRequiredField() {
+    $admin_user = $this->drupalCreateUser(array(
+      'administer node fields',
+      'administer paragraph form display',
+      'administer node form display',
+      'create paragraphed_content_demo content',
+      'edit any paragraphed_content_demo content',
+    ));
+    $this->drupalLogin($admin_user);
+
+    // Add required field to paragraphed content type.
+    $field_title = 'Content Test';
+    $this->drupalPostForm('admin/structure/types/manage/paragraphed_content_demo/fields/add-field', [
+      'new_storage_type' => 'field_ui:entity_reference:node',
+      'label' => $field_title,
+      'field_name' => 'content',
+    ], t('Save and continue'));
+    $this->drupalPostForm(NULL, [], t('Save field settings'));
+    $edit = [
+      'required' => TRUE,
+      'settings[handler_settings][target_bundles][paragraphed_content_demo]' => TRUE,
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Save settings');
+    $this->assertText('Saved ' . $field_title . ' configuration.');
+
+    // Create paragraph with empty required field.
+    $title = 'Empty';
+    $this->drupalGet('node/add/paragraphed_content_demo');
+    $this->drupalPostForm(NULL, ['title[0][value]' => $title], t('Save'));
+    $this->assertText($field_title . ' field is required');
+  }
 }
