diff --git a/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/process/Map.php b/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/process/Map.php
new file mode 100644
index 0000000..c134834
--- /dev/null
+++ b/core/modules/migrate/lib/Drupal/migrate/Plugin/migrate/process/Map.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\migrate\Plugin\migrate\process\MultipleColumnsMap.
+ */
+
+namespace Drupal\migrate\Plugin\migrate\process;
+
+use Drupal\Core\Plugin\PluginBase;
+use Drupal\migrate\MigrateExecutable;
+use Drupal\migrate\Plugin\MigrateProcessInterface;
+use Drupal\migrate\Row;
+
+/**
+ * This plugin sets a destination property based on multiple sources and a map.
+ *
+ * @PluginId("map")
+ */
+class Map extends PluginBase implements MigrateProcessInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function transform($value, MigrateExecutable $migrate_executable, Row $row, $destination_property) {
+    $map = $this->configuration['map'];
+    if (!is_array($value)) {
+      $value = array($value);
+    }
+    foreach ($value as $key) {
+      $map = $map[$key];
+    }
+    return $map;
+  }
+
+}
+
diff --git a/core/modules/migrate/tests/Drupal/migrate/Tests/process/MapTest.php b/core/modules/migrate/tests/Drupal/migrate/Tests/process/MapTest.php
new file mode 100644
index 0000000..208bfb8
--- /dev/null
+++ b/core/modules/migrate/tests/Drupal/migrate/Tests/process/MapTest.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * @file
+ * Contains
+ */
+
+namespace Drupal\migrate\Tests\process;
+
+use Drupal\migrate\Plugin\migrate\process\Map;
+use Drupal\migrate\Plugin\migrate\process\TestMap;
+
+/**
+ * @group migrate
+ */
+class MapTest extends MigrateProcessTestCase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Map process plugin',
+      'description' => 'Tests the map process plugin.',
+      'group' => 'Migrate',
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  function setUp() {
+    $this->row = $this->getMockBuilder('Drupal\migrate\Row')
+      ->disableOriginalConstructor()
+      ->getMock();
+    $this->migrateExecutable = $this->getMockBuilder('Drupal\migrate\MigrateExecutable')
+      ->disableOriginalConstructor()
+      ->getMock();
+    parent::setUp();
+  }
+
+  /**
+   * Test map when the source is a string.
+   */
+  function testMapWithSourceString() {
+    $configuration['map']['foo'] = 'bar';
+    $plugin = new Map($configuration, 'map', array());
+    $value = $plugin->transform('foo', $this->migrateExecutable, $this->row, 'destinationproperty');
+    $this->assertSame($value, 'bar');
+  }
+
+  /**
+   * Test map when the source is a list.
+   */
+  function testMapWithSourceList() {
+    $configuration['map']['foo']['bar'] = 'baz';
+    $plugin = new Map($configuration, 'map', array());
+    $value = $plugin->transform(array('foo', 'bar'), $this->migrateExecutable, $this->row, 'destinationproperty');
+    $this->assertSame($value, 'baz');
+  }
+}
