diff --git a/core/modules/user/migration_templates/d6_user.yml b/core/modules/user/migration_templates/d6_user.yml
index 05ff4a0..a40e4be 100644
--- a/core/modules/user/migration_templates/d6_user.yml
+++ b/core/modules/user/migration_templates/d6_user.yml
@@ -23,8 +23,9 @@ process:
     migration: d6_user_role
     source: roles
   user_picture:
-    plugin: d6_user_picture
+    plugin: user_picture
     source: uid
+    migration: d6_user_picture_file
 destination:
   plugin: entity:user
   md5_passwords: true
@@ -33,5 +34,4 @@ migration_dependencies:
     - d6_user_role
   optional:
     - d6_user_picture_file
-    - d6_user_picture_entity_display
-    - d6_user_picture_entity_form_display
+    - user_picture_field_instance
diff --git a/core/modules/user/migration_templates/d7_user.yml b/core/modules/user/migration_templates/d7_user.yml
index 6dfe270..6be9297 100755
--- a/core/modules/user/migration_templates/d7_user.yml
+++ b/core/modules/user/migration_templates/d7_user.yml
@@ -24,7 +24,10 @@ process:
     plugin: migration
     migration: d7_user_role
     source: roles
-  user_picture: picture
+  user_picture:
+    plugin: user_picture
+    source: picture
+    migration: d7_file
 destination:
   plugin: entity:user
 migration_dependencies:
@@ -33,5 +36,3 @@ migration_dependencies:
   optional:
     - d7_file
     - user_picture_field_instance
-    - user_picture_entity_display
-    - user_picture_entity_form_display
diff --git a/core/modules/user/src/Plugin/migrate/process/d6/UserPicture.php b/core/modules/user/src/Plugin/migrate/process/UserPicture.php
similarity index 59%
rename from core/modules/user/src/Plugin/migrate/process/d6/UserPicture.php
rename to core/modules/user/src/Plugin/migrate/process/UserPicture.php
index 8438092..055040e 100644
--- a/core/modules/user/src/Plugin/migrate/process/d6/UserPicture.php
+++ b/core/modules/user/src/Plugin/migrate/process/UserPicture.php
@@ -2,24 +2,30 @@
 
 /**
  * @file
- * Contains \Drupal\user\Plugin\migrate\process\d6\UserPicture.
+ * Contains \Drupal\user\Plugin\migrate\process\UserPicture.
  */
 
-namespace Drupal\user\Plugin\migrate\process\d6;
+namespace Drupal\user\Plugin\migrate\process;
 
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\migrate\Entity\MigrationInterface;
 use Drupal\migrate\MigrateExecutableInterface;
+use Drupal\migrate\MigrateSkipRowException;
 use Drupal\migrate\Plugin\MigrateProcessInterface;
 use Drupal\migrate\ProcessPluginBase;
 use Drupal\migrate\Row;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
- * The user picture process plugin.
+ * Looks up the fid of a migrated user picture.
+ *
+ * @todo This plugin can be deleted when https://www.drupal.org/node/2487568 is
+ * solved. The only reason we need it is because the migration process plugin
+ * will throw a MigrateSkipRowException if lookup fails, and we do NOT want to
+ * skip an entire row just because a file lookup failed.
  *
  * @MigrateProcessPlugin(
- *   id = "d6_user_picture"
+ *   id = "user_picture"
  * )
  */
 class UserPicture extends ProcessPluginBase implements ContainerFactoryPluginInterface {
@@ -49,7 +55,7 @@ public static function create(ContainerInterface $container, array $configuratio
       $plugin_id,
       $plugin_definition,
       $migration,
-      $container->get('plugin.manager.migrate.process')->createInstance('migration', array('migration' => 'd6_user_picture_file'), $migration)
+      $container->get('plugin.manager.migrate.process')->createInstance('migration', array('migration' => $configuration['migration']), $migration)
     );
   }
 
@@ -57,7 +63,17 @@ public static function create(ContainerInterface $container, array $configuratio
    * {@inheritdoc}
    */
   public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
-    return $row->getSourceProperty('picture') ? $this->migrationPlugin->transform($value, $migrate_executable, $row, $destination_property) : NULL;
+    // Don't even try to look up the migrated file ID if there's no incoming
+    // value.
+    if ($value) {
+      try {
+        return $this->migrationPlugin->transform($value, $migrate_executable, $row, $destination_property);
+      }
+      catch (MigrateSkipRowException $e) {
+        // Lookup failed completely, so silently swallow the exception and
+        // allow NULL to be returned.
+      }
+    }
   }
 
 }
diff --git a/core/modules/user/src/Tests/Migrate/d6/MigrateUserTest.php b/core/modules/user/src/Tests/Migrate/d6/MigrateUserTest.php
index 9980ba0..53192fb 100644
--- a/core/modules/user/src/Tests/Migrate/d6/MigrateUserTest.php
+++ b/core/modules/user/src/Tests/Migrate/d6/MigrateUserTest.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\user\Tests\Migrate\d6;
 
+use Drupal\migrate\Entity\Migration;
 use Drupal\user\Entity\User;
 use Drupal\file\Entity\File;
 use Drupal\Core\Database\Database;
@@ -42,24 +43,10 @@ protected function setUp() {
 
     $this->installEntitySchema('file');
     $this->installSchema('file', ['file_usage']);
+    $this->executeMigration('user_picture_field');
+    $this->executeMigration('user_picture_field_instance');
 
-    // Create the user profile field and instance.
-    entity_create('field_storage_config', array(
-      'entity_type' => 'user',
-      'field_name' => 'user_picture',
-      'type' => 'image',
-      'translatable' => '0',
-    ))->save();
-    entity_create('field_config', array(
-      'label' => 'User Picture',
-      'description' => '',
-      'field_name' => 'user_picture',
-      'entity_type' => 'user',
-      'bundle' => 'user',
-      'required' => 0,
-    ))->save();
-
-    $file = entity_create('file', array(
+    $file = File::create(array(
       'fid' => 2,
       'uid' => 2,
       'filename' => 'image-test.jpg',
@@ -73,7 +60,7 @@ protected function setUp() {
     file_put_contents($file->getFileUri(), file_get_contents('core/modules/simpletest/files/image-1.png'));
     $file->save();
 
-    $file = entity_create('file', array(
+    $file = File::create(array(
       'fid' => 8,
       'uid' => 8,
       'filename' => 'image-test.png',
@@ -95,12 +82,6 @@ protected function setUp() {
         array(array(4), array('migrate test role 2')),
         array(array(5), array('migrate test role 3')),
       ),
-      'user_picture_entity_display' => array(
-        array(array(1), array('user', 'user', 'default', 'user_picture')),
-      ),
-      'user_picture_entity_form_display' => array(
-        array(array(1), array('user', 'user', 'default', 'user_picture')),
-      ),
       'd6_user_picture_file' => array(
         array(array(2), array(2)),
         array(array(8), array(8)),
@@ -131,7 +112,7 @@ public function testUser() {
         ->execute()
         ->fetchCol();
       $roles = array(RoleInterface::AUTHENTICATED_ID);
-      $migration_role = entity_load('migration', 'd6_user_role');
+      $migration_role = Migration::load('d6_user_role');
       foreach ($rids as $rid) {
         $role = $migration_role->getIdMap()->lookupDestinationId(array($rid));
         $roles[] = reset($role);
