diff --git a/core/modules/migrate_drupal/tests/fixtures/drupal7.php b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
index 98e5638..67ff7e7 100644
--- a/core/modules/migrate_drupal/tests/fixtures/drupal7.php
+++ b/core/modules/migrate_drupal/tests/fixtures/drupal7.php
@@ -4404,6 +4404,18 @@
   'field_file_display' => '1',
   'field_file_description' => 'file desc',
 ))
+->values(array(
+  'entity_type' => 'user',
+  'bundle' => 'user',
+  'deleted' => '0',
+  'entity_id' => '2',
+  'revision_id' => '2',
+  'language' => 'und',
+  'delta' => '0',
+  'field_file_fid' => '2',
+  'field_file_display' => '1',
+  'field_file_description' => 'file desc',
+))
 ->execute();
 
 $connection->schema()->createTable('field_data_field_float', array(
@@ -6242,6 +6254,18 @@
   'field_file_display' => '1',
   'field_file_description' => 'file desc',
 ))
+->values(array(
+  'entity_type' => 'user',
+  'bundle' => 'user',
+  'deleted' => '0',
+  'entity_id' => '2',
+  'revision_id' => '2',
+  'language' => 'und',
+  'delta' => '0',
+  'field_file_fid' => '2',
+  'field_file_display' => '1',
+  'field_file_description' => 'file desc',
+))
 ->execute();
 
 $connection->schema()->createTable('field_revision_field_float', array(
@@ -7521,6 +7545,16 @@
   'status' => '1',
   'timestamp' => '1421727515',
 ))
+->values(array(
+  'fid' => '2',
+  'uid' => '1',
+  'filename' => 'ds9.txt',
+  'uri' => 'public://ds9.txt',
+  'filemime' => 'text/plain',
+  'filesize' => '4720',
+  'status' => '1',
+  'timestamp' => '1421727516',
+))
 ->execute();
 
 $connection->schema()->createTable('file_usage', array(
@@ -7589,6 +7623,13 @@
   'id' => '1',
   'count' => '1',
 ))
+->values(array(
+  'fid' => '2',
+  'module' => 'file',
+  'type' => 'user',
+  'id' => '2',
+  'count' => '1',
+))
 ->execute();
 
 $connection->schema()->createTable('filter', array(
diff --git a/core/modules/migrate_drupal_ui/src/Tests/d7/files/sites/default/files/ds9.txt b/core/modules/migrate_drupal_ui/src/Tests/d7/files/sites/default/files/ds9.txt
new file mode 100644
index 0000000..85745e9
--- /dev/null
+++ b/core/modules/migrate_drupal_ui/src/Tests/d7/files/sites/default/files/ds9.txt
@@ -0,0 +1,75 @@
+                __                ___               ___
+              ,' ,'              |   |              `. `.
+            ,' ,'                |===|                `. `.
+           / //                  |___|                  \\ \
+          / //                   |___|                   \\ \
+         ////                    |___|                    \\\\
+        /  /                    ||   ||                    \  \
+       /  /                     ||   ||                     \  \
+      /| |                      ||   ||                      | |\
+      || |                     | : o : |                     | ||
+     |  \|                     | .===. |                     |/  |
+     |  |\                    /| (___) |\                    /|  |
+    |__||.\         .-.      // /,_._,\ \\      .-.         /.||__|
+    |__||_.\        `-.\    //_ [:(|):] _\\    /.-'        /._||__|
+ __/|  ||___`._____ ___\\__/___/_ ||| _\___\__//___ _____.'___||_ |\__
+/___//__________/.-/_____________|.-.|_____________\-.\__________\\___\
+\___\\__\\\_____\`-\__\\\\__\____|_-_|____/_//_____/-'/__//______//__//
+   \|__||__..'         //  \ _ \__|||__/ _ /  \\         `..__||__|/
+    |__||_./        .-'/    \\   |(|)|   //    \`-.        \..||__|
+    |  || /         `-'      \\   \'/   //      `-'         \ ||  |
+     |  |/                    \| :(-): |/                    \|  |
+     |  /|                     | : o : |                     |\  |
+      || |                     | |___| |                     | ||
+      \| |                      ||   ||                      | |/
+       \  \                     ||   ||                     /  /
+        \  \                    ||___||                    /  /
+         \\\\                    |___|                    ////
+          \ \\                   |___|                   // /
+           \ \\                  |   |                  // /
+            `. `.                |===|                ,' ,'
+              `._`.              |___|              ,'_,'
+
+
+                                _     _
+                       _____---' \_n_/ `---_____
+                  _   /  ...  -----------  ...  \   _
+                 ( )-' .  '::.\__  V  __/.::'  . `-( )
+             _  .-'  ':::.  ____ \   / ____  .:::'  `-.  _
+          ,-'.`'      __.--'    \ | | /    `--.__      `'.`-.
+         / ''::..     \          || ||          /     ..::'' \
+        /  .....  ,'\,'          ||_||          `./`.  .....  \
+       / :::::' ,'               |   |               `. '::::: \
+       | '::: ,'                 |   |                 `. :::' |
+      _/  :: /                   |___|                   \ ::  \_
+     (/     /                 ,-'     `-.                 \     \)
+    _/      `.             ,-' ooo    oo `-.             ,'      \_
+   |      /`./          ,-'\               /`-.          \.'\      |
+  |  .:  /             /  \ \_ __.---.__ _/ /  \             \  :.  |
+ .' :;: |           _ / o  \[ '  \   /  ` ]/    \ _           | ::: `.
+ | ':: |           ( `-.   /      | |      \   ,-' )           | ::' |
+ |: ': |            `-./  /       ___       \  \,-'            | :' :|
+.':: ' |           |     / `-. .-' . `-. .-' \   o |           | ' ::`.
+| ::. |           | o  ,| `-. / \`_|_'/ \ .-' |.  o |           | .:: |
+ \    |_          |____|     | ` /   \ ' |     |____|          _|    /
+ (|    _]         ]____[     |- ( (O) ) -|     ]____[         [_    |)
+ /.:  |           |    |     | . \_ _/ . |     |    |           |  :.\
+| :'  |           | o  `|-,-' \ /..|..\ / `-.-|'  o |           |. ': |
+`.  :: |           | o   \ .-' `-.___.-' `-. /   o |           | ::  .'
+ | .:: |          _.\     \|      | |      \/     /._          | ::. |
+ |  ': |      _.-'   \ o   \      | |      /   o /   `-._      | :'  |
+ `.  __ |__.-'_     _.\    /[_.__ | | __._]\  o /._     _`-.__| __  .'
+  | \  \_.--''.' .-'   \  / /    `---'    \ \  /   `-. `.``--__/  / |
+   |_\ __   ,',-'       `-./  o            \,-'       `-.`.   __ /_|
+     \\ / .','             `-. oo .-. oo ,-'             `.`. \ //
+     (\\  \ \                 `-._| |_,-'                 / /  //)
+       \\  ) \                    (_)                    / (  //
+       / \/   `.                                       ,'   \/ \
+       \  .::. `.                                     ,' .:::  /
+        \  ':::. `-./`.                         .'\.-' '''''' /
+         \    '''     /_           _           _\    ::..    /
+          `-.'::'       `--.______| |______.--'           ,-'
+             `-'`-._   ..                   .: .:   _,-'`'
+                  (_)-. ::. ''::::     ::::::  : ,-(_)
+                      \_____   '' _ _    ' _____/
+                            ---._/ u \_.---
diff --git a/core/modules/user/migration_templates/d7_user.yml b/core/modules/user/migration_templates/d7_user.yml
index 3910659..d68e297 100644
--- a/core/modules/user/migration_templates/d7_user.yml
+++ b/core/modules/user/migration_templates/d7_user.yml
@@ -48,6 +48,7 @@ migration_dependencies:
   required:
     - d7_user_role
   optional:
+    - d7_field_instance
     - d7_file
     - language
     - default_language
diff --git a/core/modules/user/src/Plugin/migrate/User.php b/core/modules/user/src/Plugin/migrate/User.php
index 986b58d..d89787c 100644
--- a/core/modules/user/src/Plugin/migrate/User.php
+++ b/core/modules/user/src/Plugin/migrate/User.php
@@ -3,19 +3,12 @@
 namespace Drupal\user\Plugin\migrate;
 
 use Drupal\migrate\Exception\RequirementsException;
-use Drupal\migrate\Plugin\Migration;
+use Drupal\migrate_drupal\Plugin\migrate\CckMigration;
 
 /**
  * Plugin class for Drupal 7 user migrations dealing with fields and profiles.
  */
-class User extends Migration {
-
-  /**
-   * Flag indicating whether the CCK data has been filled already.
-   *
-   * @var bool
-   */
-  protected $init = FALSE;
+class User extends CckMigration {
 
   /**
    * {@inheritdoc}
@@ -33,7 +26,21 @@ public function getProcess() {
         $field_migration = $this->migrationPluginManager->createStubMigration($definition);
         foreach ($field_migration->getSourcePlugin() as $row) {
           $field_name = $row->getSourceProperty('field_name');
-          $this->process[$field_name] = $field_name;
+          $field_type = $row->getSourceProperty('type');
+          if (empty($field_type)) {
+            continue;
+          }
+          if ($this->cckPluginManager->hasDefinition($field_type)) {
+            if (!isset($this->cckPluginCache[$field_type])) {
+              $this->cckPluginCache[$field_type] = $this->cckPluginManager->createInstance($field_type, [], $this);
+            }
+            $info = $row->getSource();
+            $this->cckPluginCache[$field_type]
+              ->processCckFieldValues($this, $field_name, $info);
+          }
+          else {
+            $this->process[$field_name] = $field_name;
+          }
         }
       }
       try {
diff --git a/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php b/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php
index c21856e..34a8f20 100644
--- a/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php
+++ b/core/modules/user/tests/src/Kernel/Migrate/d7/MigrateUserTest.php
@@ -109,10 +109,12 @@ protected function createType($id) {
    *   Role IDs the user account is expected to have.
    * @param int $field_integer
    *   The value of the integer field.
+   * @param int|false $field_file_target_id
+   *   The target ID of the file field.
    * @param bool $has_picture
    *   Whether the user is expected to have a picture attached.
    */
-  protected function assertEntity($id, $label, $mail, $password, $created, $access, $login, $blocked, $langcode, $timezone, $init, $roles, $field_integer, $has_picture = FALSE) {
+  protected function assertEntity($id, $label, $mail, $password, $created, $access, $login, $blocked, $langcode, $timezone, $init, $roles, $field_integer, $field_file_target_id = FALSE, $has_picture = FALSE) {
     /** @var \Drupal\user\UserInterface $user */
     $user = User::load($id);
     $this->assertTrue($user instanceof UserInterface);
@@ -155,6 +157,10 @@ protected function assertEntity($id, $label, $mail, $password, $created, $access
       $this->assertTrue($user->hasField('field_integer'));
       $this->assertEquals($field_integer[0], $user->field_integer->value);
     }
+    if (!empty($field_file_target_id)) {
+      $this->assertTrue($user->hasField('field_file'));
+      $this->assertSame($field_file_target_id, $user->field_file->target_id);
+    }
   }
 
   /**
@@ -190,6 +196,13 @@ public function testUser() {
         ->fetchCol();
       $field_integer = !empty($field_integer) ? $field_integer : NULL;
 
+      $field_file = Database::getConnection('default', 'migrate')
+        ->select('field_data_field_file', 'ff')
+        ->fields('ff', array('field_file_fid'))
+        ->condition('ff.entity_id', $source->uid)
+        ->execute()
+        ->fetchField();
+
       $this->assertEntity(
         $source->uid,
         $source->name,
@@ -203,7 +216,8 @@ public function testUser() {
         $source->timezone,
         $source->init,
         $roles,
-        $field_integer
+        $field_integer,
+        $field_file
       );
 
       // Ensure that the user can authenticate.
