diff --git a/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php b/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php
index 1552700..09e1af1 100644
--- a/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php
+++ b/core/modules/image/src/Plugin/Field/FieldWidget/ImageWidget.php
@@ -206,6 +206,7 @@ public static function process($element, FormStateInterface $form_state, $form)
       '#maxlength' => 512,
       '#weight' => -2,
       '#access' => (bool) $item['fids'] && $element['#alt_field'],
+      '#required' => $element['#alt_field_required'],
       '#element_validate' => $element['#alt_field_required'] == 1 ? array(array(get_called_class(), 'validateRequiredFields')) : array(),
     );
     $element['title'] = array(
@@ -216,6 +217,7 @@ public static function process($element, FormStateInterface $form_state, $form)
       '#maxlength' => 1024,
       '#weight' => -1,
       '#access' => (bool) $item['fids'] && $element['#title_field'],
+      '#required' => $element['#title_field_required'],
       '#element_validate' => $element['#title_field_required'] == 1 ? array(array(get_called_class(), 'validateRequiredFields')) : array(),
     );
 
@@ -241,11 +243,9 @@ public static function validateRequiredFields($element, FormStateInterface $form
       if (!array_key_exists($field, $image_field)) {
         return;
       }
-      // Check if field is left empty.
-      elseif (empty($image_field[$field])) {
-        $form_state->setError($element, t('The field !title is required', array('!title' => $element['#title'])));
-        return;
-      }
+    }
+    else {
+      $form_state['limit_validation_errors'] = array();
     }
   }
 
diff --git a/core/modules/image/src/Tests/ImageFieldValidateTest.php b/core/modules/image/src/Tests/ImageFieldValidateTest.php
index 22daeb3..7c0f45b 100644
--- a/core/modules/image/src/Tests/ImageFieldValidateTest.php
+++ b/core/modules/image/src/Tests/ImageFieldValidateTest.php
@@ -59,13 +59,50 @@ function testRequiredAttributes() {
       'alt_field_required' => 1,
       'title_field' => 1,
       'title_field_required' => 1,
+      'required' => 1,
     );
-    $this->createImageField($field_name, 'article', array(), $instance_settings);
+    $instance = $this->createImageField($field_name, 'article', array(), $instance_settings);
     $images = $this->drupalGetTestFiles('image');
     // Let's just use the first image.
     $image = $images[0];
+
     $this->uploadNodeImage($image, $field_name, 'article');
-    $this->assertText(t('The field Alternate text is required'), 'Node save failed when alt text required was set and alt text was left empty.');
-    $this->assertText(t('The field Title is required'), 'Node save failed when title text required was set and title text was left empty.');
+
+    // Look for form-required for the alt text.
+    $elements = $this->xpath('//label[@for="edit-' . $field_name . '-0-alt" and @class="form-required"]/following-sibling::input[@id="edit-' . $field_name . '-0-alt"]');
+
+    $this->assertTrue(isset($elements[0]),'Required marker is shown for the required alt text.');
+
+    $elements = $this->xpath('//label[@for="edit-' . $field_name . '-0-title" and @class="form-required"]/following-sibling::input[@id="edit-' . $field_name . '-0-title"]');
+
+    $this->assertTrue(isset($elements[0]), 'Required marker is shown for the required title text.');
+
+    $this->assertText(t('Alternate text field is required.'));
+    $this->assertText(t('Title field is required.'));
+
+    $instance->settings['alt_field_required'] = 0;
+    $instance->settings['title_field_required'] = 0;
+    $instance->save();
+
+    $edit = array(
+      'title[0][value]' => $this->randomMachineName(),
+    );
+    $this->drupalPostForm('node/add/article', $edit, t('Save and publish'));
+
+    $this->assertNoText(t('Alternate text field is required.'));
+    $this->assertNoText(t('Title field is required.'));
+
+    $instance->settings['required'] = 0;
+    $instance->settings['alt_field_required'] = 1;
+    $instance->settings['title_field_required'] = 1;
+    $instance->save();
+
+    $edit = array(
+      'title[0][value]' => $this->randomMachineName(),
+    );
+    $this->drupalPostForm('node/add/article', $edit, t('Save and publish'));
+
+    $this->assertNoText(t('Alternate text field is required.'));
+    $this->assertNoText(t('Title field is required.'));
   }
 }
