diff --git a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/EntityChangedConstraintValidator.php b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/EntityChangedConstraintValidator.php
index 9dd3628..6d4d4db 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/EntityChangedConstraintValidator.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/Validation/Constraint/EntityChangedConstraintValidator.php
@@ -22,11 +22,10 @@ class EntityChangedConstraintValidator extends ConstraintValidator {
   public function validate($value, Constraint $constraint) {
     if (isset($value)) {
       /** @var $entity \Drupal\Core\Entity\EntityInterface */
-      $entity = $this->context->getMetadata()->getTypedData()->getEntity();
+      $entity = $value->getEntity();
       if (!$entity->isNew()) {
         $saved_entity = \Drupal::entityManager()->getStorage($entity->getEntityTypeId())->loadUnchanged($entity->id());
-
-        if ($saved_entity && ($saved_entity instanceof EntityChangedInterface) && ($saved_entity->getChangedTime() > $value)) {
+        if ($saved_entity && ($saved_entity instanceof EntityChangedInterface) && ($saved_entity->getChangedTime() > $entity->getChangedTime())) {
           $this->context->addViolation($constraint->message);
         }
       }
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/ChangedItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/ChangedItem.php
index b661b3e..f4b5082 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/ChangedItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/ChangedItem.php
@@ -16,7 +16,7 @@
  *   description = @Translation("An entity field containing a UNIX timestamp of when the entity has been last updated."),
  *   no_ui = TRUE,
  *   constraints = {
- *     "ComplexData" = {"value" = {"EntityChanged" = {}}}
+ *     "EntityChanged" = {}
  *   }
  * )
  */
diff --git a/core/modules/node/src/Tests/NodeValidationTest.php b/core/modules/node/src/Tests/NodeValidationTest.php
index 3c5e2dd..7ed35bd 100644
--- a/core/modules/node/src/Tests/NodeValidationTest.php
+++ b/core/modules/node/src/Tests/NodeValidationTest.php
@@ -64,7 +64,7 @@ public function testValidation() {
     $node->set('changed', 433918800);
     $violations = $node->validate();
     $this->assertEqual(count($violations), 1, 'Violation found when changed date is before the last changed date.');
-    $this->assertEqual($violations[0]->getPropertyPath(), 'changed.0.value');
+    $this->assertEqual($violations[0]->getPropertyPath(), 'changed.0');
     $this->assertEqual($violations[0]->getMessage(), 'The content has either been modified by another user, or you have already submitted modifications. As a result, your changes cannot be saved.');
   }
 }
diff --git a/core/modules/system/src/Tests/Entity/EntityChangedConstraintValidatorTest.php b/core/modules/system/src/Tests/Entity/EntityChangedConstraintValidatorTest.php
new file mode 100644
index 0000000..5c7d8dc
--- /dev/null
+++ b/core/modules/system/src/Tests/Entity/EntityChangedConstraintValidatorTest.php
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Tests\Entity\EntityChangedConstraintValidatorTest.
+ */
+
+namespace Drupal\system\Tests\Entity;
+
+use Drupal\system\Tests\Entity\EntityUnitTestBase;
+use Drupal\system\Tests\TypedData;
+use Drupal\Core\TypedData\DataDefinition;
+use Drupal\entity_test\Entity\EntityTestChanged;
+
+/**
+ * Tests validation constraints for EntityChangedConstraintValidator.
+ *
+ * @group Validation
+ */
+class EntityChangedConstraintValidatorTest extends EntityUnitTestBase {
+
+  /**
+   * The typed data manager to use.
+   *
+   * @var \Drupal\Core\TypedData\TypedDataManager
+   */
+  protected $typedData;
+
+  public function setUp() {
+    parent::setUp();
+    $this->typedData = $this->container->get('typed_data_manager');
+  }
+
+  /**
+   * Tests the EntityChangedConstraintValidator.
+   */
+  public function testValidation() {
+    // Test the validation.
+    $account = $this->createUser();
+    $entity_test = entity_create('entity_test', array('user_id' => $account->id()));
+
+    $entity_test->save();
+    $violations = $entity_test->changed->validate();
+    $this->assertEqual($violations->count(), 0, 'Validation passed for correct value.');
+    // Set a changed date in the future.
+    $entity_test->set('changed', REQUEST_TIME + 100000);
+    // Run validation on the changed field.
+    $violations = $entity_test->changed->validate();
+    $this->assertEqual($violations->count(), 0, 'Validation passed for correct value.');
+
+    // Test the validation when an invalid value is passed.
+    // Set a changed date in the past.
+    $entity_test->set('changed', 433918800);
+    // Run validation on the changed field.
+    $violations = $entity_test->changed->validate();
+    $this->assertEqual($violations->count(), 1, 'Validation failed for incorrect value.');
+
+    // Make sure the information provided by a violation is correct.
+    $violation = $violations[0];
+    // The property path is 0 as the validator is being run on the field.
+    $this->assertEqual($violation->getPropertyPath(), '0');
+    $this->assertEqual($violation->getMessage(), t('The content has either been modified by another user, or you have already submitted modifications. As a result, your changes cannot be saved.'));
+  }
+}
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
index b4cb26e..f988c7c 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
@@ -13,6 +13,7 @@
 use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\user\EntityOwnerInterface;
 use Drupal\user\UserInterface;
+use Drupal\Core\Entity\EntityChangedInterface;
 
 /**
  * Defines the test entity class.
@@ -48,7 +49,7 @@
  *   field_ui_base_route = "entity.entity_test.admin_form",
  * )
  */
-class EntityTest extends ContentEntityBase implements EntityOwnerInterface {
+class EntityTest extends ContentEntityBase implements EntityOwnerInterface, EntityChangedInterface {
 
   /**
    * {@inheritdoc}
@@ -120,6 +121,11 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
         ),
       ));
 
+    $fields['changed'] = BaseFieldDefinition::create('changed')
+      ->setLabel(t('Changed'))
+      ->setDescription(t('The time that the entity was last edited.'))
+      ->setRevisionable(TRUE)
+      ->setTranslatable(TRUE);
     return $fields;
   }
 
@@ -175,4 +181,10 @@ public function getName() {
     return $this->get('name')->value;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getChangedTime() {
+    return $this->get('changed')->value;
+  }
 }
