diff --git a/inline_entity_form.module b/inline_entity_form.module
index be41f13..d3f1af4 100644
--- a/inline_entity_form.module
+++ b/inline_entity_form.module
@@ -730,6 +730,13 @@ function inline_entity_form_field_widget_form(&$form, &$form_state, $field, $ins
     }
   }
 
+  // Required mark & validation.
+  // Drupal doesn't have required marker for fieldset.
+  if ($element['#required']) {
+    $element['#title'] .= ' ' . theme('form_required_marker', array('element' => $element));
+    $element['#element_validate'][] = 'inline_entity_form_required_field';
+  }
+
   return $element;
 }
 
@@ -1223,6 +1230,38 @@ function inline_entity_form_save_row_weights($element, &$form_state, $form) {
 }
 
 /**
+ * IEF widget #element_validate callback: Required field validation.
+ */
+function inline_entity_form_required_field($element, &$form_state, $form) {
+  // Only react on the submission of the parent form.
+  if (empty($form_state['triggering_element']['#ief_submit_all'])) {
+    return;
+  }
+
+  $entities_data = drupal_array_get_nested_value($form_state['values'], $element['#parents']);
+  $ief_validated = TRUE;
+  // Validate against IEF open form.
+  if (isset($entities_data['form'])) {
+    $form_errors = form_get_errors();
+    if (!empty($form_errors)) {
+      $reg_exp = "/^" . implode('\]\[', $element['#parents']) . "(.*?)/";
+      $ief_errors = preg_grep($reg_exp, array_keys($form_errors));
+      if (!empty($ief_errors)) {
+        $ief_validated = FALSE;
+      }
+    }
+  }
+  // Empty IEF.
+  else {
+    $ief_validated = FALSE;
+  }
+  if (!element_children($element['entities']) && !$ief_validated) {
+    $instance = $form_state['inline_entity_form'][$element['#ief_id']]['instance'];
+    form_error($element, t('!name (inline reference) field is required.', array('!name' => $instance['label'])));
+  }
+}
+
+/**
  * Implements hook_field_attach_submit().
  */
 function inline_entity_form_field_attach_submit($parent_entity_type, $parent_entity, $form, &$form_state) {
