diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/Validation/Constraint/CommentNameConstraintValidator.php b/core/modules/comment/lib/Drupal/comment/Plugin/Validation/Constraint/CommentNameConstraintValidator.php
index 0bb45da..e630962 100644
--- a/core/modules/comment/lib/Drupal/comment/Plugin/Validation/Constraint/CommentNameConstraintValidator.php
+++ b/core/modules/comment/lib/Drupal/comment/Plugin/Validation/Constraint/CommentNameConstraintValidator.php
@@ -18,12 +18,12 @@ class CommentNameConstraintValidator extends ConstraintValidator {
   /**
    * {@inheritdoc}
    */
-  public function validate($field_item, Constraint $constraint) {
-    $author_name = $field_item->value;
+  public function validate($field_item_list, Constraint $constraint) {
+    $author_name = $field_item_list->first()->value;
     if (isset($author_name) && $author_name !== '') {
       // Do not allow unauthenticated comment authors to use a name that is
       // taken by a registered user.
-      if ($field_item->getEntity()->getOwnerId() === 0) {
+      if ($field_item_list->getEntity()->getOwnerId() === 0) {
         // @todo Properly inject dependency https://drupal.org/node/2197029
         $users = \Drupal::entityManager()->getStorage('user')->loadByProperties(array('name' => $author_name));
         if (!empty($users)) {
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Validation/Constraint/TermParentConstraintValidator.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Validation/Constraint/TermParentConstraintValidator.php
index 4532190..f3cc1f6 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Validation/Constraint/TermParentConstraintValidator.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Validation/Constraint/TermParentConstraintValidator.php
@@ -18,12 +18,12 @@ class TermParentConstraintValidator extends ConstraintValidator {
   /**
    * {@inheritdoc}
    */
-  public function validate($field_item, Constraint $constraint) {
-    if ($field_item) {
-      $parent_term_id = $field_item->value;
+  public function validate($field_item_list, Constraint $constraint) {
+    if ($field_item_list) {
+      $parent_term_id = $field_item_list->first()->value;
       // If a non-0 parent term id is specified, ensure it corresponds to a real
       // term in the same vocabulary.
-      if ($parent_term_id && !\Drupal::entityManager()->getStorage('taxonomy_term')->loadByProperties(array('tid' => $parent_term_id, 'vid' => $field_item->getEntity()->vid->value))) {
+      if ($parent_term_id && !\Drupal::entityManager()->getStorage('taxonomy_term')->loadByProperties(array('tid' => $parent_term_id, 'vid' => $field_item_list->getEntity()->vid->value))) {
         $this->context->addViolation($constraint->message, array('%id' => $parent_term_id));
       }
     }
diff --git a/core/modules/user/lib/Drupal/user/Entity/User.php b/core/modules/user/lib/Drupal/user/Entity/User.php
index 3c13a94..cd11edb 100644
--- a/core/modules/user/lib/Drupal/user/Entity/User.php
+++ b/core/modules/user/lib/Drupal/user/Entity/User.php
@@ -473,7 +473,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setLabel(t('Name'))
       ->setDescription(t('The name of this user.'))
       ->setSetting('default_value', '')
-      ->setPropertyConstraints('value', array(
+      ->setConstraints(array(
         // No Length constraint here because the UserName constraint also covers
         // that.
         'UserName' => array(),
@@ -488,7 +488,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setLabel(t('Email'))
       ->setDescription(t('The email of this user.'))
       ->setSetting('default_value', '')
-      ->setPropertyConstraints('value', array('UserMailUnique' => array()));
+      ->setConstraints(array('UserMailUnique' => array()));
 
     // @todo Convert to a text field in https://drupal.org/node/1548204.
     $fields['signature'] = FieldDefinition::create('string')
diff --git a/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserMailUnique.php b/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserMailUnique.php
index e3b8b0b..8fdf56d 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserMailUnique.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserMailUnique.php
@@ -14,7 +14,8 @@
  *
  * @Plugin(
  *   id = "UserMailUnique",
- *   label = @Translation("User e-mail unique", context = "Validation")
+ *   label = @Translation("User e-mail unique", context = "Validation"),
+ *   type = { "email" }
  * )
  */
 class UserMailUnique extends Constraint {
diff --git a/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserNameConstraint.php b/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserNameConstraint.php
index 8aba0cf..9387a15 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserNameConstraint.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserNameConstraint.php
@@ -14,7 +14,8 @@
  *
  * @Plugin(
  *   id = "UserName",
- *   label = @Translation("User name", context = "Validation")
+ *   label = @Translation("User name", context = "Validation"),
+ *   type = { "string" }
  * )
  */
 class UserNameConstraint extends Constraint {
diff --git a/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserNameConstraintValidator.php b/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserNameConstraintValidator.php
index ffd4d82..2cb7b2d 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserNameConstraintValidator.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserNameConstraintValidator.php
@@ -18,11 +18,12 @@ class UserNameConstraintValidator extends ConstraintValidator {
   /**
    * {@inheritdoc}
    */
-  public function validate($name, Constraint $constraint) {
-    if (!$name) {
+  public function validate($field_item_list, Constraint $constraint) {
+    if (!isset($field_item_list) || !$field_item_list->value) {
       $this->context->addViolation($constraint->emptyMessage);
       return;
     }
+    $name = $field_item_list->first()->value;
     if (substr($name, 0, 1) == ' ') {
       $this->context->addViolation($constraint->spaceBeginMessage);
     }
diff --git a/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserNameUnique.php b/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserNameUnique.php
index d05d5a6..66f1a74 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserNameUnique.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserNameUnique.php
@@ -14,7 +14,8 @@
  *
  * @Plugin(
  *   id = "UserNameUnique",
- *   label = @Translation("User name unique", context = "Validation")
+ *   label = @Translation("User name unique", context = "Validation"),
+ *   type = { "string" }
  * )
  */
 class UserNameUnique extends Constraint {
diff --git a/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserUniqueValidator.php b/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserUniqueValidator.php
index f169cae..89a1273 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserUniqueValidator.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/Validation/Constraint/UserUniqueValidator.php
@@ -18,20 +18,22 @@ class UserUniqueValidator extends ConstraintValidator {
   /**
    * {@inheritdoc}
    */
-  public function validate($value, Constraint $constraint) {
-    $field = $this->context->getMetadata()->getTypedData()->getParent();
-    $uid = $field->getParent()->id();
+  public function validate($field_item_list, Constraint $constraint) {
+    if (!isset($field_item_list)) {
+      return;
+    }
+    $field_name = $field_item_list->getFieldDefinition()->getName();
 
     $value_taken = (bool) \Drupal::entityQuery('user')
       // The UID could be NULL, so we cast it to 0 in that case.
-      ->condition('uid', (int) $uid, '<>')
-      ->condition($field->getName(), $value)
+      ->condition('uid', (int) $field_item_list->getEntity()->id(), '<>')
+      ->condition($field_name, db_like($field_item_list->first()->value), 'LIKE')
       ->range(0, 1)
       ->count()
       ->execute();
 
     if ($value_taken) {
-      $this->context->addViolation($constraint->message, array("%value" => $value));
+      $this->context->addViolation($constraint->message, array("%value" => $field_item_list->value));
     }
   }
 }
diff --git a/core/modules/user/lib/Drupal/user/Tests/UserValidationTest.php b/core/modules/user/lib/Drupal/user/Tests/UserValidationTest.php
index 7beec6a..79312b3 100644
--- a/core/modules/user/lib/Drupal/user/Tests/UserValidationTest.php
+++ b/core/modules/user/lib/Drupal/user/Tests/UserValidationTest.php
@@ -76,16 +76,14 @@ function testValidation() {
     $user = entity_create('user', array('name' => 'test'));
     $violations = $user->validate();
     $this->assertEqual(count($violations), 0, 'No violations when validating a default user.');
-
     // Only test one example invalid name here, the rest is already covered in
     // the testUsernames() method in this class.
     $name = $this->randomName(61);
     $user->set('name', $name);
     $violations = $user->validate();
     $this->assertEqual(count($violations), 1, 'Violation found when name is too long.');
-    $this->assertEqual($violations[0]->getPropertyPath(), 'name.0.value');
+    $this->assertEqual($violations[0]->getPropertyPath(), 'name');
     $this->assertEqual($violations[0]->getMessage(), t('The username %name is too long: it must be %max characters or less.', array('%name' => $name, '%max' => 60)));
-
     // Create a second test user to provoke a name collision.
     $user2 = entity_create('user', array(
       'name' => 'existing',
@@ -95,7 +93,7 @@ function testValidation() {
     $user->set('name', 'existing');
     $violations = $user->validate();
     $this->assertEqual(count($violations), 1, 'Violation found on name collision.');
-    $this->assertEqual($violations[0]->getPropertyPath(), 'name.0.value');
+    $this->assertEqual($violations[0]->getPropertyPath(), 'name');
     $this->assertEqual($violations[0]->getMessage(), t('The name %name is already taken.', array('%name' => 'existing')));
 
     // Make the name valid.
@@ -106,7 +104,6 @@ function testValidation() {
     $this->assertEqual(count($violations), 1, 'Violation found when email is invalid');
     $this->assertEqual($violations[0]->getPropertyPath(), 'mail.0.value');
     $this->assertEqual($violations[0]->getMessage(), t('This value is not a valid email address.'));
-
     $mail = $this->randomName(EMAIL_MAX_LENGTH - 11) . '@example.com';
     $user->set('mail', $mail);
     $violations = $user->validate();
@@ -120,11 +117,11 @@ function testValidation() {
     $this->assertEqual($violations[1]->getPropertyPath(), 'mail.0.value');
     $this->assertEqual($violations[1]->getMessage(), t('This value is not a valid email address.'));
 
-    // Provoke a e-mail collision with an exsiting user.
+    // Provoke a e-mail collision with an existing user.
     $user->set('mail', 'existing@example.com');
     $violations = $user->validate();
     $this->assertEqual(count($violations), 1, 'Violation found when e-mail already exists.');
-    $this->assertEqual($violations[0]->getPropertyPath(), 'mail.0.value');
+    $this->assertEqual($violations[0]->getPropertyPath(), 'mail');
     $this->assertEqual($violations[0]->getMessage(), t('The e-mail address %mail is already taken.', array('%mail' => 'existing@example.com')));
     $user->set('mail', NULL);
 
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index edecd89..df5b026 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -11,7 +11,7 @@
 use Drupal\user\UserInterface;
 use Drupal\user\RoleInterface;
 use Drupal\Core\Template\Attribute;
-use Drupal\Core\TypedData\DataDefinition;
+use Drupal\Core\Field\FieldDefinition;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 use Drupal\menu_link\Entity\MenuLink;
@@ -340,7 +340,7 @@ function user_load_by_name($name) {
  *
  */
 function user_validate_name($name) {
-  $definition = DataDefinition::create('string')
+  $definition = FieldDefinition::create('string')
     ->setConstraints(array('UserName' => array()));
   $data = \Drupal::typedDataManager()->create($definition);
   $data->setValue($name);
