diff --git a/sites/all/modules/contrib/paragraphs/paragraphs.field_widget.inc b/sites/all/modules/contrib/paragraphs/paragraphs.field_widget.inc
index c110062..0376dca 100644
--- a/sites/all/modules/contrib/paragraphs/paragraphs.field_widget.inc
+++ b/sites/all/modules/contrib/paragraphs/paragraphs.field_widget.inc
@@ -144,6 +144,7 @@ function paragraphs_field_multiple_value_form($field, $instance, $langcode, $ite
       '#suffix' => '</div>',
       '#max_delta' => $max,
       '#instance' => $instance,
+      '#element_validate' => array('_paragraphs_multiple_field_validate'),
     );

     // Add 'add more' button, if not working with a programmed form.
@@ -1092,3 +1093,57 @@ function paragraphs_restore_submit($form, &$form_state) {

   $form_state['rebuild'] = TRUE;
 }
+
+/**
+ * Form Validation for submitting a node with required paragraph fields.
+ */
+function _paragraphs_multiple_field_validate($elements, &$form_state) {
+  // Check child fields of required paragraphs.
+  if (!empty($elements['#required'])) {
+    $field_values = array();
+    $field_state = field_form_get_state($elements['#field_parents'], $elements['#field_name'], $elements['#language'], $form_state);
+    $field_info = field_info_field($elements['#field_name']);
+
+    if (empty($elements['#parents'])) {
+      // Try top level structure if there are no parents.
+      if (!empty($form_state['values'][$elements['#field_name']][LANGUAGE_NONE])) {
+        $field_values = $form_state['values'][$elements['#field_name']][LANGUAGE_NONE];
+      }
+    }
+    else {
+      // Extract field values.
+      $key_exists = NULL;
+      $field_values_found = drupal_array_get_nested_value($form_state['values'], $elements['#parents'], $key_exists);
+      if ($key_exists) {
+        $field_values = $field_values_found;
+      }
+    }
+
+    if ($field_values) {
+      foreach (array_keys($field_values) as $item_key) {
+        if (!is_numeric($item_key)) {
+          // Remove non field item deltas.
+          unset($field_values[$item_key]);
+        }
+        elseif (isset($field_state['entity'][$item_key])) {
+          // Handle field item entity forms that build new objects in the field
+          // state. Examples: field_collection_item, paragraphs_item.
+          // If this is not set, then the field_is_empty check in
+          // _field_filter_items() fails.
+          $field_values[$item_key] = array(
+            'entity' => $field_state['entity'][$item_key],
+          );
+        }
+      }
+
+      // Get non-empty items.
+      $field_values = _field_filter_items($field_info, $field_values);
+    }
+
+    if (count($field_values) < 1) {
+      form_error($elements, t('The "!name" field is required', array(
+        '!name' => t($elements['#title']),
+      )));
+    }
+  }
+}
diff --git a/sites/all/modules/contrib/paragraphs/paragraphs.module b/sites/all/modules/contrib/paragraphs/paragraphs.module
index 0371aec..e86839c 100644
--- a/sites/all/modules/contrib/paragraphs/paragraphs.module
+++ b/sites/all/modules/contrib/paragraphs/paragraphs.module
@@ -852,7 +852,7 @@ function paragraphs_field_is_empty($item, $field) {
     return FALSE;
   }
   elseif (isset($item['entity'])) {
-    return FALSE;
+    return paragraphs_item_is_empty($item['entity']);
   }
   return TRUE;
 }
diff --git a/sites/all/modules/contrib/paragraphs/paragraphs.module b/sites/all/modules/contrib/paragraphs/paragraphs.module
index e86839c..47b4b1a 100644
--- a/sites/all/modules/contrib/paragraphs/paragraphs.module
+++ b/sites/all/modules/contrib/paragraphs/paragraphs.module
@@ -845,15 +845,22 @@ function paragraphs_field_item_to_ids($items) {
  */
 function paragraphs_field_is_empty($item, $field) {
   // Item is empty when we removed it.
+  if (isset($item['entity'])) {
+    $instances = field_info_instances('paragraphs_item', $item['entity']->bundle);
+  }
   if (isset($item['entity']) && ((isset($item['entity']->removed) && $item['entity']->removed) || (isset($item['entity']->confirmed_removed) && $item['entity']->confirmed_removed))) {
     return TRUE;
   }
   if (!empty($item['value'])) {
     return FALSE;
   }
-  elseif (isset($item['entity'])) {
+  elseif (isset($item['entity']) &&  !empty($instances)) {
     return paragraphs_item_is_empty($item['entity']);
   }
+  elseif (isset($item['entity']) &&  empty($instances)) {
+    //because of hook_entity_view_alter, the content comes from a view but not stored in a field
+    return FALSE;
+  }
   return TRUE;
 }
