diff --git a/core/modules/migrate/src/Plugin/migrate/process/MigrationLookup.php b/core/modules/migrate/src/Plugin/migrate/process/MigrationLookup.php
index 835fd69..81b6315 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/MigrationLookup.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/MigrationLookup.php
@@ -161,10 +161,6 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
     if (!is_array($migration_ids)) {
       $migration_ids = [$migration_ids];
     }
-    if (!is_array($value)) {
-      $value = [$value];
-    }
-    $this->skipOnEmpty($value);
     $self = FALSE;
     /** @var \Drupal\migrate\Plugin\MigrationInterface[] $migrations */
     $destination_ids = NULL;
@@ -176,13 +172,15 @@ public function transform($value, MigrateExecutableInterface $migrate_executable
       }
       if (isset($this->configuration['source_ids'][$migration_id])) {
         $configuration = ['source' => $this->configuration['source_ids'][$migration_id]];
-        $source_id_values[$migration_id] = $this->processPluginManager
+        $value = $this->processPluginManager
           ->createInstance('get', $configuration, $this->migration)
           ->transform(NULL, $migrate_executable, $row, $destination_property);
       }
-      else {
-        $source_id_values[$migration_id] = $value;
+      if (!is_array($value)) {
+        $value = [$value];
       }
+      $this->skipOnEmpty($value);
+      $source_id_values[$migration_id] = $value;
       // Break out of the loop as soon as a destination ID is found.
       if ($destination_ids = $migration->getIdMap()->lookupDestinationId($source_id_values[$migration_id])) {
         break;
diff --git a/core/modules/migrate/tests/src/Unit/process/MigrationLookupTest.php b/core/modules/migrate/tests/src/Unit/process/MigrationLookupTest.php
index f30c184..308181e 100644
--- a/core/modules/migrate/tests/src/Unit/process/MigrationLookupTest.php
+++ b/core/modules/migrate/tests/src/Unit/process/MigrationLookupTest.php
@@ -11,6 +11,7 @@
 use Drupal\migrate\Plugin\MigratePluginManager;
 use Drupal\migrate\Plugin\MigrateSourceInterface;
 use Drupal\migrate\Plugin\MigrationPluginManagerInterface;
+use Drupal\migrate\Row;
 use Prophecy\Argument;
 
 /**
@@ -100,6 +101,8 @@ public function testSkipOnEmpty() {
       'migration' => 'foobaz',
     ];
     $migration_plugin->id()->willReturn(uniqid());
+    $migration_plugin_manager->createInstances(['foobaz'])
+      ->willReturn(['foobaz' => $migration_plugin->reveal()]);
     $migration = new MigrationLookup($configuration, 'migration_lookup', [], $migration_plugin->reveal(), $migration_plugin_manager->reveal(), $process_plugin_manager->reveal());
     $this->setExpectedException(MigrateSkipProcessException::class);
     $migration->transform(0, $this->migrateExecutable, $this->row, 'foo');
@@ -199,4 +202,61 @@ public function successfulLookupDataProvider() {
     ];
   }
 
+  /**
+   * Tests processing multiple source IDs.
+   */
+  public function testMultipleSourceIds() {
+    $migration_plugin = $this->prophesize(MigrationInterface::class);
+    $migration_plugin_manager = $this->prophesize(MigrationPluginManagerInterface::class);
+    $process_plugin_manager = $this->prophesize(MigratePluginManager::class);
+    $foobaz_migration = $this->prophesize(MigrationInterface::class);
+    $get_migration = $this->prophesize(MigrationLookup::class);
+    $id_map = $this->prophesize(MigrateIdMapInterface::class);
+    $destination_plugin = $this->prophesize(MigrateDestinationInterface::class);
+    $source_plugin = $this->prophesize(MigrateSourceInterface::class);
+
+    $migration_plugin_manager->createInstances(['foobaz'])
+      ->willReturn(['foobaz' => $foobaz_migration->reveal()]);
+
+    $process_plugin_manager->createInstance('get', ['source' => ['string_id', 'integer_id']], $migration_plugin->reveal())
+      ->willReturn($get_migration->reveal());
+
+    $foobaz_migration->getIdMap()->willReturn($id_map->reveal());
+    $foobaz_migration->getDestinationPlugin(TRUE)->willReturn($destination_plugin->reveal());
+    $foobaz_migration->getProcess()->willReturn([]);
+    $foobaz_migration->getSourcePlugin()->willReturn($source_plugin->reveal());
+    $foobaz_migration->id()->willReturn('foobaz');
+    $foobaz_migration->getSourceConfiguration()->willReturn([]);
+
+    $get_migration->transform(NULL, $this->migrateExecutable, $this->row, 'foo')
+      ->willReturn(['example_string', 99]);
+
+    $source_plugin_ids = [
+      'string_id' => [
+        'type' => 'string',
+        'max_length' => 128,
+        'is_ascii' => TRUE,
+        'alias' => 'wpt',
+      ],
+      'integer_id' => [
+        'type' => 'integer',
+        'unsigned' => FALSE,
+        'alias' => 'wpt',
+      ],
+    ];
+
+    $stub_row = new Row(['string_id' => 'example_string', 'integer_id' => 99], $source_plugin_ids, TRUE);
+    $destination_plugin->import($stub_row)->willReturn([2]);
+
+    $source_plugin->getIds()->willReturn($source_plugin_ids);
+
+    $configuration = [
+      'migration' => 'foobaz',
+      'source_ids' => ['foobaz' => ['string_id', 'integer_id']],
+    ];
+    $migration = new MigrationLookup($configuration, 'migration', [], $migration_plugin->reveal(), $migration_plugin_manager->reveal(), $process_plugin_manager->reveal());
+    $result = $migration->transform(NULL, $this->migrateExecutable, $this->row, 'foo');
+    $this->assertEquals(2, $result);
+  }
+
 }
diff --git a/core/modules/migrate/tests/src/Unit/process/MigrationTest.php b/core/modules/migrate/tests/src/Unit/process/MigrationTest.php
index cade905..57b932e 100644
--- a/core/modules/migrate/tests/src/Unit/process/MigrationTest.php
+++ b/core/modules/migrate/tests/src/Unit/process/MigrationTest.php
@@ -11,6 +11,7 @@
 use Drupal\migrate\Plugin\MigratePluginManager;
 use Drupal\migrate\Plugin\MigrateSourceInterface;
 use Drupal\migrate\Plugin\MigrationPluginManagerInterface;
+use Drupal\migrate\Row;
 use Prophecy\Argument;
 
 /**
@@ -124,6 +125,8 @@ public function testSkipOnEmpty() {
       'migration' => 'foobaz',
     ];
     $this->migration_plugin->id()->willReturn(uniqid());
+    $this->migration_plugin_manager->createInstances(['foobaz'])
+      ->willReturn(['foobaz' => $this->migration_plugin->reveal()]);
     $migration = new Migration($configuration, 'migration', [], $this->migration_plugin->reveal(), $this->migration_plugin_manager->reveal(), $this->process_plugin_manager->reveal());
     $this->setExpectedException(MigrateSkipProcessException::class);
     $migration->transform(0, $this->migrateExecutable, $this->row, 'foo');
@@ -199,4 +202,58 @@ public function successfulLookupDataProvider() {
     ];
   }
 
+  /**
+   * Tests processing multiple source IDs.
+   */
+  public function testMultipleSourceIds() {
+    $foobaz_migration = $this->prophesize(MigrationInterface::class);
+    $get_migration = $this->prophesize(Migration::class);
+    $id_map = $this->prophesize(MigrateIdMapInterface::class);
+    $destination_plugin = $this->prophesize(MigrateDestinationInterface::class);
+    $source_plugin = $this->prophesize(MigrateSourceInterface::class);
+
+    $this->migration_plugin_manager->createInstances(['foobaz'])
+      ->willReturn(['foobaz' => $foobaz_migration->reveal()]);
+
+    $this->process_plugin_manager->createInstance('get', ['source' => ['string_id', 'integer_id']], $this->migration_plugin->reveal())
+      ->willReturn($get_migration->reveal());
+
+    $foobaz_migration->getIdMap()->willReturn($id_map->reveal());
+    $foobaz_migration->getDestinationPlugin(TRUE)->willReturn($destination_plugin->reveal());
+    $foobaz_migration->getProcess()->willReturn([]);
+    $foobaz_migration->getSourcePlugin()->willReturn($source_plugin->reveal());
+    $foobaz_migration->id()->willReturn('foobaz');
+    $foobaz_migration->getSourceConfiguration()->willReturn([]);
+
+    $get_migration->transform(NULL, $this->migrateExecutable, $this->row, 'foo')
+      ->willReturn(['example_string', 99]);
+
+    $source_plugin_ids = [
+      'string_id' => [
+        'type' => 'string',
+        'max_length' => 128,
+        'is_ascii' => TRUE,
+        'alias' => 'wpt',
+      ],
+      'integer_id' => [
+        'type' => 'integer',
+        'unsigned' => FALSE,
+        'alias' => 'wpt',
+      ],
+    ];
+
+    $stub_row = new Row(['string_id' => 'example_string', 'integer_id' => 99], $source_plugin_ids, TRUE);
+    $destination_plugin->import($stub_row)->willReturn([2]);
+
+    $source_plugin->getIds()->willReturn($source_plugin_ids);
+
+    $configuration = [
+      'migration' => 'foobaz',
+      'source_ids' => ['foobaz' => ['string_id', 'integer_id']],
+    ];
+    $migration = new Migration($configuration, 'migration', [], $this->migration_plugin->reveal(), $this->migration_plugin_manager->reveal(), $this->process_plugin_manager->reveal());
+    $result = $migration->transform(NULL, $this->migrateExecutable, $this->row, 'foo');
+    $this->assertEquals(2, $result);
+  }
+
 }
